<webview>: Refactor Permission API to chrome

BUG=166165
Test=WebViewTest.*, WebViewInteractiveTest.*
[email protected] for removing IPCs in browser_plugin_messages.h
NOTRY=true, previous patch worked, just merging.

Review URL: https://chromiumcodereview.appspot.com/21297005

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@217057 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/content/browser/browser_plugin/browser_plugin_guest.cc b/content/browser/browser_plugin/browser_plugin_guest.cc
index 7b6253d..06c94ccc 100644
--- a/content/browser/browser_plugin/browser_plugin_guest.cc
+++ b/content/browser/browser_plugin/browser_plugin_guest.cc
@@ -346,7 +346,7 @@
       mouse_locked_(false),
       pending_lock_request_(false),
       embedder_visible_(true),
-      next_permission_request_id_(0),
+      next_permission_request_id_(browser_plugin::kInvalidPermissionRequestID),
       has_render_view_(has_render_view) {
   DCHECK(web_contents);
   web_contents->SetDelegate(this);
@@ -383,15 +383,39 @@
   DCHECK_EQ(0ul, pending_new_windows_.size());
 }
 
+void BrowserPluginGuest::RespondToPermissionRequest(
+    int request_id,
+    bool should_allow,
+    const std::string& user_input) {
+  RequestMap::iterator request_itr = permission_request_map_.find(request_id);
+  if (request_itr == permission_request_map_.end()) {
+    LOG(INFO) << "Not a valid request ID.";
+    return;
+  }
+  request_itr->second->Respond(should_allow, user_input);
+  permission_request_map_.erase(request_itr);
+}
+
 int BrowserPluginGuest::RequestPermission(
     BrowserPluginPermissionType permission_type,
     scoped_refptr<BrowserPluginGuest::PermissionRequest> request,
     const base::DictionaryValue& request_info) {
-  int request_id = next_permission_request_id_++;
+  if (!delegate_) {
+    request->Respond(false, "");
+    return browser_plugin::kInvalidPermissionRequestID;
+  }
+
+  int request_id = ++next_permission_request_id_;
   permission_request_map_[request_id] = request;
 
-  SendMessageToEmbedder(new BrowserPluginMsg_RequestPermission(
-      instance_id(), permission_type, request_id, request_info));
+  BrowserPluginGuestDelegate::PermissionResponseCallback callback =
+      base::Bind(&BrowserPluginGuest::RespondToPermissionRequest,
+                  AsWeakPtr(),
+                  request_id);
+  // If BrowserPluginGuestDelegate hasn't handled the permission then we simply
+  // reject it immediately.
+  if (!delegate_->RequestPermission(permission_type, request_info, callback))
+    callback.Run(false, "");
 
   return request_id;
 }
@@ -422,8 +446,6 @@
     IPC_MESSAGE_HANDLER(BrowserPluginHostMsg_NavigateGuest, OnNavigateGuest)
     IPC_MESSAGE_HANDLER(BrowserPluginHostMsg_PluginDestroyed, OnPluginDestroyed)
     IPC_MESSAGE_HANDLER(BrowserPluginHostMsg_ResizeGuest, OnResizeGuest)
-    IPC_MESSAGE_HANDLER(BrowserPluginHostMsg_RespondPermission,
-                        OnRespondPermission)
     IPC_MESSAGE_HANDLER(BrowserPluginHostMsg_SetAutoSize, OnSetSize)
     IPC_MESSAGE_HANDLER(BrowserPluginHostMsg_SetEditCommandsForNextKeyEvent,
                         OnSetEditCommandsForNextKeyEvent)
@@ -809,7 +831,7 @@
                    base::Value::CreateStringValue(
                        WindowOpenDispositionToString(disposition)));
 
-  RequestPermission(BrowserPluginPermissionTypeNewWindow,
+  RequestPermission(BROWSER_PLUGIN_PERMISSION_TYPE_NEW_WINDOW,
                     new NewWindowRequest(guest->instance_id(), this),
                     request_info);
 }
@@ -880,7 +902,7 @@
                    base::Value::CreateStringValue(requesting_frame.spec()));
 
   int request_id =
-      RequestPermission(BrowserPluginPermissionTypeGeolocation,
+      RequestPermission(BROWSER_PLUGIN_PERMISSION_TYPE_GEOLOCATION,
                         new GeolocationRequest(
                             callback, bridge_id, &weak_ptr_factory_),
                         request_info);
@@ -894,7 +916,7 @@
   std::map<int, int>::iterator bridge_itr =
       bridge_id_to_request_id_map_.find(bridge_id);
   if (bridge_itr == bridge_id_to_request_id_map_.end())
-    return -1;
+    return browser_plugin::kInvalidPermissionRequestID;
 
   int request_id = bridge_itr->second;
   bridge_id_to_request_id_map_.erase(bridge_itr);
@@ -1016,7 +1038,6 @@
     case BrowserPluginHostMsg_NavigateGuest::ID:
     case BrowserPluginHostMsg_PluginDestroyed::ID:
     case BrowserPluginHostMsg_ResizeGuest::ID:
-    case BrowserPluginHostMsg_RespondPermission::ID:
     case BrowserPluginHostMsg_SetAutoSize::ID:
     case BrowserPluginHostMsg_SetEditCommandsForNextKeyEvent::ID:
     case BrowserPluginHostMsg_SetFocus::ID:
@@ -1240,7 +1261,7 @@
                    base::Value::CreateStringValue(
                        web_contents()->GetURL().spec()));
 
-  RequestPermission(BrowserPluginPermissionTypePointerLock,
+  RequestPermission(BROWSER_PLUGIN_PERMISSION_TYPE_POINTER_LOCK,
                     new PointerLockRequest(this),
                     request_info);
 }
@@ -1371,20 +1392,6 @@
     GetWebContents()->WasHidden();
 }
 
-void BrowserPluginGuest::OnRespondPermission(
-    int instance_id,
-    int request_id,
-    bool should_allow,
-    const std::string& user_input) {
-  RequestMap::iterator request_itr = permission_request_map_.find(request_id);
-  if (request_itr == permission_request_map_.end()) {
-    LOG(INFO) << "Not a valid request ID.";
-    return;
-  }
-  request_itr->second->Respond(should_allow, user_input);
-  permission_request_map_.erase(request_itr);
-}
-
 void BrowserPluginGuest::OnSwapBuffersACK(int instance_id,
                                           int route_id,
                                           int gpu_host_id,
@@ -1499,7 +1506,7 @@
       browser_plugin::kURL,
       base::Value::CreateStringValue(request.security_origin.spec()));
 
-  RequestPermission(BrowserPluginPermissionTypeMedia,
+  RequestPermission(BROWSER_PLUGIN_PERMISSION_TYPE_MEDIA,
                     new MediaRequest(request, callback, this),
                     request_info);
 }
@@ -1533,7 +1540,7 @@
       browser_plugin::kURL,
       base::Value::CreateStringValue(origin_url.spec()));
 
-  RequestPermission(BrowserPluginPermissionTypeJavaScriptDialog,
+  RequestPermission(BROWSER_PLUGIN_PERMISSION_TYPE_JAVASCRIPT_DIALOG,
                     new JavaScriptDialogRequest(callback),
                     request_info);
 }
@@ -1630,7 +1637,7 @@
                    base::Value::CreateStringValue(request_method));
   request_info.Set(browser_plugin::kURL, base::Value::CreateStringValue(url));
 
-  RequestPermission(BrowserPluginPermissionTypeDownload,
+  RequestPermission(BROWSER_PLUGIN_PERMISSION_TYPE_DOWNLOAD,
                     new DownloadRequest(callback),
                     request_info);
 }