dom/indexedDB/IDBEvents.cpp

changeset 2
7e26c7da4463
equal deleted inserted replaced
-1:000000000000 0:fa958df70c0f
1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* vim: set ts=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 "nsJSON.h"
10 #include "nsThreadUtils.h"
11
12 #include "IDBRequest.h"
13 #include "IDBTransaction.h"
14
15 USING_INDEXEDDB_NAMESPACE
16 using namespace mozilla::dom;
17
18 namespace {
19
20 class EventFiringRunnable : public nsRunnable
21 {
22 public:
23 EventFiringRunnable(EventTarget* aTarget,
24 nsIDOMEvent* aEvent)
25 : mTarget(aTarget), mEvent(aEvent)
26 { }
27
28 NS_IMETHOD Run() {
29 bool dummy;
30 return mTarget->DispatchEvent(mEvent, &dummy);
31 }
32
33 private:
34 nsCOMPtr<EventTarget> mTarget;
35 nsCOMPtr<nsIDOMEvent> mEvent;
36 };
37
38 } // anonymous namespace
39
40 already_AddRefed<nsIDOMEvent>
41 mozilla::dom::indexedDB::CreateGenericEvent(mozilla::dom::EventTarget* aOwner,
42 const nsAString& aType,
43 Bubbles aBubbles,
44 Cancelable aCancelable)
45 {
46 nsCOMPtr<nsIDOMEvent> event;
47 NS_NewDOMEvent(getter_AddRefs(event), aOwner, nullptr, nullptr);
48 nsresult rv = event->InitEvent(aType,
49 aBubbles == eDoesBubble ? true : false,
50 aCancelable == eCancelable ? true : false);
51 NS_ENSURE_SUCCESS(rv, nullptr);
52
53 event->SetTrusted(true);
54
55 return event.forget();
56 }
57
58 // static
59 already_AddRefed<IDBVersionChangeEvent>
60 IDBVersionChangeEvent::CreateInternal(mozilla::dom::EventTarget* aOwner,
61 const nsAString& aType,
62 uint64_t aOldVersion,
63 uint64_t aNewVersion)
64 {
65 nsRefPtr<IDBVersionChangeEvent> event(new IDBVersionChangeEvent(aOwner));
66
67 nsresult rv = event->InitEvent(aType, false, false);
68 NS_ENSURE_SUCCESS(rv, nullptr);
69
70 event->SetTrusted(true);
71
72 event->mOldVersion = aOldVersion;
73 event->mNewVersion = aNewVersion;
74
75 return event.forget();
76 }
77
78 // static
79 already_AddRefed<nsIRunnable>
80 IDBVersionChangeEvent::CreateRunnableInternal(mozilla::dom::EventTarget* aTarget,
81 const nsAString& aType,
82 uint64_t aOldVersion,
83 uint64_t aNewVersion)
84 {
85 nsRefPtr<Event> event =
86 CreateInternal(aTarget, aType, aOldVersion, aNewVersion);
87 NS_ENSURE_TRUE(event, nullptr);
88
89 nsCOMPtr<nsIRunnable> runnable(new EventFiringRunnable(aTarget, event));
90 return runnable.forget();
91 }
92
93 NS_IMPL_ADDREF_INHERITED(IDBVersionChangeEvent, Event)
94 NS_IMPL_RELEASE_INHERITED(IDBVersionChangeEvent, Event)
95
96 NS_INTERFACE_MAP_BEGIN(IDBVersionChangeEvent)
97 NS_INTERFACE_MAP_ENTRY(IDBVersionChangeEvent)
98 NS_INTERFACE_MAP_END_INHERITING(Event)

mercurial