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 
CreateGenericEvent(EventTarget * aOwner,const nsDependentString & aType,Bubbles aBubbles,Cancelable aCancelable)31 already_AddRefed<nsIDOMEvent> CreateGenericEvent(EventTarget* aOwner,
32                                                  const nsDependentString& aType,
33                                                  Bubbles aBubbles,
34                                                  Cancelable aCancelable) {
35   RefPtr<Event> event = new Event(aOwner, nullptr, nullptr);
36 
37   event->InitEvent(aType, aBubbles == eDoesBubble ? true : false,
38                    aCancelable == eCancelable ? true : false);
39 
40   event->SetTrusted(true);
41 
42   return event.forget();
43 }
44 
45 }  // namespace indexedDB
46 
47 // static
CreateInternal(EventTarget * aOwner,const nsAString & aType,uint64_t aOldVersion,const Nullable<uint64_t> & aNewVersion)48 already_AddRefed<IDBVersionChangeEvent> IDBVersionChangeEvent::CreateInternal(
49     EventTarget* aOwner, const nsAString& aType, uint64_t aOldVersion,
50     const Nullable<uint64_t>& aNewVersion) {
51   RefPtr<IDBVersionChangeEvent> event =
52       new IDBVersionChangeEvent(aOwner, aOldVersion);
53   if (!aNewVersion.IsNull()) {
54     event->mNewVersion.SetValue(aNewVersion.Value());
55   }
56 
57   event->InitEvent(aType, false, false);
58 
59   event->SetTrusted(true);
60 
61   return event.forget();
62 }
63 
Constructor(const GlobalObject & aGlobal,const nsAString & aType,const IDBVersionChangeEventInit & aOptions,ErrorResult & aRv)64 already_AddRefed<IDBVersionChangeEvent> IDBVersionChangeEvent::Constructor(
65     const GlobalObject& aGlobal, const nsAString& aType,
66     const IDBVersionChangeEventInit& aOptions, ErrorResult& aRv) {
67   nsCOMPtr<EventTarget> target = do_QueryInterface(aGlobal.GetAsSupports());
68 
69   return CreateInternal(target, aType, aOptions.mOldVersion,
70                         aOptions.mNewVersion);
71 }
72 
NS_IMPL_ADDREF_INHERITED(IDBVersionChangeEvent,Event)73 NS_IMPL_ADDREF_INHERITED(IDBVersionChangeEvent, Event)
74 NS_IMPL_RELEASE_INHERITED(IDBVersionChangeEvent, Event)
75 
76 NS_INTERFACE_MAP_BEGIN(IDBVersionChangeEvent)
77   NS_INTERFACE_MAP_ENTRY(IDBVersionChangeEvent)
78 NS_INTERFACE_MAP_END_INHERITING(Event)
79 
80 JSObject* IDBVersionChangeEvent::WrapObjectInternal(
81     JSContext* aCx, JS::Handle<JSObject*> aGivenProto) {
82   return IDBVersionChangeEventBinding::Wrap(aCx, this, aGivenProto);
83 }
84 
85 }  // namespace dom
86 }  // namespace mozilla
87