| 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 fc82fbbe3e9996565e6133f8617233d06cab346d..9aef09dfc5d520baa01534544d395f49ebf9689e 100644
|
| --- a/chrome/browser/guestview/webview/webview_guest.cc
|
| +++ b/chrome/browser/guestview/webview/webview_guest.cc
|
| @@ -32,6 +32,8 @@
|
| #include "content/public/browser/storage_partition.h"
|
| #include "content/public/browser/user_metrics.h"
|
| #include "content/public/browser/web_contents.h"
|
| +#include "content/public/browser/web_contents_delegate.h"
|
| +#include "content/public/common/media_stream_request.h"
|
| #include "content/public/common/page_zoom.h"
|
| #include "content/public/common/result_codes.h"
|
| #include "content/public/common/stop_find_action.h"
|
| @@ -77,8 +79,6 @@ static std::string PermissionTypeToString(BrowserPluginPermissionType type) {
|
| switch (type) {
|
| case BROWSER_PLUGIN_PERMISSION_TYPE_DOWNLOAD:
|
| return webview::kPermissionTypeDownload;
|
| - case BROWSER_PLUGIN_PERMISSION_TYPE_MEDIA:
|
| - return webview::kPermissionTypeMedia;
|
| case BROWSER_PLUGIN_PERMISSION_TYPE_NEW_WINDOW:
|
| return webview::kPermissionTypeNewWindow;
|
| case BROWSER_PLUGIN_PERMISSION_TYPE_POINTER_LOCK:
|
| @@ -95,6 +95,8 @@ static std::string PermissionTypeToString(BrowserPluginPermissionType type) {
|
| return webview::kPermissionTypeGeolocation;
|
| case WEB_VIEW_PERMISSION_TYPE_LOAD_PLUGIN:
|
| return webview::kPermissionTypeLoadPlugin;
|
| + case WEB_VIEW_PERMISSION_TYPE_MEDIA:
|
| + return webview::kPermissionTypeMedia;
|
| }
|
| NOTREACHED();
|
| }
|
| @@ -195,10 +197,6 @@ void WebViewGuest::RecordUserInitiatedUMA(const PermissionResponseInfo& info,
|
| content::RecordAction(
|
| UserMetricsAction("BrowserPlugin.PermissionAllow.Download"));
|
| break;
|
| - case BROWSER_PLUGIN_PERMISSION_TYPE_MEDIA:
|
| - content::RecordAction(
|
| - UserMetricsAction("BrowserPlugin.PermissionAllow.Media"));
|
| - break;
|
| case BROWSER_PLUGIN_PERMISSION_TYPE_POINTER_LOCK:
|
| content::RecordAction(
|
| UserMetricsAction("BrowserPlugin.PermissionAllow.PointerLock"));
|
| @@ -224,6 +222,9 @@ void WebViewGuest::RecordUserInitiatedUMA(const PermissionResponseInfo& info,
|
| case WEB_VIEW_PERMISSION_TYPE_LOAD_PLUGIN:
|
| content::RecordAction(
|
| UserMetricsAction("WebView.Guest.PermissionAllow.PluginLoad"));
|
| + case WEB_VIEW_PERMISSION_TYPE_MEDIA:
|
| + content::RecordAction(
|
| + UserMetricsAction("WebView.PermissionAllow.Media"));
|
| break;
|
| default:
|
| break;
|
| @@ -236,10 +237,6 @@ void WebViewGuest::RecordUserInitiatedUMA(const PermissionResponseInfo& info,
|
| content::RecordAction(
|
| UserMetricsAction("BrowserPlugin.PermissionDeny.Download"));
|
| break;
|
| - case BROWSER_PLUGIN_PERMISSION_TYPE_MEDIA:
|
| - content::RecordAction(
|
| - UserMetricsAction("BrowserPlugin.PermissionDeny.Media"));
|
| - break;
|
| case BROWSER_PLUGIN_PERMISSION_TYPE_POINTER_LOCK:
|
| content::RecordAction(
|
| UserMetricsAction("BrowserPlugin.PermissionDeny.PointerLock"));
|
| @@ -265,6 +262,9 @@ void WebViewGuest::RecordUserInitiatedUMA(const PermissionResponseInfo& info,
|
| case WEB_VIEW_PERMISSION_TYPE_LOAD_PLUGIN:
|
| content::RecordAction(
|
| UserMetricsAction("WebView.Guest.PermissionDeny.PluginLoad"));
|
| + case WEB_VIEW_PERMISSION_TYPE_MEDIA:
|
| + content::RecordAction(
|
| + UserMetricsAction("WebView.PermissionDeny.Media"));
|
| break;
|
| default:
|
| break;
|
| @@ -590,6 +590,25 @@ void WebViewGuest::CancelGeolocationPermissionRequest(int bridge_id) {
|
| pending_permission_requests_.erase(request_itr);
|
| }
|
|
|
| +void WebViewGuest::OnWebViewMediaPermissionResponse(
|
| + const content::MediaStreamRequest& request,
|
| + const content::MediaResponseCallback& callback,
|
| + bool allow,
|
| + const std::string& user_input) {
|
| + if (!allow || !attached()) {
|
| + // Deny the request.
|
| + callback.Run(content::MediaStreamDevices(),
|
| + content::MEDIA_DEVICE_INVALID_STATE,
|
| + scoped_ptr<content::MediaStreamUI>());
|
| + return;
|
| + }
|
| + if (!embedder_web_contents()->GetDelegate())
|
| + return;
|
| +
|
| + embedder_web_contents()->GetDelegate()->
|
| + RequestMediaAccessPermission(embedder_web_contents(), request, callback);
|
| +}
|
| +
|
| WebViewGuest::SetPermissionResult WebViewGuest::SetPermission(
|
| int request_id,
|
| PermissionResponseAction action,
|
| @@ -835,6 +854,23 @@ void WebViewGuest::SizeChanged(const gfx::Size& old_size,
|
| DispatchEvent(new GuestView::Event(webview::kEventSizeChanged, args.Pass()));
|
| }
|
|
|
| +void WebViewGuest::RequestMediaAccessPermission(
|
| + const content::MediaStreamRequest& request,
|
| + const content::MediaResponseCallback& callback) {
|
| + base::DictionaryValue request_info;
|
| + request_info.Set(
|
| + guestview::kUrl,
|
| + base::Value::CreateStringValue(request.security_origin.spec()));
|
| + RequestPermission(static_cast<BrowserPluginPermissionType>(
|
| + WEB_VIEW_PERMISSION_TYPE_MEDIA),
|
| + request_info,
|
| + base::Bind(&WebViewGuest::OnWebViewMediaPermissionResponse,
|
| + base::Unretained(this),
|
| + request,
|
| + callback),
|
| + false /* allowed_by_default */);
|
| +}
|
| +
|
| #if defined(OS_CHROMEOS)
|
| void WebViewGuest::OnAccessibilityStatusChanged(
|
| const chromeos::AccessibilityStatusEventDetails& details) {
|
|
|