Bumping manifests a=b2g-bump
[gecko.git] / dom / datastore / DataStore.cpp
blob9467d3e91b4e835401c19da8a49818467499bb2a
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/. */
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"
15 namespace mozilla {
16 namespace dom {
18 NS_IMPL_ADDREF_INHERITED(DataStore, DOMEventTargetHelper)
19 NS_IMPL_RELEASE_INHERITED(DataStore, DOMEventTargetHelper)
21 NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION_INHERITED(DataStore)
22 NS_INTERFACE_MAP_ENTRY(nsISupports)
23 NS_INTERFACE_MAP_END_INHERITING(DOMEventTargetHelper)
25 NS_IMPL_CYCLE_COLLECTION_INHERITED(DataStore, DOMEventTargetHelper, mStore)
27 DataStore::DataStore(nsPIDOMWindow* aWindow)
28 : DOMEventTargetHelper(aWindow)
32 DataStore::~DataStore()
36 already_AddRefed<DataStore>
37 DataStore::Constructor(GlobalObject& aGlobal, ErrorResult& aRv)
39 nsCOMPtr<nsPIDOMWindow> window = do_QueryInterface(aGlobal.GetAsSupports());
40 if (!window) {
41 aRv.Throw(NS_ERROR_FAILURE);
42 return nullptr;
45 nsRefPtr<DataStore> store = new DataStore(window);
46 return store.forget();
49 JSObject*
50 DataStore::WrapObject(JSContext* aCx)
52 return DataStoreBinding::Wrap(aCx, this);
55 /*static*/ bool
56 DataStore::EnabledForScope(JSContext* aCx, JS::Handle<JSObject*> aObj)
58 // Only expose the interface when it is:
59 // 1. enabled by the preference and
60 // 2. accessed by the chrome codes in Gecko.
61 return (Navigator::HasDataStoreSupport(aCx, aObj) &&
62 nsContentUtils::ThreadsafeIsCallerChrome());
65 void
66 DataStore::GetName(nsAString& aName, ErrorResult& aRv)
68 MOZ_ASSERT(NS_IsMainThread());
69 MOZ_ASSERT(mStore);
71 nsAutoString name;
72 mStore->GetName(name, aRv);
73 aName.Assign(name);
76 void
77 DataStore::GetOwner(nsAString& aOwner, ErrorResult& aRv)
79 MOZ_ASSERT(NS_IsMainThread());
80 MOZ_ASSERT(mStore);
82 nsAutoString owner;
83 mStore->GetOwner(owner, aRv);
84 aOwner.Assign(owner);
87 bool
88 DataStore::GetReadOnly(ErrorResult& aRv)
90 MOZ_ASSERT(NS_IsMainThread());
91 MOZ_ASSERT(mStore);
93 return mStore->GetReadOnly(aRv);
96 already_AddRefed<Promise>
97 DataStore::Get(const Sequence<OwningStringOrUnsignedLong>& aId,
98 ErrorResult& aRv)
100 MOZ_ASSERT(NS_IsMainThread());
101 MOZ_ASSERT(mStore);
103 return mStore->Get(aId, aRv);
106 already_AddRefed<Promise>
107 DataStore::Put(JSContext* aCx,
108 JS::Handle<JS::Value> aObj,
109 const StringOrUnsignedLong& aId,
110 const nsAString& aRevisionId,
111 ErrorResult& aRv)
113 MOZ_ASSERT(NS_IsMainThread());
114 MOZ_ASSERT(mStore);
116 return mStore->Put(aObj, aId, aRevisionId, aRv);
119 already_AddRefed<Promise>
120 DataStore::Add(JSContext* aCx,
121 JS::Handle<JS::Value> aObj,
122 const Optional<StringOrUnsignedLong>& aId,
123 const nsAString& aRevisionId,
124 ErrorResult& aRv)
126 MOZ_ASSERT(NS_IsMainThread());
127 MOZ_ASSERT(mStore);
129 return mStore->Add(aObj, aId, aRevisionId, aRv);
132 already_AddRefed<Promise>
133 DataStore::Remove(const StringOrUnsignedLong& aId,
134 const nsAString& aRevisionId,
135 ErrorResult& aRv)
137 MOZ_ASSERT(NS_IsMainThread());
138 MOZ_ASSERT(mStore);
140 return mStore->Remove(aId, aRevisionId, aRv);
143 already_AddRefed<Promise>
144 DataStore::Clear(const nsAString& aRevisionId, ErrorResult& aRv)
146 MOZ_ASSERT(NS_IsMainThread());
147 MOZ_ASSERT(mStore);
149 return mStore->Clear(aRevisionId, aRv);
152 void
153 DataStore::GetRevisionId(nsAString& aRevisionId, ErrorResult& aRv)
155 MOZ_ASSERT(NS_IsMainThread());
156 MOZ_ASSERT(mStore);
158 nsAutoString revisionId;
159 mStore->GetRevisionId(revisionId, aRv);
160 aRevisionId.Assign(revisionId);
163 already_AddRefed<Promise>
164 DataStore::GetLength(ErrorResult& aRv)
166 MOZ_ASSERT(NS_IsMainThread());
167 MOZ_ASSERT(mStore);
169 return mStore->GetLength(aRv);
172 already_AddRefed<DataStoreCursor>
173 DataStore::Sync(const nsAString& aRevisionId, ErrorResult& aRv)
175 MOZ_ASSERT(NS_IsMainThread());
176 MOZ_ASSERT(mStore);
178 return mStore->Sync(aRevisionId, aRv);
181 void
182 DataStore::SetDataStoreImpl(DataStoreImpl& aStore, ErrorResult& aRv)
184 MOZ_ASSERT(NS_IsMainThread());
185 MOZ_ASSERT(!mStore);
187 mStore = &aStore;
188 mStore->SetEventTarget(*this, aRv);
191 } //namespace dom
192 } //namespace mozilla