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

Side by Side Diff: chrome/browser/guest_view/web_view/chrome_web_view_permission_helper_delegate.cc

Issue 2110343002: Reintroduce plumbing for user gesture into permission system. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Nits 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
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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/guest_view/web_view/chrome_web_view_permission_helper_d elegate.h" 5 #include "chrome/browser/guest_view/web_view/chrome_web_view_permission_helper_d elegate.h"
6 6
7 #include "chrome/browser/content_settings/tab_specific_content_settings.h" 7 #include "chrome/browser/content_settings/tab_specific_content_settings.h"
8 #include "chrome/browser/permissions/permission_manager.h" 8 #include "chrome/browser/permissions/permission_manager.h"
9 #include "chrome/browser/permissions/permission_request_id.h" 9 #include "chrome/browser/permissions/permission_request_id.h"
10 #include "chrome/browser/plugins/chrome_plugin_service_filter.h" 10 #include "chrome/browser/plugins/chrome_plugin_service_filter.h"
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after
168 void ChromeWebViewPermissionHelperDelegate::OnPointerLockPermissionResponse( 168 void ChromeWebViewPermissionHelperDelegate::OnPointerLockPermissionResponse(
169 const base::Callback<void(bool)>& callback, 169 const base::Callback<void(bool)>& callback,
170 bool allow, 170 bool allow,
171 const std::string& user_input) { 171 const std::string& user_input) {
172 callback.Run(allow && web_view_guest()->attached()); 172 callback.Run(allow && web_view_guest()->attached());
173 } 173 }
174 174
175 void ChromeWebViewPermissionHelperDelegate::RequestGeolocationPermission( 175 void ChromeWebViewPermissionHelperDelegate::RequestGeolocationPermission(
176 int bridge_id, 176 int bridge_id,
177 const GURL& requesting_frame, 177 const GURL& requesting_frame,
178 bool user_gesture,
178 const base::Callback<void(bool)>& callback) { 179 const base::Callback<void(bool)>& callback) {
179 base::DictionaryValue request_info; 180 base::DictionaryValue request_info;
180 request_info.SetString(guest_view::kUrl, requesting_frame.spec()); 181 request_info.SetString(guest_view::kUrl, requesting_frame.spec());
182 request_info.SetBoolean(guest_view::kUserGesture, user_gesture);
181 183
182 // It is safe to hold an unretained pointer to 184 // It is safe to hold an unretained pointer to
183 // ChromeWebViewPermissionHelperDelegate because this callback is called from 185 // ChromeWebViewPermissionHelperDelegate because this callback is called from
184 // ChromeWebViewPermissionHelperDelegate::SetPermission. 186 // ChromeWebViewPermissionHelperDelegate::SetPermission.
185 const WebViewPermissionHelper::PermissionResponseCallback 187 const WebViewPermissionHelper::PermissionResponseCallback
186 permission_callback = base::Bind(&ChromeWebViewPermissionHelperDelegate:: 188 permission_callback =
187 OnGeolocationPermissionResponse, 189 base::Bind(&ChromeWebViewPermissionHelperDelegate::
188 weak_factory_.GetWeakPtr(), bridge_id, 190 OnGeolocationPermissionResponse,
189 base::Bind(&CallbackWrapper, callback)); 191 weak_factory_.GetWeakPtr(), bridge_id, user_gesture,
192 base::Bind(&CallbackWrapper, callback));
190 int request_id = web_view_permission_helper()->RequestPermission( 193 int request_id = web_view_permission_helper()->RequestPermission(
191 WEB_VIEW_PERMISSION_TYPE_GEOLOCATION, 194 WEB_VIEW_PERMISSION_TYPE_GEOLOCATION,
192 request_info, 195 request_info,
193 permission_callback, 196 permission_callback,
194 false /* allowed_by_default */); 197 false /* allowed_by_default */);
195 bridge_id_to_request_id_map_[bridge_id] = request_id; 198 bridge_id_to_request_id_map_[bridge_id] = request_id;
196 } 199 }
197 200
198 void ChromeWebViewPermissionHelperDelegate::OnGeolocationPermissionResponse( 201 void ChromeWebViewPermissionHelperDelegate::OnGeolocationPermissionResponse(
199 int bridge_id, 202 int bridge_id,
203 bool user_gesture,
200 const base::Callback<void(blink::mojom::PermissionStatus)>& callback, 204 const base::Callback<void(blink::mojom::PermissionStatus)>& callback,
201 bool allow, 205 bool allow,
202 const std::string& user_input) { 206 const std::string& user_input) {
203 // The <webview> embedder has allowed the permission. We now need to make sure 207 // The <webview> embedder has allowed the permission. We now need to make sure
204 // that the embedder has geolocation permission. 208 // that the embedder has geolocation permission.
205 RemoveBridgeID(bridge_id); 209 RemoveBridgeID(bridge_id);
206 210
207 if (!allow || !web_view_guest()->attached()) { 211 if (!allow || !web_view_guest()->attached()) {
208 callback.Run(blink::mojom::PermissionStatus::DENIED); 212 callback.Run(blink::mojom::PermissionStatus::DENIED);
209 return; 213 return;
(...skipping 14 matching lines...) Expand all
224 -1); 228 -1);
225 229
226 Profile* profile = Profile::FromBrowserContext( 230 Profile* profile = Profile::FromBrowserContext(
227 web_view_guest()->browser_context()); 231 web_view_guest()->browser_context());
228 PermissionManager::Get(profile)->RequestPermission( 232 PermissionManager::Get(profile)->RequestPermission(
229 content::PermissionType::GEOLOCATION, web_contents->GetMainFrame(), 233 content::PermissionType::GEOLOCATION, web_contents->GetMainFrame(),
230 web_view_guest() 234 web_view_guest()
231 ->embedder_web_contents() 235 ->embedder_web_contents()
232 ->GetLastCommittedURL() 236 ->GetLastCommittedURL()
233 .GetOrigin(), 237 .GetOrigin(),
238 user_gesture,
234 callback); 239 callback);
235 } 240 }
236 241
237 void ChromeWebViewPermissionHelperDelegate::CancelGeolocationPermissionRequest( 242 void ChromeWebViewPermissionHelperDelegate::CancelGeolocationPermissionRequest(
238 int bridge_id) { 243 int bridge_id) {
239 int request_id = RemoveBridgeID(bridge_id); 244 int request_id = RemoveBridgeID(bridge_id);
240 web_view_permission_helper()->CancelPendingPermissionRequest(request_id); 245 web_view_permission_helper()->CancelPendingPermissionRequest(request_id);
241 } 246 }
242 247
243 int ChromeWebViewPermissionHelperDelegate::RemoveBridgeID(int bridge_id) { 248 int ChromeWebViewPermissionHelperDelegate::RemoveBridgeID(int bridge_id) {
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
329 IPC::Message* reply_msg, 334 IPC::Message* reply_msg,
330 bool allowed) { 335 bool allowed) {
331 TabSpecificContentSettings::FileSystemAccessed( 336 TabSpecificContentSettings::FileSystemAccessed(
332 render_process_id, render_frame_id, url, !allowed); 337 render_process_id, render_frame_id, url, !allowed);
333 ChromeViewHostMsg_RequestFileSystemAccessSync::WriteReplyParams(reply_msg, 338 ChromeViewHostMsg_RequestFileSystemAccessSync::WriteReplyParams(reply_msg,
334 allowed); 339 allowed);
335 Send(reply_msg); 340 Send(reply_msg);
336 } 341 }
337 342
338 } // namespace extensions 343 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698