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
3 // found in the LICENSE file.
5 #ifndef CONTENT_CHILD_PERMISSIONS_PERMISSION_MANAGER_H_
6 #define CONTENT_CHILD_PERMISSIONS_PERMISSION_MANAGER_H_
10 #include "base/compiler_specific.h"
11 #include "base/id_map.h"
12 #include "base/macros.h"
13 #include "base/memory/scoped_ptr.h"
14 #include "content/common/permission_service.mojom.h"
15 #include "third_party/WebKit/public/platform/modules/permissions/WebPermissionClient.h"
19 class ServiceRegistry
;
21 // The PermissionManager is a layer between Blink and the Mojo PermissionService
22 // It implements blink::WebPermissionClient. It is being used from workers and
23 // frames independently. When called outside of the main thread,
24 // QueryPermissionForWorker is meant to be called. It will handle the thread
26 class PermissionManager
: public blink::WebPermissionClient
{
28 // The caller must guarantee that |service_registry| will have a lifetime
29 // larger than this instance of PermissionManager.
30 explicit PermissionManager(ServiceRegistry
* service_registry
);
31 virtual ~PermissionManager();
33 // blink::WebPermissionClient implementation.
34 virtual void queryPermission(blink::WebPermissionType type
,
35 const blink::WebURL
& origin
,
36 blink::WebPermissionQueryCallback
* callback
);
38 void QueryPermissionForWorker(blink::WebPermissionType type
,
39 const std::string
& origin
,
40 blink::WebPermissionQueryCallback
* callback
,
41 int worker_thread_id
);
44 void QueryPermissionInternal(blink::WebPermissionType type
,
45 const std::string
& origin
,
46 blink::WebPermissionQueryCallback
* callback
,
47 int worker_thread_id
);
49 void OnQueryPermission(int request_id
, PermissionStatus status
);
51 // Called from the main thread in order to run the callback in the thread it
53 static void RunCallbackOnWorkerThread(
54 blink::WebPermissionQueryCallback
* callback
,
55 scoped_ptr
<blink::WebPermissionStatus
> status
);
57 // Saves some basic information about the callback in order to be able to run
58 // it in the right thread.
59 class CallbackInformation
{
61 CallbackInformation(blink::WebPermissionQueryCallback
* callback
,
62 int worker_thread_id
);
63 ~CallbackInformation();
65 blink::WebPermissionQueryCallback
* callback() const;
66 int worker_thread_id() const;
68 blink::WebPermissionQueryCallback
* ReleaseCallback();
71 scoped_ptr
<blink::WebPermissionQueryCallback
> callback_
;
72 int worker_thread_id_
;
74 DISALLOW_COPY_AND_ASSIGN(CallbackInformation
);
76 using CallbackMap
= IDMap
<CallbackInformation
, IDMapOwnPointer
>;
77 CallbackMap pending_callbacks_
;
79 ServiceRegistry
* service_registry_
;
80 PermissionServicePtr permission_service_
;
82 DISALLOW_COPY_AND_ASSIGN(PermissionManager
);
85 } // namespace content
87 #endif // CONTENT_CHILD_PERMISSIONS_PERMISSION_MANAGER_H_