| 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) {
|
|
|