Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(480)

Unified Diff: chrome/browser/guestview/webview/webview_guest.cc

Issue 235733002: <webview>: Move media request to chrome (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@move_geolocation_to_chrome
Patch Set: Fixed rebase Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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) {
« no previous file with comments | « chrome/browser/guestview/webview/webview_guest.h ('k') | chrome/browser/guestview/webview/webview_permission_types.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698