Index: chrome/browser/guestview/webview/webview_guest.cc |
diff --git a/chrome/browser/guestview/webview/webview_guest.cc b/chrome/browser/guestview/webview/webview_guest.cc |
index 68890745c6908df8d78c37d410431ed4740de220..07865adc1be9be34226b0431d9ad6053fa7a3feb 100644 |
--- a/chrome/browser/guestview/webview/webview_guest.cc |
+++ b/chrome/browser/guestview/webview/webview_guest.cc |
@@ -79,8 +79,6 @@ static std::string PermissionTypeToString(BrowserPluginPermissionType type) { |
switch (type) { |
case BROWSER_PLUGIN_PERMISSION_TYPE_NEW_WINDOW: |
return webview::kPermissionTypeNewWindow; |
- case BROWSER_PLUGIN_PERMISSION_TYPE_POINTER_LOCK: |
- return webview::kPermissionTypePointerLock; |
case BROWSER_PLUGIN_PERMISSION_TYPE_JAVASCRIPT_DIALOG: |
return webview::kPermissionTypeDialog; |
case BROWSER_PLUGIN_PERMISSION_TYPE_UNKNOWN: |
@@ -97,6 +95,8 @@ static std::string PermissionTypeToString(BrowserPluginPermissionType type) { |
return webview::kPermissionTypeLoadPlugin; |
case WEB_VIEW_PERMISSION_TYPE_MEDIA: |
return webview::kPermissionTypeMedia; |
+ case WEB_VIEW_PERMISSION_TYPE_POINTER_LOCK: |
+ return webview::kPermissionTypePointerLock; |
} |
NOTREACHED(); |
} |
@@ -193,10 +193,6 @@ void WebViewGuest::RecordUserInitiatedUMA(const PermissionResponseInfo& info, |
// scenario would be: an embedder allows geolocation request but doesn't |
// have geolocation access on its own. |
switch (info.permission_type) { |
- case BROWSER_PLUGIN_PERMISSION_TYPE_POINTER_LOCK: |
- content::RecordAction( |
- UserMetricsAction("BrowserPlugin.PermissionAllow.PointerLock")); |
- break; |
case BROWSER_PLUGIN_PERMISSION_TYPE_NEW_WINDOW: |
content::RecordAction( |
UserMetricsAction("BrowserPlugin.PermissionAllow.NewWindow")); |
@@ -211,6 +207,10 @@ void WebViewGuest::RecordUserInitiatedUMA(const PermissionResponseInfo& info, |
WebViewPermissionType webview_permission_type = |
static_cast<WebViewPermissionType>(info.permission_type); |
switch (webview_permission_type) { |
+ case WEB_VIEW_PERMISSION_TYPE_DOWNLOAD: |
+ content::RecordAction( |
+ UserMetricsAction("WebView.PermissionAllow.Download")); |
+ break; |
case WEB_VIEW_PERMISSION_TYPE_GEOLOCATION: |
content::RecordAction( |
UserMetricsAction("WebView.PermissionAllow.Geolocation")); |
@@ -222,9 +222,9 @@ void WebViewGuest::RecordUserInitiatedUMA(const PermissionResponseInfo& info, |
content::RecordAction( |
UserMetricsAction("WebView.PermissionAllow.Media")); |
break; |
- case WEB_VIEW_PERMISSION_TYPE_DOWNLOAD: |
+ case WEB_VIEW_PERMISSION_TYPE_POINTER_LOCK: |
content::RecordAction( |
- UserMetricsAction("WebView.PermissionAllow.Download")); |
+ UserMetricsAction("WebView.PermissionAllow.PointerLock")); |
break; |
default: |
break; |
@@ -233,10 +233,6 @@ void WebViewGuest::RecordUserInitiatedUMA(const PermissionResponseInfo& info, |
} |
} else { |
switch (info.permission_type) { |
- case BROWSER_PLUGIN_PERMISSION_TYPE_POINTER_LOCK: |
- content::RecordAction( |
- UserMetricsAction("BrowserPlugin.PermissionDeny.PointerLock")); |
- break; |
case BROWSER_PLUGIN_PERMISSION_TYPE_NEW_WINDOW: |
content::RecordAction( |
UserMetricsAction("BrowserPlugin.PermissionDeny.NewWindow")); |
@@ -251,6 +247,10 @@ void WebViewGuest::RecordUserInitiatedUMA(const PermissionResponseInfo& info, |
WebViewPermissionType webview_permission_type = |
static_cast<WebViewPermissionType>(info.permission_type); |
switch (webview_permission_type) { |
+ case WEB_VIEW_PERMISSION_TYPE_DOWNLOAD: |
+ content::RecordAction( |
+ UserMetricsAction("WebView.PermissionDeny.Download")); |
+ break; |
case WEB_VIEW_PERMISSION_TYPE_GEOLOCATION: |
content::RecordAction( |
UserMetricsAction("WebView.PermissionDeny.Geolocation")); |
@@ -262,9 +262,9 @@ void WebViewGuest::RecordUserInitiatedUMA(const PermissionResponseInfo& info, |
content::RecordAction( |
UserMetricsAction("WebView.PermissionDeny.Media")); |
break; |
- case WEB_VIEW_PERMISSION_TYPE_DOWNLOAD: |
+ case WEB_VIEW_PERMISSION_TYPE_POINTER_LOCK: |
content::RecordAction( |
- UserMetricsAction("WebView.PermissionDeny.Download")); |
+ UserMetricsAction("WebView.PermissionDeny.PointerLock")); |
break; |
default: |
break; |
@@ -616,6 +616,13 @@ void WebViewGuest::OnWebViewDownloadPermissionResponse( |
callback.Run(allow && attached()); |
} |
+void WebViewGuest::OnWebViewPointerLockPermissionResponse( |
+ const base::Callback<void(bool)>& callback, |
+ bool allow, |
+ const std::string& user_input) { |
+ callback.Run(allow && attached()); |
+} |
+ |
WebViewGuest::SetPermissionResult WebViewGuest::SetPermission( |
int request_id, |
PermissionResponseAction action, |
@@ -896,6 +903,29 @@ void WebViewGuest::CanDownload( |
false /* allowed_by_default */); |
} |
+void WebViewGuest::RequestPointerLockPermission( |
+ bool user_gesture, |
+ bool last_unlocked_by_target, |
+ const base::Callback<void(bool)>& callback) { |
+ base::DictionaryValue request_info; |
+ request_info.Set(guestview::kUserGesture, |
+ base::Value::CreateBooleanValue(user_gesture)); |
+ request_info.Set(webview::kLastUnlockedBySelf, |
+ base::Value::CreateBooleanValue(last_unlocked_by_target)); |
+ request_info.Set(guestview::kUrl, |
+ base::Value::CreateStringValue( |
+ guest_web_contents()->GetLastCommittedURL().spec())); |
+ |
+ RequestPermission( |
+ static_cast<BrowserPluginPermissionType>( |
+ WEB_VIEW_PERMISSION_TYPE_POINTER_LOCK), |
+ request_info, |
+ base::Bind(&WebViewGuest::OnWebViewPointerLockPermissionResponse, |
+ base::Unretained(this), |
+ callback), |
+ false /* allowed_by_default */); |
+} |
+ |
#if defined(OS_CHROMEOS) |
void WebViewGuest::OnAccessibilityStatusChanged( |
const chromeos::AccessibilityStatusEventDetails& details) { |