| OLD | NEW |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 |
| OLD | NEW |