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

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

Issue 2108003002: Merge //content/child/permissions into Blink's permissions module. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebased. Created 4 years, 5 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
« no previous file with comments | « content/child/permissions/OWNERS ('k') | content/child/permissions/permission_dispatcher.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
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.
4
5 #ifndef CONTENT_CHILD_PERMISSIONS_PERMISSION_DISPATCHER_H_
6 #define CONTENT_CHILD_PERMISSIONS_PERMISSION_DISPATCHER_H_
7
8 #include <memory>
9 #include <string>
10
11 #include "base/callback_forward.h"
12 #include "base/containers/scoped_ptr_hash_map.h"
13 #include "base/macros.h"
14 #include "content/child/permissions/permission_observers_registry.h"
15 #include "third_party/WebKit/public/platform/modules/permissions/WebPermissionCl ient.h"
16 #include "third_party/WebKit/public/platform/modules/permissions/permission.mojo m.h"
17
18 namespace shell {
19 class InterfaceProvider;
20 }
21
22 namespace content {
23
24 // The PermissionDispatcher is a layer between Blink and the Mojo
25 // PermissionService. It implements blink::WebPermissionClient. It is being used
26 // from workers and frames independently. When called outside of the main
27 // thread, QueryPermissionForWorker is meant to be called. It will handle the
28 // thread jumping.
29 class PermissionDispatcher : public blink::WebPermissionClient,
30 public PermissionObserversRegistry {
31 public:
32 // Returns whether the given WebPermissionType is observable. Some types have
33 // static values that never changes.
34 static bool IsObservable(blink::WebPermissionType type);
35
36 // The caller must guarantee that |interface_registry| will have a lifetime
37 // larger than this instance of PermissionDispatcher.
38 explicit PermissionDispatcher(shell::InterfaceProvider* remote_interfaces);
39 ~PermissionDispatcher() override;
40
41 // blink::WebPermissionClient implementation.
42 void queryPermission(blink::WebPermissionType type,
43 const blink::WebURL& origin,
44 blink::WebPermissionCallback* callback) override;
45 void requestPermission(blink::WebPermissionType,
46 const blink::WebURL& origin,
47 blink::WebPermissionCallback* callback) override;
48 void requestPermissions(
49 const blink::WebVector<blink::WebPermissionType>& types,
50 const blink::WebURL& origin,
51 blink::WebPermissionsCallback* callback) override;
52 void revokePermission(blink::WebPermissionType,
53 const blink::WebURL& origin,
54 blink::WebPermissionCallback* callback) override;
55 void startListening(blink::WebPermissionType type,
56 const blink::WebURL& origin,
57 blink::WebPermissionObserver* observer) override;
58 void stopListening(blink::WebPermissionObserver* observer) override;
59
60 // The following methods must be called by workers on the main thread.
61 void QueryPermissionForWorker(blink::WebPermissionType type,
62 const std::string& origin,
63 blink::WebPermissionCallback* callback,
64 int worker_thread_id);
65 void RequestPermissionForWorker(blink::WebPermissionType type,
66 const std::string& origin,
67 blink::WebPermissionCallback* callback,
68 int worker_thread_id);
69 void RequestPermissionsForWorker(
70 const blink::WebVector<blink::WebPermissionType>& types,
71 const std::string& origin,
72 blink::WebPermissionsCallback* callback,
73 int worker_thread_id);
74 void RevokePermissionForWorker(blink::WebPermissionType type,
75 const std::string& origin,
76 blink::WebPermissionCallback* callback,
77 int worker_thread_id);
78 void StartListeningForWorker(
79 blink::WebPermissionType type,
80 const std::string& origin,
81 int worker_thread_id,
82 const base::Callback<void(blink::WebPermissionStatus)>& callback);
83 void GetNextPermissionChangeForWorker(
84 blink::WebPermissionType type,
85 const std::string& origin,
86 blink::WebPermissionStatus status,
87 int worker_thread_id,
88 const base::Callback<void(blink::WebPermissionStatus)>& callback);
89
90 private:
91 using PermissionCallbackMap =
92 base::ScopedPtrHashMap<uintptr_t,
93 std::unique_ptr<blink::WebPermissionCallback>>;
94 using PermissionsCallbackMap =
95 base::ScopedPtrHashMap<uintptr_t,
96 std::unique_ptr<blink::WebPermissionsCallback>>;
97
98 // Runs the given |callback| with |status| as a parameter. It has to be run
99 // on a worker thread.
100 static void RunPermissionCallbackOnWorkerThread(
101 std::unique_ptr<blink::WebPermissionCallback> callback,
102 blink::WebPermissionStatus status);
103 static void RunPermissionsCallbackOnWorkerThread(
104 std::unique_ptr<blink::WebPermissionsCallback> callback,
105 std::unique_ptr<blink::WebVector<blink::WebPermissionStatus>> statuses);
106
107 // Helper method that returns an initialized PermissionServicePtr.
108 blink::mojom::PermissionService* GetPermissionServicePtr();
109
110 void QueryPermissionInternal(blink::WebPermissionType type,
111 const std::string& origin,
112 blink::WebPermissionCallback* callback,
113 int worker_thread_id);
114 void RequestPermissionInternal(blink::WebPermissionType type,
115 const std::string& origin,
116 blink::WebPermissionCallback* callback,
117 int worker_thread_id);
118 void RequestPermissionsInternal(
119 const blink::WebVector<blink::WebPermissionType>& types,
120 const std::string& origin,
121 blink::WebPermissionsCallback* callback,
122 int worker_thread_id);
123 void RevokePermissionInternal(blink::WebPermissionType type,
124 const std::string& origin,
125 blink::WebPermissionCallback* callback,
126 int worker_thread_id);
127
128 // This is the callback function used for query, request and revoke.
129 void OnPermissionResponse(int worker_thread_id,
130 uintptr_t callback_key,
131 blink::mojom::PermissionStatus status);
132 void OnRequestPermissionsResponse(
133 int worker_thread_id,
134 uintptr_t callback_key,
135 mojo::Array<blink::mojom::PermissionStatus> status);
136 void OnPermissionChanged(blink::WebPermissionType type,
137 const std::string& origin,
138 blink::WebPermissionObserver* observer,
139 blink::mojom::PermissionStatus status);
140 void OnPermissionChangedForWorker(
141 int worker_thread_id,
142 const base::Callback<void(blink::WebPermissionStatus)>& callback,
143 blink::mojom::PermissionStatus status);
144
145 void GetNextPermissionChange(blink::WebPermissionType type,
146 const std::string& origin,
147 blink::WebPermissionObserver* observer,
148 blink::mojom::PermissionStatus current_status);
149
150 // Pending callbacks for query(), revoke() and request() single permission.
151 PermissionCallbackMap permission_callbacks_;
152
153 // Pending callbacks for request() multiple permissions.
154 PermissionsCallbackMap permissions_callbacks_;
155
156 shell::InterfaceProvider* remote_interfaces_;
157 blink::mojom::PermissionServicePtr permission_service_;
158
159 DISALLOW_COPY_AND_ASSIGN(PermissionDispatcher);
160 };
161
162 } // namespace content
163
164 #endif // CONTENT_CHILD_PERMISSIONS_PERMISSION_DISPATCHER_H_
OLDNEW
« no previous file with comments | « content/child/permissions/OWNERS ('k') | content/child/permissions/permission_dispatcher.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698