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 9aef09dfc5d520baa01534544d395f49ebf9689e..68890745c6908df8d78c37d410431ed4740de220 100644 |
--- a/chrome/browser/guestview/webview/webview_guest.cc |
+++ b/chrome/browser/guestview/webview/webview_guest.cc |
@@ -77,8 +77,6 @@ static std::string TerminationStatusToString(base::TerminationStatus status) { |
static std::string PermissionTypeToString(BrowserPluginPermissionType type) { |
switch (type) { |
- case BROWSER_PLUGIN_PERMISSION_TYPE_DOWNLOAD: |
- return webview::kPermissionTypeDownload; |
case BROWSER_PLUGIN_PERMISSION_TYPE_NEW_WINDOW: |
return webview::kPermissionTypeNewWindow; |
case BROWSER_PLUGIN_PERMISSION_TYPE_POINTER_LOCK: |
@@ -91,6 +89,8 @@ static std::string PermissionTypeToString(BrowserPluginPermissionType type) { |
default: { |
WebViewPermissionType webview = static_cast<WebViewPermissionType>(type); |
switch (webview) { |
+ case WEB_VIEW_PERMISSION_TYPE_DOWNLOAD: |
+ return webview::kPermissionTypeDownload; |
case WEB_VIEW_PERMISSION_TYPE_GEOLOCATION: |
return webview::kPermissionTypeGeolocation; |
case WEB_VIEW_PERMISSION_TYPE_LOAD_PLUGIN: |
@@ -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_DOWNLOAD: |
- content::RecordAction( |
- UserMetricsAction("BrowserPlugin.PermissionAllow.Download")); |
- break; |
case BROWSER_PLUGIN_PERMISSION_TYPE_POINTER_LOCK: |
content::RecordAction( |
UserMetricsAction("BrowserPlugin.PermissionAllow.PointerLock")); |
@@ -226,6 +222,10 @@ void WebViewGuest::RecordUserInitiatedUMA(const PermissionResponseInfo& info, |
content::RecordAction( |
UserMetricsAction("WebView.PermissionAllow.Media")); |
break; |
+ case WEB_VIEW_PERMISSION_TYPE_DOWNLOAD: |
+ content::RecordAction( |
+ UserMetricsAction("WebView.PermissionAllow.Download")); |
+ break; |
default: |
break; |
} |
@@ -233,10 +233,6 @@ void WebViewGuest::RecordUserInitiatedUMA(const PermissionResponseInfo& info, |
} |
} else { |
switch (info.permission_type) { |
- case BROWSER_PLUGIN_PERMISSION_TYPE_DOWNLOAD: |
- content::RecordAction( |
- UserMetricsAction("BrowserPlugin.PermissionDeny.Download")); |
- break; |
case BROWSER_PLUGIN_PERMISSION_TYPE_POINTER_LOCK: |
content::RecordAction( |
UserMetricsAction("BrowserPlugin.PermissionDeny.PointerLock")); |
@@ -266,6 +262,10 @@ void WebViewGuest::RecordUserInitiatedUMA(const PermissionResponseInfo& info, |
content::RecordAction( |
UserMetricsAction("WebView.PermissionDeny.Media")); |
break; |
+ case WEB_VIEW_PERMISSION_TYPE_DOWNLOAD: |
+ content::RecordAction( |
+ UserMetricsAction("WebView.PermissionDeny.Download")); |
+ break; |
default: |
break; |
} |
@@ -609,6 +609,13 @@ void WebViewGuest::OnWebViewMediaPermissionResponse( |
RequestMediaAccessPermission(embedder_web_contents(), request, callback); |
} |
+void WebViewGuest::OnWebViewDownloadPermissionResponse( |
+ 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, |
@@ -871,6 +878,24 @@ void WebViewGuest::RequestMediaAccessPermission( |
false /* allowed_by_default */); |
} |
+void WebViewGuest::CanDownload( |
+ const std::string& request_method, |
+ const GURL& url, |
+ const base::Callback<void(bool)>& callback) { |
+ base::DictionaryValue request_info; |
+ request_info.Set( |
+ guestview::kUrl, |
+ base::Value::CreateStringValue(url.spec())); |
+ RequestPermission( |
+ static_cast<BrowserPluginPermissionType>( |
+ WEB_VIEW_PERMISSION_TYPE_DOWNLOAD), |
+ request_info, |
+ base::Bind(&WebViewGuest::OnWebViewDownloadPermissionResponse, |
+ base::Unretained(this), |
+ callback), |
+ false /* allowed_by_default */); |
+} |
+ |
#if defined(OS_CHROMEOS) |
void WebViewGuest::OnAccessibilityStatusChanged( |
const chromeos::AccessibilityStatusEventDetails& details) { |