Wed, 31 Dec 2014 06:55:50 +0100
Added tag UPSTREAM_283F7C6 for changeset ca08bd8f51b2
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/. */
7 #include "IDBEvents.h"
9 #include "nsJSON.h"
10 #include "nsThreadUtils.h"
12 #include "IDBRequest.h"
13 #include "IDBTransaction.h"
15 USING_INDEXEDDB_NAMESPACE
16 using namespace mozilla::dom;
18 namespace {
20 class EventFiringRunnable : public nsRunnable
21 {
22 public:
23 EventFiringRunnable(EventTarget* aTarget,
24 nsIDOMEvent* aEvent)
25 : mTarget(aTarget), mEvent(aEvent)
26 { }
28 NS_IMETHOD Run() {
29 bool dummy;
30 return mTarget->DispatchEvent(mEvent, &dummy);
31 }
33 private:
34 nsCOMPtr<EventTarget> mTarget;
35 nsCOMPtr<nsIDOMEvent> mEvent;
36 };
38 } // anonymous namespace
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);
53 event->SetTrusted(true);
55 return event.forget();
56 }
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));
67 nsresult rv = event->InitEvent(aType, false, false);
68 NS_ENSURE_SUCCESS(rv, nullptr);
70 event->SetTrusted(true);
72 event->mOldVersion = aOldVersion;
73 event->mNewVersion = aNewVersion;
75 return event.forget();
76 }
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);
89 nsCOMPtr<nsIRunnable> runnable(new EventFiringRunnable(aTarget, event));
90 return runnable.forget();
91 }
93 NS_IMPL_ADDREF_INHERITED(IDBVersionChangeEvent, Event)
94 NS_IMPL_RELEASE_INHERITED(IDBVersionChangeEvent, Event)
96 NS_INTERFACE_MAP_BEGIN(IDBVersionChangeEvent)
97 NS_INTERFACE_MAP_ENTRY(IDBVersionChangeEvent)
98 NS_INTERFACE_MAP_END_INHERITING(Event)