Sat, 03 Jan 2015 20:18:00 +0100
Conditionally enable double key logic according to:
private browsing mode or privacy.thirdparty.isolate preference and
implement in GetCookieStringCommon and FindCookie where it counts...
With some reservations of how to convince FindCookie users to test
condition and pass a nullptr when disabling double key logic.
1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* This Source Code Form is subject to the terms of the Mozilla Public
3 * License, v. 2.0. If a copy of the MPL was not distributed with this
4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6 #include "nsUrlClassifierProxies.h"
7 #include "nsUrlClassifierDBService.h"
9 using namespace mozilla::safebrowsing;
11 static nsresult
12 DispatchToWorkerThread(nsIRunnable* r)
13 {
14 nsIThread* t = nsUrlClassifierDBService::BackgroundThread();
15 if (!t)
16 return NS_ERROR_FAILURE;
18 return t->Dispatch(r, NS_DISPATCH_NORMAL);
19 }
21 NS_IMPL_ISUPPORTS(UrlClassifierDBServiceWorkerProxy,
22 nsIUrlClassifierDBServiceWorker)
24 NS_IMETHODIMP
25 UrlClassifierDBServiceWorkerProxy::Lookup(nsIPrincipal* aPrincipal,
26 const nsACString& aTables,
27 nsIUrlClassifierCallback* aCB)
28 {
29 nsCOMPtr<nsIRunnable> r = new LookupRunnable(mTarget, aPrincipal, aTables,
30 aCB);
31 return DispatchToWorkerThread(r);
32 }
34 NS_IMETHODIMP
35 UrlClassifierDBServiceWorkerProxy::LookupRunnable::Run()
36 {
37 (void) mTarget->Lookup(mPrincipal, mLookupTables, mCB);
38 return NS_OK;
39 }
41 NS_IMETHODIMP
42 UrlClassifierDBServiceWorkerProxy::GetTables(nsIUrlClassifierCallback* aCB)
43 {
44 nsCOMPtr<nsIRunnable> r = new GetTablesRunnable(mTarget, aCB);
45 return DispatchToWorkerThread(r);
46 }
48 NS_IMETHODIMP
49 UrlClassifierDBServiceWorkerProxy::GetTablesRunnable::Run()
50 {
51 mTarget->GetTables(mCB);
52 return NS_OK;
53 }
55 NS_IMETHODIMP
56 UrlClassifierDBServiceWorkerProxy::SetHashCompleter
57 (const nsACString&, nsIUrlClassifierHashCompleter*)
58 {
59 NS_NOTREACHED("This method should not be called!");
60 return NS_ERROR_NOT_IMPLEMENTED;
61 }
63 NS_IMETHODIMP
64 UrlClassifierDBServiceWorkerProxy::BeginUpdate
65 (nsIUrlClassifierUpdateObserver* aUpdater,
66 const nsACString& aTables)
67 {
68 nsCOMPtr<nsIRunnable> r = new BeginUpdateRunnable(mTarget, aUpdater,
69 aTables);
70 return DispatchToWorkerThread(r);
71 }
73 NS_IMETHODIMP
74 UrlClassifierDBServiceWorkerProxy::BeginUpdateRunnable::Run()
75 {
76 mTarget->BeginUpdate(mUpdater, mTables);
77 return NS_OK;
78 }
80 NS_IMETHODIMP
81 UrlClassifierDBServiceWorkerProxy::BeginStream(const nsACString& aTable)
82 {
83 nsCOMPtr<nsIRunnable> r =
84 new BeginStreamRunnable(mTarget, aTable);
85 return DispatchToWorkerThread(r);
86 }
88 NS_IMETHODIMP
89 UrlClassifierDBServiceWorkerProxy::BeginStreamRunnable::Run()
90 {
91 mTarget->BeginStream(mTable);
92 return NS_OK;
93 }
95 NS_IMETHODIMP
96 UrlClassifierDBServiceWorkerProxy::UpdateStream(const nsACString& aUpdateChunk)
97 {
98 nsCOMPtr<nsIRunnable> r =
99 new UpdateStreamRunnable(mTarget, aUpdateChunk);
100 return DispatchToWorkerThread(r);
101 }
103 NS_IMETHODIMP
104 UrlClassifierDBServiceWorkerProxy::UpdateStreamRunnable::Run()
105 {
106 mTarget->UpdateStream(mUpdateChunk);
107 return NS_OK;
108 }
110 NS_IMETHODIMP
111 UrlClassifierDBServiceWorkerProxy::FinishStream()
112 {
113 nsCOMPtr<nsIRunnable> r =
114 NS_NewRunnableMethod(mTarget,
115 &nsIUrlClassifierDBServiceWorker::FinishStream);
116 return DispatchToWorkerThread(r);
117 }
119 NS_IMETHODIMP
120 UrlClassifierDBServiceWorkerProxy::FinishUpdate()
121 {
122 nsCOMPtr<nsIRunnable> r =
123 NS_NewRunnableMethod(mTarget,
124 &nsIUrlClassifierDBServiceWorker::FinishUpdate);
125 return DispatchToWorkerThread(r);
126 }
128 NS_IMETHODIMP
129 UrlClassifierDBServiceWorkerProxy::CancelUpdate()
130 {
131 nsCOMPtr<nsIRunnable> r =
132 NS_NewRunnableMethod(mTarget,
133 &nsIUrlClassifierDBServiceWorker::CancelUpdate);
134 return DispatchToWorkerThread(r);
135 }
137 NS_IMETHODIMP
138 UrlClassifierDBServiceWorkerProxy::ResetDatabase()
139 {
140 nsCOMPtr<nsIRunnable> r =
141 NS_NewRunnableMethod(mTarget,
142 &nsIUrlClassifierDBServiceWorker::ResetDatabase);
143 return DispatchToWorkerThread(r);
144 }
146 NS_IMETHODIMP
147 UrlClassifierDBServiceWorkerProxy::CloseDb()
148 {
149 nsCOMPtr<nsIRunnable> r =
150 NS_NewRunnableMethod(mTarget,
151 &nsIUrlClassifierDBServiceWorker::CloseDb);
152 return DispatchToWorkerThread(r);
153 }
155 NS_IMETHODIMP
156 UrlClassifierDBServiceWorkerProxy::CacheCompletions(CacheResultArray * aEntries)
157 {
158 nsCOMPtr<nsIRunnable> r = new CacheCompletionsRunnable(mTarget, aEntries);
159 return DispatchToWorkerThread(r);
160 }
162 NS_IMETHODIMP
163 UrlClassifierDBServiceWorkerProxy::CacheCompletionsRunnable::Run()
164 {
165 mTarget->CacheCompletions(mEntries);
166 return NS_OK;
167 }
169 NS_IMETHODIMP
170 UrlClassifierDBServiceWorkerProxy::CacheMisses(PrefixArray * aEntries)
171 {
172 nsCOMPtr<nsIRunnable> r = new CacheMissesRunnable(mTarget, aEntries);
173 return DispatchToWorkerThread(r);
174 }
176 NS_IMETHODIMP
177 UrlClassifierDBServiceWorkerProxy::CacheMissesRunnable::Run()
178 {
179 mTarget->CacheMisses(mEntries);
180 return NS_OK;
181 }
184 NS_IMPL_ISUPPORTS(UrlClassifierLookupCallbackProxy,
185 nsIUrlClassifierLookupCallback)
187 NS_IMETHODIMP
188 UrlClassifierLookupCallbackProxy::LookupComplete
189 (LookupResultArray * aResults)
190 {
191 nsCOMPtr<nsIRunnable> r = new LookupCompleteRunnable(mTarget, aResults);
192 return NS_DispatchToMainThread(r);
193 }
195 NS_IMETHODIMP
196 UrlClassifierLookupCallbackProxy::LookupCompleteRunnable::Run()
197 {
198 mTarget->LookupComplete(mResults);
199 return NS_OK;
200 }
202 NS_IMPL_ISUPPORTS(UrlClassifierCallbackProxy,
203 nsIUrlClassifierCallback)
205 NS_IMETHODIMP
206 UrlClassifierCallbackProxy::HandleEvent(const nsACString& aValue)
207 {
208 nsCOMPtr<nsIRunnable> r = new HandleEventRunnable(mTarget, aValue);
209 return NS_DispatchToMainThread(r);
210 }
212 NS_IMETHODIMP
213 UrlClassifierCallbackProxy::HandleEventRunnable::Run()
214 {
215 mTarget->HandleEvent(mValue);
216 return NS_OK;
217 }
219 NS_IMPL_ISUPPORTS(UrlClassifierUpdateObserverProxy,
220 nsIUrlClassifierUpdateObserver)
222 NS_IMETHODIMP
223 UrlClassifierUpdateObserverProxy::UpdateUrlRequested
224 (const nsACString& aURL,
225 const nsACString& aTable)
226 {
227 nsCOMPtr<nsIRunnable> r =
228 new UpdateUrlRequestedRunnable(mTarget, aURL, aTable);
229 return NS_DispatchToMainThread(r);
230 }
232 NS_IMETHODIMP
233 UrlClassifierUpdateObserverProxy::UpdateUrlRequestedRunnable::Run()
234 {
235 mTarget->UpdateUrlRequested(mURL, mTable);
236 return NS_OK;
237 }
239 NS_IMETHODIMP
240 UrlClassifierUpdateObserverProxy::StreamFinished(nsresult aStatus,
241 uint32_t aDelay)
242 {
243 nsCOMPtr<nsIRunnable> r =
244 new StreamFinishedRunnable(mTarget, aStatus, aDelay);
245 return NS_DispatchToMainThread(r);
246 }
248 NS_IMETHODIMP
249 UrlClassifierUpdateObserverProxy::StreamFinishedRunnable::Run()
250 {
251 mTarget->StreamFinished(mStatus, mDelay);
252 return NS_OK;
253 }
255 NS_IMETHODIMP
256 UrlClassifierUpdateObserverProxy::UpdateError(nsresult aError)
257 {
258 nsCOMPtr<nsIRunnable> r =
259 new UpdateErrorRunnable(mTarget, aError);
260 return NS_DispatchToMainThread(r);
261 }
263 NS_IMETHODIMP
264 UrlClassifierUpdateObserverProxy::UpdateErrorRunnable::Run()
265 {
266 mTarget->UpdateError(mError);
267 return NS_OK;
268 }
270 NS_IMETHODIMP
271 UrlClassifierUpdateObserverProxy::UpdateSuccess(uint32_t aRequestedTimeout)
272 {
273 nsCOMPtr<nsIRunnable> r =
274 new UpdateSuccessRunnable(mTarget, aRequestedTimeout);
275 return NS_DispatchToMainThread(r);
276 }
278 NS_IMETHODIMP
279 UrlClassifierUpdateObserverProxy::UpdateSuccessRunnable::Run()
280 {
281 mTarget->UpdateSuccess(mRequestedTimeout);
282 return NS_OK;
283 }