Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(130)

Side by Side Diff: content/child/permissions/permission_dispatcher.cc

Issue 1771743002: Move geolocation and permission mojoms into WebKit/public/platform. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/child/permissions/permission_dispatcher.h" 5 #include "content/child/permissions/permission_dispatcher.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 #include <utility> 8 #include <utility>
9 9
10 #include "base/callback.h" 10 #include "base/callback.h"
11 #include "content/public/child/worker_thread.h" 11 #include "content/public/child/worker_thread.h"
12 #include "content/public/common/service_registry.h" 12 #include "content/public/common/service_registry.h"
13 #include "third_party/WebKit/public/platform/WebURL.h" 13 #include "third_party/WebKit/public/platform/WebURL.h"
14 #include "third_party/WebKit/public/platform/modules/permissions/WebPermissionOb server.h" 14 #include "third_party/WebKit/public/platform/modules/permissions/WebPermissionOb server.h"
15 15
16 using blink::WebPermissionObserver; 16 using blink::WebPermissionObserver;
17 17
18 namespace content { 18 namespace content {
19 19
20 namespace { 20 namespace {
21 21
22 PermissionName GetPermissionName(blink::WebPermissionType type) { 22 blink::mojom::PermissionName GetPermissionName(blink::WebPermissionType type) {
23 switch (type) { 23 switch (type) {
24 case blink::WebPermissionTypeGeolocation: 24 case blink::WebPermissionTypeGeolocation:
25 return PermissionName::GEOLOCATION; 25 return blink::mojom::PermissionName::GEOLOCATION;
26 case blink::WebPermissionTypeNotifications: 26 case blink::WebPermissionTypeNotifications:
27 return PermissionName::NOTIFICATIONS; 27 return blink::mojom::PermissionName::NOTIFICATIONS;
28 case blink::WebPermissionTypePushNotifications: 28 case blink::WebPermissionTypePushNotifications:
29 return PermissionName::PUSH_NOTIFICATIONS; 29 return blink::mojom::PermissionName::PUSH_NOTIFICATIONS;
30 case blink::WebPermissionTypeMidiSysEx: 30 case blink::WebPermissionTypeMidiSysEx:
31 return PermissionName::MIDI_SYSEX; 31 return blink::mojom::PermissionName::MIDI_SYSEX;
32 case blink::WebPermissionTypeDurableStorage: 32 case blink::WebPermissionTypeDurableStorage:
33 return PermissionName::DURABLE_STORAGE; 33 return blink::mojom::PermissionName::DURABLE_STORAGE;
34 case blink::WebPermissionTypeMidi: 34 case blink::WebPermissionTypeMidi:
35 return PermissionName::MIDI; 35 return blink::mojom::PermissionName::MIDI;
36 default: 36 default:
37 // The default statement is only there to prevent compilation failures if 37 // The default statement is only there to prevent compilation failures if
38 // WebPermissionType enum gets extended. 38 // WebPermissionType enum gets extended.
39 NOTREACHED(); 39 NOTREACHED();
40 return PermissionName::GEOLOCATION; 40 return blink::mojom::PermissionName::GEOLOCATION;
41 } 41 }
42 } 42 }
43 43
44 PermissionStatus GetPermissionStatus(blink::WebPermissionStatus status) { 44 blink::mojom::PermissionStatus GetPermissionStatus(
45 blink::WebPermissionStatus status) {
45 switch (status) { 46 switch (status) {
46 case blink::WebPermissionStatusGranted: 47 case blink::WebPermissionStatusGranted:
47 return PermissionStatus::GRANTED; 48 return blink::mojom::PermissionStatus::GRANTED;
48 case blink::WebPermissionStatusDenied: 49 case blink::WebPermissionStatusDenied:
49 return PermissionStatus::DENIED; 50 return blink::mojom::PermissionStatus::DENIED;
50 case blink::WebPermissionStatusPrompt: 51 case blink::WebPermissionStatusPrompt:
51 return PermissionStatus::ASK; 52 return blink::mojom::PermissionStatus::ASK;
52 } 53 }
53 54
54 NOTREACHED(); 55 NOTREACHED();
55 return PermissionStatus::DENIED; 56 return blink::mojom::PermissionStatus::DENIED;
56 } 57 }
57 58
58 blink::WebPermissionStatus GetWebPermissionStatus(PermissionStatus status) { 59 blink::WebPermissionStatus GetWebPermissionStatus(
60 blink::mojom::PermissionStatus status) {
59 switch (status) { 61 switch (status) {
60 case PermissionStatus::GRANTED: 62 case blink::mojom::PermissionStatus::GRANTED:
61 return blink::WebPermissionStatusGranted; 63 return blink::WebPermissionStatusGranted;
62 case PermissionStatus::DENIED: 64 case blink::mojom::PermissionStatus::DENIED:
63 return blink::WebPermissionStatusDenied; 65 return blink::WebPermissionStatusDenied;
64 case PermissionStatus::ASK: 66 case blink::mojom::PermissionStatus::ASK:
65 return blink::WebPermissionStatusPrompt; 67 return blink::WebPermissionStatusPrompt;
66 } 68 }
67 69
68 NOTREACHED(); 70 NOTREACHED();
69 return blink::WebPermissionStatusDenied; 71 return blink::WebPermissionStatusDenied;
70 } 72 }
71 73
72 const int kNoWorkerThread = 0; 74 const int kNoWorkerThread = 0;
73 75
74 } // anonymous namespace 76 } // anonymous namespace
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
130 132
131 RegisterObserver(observer); 133 RegisterObserver(observer);
132 134
133 GetNextPermissionChange(type, origin.string().utf8(), observer, 135 GetNextPermissionChange(type, origin.string().utf8(), observer,
134 // We initialize with an arbitrary value because the 136 // We initialize with an arbitrary value because the
135 // mojo service wants a value. Worst case, the 137 // mojo service wants a value. Worst case, the
136 // observer will get notified about a non-change which 138 // observer will get notified about a non-change which
137 // should be a no-op. After the first notification, 139 // should be a no-op. After the first notification,
138 // GetNextPermissionChange will be called with the 140 // GetNextPermissionChange will be called with the
139 // latest known value. 141 // latest known value.
140 PermissionStatus::ASK); 142 blink::mojom::PermissionStatus::ASK);
141 } 143 }
142 144
143 void PermissionDispatcher::stopListening(WebPermissionObserver* observer) { 145 void PermissionDispatcher::stopListening(WebPermissionObserver* observer) {
144 UnregisterObserver(observer); 146 UnregisterObserver(observer);
145 } 147 }
146 148
147 void PermissionDispatcher::QueryPermissionForWorker( 149 void PermissionDispatcher::QueryPermissionForWorker(
148 blink::WebPermissionType type, 150 blink::WebPermissionType type,
149 const std::string& origin, 151 const std::string& origin,
150 blink::WebPermissionCallback* callback, 152 blink::WebPermissionCallback* callback,
(...skipping 29 matching lines...) Expand all
180 blink::WebPermissionType type, 182 blink::WebPermissionType type,
181 const std::string& origin, 183 const std::string& origin,
182 int worker_thread_id, 184 int worker_thread_id,
183 const base::Callback<void(blink::WebPermissionStatus)>& callback) { 185 const base::Callback<void(blink::WebPermissionStatus)>& callback) {
184 GetPermissionServicePtr()->GetNextPermissionChange( 186 GetPermissionServicePtr()->GetNextPermissionChange(
185 GetPermissionName(type), origin, 187 GetPermissionName(type), origin,
186 // We initialize with an arbitrary value because the mojo service wants a 188 // We initialize with an arbitrary value because the mojo service wants a
187 // value. Worst case, the observer will get notified about a non-change 189 // value. Worst case, the observer will get notified about a non-change
188 // which should be a no-op. After the first notification, 190 // which should be a no-op. After the first notification,
189 // GetNextPermissionChange will be called with the latest known value. 191 // GetNextPermissionChange will be called with the latest known value.
190 PermissionStatus::ASK, 192 blink::mojom::PermissionStatus::ASK,
191 base::Bind(&PermissionDispatcher::OnPermissionChangedForWorker, 193 base::Bind(&PermissionDispatcher::OnPermissionChangedForWorker,
192 base::Unretained(this), worker_thread_id, callback)); 194 base::Unretained(this), worker_thread_id, callback));
193 } 195 }
194 196
195 void PermissionDispatcher::GetNextPermissionChangeForWorker( 197 void PermissionDispatcher::GetNextPermissionChangeForWorker(
196 blink::WebPermissionType type, 198 blink::WebPermissionType type,
197 const std::string& origin, 199 const std::string& origin,
198 blink::WebPermissionStatus status, 200 blink::WebPermissionStatus status,
199 int worker_thread_id, 201 int worker_thread_id,
200 const base::Callback<void(blink::WebPermissionStatus)>& callback) { 202 const base::Callback<void(blink::WebPermissionStatus)>& callback) {
(...skipping 13 matching lines...) Expand all
214 blink::WebPermissionStatus status) { 216 blink::WebPermissionStatus status) {
215 callback->onSuccess(status); 217 callback->onSuccess(status);
216 } 218 }
217 219
218 void PermissionDispatcher::RunPermissionsCallbackOnWorkerThread( 220 void PermissionDispatcher::RunPermissionsCallbackOnWorkerThread(
219 scoped_ptr<blink::WebPermissionsCallback> callback, 221 scoped_ptr<blink::WebPermissionsCallback> callback,
220 scoped_ptr<blink::WebVector<blink::WebPermissionStatus>> statuses) { 222 scoped_ptr<blink::WebVector<blink::WebPermissionStatus>> statuses) {
221 callback->onSuccess(blink::adoptWebPtr(statuses.release())); 223 callback->onSuccess(blink::adoptWebPtr(statuses.release()));
222 } 224 }
223 225
224 PermissionServicePtr& PermissionDispatcher::GetPermissionServicePtr() { 226 blink::mojom::PermissionService*
227 PermissionDispatcher::GetPermissionServicePtr() {
225 if (!permission_service_.get()) { 228 if (!permission_service_.get()) {
226 service_registry_->ConnectToRemoteService( 229 service_registry_->ConnectToRemoteService(
227 mojo::GetProxy(&permission_service_)); 230 mojo::GetProxy(&permission_service_));
228 } 231 }
229 return permission_service_; 232 return permission_service_.get();
230 } 233 }
231 234
232 void PermissionDispatcher::QueryPermissionInternal( 235 void PermissionDispatcher::QueryPermissionInternal(
233 blink::WebPermissionType type, 236 blink::WebPermissionType type,
234 const std::string& origin, 237 const std::string& origin,
235 blink::WebPermissionCallback* callback, 238 blink::WebPermissionCallback* callback,
236 int worker_thread_id) { 239 int worker_thread_id) {
237 // We need to save the |callback| in an ScopedPtrHashMap so if |this| gets 240 // We need to save the |callback| in an ScopedPtrHashMap so if |this| gets
238 // deleted, the callback will not leak. In the case of |this| gets deleted, 241 // deleted, the callback will not leak. In the case of |this| gets deleted,
239 // the |permission_service_| pipe will be destroyed too so OnQueryPermission 242 // the |permission_service_| pipe will be destroyed too so OnQueryPermission
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
279 blink::WebPermissionsCallback* callback, 282 blink::WebPermissionsCallback* callback,
280 int worker_thread_id) { 283 int worker_thread_id) {
281 // We need to save the |callback| in an ScopedVector so if |this| gets 284 // We need to save the |callback| in an ScopedVector so if |this| gets
282 // deleted, the callback will not leak. In the case of |this| gets deleted, 285 // deleted, the callback will not leak. In the case of |this| gets deleted,
283 // the |permission_service_| pipe will be destroyed too so OnQueryPermission 286 // the |permission_service_| pipe will be destroyed too so OnQueryPermission
284 // will not be called. 287 // will not be called.
285 uintptr_t callback_key = reinterpret_cast<uintptr_t>(callback); 288 uintptr_t callback_key = reinterpret_cast<uintptr_t>(callback);
286 permissions_callbacks_.add(callback_key, 289 permissions_callbacks_.add(callback_key,
287 scoped_ptr<blink::WebPermissionsCallback>(callback)); 290 scoped_ptr<blink::WebPermissionsCallback>(callback));
288 291
289 mojo::Array<PermissionName> names(types.size()); 292 mojo::Array<blink::mojom::PermissionName> names(types.size());
290 for (size_t i = 0; i < types.size(); ++i) 293 for (size_t i = 0; i < types.size(); ++i)
291 names[i] = GetPermissionName(types[i]); 294 names[i] = GetPermissionName(types[i]);
292 295
293 GetPermissionServicePtr()->RequestPermissions( 296 GetPermissionServicePtr()->RequestPermissions(
294 std::move(names), origin, 297 std::move(names), origin,
295 base::Bind(&PermissionDispatcher::OnRequestPermissionsResponse, 298 base::Bind(&PermissionDispatcher::OnRequestPermissionsResponse,
296 base::Unretained(this), worker_thread_id, callback_key)); 299 base::Unretained(this), worker_thread_id, callback_key));
297 } 300 }
298 301
299 void PermissionDispatcher::RevokePermissionInternal( 302 void PermissionDispatcher::RevokePermissionInternal(
(...skipping 14 matching lines...) Expand all
314 origin, 317 origin,
315 base::Bind(&PermissionDispatcher::OnPermissionResponse, 318 base::Bind(&PermissionDispatcher::OnPermissionResponse,
316 base::Unretained(this), 319 base::Unretained(this),
317 worker_thread_id, 320 worker_thread_id,
318 callback_key)); 321 callback_key));
319 } 322 }
320 323
321 void PermissionDispatcher::OnPermissionResponse( 324 void PermissionDispatcher::OnPermissionResponse(
322 int worker_thread_id, 325 int worker_thread_id,
323 uintptr_t callback_key, 326 uintptr_t callback_key,
324 PermissionStatus result) { 327 blink::mojom::PermissionStatus result) {
325 scoped_ptr<blink::WebPermissionCallback> callback = 328 scoped_ptr<blink::WebPermissionCallback> callback =
326 permission_callbacks_.take_and_erase(callback_key); 329 permission_callbacks_.take_and_erase(callback_key);
327 blink::WebPermissionStatus status = GetWebPermissionStatus(result); 330 blink::WebPermissionStatus status = GetWebPermissionStatus(result);
328 331
329 if (worker_thread_id != kNoWorkerThread) { 332 if (worker_thread_id != kNoWorkerThread) {
330 // If the worker is no longer running, ::PostTask() will return false and 333 // If the worker is no longer running, ::PostTask() will return false and
331 // gracefully fail, destroying the callback too. 334 // gracefully fail, destroying the callback too.
332 WorkerThread::PostTask( 335 WorkerThread::PostTask(
333 worker_thread_id, 336 worker_thread_id,
334 base::Bind(&PermissionDispatcher::RunPermissionCallbackOnWorkerThread, 337 base::Bind(&PermissionDispatcher::RunPermissionCallbackOnWorkerThread,
335 base::Passed(&callback), status)); 338 base::Passed(&callback), status));
336 return; 339 return;
337 } 340 }
338 341
339 callback->onSuccess(status); 342 callback->onSuccess(status);
340 } 343 }
341 344
342 void PermissionDispatcher::OnRequestPermissionsResponse( 345 void PermissionDispatcher::OnRequestPermissionsResponse(
343 int worker_thread_id, 346 int worker_thread_id,
344 uintptr_t callback_key, 347 uintptr_t callback_key,
345 const mojo::Array<PermissionStatus>& result) { 348 const mojo::Array<blink::mojom::PermissionStatus>& result) {
346 scoped_ptr<blink::WebPermissionsCallback> callback = 349 scoped_ptr<blink::WebPermissionsCallback> callback =
347 permissions_callbacks_.take_and_erase(callback_key); 350 permissions_callbacks_.take_and_erase(callback_key);
348 scoped_ptr<blink::WebVector<blink::WebPermissionStatus>> statuses( 351 scoped_ptr<blink::WebVector<blink::WebPermissionStatus>> statuses(
349 new blink::WebVector<blink::WebPermissionStatus>(result.size())); 352 new blink::WebVector<blink::WebPermissionStatus>(result.size()));
350 353
351 for (size_t i = 0; i < result.size(); i++) 354 for (size_t i = 0; i < result.size(); i++)
352 statuses->operator[](i) = GetWebPermissionStatus(result[i]); 355 statuses->operator[](i) = GetWebPermissionStatus(result[i]);
353 356
354 if (worker_thread_id != kNoWorkerThread) { 357 if (worker_thread_id != kNoWorkerThread) {
355 // If the worker is no longer running, ::PostTask() will return false and 358 // If the worker is no longer running, ::PostTask() will return false and
356 // gracefully fail, destroying the callback too. 359 // gracefully fail, destroying the callback too.
357 WorkerThread::PostTask( 360 WorkerThread::PostTask(
358 worker_thread_id, 361 worker_thread_id,
359 base::Bind(&PermissionDispatcher::RunPermissionsCallbackOnWorkerThread, 362 base::Bind(&PermissionDispatcher::RunPermissionsCallbackOnWorkerThread,
360 base::Passed(&callback), base::Passed(&statuses))); 363 base::Passed(&callback), base::Passed(&statuses)));
361 return; 364 return;
362 } 365 }
363 366
364 callback->onSuccess(blink::adoptWebPtr(statuses.release())); 367 callback->onSuccess(blink::adoptWebPtr(statuses.release()));
365 } 368 }
366 369
367 void PermissionDispatcher::OnPermissionChanged( 370 void PermissionDispatcher::OnPermissionChanged(
368 blink::WebPermissionType type, 371 blink::WebPermissionType type,
369 const std::string& origin, 372 const std::string& origin,
370 WebPermissionObserver* observer, 373 WebPermissionObserver* observer,
371 PermissionStatus status) { 374 blink::mojom::PermissionStatus status) {
372 if (!IsObserverRegistered(observer)) 375 if (!IsObserverRegistered(observer))
373 return; 376 return;
374 377
375 observer->permissionChanged(type, GetWebPermissionStatus(status)); 378 observer->permissionChanged(type, GetWebPermissionStatus(status));
376 379
377 GetNextPermissionChange(type, origin, observer, status); 380 GetNextPermissionChange(type, origin, observer, status);
378 } 381 }
379 382
380 void PermissionDispatcher::OnPermissionChangedForWorker( 383 void PermissionDispatcher::OnPermissionChangedForWorker(
381 int worker_thread_id, 384 int worker_thread_id,
382 const base::Callback<void(blink::WebPermissionStatus)>& callback, 385 const base::Callback<void(blink::WebPermissionStatus)>& callback,
383 PermissionStatus status) { 386 blink::mojom::PermissionStatus status) {
384 DCHECK(worker_thread_id != kNoWorkerThread); 387 DCHECK(worker_thread_id != kNoWorkerThread);
385 388
386 WorkerThread::PostTask(worker_thread_id, 389 WorkerThread::PostTask(worker_thread_id,
387 base::Bind(callback, GetWebPermissionStatus(status))); 390 base::Bind(callback, GetWebPermissionStatus(status)));
388 } 391 }
389 392
390 void PermissionDispatcher::GetNextPermissionChange( 393 void PermissionDispatcher::GetNextPermissionChange(
391 blink::WebPermissionType type, 394 blink::WebPermissionType type,
392 const std::string& origin, 395 const std::string& origin,
393 WebPermissionObserver* observer, 396 WebPermissionObserver* observer,
394 PermissionStatus current_status) { 397 blink::mojom::PermissionStatus current_status) {
395 GetPermissionServicePtr()->GetNextPermissionChange( 398 GetPermissionServicePtr()->GetNextPermissionChange(
396 GetPermissionName(type), 399 GetPermissionName(type),
397 origin, 400 origin,
398 current_status, 401 current_status,
399 base::Bind(&PermissionDispatcher::OnPermissionChanged, 402 base::Bind(&PermissionDispatcher::OnPermissionChanged,
400 base::Unretained(this), 403 base::Unretained(this),
401 type, 404 type,
402 origin, 405 origin,
403 base::Unretained(observer))); 406 base::Unretained(observer)));
404 } 407 }
405 408
406 } // namespace content 409 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698