1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* vim: set ts=8 sts=2 et sw=2 tw=80: */
3 /* This Source Code Form is subject to the terms of the Mozilla Public
4  * License, v. 2.0. If a copy of the MPL was not distributed with this
5  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6 
7 #include "IDBEvents.h"
8 
9 #include "mozilla/ErrorResult.h"
10 #include "mozilla/dom/EventTarget.h"
11 #include "mozilla/dom/IDBVersionChangeEventBinding.h"
12 #include "nsString.h"
13 
14 using namespace mozilla;
15 using namespace mozilla::dom;
16 using namespace mozilla::dom::indexedDB;
17 
18 namespace mozilla {
19 namespace dom {
20 namespace indexedDB {
21 
22 const char16_t* kAbortEventType = u"abort";
23 const char16_t* kBlockedEventType = u"blocked";
24 const char16_t* kCompleteEventType = u"complete";
25 const char16_t* kErrorEventType = u"error";
26 const char16_t* kSuccessEventType = u"success";
27 const char16_t* kUpgradeNeededEventType = u"upgradeneeded";
28 const char16_t* kVersionChangeEventType = u"versionchange";
29 const char16_t* kCloseEventType = u"close";
30 
31 already_AddRefed<nsIDOMEvent>
CreateGenericEvent(EventTarget * aOwner,const nsDependentString & aType,Bubbles aBubbles,Cancelable aCancelable)32 CreateGenericEvent(EventTarget* aOwner,
33                    const nsDependentString& aType,
34                    Bubbles aBubbles,
35                    Cancelable aCancelable)
36 {
37   RefPtr<Event> event = new Event(aOwner, nullptr, nullptr);
38 
39   event->InitEvent(aType,
40                    aBubbles == eDoesBubble ? true : false,
41                    aCancelable == eCancelable ? true : false);
42 
43   event->SetTrusted(true);
44 
45   return event.forget();
46 }
47 
48 } // namespace indexedDB
49 
50 // static
51 already_AddRefed<IDBVersionChangeEvent>
CreateInternal(EventTarget * aOwner,const nsAString & aType,uint64_t aOldVersion,Nullable<uint64_t> aNewVersion)52 IDBVersionChangeEvent::CreateInternal(EventTarget* aOwner,
53                                       const nsAString& aType,
54                                       uint64_t aOldVersion,
55                                       Nullable<uint64_t> aNewVersion)
56 {
57   RefPtr<IDBVersionChangeEvent> event =
58     new IDBVersionChangeEvent(aOwner, aOldVersion);
59   if (!aNewVersion.IsNull()) {
60     event->mNewVersion.SetValue(aNewVersion.Value());
61   }
62 
63   event->InitEvent(aType, false, false);
64 
65   event->SetTrusted(true);
66 
67   return event.forget();
68 }
69 
70 already_AddRefed<IDBVersionChangeEvent>
Constructor(const GlobalObject & aGlobal,const nsAString & aType,const IDBVersionChangeEventInit & aOptions,ErrorResult & aRv)71 IDBVersionChangeEvent::Constructor(const GlobalObject& aGlobal,
72                                    const nsAString& aType,
73                                    const IDBVersionChangeEventInit& aOptions,
74                                    ErrorResult& aRv)
75 {
76   nsCOMPtr<EventTarget> target = do_QueryInterface(aGlobal.GetAsSupports());
77 
78   return CreateInternal(target,
79                         aType,
80                         aOptions.mOldVersion,
81                         aOptions.mNewVersion);
82 }
83 
NS_IMPL_ADDREF_INHERITED(IDBVersionChangeEvent,Event)84 NS_IMPL_ADDREF_INHERITED(IDBVersionChangeEvent, Event)
85 NS_IMPL_RELEASE_INHERITED(IDBVersionChangeEvent, Event)
86 
87 NS_INTERFACE_MAP_BEGIN(IDBVersionChangeEvent)
88   NS_INTERFACE_MAP_ENTRY(IDBVersionChangeEvent)
89 NS_INTERFACE_MAP_END_INHERITING(Event)
90 
91 JSObject*
92 IDBVersionChangeEvent::WrapObjectInternal(JSContext* aCx, JS::Handle<JSObject*> aGivenProto)
93 {
94   return IDBVersionChangeEventBinding::Wrap(aCx, this, aGivenProto);
95 }
96 
97 } // namespace dom
98 } // namespace mozilla
99