dom/datastore/DataStore.cpp

branch
TOR_BUG_3246
changeset 7
129ffea94266
equal deleted inserted replaced
-1:000000000000 0:297b28c3834e
1 /* This Source Code Form is subject to the terms of the Mozilla Public
2 * License, v. 2.0. If a copy of the MPL was not distributed with this
3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
4
5 #include "mozilla/dom/DataStore.h"
6 #include "mozilla/dom/DataStoreCursor.h"
7 #include "mozilla/dom/DataStoreBinding.h"
8 #include "mozilla/dom/DataStoreImplBinding.h"
9 #include "mozilla/dom/Navigator.h"
10 #include "mozilla/dom/Promise.h"
11 #include "mozilla/ErrorResult.h"
12 #include "mozilla/Preferences.h"
13 #include "AccessCheck.h"
14
15 namespace mozilla {
16 namespace dom {
17
18 NS_IMPL_ADDREF_INHERITED(DataStore, DOMEventTargetHelper)
19 NS_IMPL_RELEASE_INHERITED(DataStore, DOMEventTargetHelper)
20
21 NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION_INHERITED(DataStore)
22 NS_INTERFACE_MAP_ENTRY(nsISupports)
23 NS_INTERFACE_MAP_END_INHERITING(DOMEventTargetHelper)
24
25 NS_IMPL_CYCLE_COLLECTION(DataStore, mStore)
26
27 DataStore::DataStore(nsPIDOMWindow* aWindow)
28 : DOMEventTargetHelper(aWindow)
29 {
30 }
31
32 already_AddRefed<DataStore>
33 DataStore::Constructor(GlobalObject& aGlobal, ErrorResult& aRv)
34 {
35 nsCOMPtr<nsPIDOMWindow> window = do_QueryInterface(aGlobal.GetAsSupports());
36 if (!window) {
37 aRv.Throw(NS_ERROR_FAILURE);
38 return nullptr;
39 }
40
41 nsRefPtr<DataStore> store = new DataStore(window);
42 return store.forget();
43 }
44
45 JSObject*
46 DataStore::WrapObject(JSContext* aCx)
47 {
48 return DataStoreBinding::Wrap(aCx, this);
49 }
50
51 /*static*/ bool
52 DataStore::EnabledForScope(JSContext* aCx, JS::Handle<JSObject*> aObj)
53 {
54 // Only expose the interface when it is:
55 // 1. enabled by the preference and
56 // 2. accessed by the chrome codes in Gecko.
57 return (Navigator::HasDataStoreSupport(aCx, aObj) &&
58 nsContentUtils::ThreadsafeIsCallerChrome());
59 }
60
61 void
62 DataStore::GetName(nsAString& aName, ErrorResult& aRv)
63 {
64 MOZ_ASSERT(NS_IsMainThread());
65 MOZ_ASSERT(mStore);
66
67 nsAutoString name;
68 mStore->GetName(name, aRv);
69 aName.Assign(name);
70 }
71
72 void
73 DataStore::GetOwner(nsAString& aOwner, ErrorResult& aRv)
74 {
75 MOZ_ASSERT(NS_IsMainThread());
76 MOZ_ASSERT(mStore);
77
78 nsAutoString owner;
79 mStore->GetOwner(owner, aRv);
80 aOwner.Assign(owner);
81 }
82
83 bool
84 DataStore::GetReadOnly(ErrorResult& aRv)
85 {
86 MOZ_ASSERT(NS_IsMainThread());
87 MOZ_ASSERT(mStore);
88
89 return mStore->GetReadOnly(aRv);
90 }
91
92 already_AddRefed<Promise>
93 DataStore::Get(const Sequence<OwningStringOrUnsignedLong>& aId,
94 ErrorResult& aRv)
95 {
96 MOZ_ASSERT(NS_IsMainThread());
97 MOZ_ASSERT(mStore);
98
99 return mStore->Get(aId, aRv);
100 }
101
102 already_AddRefed<Promise>
103 DataStore::Put(JSContext* aCx,
104 JS::Handle<JS::Value> aObj,
105 const StringOrUnsignedLong& aId,
106 const nsAString& aRevisionId,
107 ErrorResult& aRv)
108 {
109 MOZ_ASSERT(NS_IsMainThread());
110 MOZ_ASSERT(mStore);
111
112 return mStore->Put(aObj, aId, aRevisionId, aRv);
113 }
114
115 already_AddRefed<Promise>
116 DataStore::Add(JSContext* aCx,
117 JS::Handle<JS::Value> aObj,
118 const Optional<StringOrUnsignedLong>& aId,
119 const nsAString& aRevisionId,
120 ErrorResult& aRv)
121 {
122 MOZ_ASSERT(NS_IsMainThread());
123 MOZ_ASSERT(mStore);
124
125 return mStore->Add(aObj, aId, aRevisionId, aRv);
126 }
127
128 already_AddRefed<Promise>
129 DataStore::Remove(const StringOrUnsignedLong& aId,
130 const nsAString& aRevisionId,
131 ErrorResult& aRv)
132 {
133 MOZ_ASSERT(NS_IsMainThread());
134 MOZ_ASSERT(mStore);
135
136 return mStore->Remove(aId, aRevisionId, aRv);
137 }
138
139 already_AddRefed<Promise>
140 DataStore::Clear(const nsAString& aRevisionId, ErrorResult& aRv)
141 {
142 MOZ_ASSERT(NS_IsMainThread());
143 MOZ_ASSERT(mStore);
144
145 return mStore->Clear(aRevisionId, aRv);
146 }
147
148 void
149 DataStore::GetRevisionId(nsAString& aRevisionId, ErrorResult& aRv)
150 {
151 MOZ_ASSERT(NS_IsMainThread());
152 MOZ_ASSERT(mStore);
153
154 nsAutoString revisionId;
155 mStore->GetRevisionId(revisionId, aRv);
156 aRevisionId.Assign(revisionId);
157 }
158
159 already_AddRefed<Promise>
160 DataStore::GetLength(ErrorResult& aRv)
161 {
162 MOZ_ASSERT(NS_IsMainThread());
163 MOZ_ASSERT(mStore);
164
165 return mStore->GetLength(aRv);
166 }
167
168 already_AddRefed<DataStoreCursor>
169 DataStore::Sync(const nsAString& aRevisionId, ErrorResult& aRv)
170 {
171 MOZ_ASSERT(NS_IsMainThread());
172 MOZ_ASSERT(mStore);
173
174 return mStore->Sync(aRevisionId, aRv);
175 }
176
177 void
178 DataStore::SetDataStoreImpl(DataStoreImpl& aStore, ErrorResult& aRv)
179 {
180 MOZ_ASSERT(NS_IsMainThread());
181 MOZ_ASSERT(!mStore);
182
183 mStore = &aStore;
184 mStore->SetEventTarget(*this, aRv);
185 }
186
187 } //namespace dom
188 } //namespace mozilla

mercurial