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

Unified Diff: chrome/browser/guest_view/web_view/web_view_permission_helper.cc

Issue 496873006: Move core web_view code to extensions. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Remove dependency of web_view_internal_api.h Created 6 years, 4 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/guest_view/web_view/web_view_permission_helper.cc
diff --git a/chrome/browser/guest_view/web_view/web_view_permission_helper.cc b/chrome/browser/guest_view/web_view/web_view_permission_helper.cc
deleted file mode 100644
index d3fc3a95e25ee14bf9516f5dc9b8104eaa6fed91..0000000000000000000000000000000000000000
--- a/chrome/browser/guest_view/web_view/web_view_permission_helper.cc
+++ /dev/null
@@ -1,348 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/browser/guest_view/web_view/web_view_permission_helper.h"
-
-#include "chrome/browser/guest_view/web_view/chrome_web_view_permission_helper_delegate.h"
-#include "chrome/browser/guest_view/web_view/web_view_constants.h"
-#include "chrome/browser/guest_view/web_view/web_view_guest.h"
-#include "chrome/browser/guest_view/web_view/web_view_permission_types.h"
-#include "content/public/browser/render_process_host.h"
-#include "content/public/browser/render_view_host.h"
-#include "content/public/browser/user_metrics.h"
-#include "extensions/browser/guest_view/web_view/web_view_permission_helper_delegate.h"
-
-using content::BrowserPluginGuestDelegate;
-using content::RenderViewHost;
-
-namespace extensions {
-
-namespace {
-static std::string PermissionTypeToString(WebViewPermissionType type) {
- switch (type) {
- case WEB_VIEW_PERMISSION_TYPE_DOWNLOAD:
- return webview::kPermissionTypeDownload;
- case WEB_VIEW_PERMISSION_TYPE_FILESYSTEM:
- return webview::kPermissionTypeFileSystem;
- case WEB_VIEW_PERMISSION_TYPE_GEOLOCATION:
- return webview::kPermissionTypeGeolocation;
- case WEB_VIEW_PERMISSION_TYPE_JAVASCRIPT_DIALOG:
- return webview::kPermissionTypeDialog;
- case WEB_VIEW_PERMISSION_TYPE_LOAD_PLUGIN:
- return webview::kPermissionTypeLoadPlugin;
- case WEB_VIEW_PERMISSION_TYPE_MEDIA:
- return webview::kPermissionTypeMedia;
- case WEB_VIEW_PERMISSION_TYPE_NEW_WINDOW:
- return webview::kPermissionTypeNewWindow;
- case WEB_VIEW_PERMISSION_TYPE_POINTER_LOCK:
- return webview::kPermissionTypePointerLock;
- default:
- NOTREACHED();
- return std::string();
- }
-}
-
-// static
-void RecordUserInitiatedUMA(
- const WebViewPermissionHelper::PermissionResponseInfo& info,
- bool allow) {
- if (allow) {
- // Note that |allow| == true means the embedder explicitly allowed the
- // request. For some requests they might still fail. An example of such
- // scenario would be: an embedder allows geolocation request but doesn't
- // have geolocation access on its own.
- switch (info.permission_type) {
- case WEB_VIEW_PERMISSION_TYPE_DOWNLOAD:
- content::RecordAction(
- UserMetricsAction("WebView.PermissionAllow.Download"));
- break;
- case WEB_VIEW_PERMISSION_TYPE_FILESYSTEM:
- content::RecordAction(
- UserMetricsAction("WebView.PermissionAllow.FileSystem"));
- break;
- case WEB_VIEW_PERMISSION_TYPE_GEOLOCATION:
- content::RecordAction(
- UserMetricsAction("WebView.PermissionAllow.Geolocation"));
- break;
- case WEB_VIEW_PERMISSION_TYPE_JAVASCRIPT_DIALOG:
- content::RecordAction(
- UserMetricsAction("WebView.PermissionAllow.JSDialog"));
- break;
- 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;
- case WEB_VIEW_PERMISSION_TYPE_NEW_WINDOW:
- content::RecordAction(
- UserMetricsAction("BrowserPlugin.PermissionAllow.NewWindow"));
- break;
- case WEB_VIEW_PERMISSION_TYPE_POINTER_LOCK:
- content::RecordAction(
- UserMetricsAction("WebView.PermissionAllow.PointerLock"));
- break;
- default:
- break;
- }
- } else {
- switch (info.permission_type) {
- case WEB_VIEW_PERMISSION_TYPE_DOWNLOAD:
- content::RecordAction(
- UserMetricsAction("WebView.PermissionDeny.Download"));
- break;
- case WEB_VIEW_PERMISSION_TYPE_FILESYSTEM:
- content::RecordAction(
- UserMetricsAction("WebView.PermissionDeny.FileSystem"));
- break;
- case WEB_VIEW_PERMISSION_TYPE_GEOLOCATION:
- content::RecordAction(
- UserMetricsAction("WebView.PermissionDeny.Geolocation"));
- break;
- case WEB_VIEW_PERMISSION_TYPE_JAVASCRIPT_DIALOG:
- content::RecordAction(
- UserMetricsAction("WebView.PermissionDeny.JSDialog"));
- break;
- case WEB_VIEW_PERMISSION_TYPE_LOAD_PLUGIN:
- content::RecordAction(
- UserMetricsAction("WebView.Guest.PermissionDeny.PluginLoad"));
- break;
- case WEB_VIEW_PERMISSION_TYPE_MEDIA:
- content::RecordAction(
- UserMetricsAction("WebView.PermissionDeny.Media"));
- break;
- case WEB_VIEW_PERMISSION_TYPE_NEW_WINDOW:
- content::RecordAction(
- UserMetricsAction("BrowserPlugin.PermissionDeny.NewWindow"));
- break;
- case WEB_VIEW_PERMISSION_TYPE_POINTER_LOCK:
- content::RecordAction(
- UserMetricsAction("WebView.PermissionDeny.PointerLock"));
- break;
- default:
- break;
- }
- }
-}
-
-} // namespace
-
-WebViewPermissionHelper::WebViewPermissionHelper(WebViewGuest* web_view_guest)
- : content::WebContentsObserver(web_view_guest->guest_web_contents()),
- next_permission_request_id_(guestview::kInstanceIDNone),
- web_view_guest_(web_view_guest),
- weak_factory_(this) {
- // TODO(hanxi) : Create the delegate through ExtensionsAPIClient after
- // moving WebViewPermissionHelper to extensions.
- web_view_permission_helper_delegate_.reset(
- new ChromeWebViewPermissionHelperDelegate(this));
-}
-
-WebViewPermissionHelper::~WebViewPermissionHelper() {
-}
-
-// static
-WebViewPermissionHelper* WebViewPermissionHelper::FromFrameID(
- int render_process_id,
- int render_frame_id) {
- WebViewGuest* web_view_guest = WebViewGuest::FromFrameID(
- render_process_id, render_frame_id);
- if (!web_view_guest) {
- return NULL;
- }
- return web_view_guest->web_view_permission_helper_.get();
-}
-
-// static
-WebViewPermissionHelper* WebViewPermissionHelper::FromWebContents(
- content::WebContents* web_contents) {
- WebViewGuest* web_view_guest = WebViewGuest::FromWebContents(web_contents);
- if (!web_view_guest)
- return NULL;
- return web_view_guest->web_view_permission_helper_.get();
-}
-
-#if defined(ENABLE_PLUGINS)
-bool WebViewPermissionHelper::OnMessageReceived(
- const IPC::Message& message,
- content::RenderFrameHost* render_frame_host) {
- return web_view_permission_helper_delegate_->OnMessageReceived(
- message, render_frame_host);
-}
-
-bool WebViewPermissionHelper::OnMessageReceived(const IPC::Message& message) {
- return web_view_permission_helper_delegate_->OnMessageReceived(message);
-}
-#endif // defined(ENABLE_PLUGINS)
-
-void WebViewPermissionHelper::RequestMediaAccessPermission(
- content::WebContents* source,
- const content::MediaStreamRequest& request,
- const content::MediaResponseCallback& callback) {
- web_view_permission_helper_delegate_-> RequestMediaAccessPermission(
- source, request, callback);
-}
-
-void WebViewPermissionHelper::CanDownload(
- content::RenderViewHost* render_view_host,
- const GURL& url,
- const std::string& request_method,
- const base::Callback<void(bool)>& callback) {
- web_view_permission_helper_delegate_->CanDownload(
- render_view_host, url, request_method, callback);
-}
-
-void WebViewPermissionHelper::RequestPointerLockPermission(
- bool user_gesture,
- bool last_unlocked_by_target,
- const base::Callback<void(bool)>& callback) {
- web_view_permission_helper_delegate_->RequestPointerLockPermission(
- user_gesture, last_unlocked_by_target, callback);
-}
-
-void WebViewPermissionHelper::RequestGeolocationPermission(
- int bridge_id,
- const GURL& requesting_frame,
- bool user_gesture,
- const base::Callback<void(bool)>& callback) {
- web_view_permission_helper_delegate_->RequestGeolocationPermission(
- bridge_id, requesting_frame, user_gesture, callback);
-}
-
-void WebViewPermissionHelper::CancelGeolocationPermissionRequest(
- int bridge_id) {
- web_view_permission_helper_delegate_->CancelGeolocationPermissionRequest(
- bridge_id);
-}
-
-void WebViewPermissionHelper::RequestFileSystemPermission(
- const GURL& url,
- bool allowed_by_default,
- const base::Callback<void(bool)>& callback) {
- web_view_permission_helper_delegate_->RequestFileSystemPermission(
- url, allowed_by_default, callback);
-}
-
-void WebViewPermissionHelper::FileSystemAccessedAsync(int render_process_id,
- int render_frame_id,
- int request_id,
- const GURL& url,
- bool blocked_by_policy) {
- web_view_permission_helper_delegate_->FileSystemAccessedAsync(
- render_process_id, render_frame_id, request_id, url, blocked_by_policy);
-}
-
-void WebViewPermissionHelper::FileSystemAccessedSync(int render_process_id,
- int render_frame_id,
- const GURL& url,
- bool blocked_by_policy,
- IPC::Message* reply_msg) {
- web_view_permission_helper_delegate_->FileSystemAccessedSync(
- render_process_id, render_frame_id, url, blocked_by_policy, reply_msg);
-}
-
-int WebViewPermissionHelper::RequestPermission(
- WebViewPermissionType permission_type,
- const base::DictionaryValue& request_info,
- const PermissionResponseCallback& callback,
- bool allowed_by_default) {
- // If there are too many pending permission requests then reject this request.
- if (pending_permission_requests_.size() >=
- webview::kMaxOutstandingPermissionRequests) {
- // Let the stack unwind before we deny the permission request so that
- // objects held by the permission request are not destroyed immediately
- // after creation. This is to allow those same objects to be accessed again
- // in the same scope without fear of use after freeing.
- base::MessageLoop::current()->PostTask(
- FROM_HERE,
- base::Bind(&PermissionResponseCallback::Run,
- base::Owned(new PermissionResponseCallback(callback)),
- allowed_by_default,
- std::string()));
- return webview::kInvalidPermissionRequestID;
- }
-
- int request_id = next_permission_request_id_++;
- pending_permission_requests_[request_id] =
- PermissionResponseInfo(callback, permission_type, allowed_by_default);
- scoped_ptr<base::DictionaryValue> args(request_info.DeepCopy());
- args->SetInteger(webview::kRequestId, request_id);
- switch (permission_type) {
- case WEB_VIEW_PERMISSION_TYPE_NEW_WINDOW: {
- web_view_guest_->DispatchEventToEmbedder(
- new GuestViewBase::Event(webview::kEventNewWindow, args.Pass()));
- break;
- }
- case WEB_VIEW_PERMISSION_TYPE_JAVASCRIPT_DIALOG: {
- web_view_guest_->DispatchEventToEmbedder(
- new GuestViewBase::Event(webview::kEventDialog, args.Pass()));
- break;
- }
- default: {
- args->SetString(webview::kPermission,
- PermissionTypeToString(permission_type));
- web_view_guest_->DispatchEventToEmbedder(new GuestViewBase::Event(
- webview::kEventPermissionRequest,
- args.Pass()));
- break;
- }
- }
- return request_id;
-}
-
-WebViewPermissionHelper::SetPermissionResult
-WebViewPermissionHelper::SetPermission(
- int request_id,
- PermissionResponseAction action,
- const std::string& user_input) {
- RequestMap::iterator request_itr =
- pending_permission_requests_.find(request_id);
-
- if (request_itr == pending_permission_requests_.end())
- return SET_PERMISSION_INVALID;
-
- const PermissionResponseInfo& info = request_itr->second;
- bool allow = (action == ALLOW) ||
- ((action == DEFAULT) && info.allowed_by_default);
-
- info.callback.Run(allow, user_input);
-
- // Only record user initiated (i.e. non-default) actions.
- if (action != DEFAULT)
- RecordUserInitiatedUMA(info, allow);
-
- pending_permission_requests_.erase(request_itr);
-
- return allow ? SET_PERMISSION_ALLOWED : SET_PERMISSION_DENIED;
-}
-
-void WebViewPermissionHelper::CancelPendingPermissionRequest(int request_id) {
- RequestMap::iterator request_itr =
- pending_permission_requests_.find(request_id);
-
- if (request_itr == pending_permission_requests_.end())
- return;
-
- pending_permission_requests_.erase(request_itr);
-}
-
-WebViewPermissionHelper::PermissionResponseInfo::PermissionResponseInfo()
- : permission_type(WEB_VIEW_PERMISSION_TYPE_UNKNOWN),
- allowed_by_default(false) {
-}
-
-WebViewPermissionHelper::PermissionResponseInfo::PermissionResponseInfo(
- const PermissionResponseCallback& callback,
- WebViewPermissionType permission_type,
- bool allowed_by_default)
- : callback(callback),
- permission_type(permission_type),
- allowed_by_default(allowed_by_default) {
-}
-
-WebViewPermissionHelper::PermissionResponseInfo::~PermissionResponseInfo() {
-}
-
-} // namespace extensions

Powered by Google App Engine
This is Rietveld 408576698