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

Side by Side Diff: chrome/browser/permissions/permission_manager.cc

Issue 1373883003: Move geolocation and permission mojoms into components. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 2 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 "chrome/browser/permissions/permission_manager.h" 5 #include "chrome/browser/permissions/permission_manager.h"
6 6
7 #include "base/callback.h" 7 #include "base/callback.h"
8 #include "chrome/browser/content_settings/host_content_settings_map_factory.h" 8 #include "chrome/browser/content_settings/host_content_settings_map_factory.h"
9 #include "chrome/browser/permissions/permission_context.h" 9 #include "chrome/browser/permissions/permission_context.h"
10 #include "chrome/browser/permissions/permission_context_base.h" 10 #include "chrome/browser/permissions/permission_context_base.h"
11 #include "chrome/browser/permissions/permission_request_id.h" 11 #include "chrome/browser/permissions/permission_request_id.h"
12 #include "chrome/browser/profiles/profile.h" 12 #include "chrome/browser/profiles/profile.h"
13 #include "chrome/browser/tab_contents/tab_util.h" 13 #include "chrome/browser/tab_contents/tab_util.h"
14 #include "components/content_settings/core/browser/host_content_settings_map.h" 14 #include "components/content_settings/core/browser/host_content_settings_map.h"
15 #include "content/public/browser/permission_type.h" 15 #include "content/public/browser/permission_type.h"
16 #include "content/public/browser/render_frame_host.h" 16 #include "content/public/browser/render_frame_host.h"
17 #include "content/public/browser/render_process_host.h" 17 #include "content/public/browser/render_process_host.h"
18 #include "content/public/browser/web_contents.h" 18 #include "content/public/browser/web_contents.h"
19 19
20 #if !defined(OS_ANDROID) 20 #if !defined(OS_ANDROID)
21 #include "chrome/browser/ui/website_settings/permission_bubble_manager.h" 21 #include "chrome/browser/ui/website_settings/permission_bubble_manager.h"
22 #endif 22 #endif
23 23
24 using content::PermissionStatus;
25 using content::PermissionType; 24 using content::PermissionType;
26 25
27 namespace { 26 namespace {
28 27
29 // Helper method to convert ContentSetting to PermissionStatus. 28 // Helper method to convert ContentSetting to permission::Status.
30 PermissionStatus ContentSettingToPermissionStatus(ContentSetting setting) { 29 permission::Status ContentSettingToPermissionStatus(ContentSetting setting) {
31 switch (setting) { 30 switch (setting) {
32 case CONTENT_SETTING_ALLOW: 31 case CONTENT_SETTING_ALLOW:
33 case CONTENT_SETTING_SESSION_ONLY: 32 case CONTENT_SETTING_SESSION_ONLY:
34 return content::PERMISSION_STATUS_GRANTED; 33 return permission::STATUS_GRANTED;
35 case CONTENT_SETTING_BLOCK: 34 case CONTENT_SETTING_BLOCK:
36 return content::PERMISSION_STATUS_DENIED; 35 return permission::STATUS_DENIED;
37 case CONTENT_SETTING_ASK: 36 case CONTENT_SETTING_ASK:
38 return content::PERMISSION_STATUS_ASK; 37 return permission::STATUS_ASK;
39 case CONTENT_SETTING_DETECT_IMPORTANT_CONTENT: 38 case CONTENT_SETTING_DETECT_IMPORTANT_CONTENT:
40 case CONTENT_SETTING_DEFAULT: 39 case CONTENT_SETTING_DEFAULT:
41 case CONTENT_SETTING_NUM_SETTINGS: 40 case CONTENT_SETTING_NUM_SETTINGS:
42 break; 41 break;
43 } 42 }
44 43
45 NOTREACHED(); 44 NOTREACHED();
46 return content::PERMISSION_STATUS_DENIED; 45 return permission::STATUS_DENIED;
47 } 46 }
48 47
49 // Helper method to convert PermissionType to ContentSettingType. 48 // Helper method to convert PermissionType to ContentSettingType.
50 ContentSettingsType PermissionTypeToContentSetting(PermissionType permission) { 49 ContentSettingsType PermissionTypeToContentSetting(PermissionType permission) {
51 switch (permission) { 50 switch (permission) {
52 case PermissionType::MIDI_SYSEX: 51 case PermissionType::MIDI_SYSEX:
53 return CONTENT_SETTINGS_TYPE_MIDI_SYSEX; 52 return CONTENT_SETTINGS_TYPE_MIDI_SYSEX;
54 case PermissionType::PUSH_MESSAGING: 53 case PermissionType::PUSH_MESSAGING:
55 return CONTENT_SETTINGS_TYPE_PUSH_MESSAGING; 54 return CONTENT_SETTINGS_TYPE_PUSH_MESSAGING;
56 case PermissionType::NOTIFICATIONS: 55 case PermissionType::NOTIFICATIONS:
(...skipping 19 matching lines...) Expand all
76 case PermissionType::NUM: 75 case PermissionType::NUM:
77 // This will hit the NOTREACHED below. 76 // This will hit the NOTREACHED below.
78 break; 77 break;
79 } 78 }
80 79
81 NOTREACHED() << "Unknown content setting for permission " 80 NOTREACHED() << "Unknown content setting for permission "
82 << static_cast<int>(permission); 81 << static_cast<int>(permission);
83 return CONTENT_SETTINGS_TYPE_DEFAULT; 82 return CONTENT_SETTINGS_TYPE_DEFAULT;
84 } 83 }
85 84
86 // Returns whether the permission has a constant PermissionStatus value (i.e. 85 // Returns whether the permission has a constant permission::Status value (i.e.
87 // always approved or always denied) 86 // always approved or always denied)
88 // The PermissionTypes for which true is returned should be exactly those which 87 // The PermissionTypes for which true is returned should be exactly those which
89 // return nullptr in PermissionContext::Get since they don't have a context. 88 // return nullptr in PermissionContext::Get since they don't have a context.
90 bool IsConstantPermission(PermissionType type) { 89 bool IsConstantPermission(PermissionType type) {
91 switch (type) { 90 switch (type) {
92 case PermissionType::MIDI: 91 case PermissionType::MIDI:
93 return true; 92 return true;
94 default: 93 default:
95 return false; 94 return false;
96 } 95 }
97 } 96 }
98 97
99 // Function used for handling permission types which do not change their 98 // Function used for handling permission types which do not change their
100 // value i.e. they are always approved or always denied etc. 99 // value i.e. they are always approved or always denied etc.
101 // CONTENT_SETTING_DEFAULT is returned if the permission needs further handling. 100 // CONTENT_SETTING_DEFAULT is returned if the permission needs further handling.
102 // This function should only be called when IsConstantPermission has returned 101 // This function should only be called when IsConstantPermission has returned
103 // true for the PermissionType. 102 // true for the PermissionType.
104 ContentSetting GetContentSettingForConstantPermission(PermissionType type) { 103 ContentSetting GetContentSettingForConstantPermission(PermissionType type) {
105 DCHECK(IsConstantPermission(type)); 104 DCHECK(IsConstantPermission(type));
106 switch (type) { 105 switch (type) {
107 case PermissionType::MIDI: 106 case PermissionType::MIDI:
108 return CONTENT_SETTING_ALLOW; 107 return CONTENT_SETTING_ALLOW;
109 default: 108 default:
110 return CONTENT_SETTING_DEFAULT; 109 return CONTENT_SETTING_DEFAULT;
111 } 110 }
112 } 111 }
113 112
114 PermissionStatus GetPermissionStatusForConstantPermission(PermissionType type) { 113 permission::Status GetPermissionStatusForConstantPermission(
114 PermissionType type) {
115 return ContentSettingToPermissionStatus( 115 return ContentSettingToPermissionStatus(
116 GetContentSettingForConstantPermission(type)); 116 GetContentSettingForConstantPermission(type));
117 } 117 }
118 118
119 } // anonymous namespace 119 } // anonymous namespace
120 120
121 struct PermissionManager::PendingRequest { 121 struct PermissionManager::PendingRequest {
122 PendingRequest(PermissionType permission, 122 PendingRequest(PermissionType permission,
123 content::RenderFrameHost* render_frame_host) 123 content::RenderFrameHost* render_frame_host)
124 : permission(permission), 124 : permission(permission),
125 render_process_id(render_frame_host->GetProcess()->GetID()), 125 render_process_id(render_frame_host->GetProcess()->GetID()),
126 render_frame_id(render_frame_host->GetRoutingID()) { 126 render_frame_id(render_frame_host->GetRoutingID()) {
127 } 127 }
128 128
129 PermissionType permission; 129 PermissionType permission;
130 int render_process_id; 130 int render_process_id;
131 int render_frame_id; 131 int render_frame_id;
132 }; 132 };
133 133
134 struct PermissionManager::Subscription { 134 struct PermissionManager::Subscription {
135 PermissionType permission; 135 PermissionType permission;
136 GURL requesting_origin; 136 GURL requesting_origin;
137 GURL embedding_origin; 137 GURL embedding_origin;
138 base::Callback<void(PermissionStatus)> callback; 138 base::Callback<void(permission::Status)> callback;
139 ContentSetting current_value; 139 ContentSetting current_value;
140 }; 140 };
141 141
142 PermissionManager::PermissionManager(Profile* profile) 142 PermissionManager::PermissionManager(Profile* profile)
143 : profile_(profile), 143 : profile_(profile),
144 weak_ptr_factory_(this) { 144 weak_ptr_factory_(this) {
145 } 145 }
146 146
147 PermissionManager::~PermissionManager() { 147 PermissionManager::~PermissionManager() {
148 if (!subscriptions_.IsEmpty()) 148 if (!subscriptions_.IsEmpty())
149 HostContentSettingsMapFactory::GetForProfile(profile_) 149 HostContentSettingsMapFactory::GetForProfile(profile_)
150 ->RemoveObserver(this); 150 ->RemoveObserver(this);
151 } 151 }
152 152
153 int PermissionManager::RequestPermission( 153 int PermissionManager::RequestPermission(
154 PermissionType permission, 154 PermissionType permission,
155 content::RenderFrameHost* render_frame_host, 155 content::RenderFrameHost* render_frame_host,
156 const GURL& requesting_origin, 156 const GURL& requesting_origin,
157 bool user_gesture, 157 bool user_gesture,
158 const base::Callback<void(PermissionStatus)>& callback) { 158 const base::Callback<void(permission::Status)>& callback) {
159 if (IsConstantPermission(permission)) { 159 if (IsConstantPermission(permission)) {
160 callback.Run(GetPermissionStatusForConstantPermission(permission)); 160 callback.Run(GetPermissionStatusForConstantPermission(permission));
161 return kNoPendingOperation; 161 return kNoPendingOperation;
162 } 162 }
163 163
164 PermissionContextBase* context = PermissionContext::Get(profile_, permission); 164 PermissionContextBase* context = PermissionContext::Get(profile_, permission);
165 if (!context) { 165 if (!context) {
166 callback.Run(content::PERMISSION_STATUS_DENIED); 166 callback.Run(permission::STATUS_DENIED);
167 return kNoPendingOperation; 167 return kNoPendingOperation;
168 } 168 }
169 169
170 content::WebContents* web_contents = 170 content::WebContents* web_contents =
171 content::WebContents::FromRenderFrameHost(render_frame_host); 171 content::WebContents::FromRenderFrameHost(render_frame_host);
172 if (IsPermissionBubbleManagerMissing(web_contents)) { 172 if (IsPermissionBubbleManagerMissing(web_contents)) {
173 callback.Run( 173 callback.Run(
174 GetPermissionStatus(permission, requesting_origin, 174 GetPermissionStatus(permission, requesting_origin,
175 web_contents->GetLastCommittedURL().GetOrigin())); 175 web_contents->GetLastCommittedURL().GetOrigin()));
176 return kNoPendingOperation; 176 return kNoPendingOperation;
(...skipping 10 matching lines...) Expand all
187 web_contents, request, requesting_origin, user_gesture, 187 web_contents, request, requesting_origin, user_gesture,
188 base::Bind(&PermissionManager::OnPermissionRequestResponse, 188 base::Bind(&PermissionManager::OnPermissionRequestResponse,
189 weak_ptr_factory_.GetWeakPtr(), 189 weak_ptr_factory_.GetWeakPtr(),
190 request_id, 190 request_id,
191 callback)); 191 callback));
192 return request_id; 192 return request_id;
193 } 193 }
194 194
195 void PermissionManager::OnPermissionRequestResponse( 195 void PermissionManager::OnPermissionRequestResponse(
196 int request_id, 196 int request_id,
197 const base::Callback<void(PermissionStatus)>& callback, 197 const base::Callback<void(permission::Status)>& callback,
198 ContentSetting content_setting) { 198 ContentSetting content_setting) {
199 pending_requests_.Remove(request_id); 199 pending_requests_.Remove(request_id);
200 callback.Run(ContentSettingToPermissionStatus(content_setting)); 200 callback.Run(ContentSettingToPermissionStatus(content_setting));
201 } 201 }
202 202
203 void PermissionManager::CancelPermissionRequest(int request_id) { 203 void PermissionManager::CancelPermissionRequest(int request_id) {
204 PendingRequest* pending_request = pending_requests_.Lookup(request_id); 204 PendingRequest* pending_request = pending_requests_.Lookup(request_id);
205 if (!pending_request) 205 if (!pending_request)
206 return; 206 return;
207 207
(...skipping 21 matching lines...) Expand all
229 const GURL& requesting_origin, 229 const GURL& requesting_origin,
230 const GURL& embedding_origin) { 230 const GURL& embedding_origin) {
231 PermissionContextBase* context = PermissionContext::Get(profile_, permission); 231 PermissionContextBase* context = PermissionContext::Get(profile_, permission);
232 if (!context) 232 if (!context)
233 return; 233 return;
234 234
235 context->ResetPermission(requesting_origin.GetOrigin(), 235 context->ResetPermission(requesting_origin.GetOrigin(),
236 embedding_origin.GetOrigin()); 236 embedding_origin.GetOrigin());
237 } 237 }
238 238
239 PermissionStatus PermissionManager::GetPermissionStatus( 239 permission::Status PermissionManager::GetPermissionStatus(
240 PermissionType permission, 240 PermissionType permission,
241 const GURL& requesting_origin, 241 const GURL& requesting_origin,
242 const GURL& embedding_origin) { 242 const GURL& embedding_origin) {
243 if (IsConstantPermission(permission)) 243 if (IsConstantPermission(permission))
244 return GetPermissionStatusForConstantPermission(permission); 244 return GetPermissionStatusForConstantPermission(permission);
245 245
246 PermissionContextBase* context = PermissionContext::Get(profile_, permission); 246 PermissionContextBase* context = PermissionContext::Get(profile_, permission);
247 if (!context) 247 if (!context)
248 return content::PERMISSION_STATUS_DENIED; 248 return permission::STATUS_DENIED;
249 249
250 return ContentSettingToPermissionStatus(context->GetPermissionStatus( 250 return ContentSettingToPermissionStatus(context->GetPermissionStatus(
251 requesting_origin.GetOrigin(), embedding_origin.GetOrigin())); 251 requesting_origin.GetOrigin(), embedding_origin.GetOrigin()));
252 } 252 }
253 253
254 void PermissionManager::RegisterPermissionUsage(PermissionType permission, 254 void PermissionManager::RegisterPermissionUsage(PermissionType permission,
255 const GURL& requesting_origin, 255 const GURL& requesting_origin,
256 const GURL& embedding_origin) { 256 const GURL& embedding_origin) {
257 // This is required because constant permissions don't have a 257 // This is required because constant permissions don't have a
258 // ContentSettingsType. 258 // ContentSettingsType.
259 if (IsConstantPermission(permission)) 259 if (IsConstantPermission(permission))
260 return; 260 return;
261 261
262 HostContentSettingsMapFactory::GetForProfile(profile_)->UpdateLastUsage( 262 HostContentSettingsMapFactory::GetForProfile(profile_)->UpdateLastUsage(
263 requesting_origin, 263 requesting_origin,
264 embedding_origin, 264 embedding_origin,
265 PermissionTypeToContentSetting(permission)); 265 PermissionTypeToContentSetting(permission));
266 } 266 }
267 267
268 int PermissionManager::SubscribePermissionStatusChange( 268 int PermissionManager::SubscribePermissionStatusChange(
269 PermissionType permission, 269 PermissionType permission,
270 const GURL& requesting_origin, 270 const GURL& requesting_origin,
271 const GURL& embedding_origin, 271 const GURL& embedding_origin,
272 const base::Callback<void(PermissionStatus)>& callback) { 272 const base::Callback<void(permission::Status)>& callback) {
273 if (subscriptions_.IsEmpty()) 273 if (subscriptions_.IsEmpty())
274 HostContentSettingsMapFactory::GetForProfile(profile_)->AddObserver(this); 274 HostContentSettingsMapFactory::GetForProfile(profile_)->AddObserver(this);
275 275
276 Subscription* subscription = new Subscription(); 276 Subscription* subscription = new Subscription();
277 subscription->permission = permission; 277 subscription->permission = permission;
278 subscription->requesting_origin = requesting_origin; 278 subscription->requesting_origin = requesting_origin;
279 subscription->embedding_origin = embedding_origin; 279 subscription->embedding_origin = embedding_origin;
280 subscription->callback = callback; 280 subscription->callback = callback;
281 281
282 if (IsConstantPermission(permission)) { 282 if (IsConstantPermission(permission)) {
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
341 // Add the callback to |callbacks| which will be run after the loop to 341 // Add the callback to |callbacks| which will be run after the loop to
342 // prevent re-entrance issues. 342 // prevent re-entrance issues.
343 callbacks.push_back( 343 callbacks.push_back(
344 base::Bind(subscription->callback, 344 base::Bind(subscription->callback,
345 ContentSettingToPermissionStatus(new_value))); 345 ContentSettingToPermissionStatus(new_value)));
346 } 346 }
347 347
348 for (const auto& callback : callbacks) 348 for (const auto& callback : callbacks)
349 callback.Run(); 349 callback.Run();
350 } 350 }
OLDNEW
« no previous file with comments | « chrome/browser/permissions/permission_manager.h ('k') | chrome/browser/permissions/permission_manager_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698