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 |