| Index: content/browser/browser_plugin/browser_plugin_guest.cc
|
| diff --git a/content/browser/browser_plugin/browser_plugin_guest.cc b/content/browser/browser_plugin/browser_plugin_guest.cc
|
| index 7b6253d7dca9cef11a337d5cc38540580a944812..06c94ccc6a32503114185b00f57ced0ce4696ebc 100644
|
| --- a/content/browser/browser_plugin/browser_plugin_guest.cc
|
| +++ b/content/browser/browser_plugin/browser_plugin_guest.cc
|
| @@ -346,7 +346,7 @@ BrowserPluginGuest::BrowserPluginGuest(
|
| 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 @@ void BrowserPluginGuest::DestroyUnattachedWindows() {
|
| 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 @@ bool BrowserPluginGuest::OnMessageReceivedFromEmbedder(
|
| 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 @@ void BrowserPluginGuest::RequestNewWindowPermission(
|
| 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 @@ void BrowserPluginGuest::AskEmbedderForGeolocationPermission(
|
| 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 @@ int BrowserPluginGuest::RemoveBridgeID(int bridge_id) {
|
| 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 @@ bool BrowserPluginGuest::ShouldForwardToBrowserPluginGuest(
|
| 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 @@ void BrowserPluginGuest::OnLockMouse(bool user_gesture,
|
| 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 @@ void BrowserPluginGuest::OnSetVisibility(int instance_id, bool visible) {
|
| 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 @@ void BrowserPluginGuest::RequestMediaAccessPermission(
|
| 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 @@ void BrowserPluginGuest::RunJavaScriptDialog(
|
| 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 @@ void BrowserPluginGuest::DidRetrieveDownloadURLFromRequestId(
|
| 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);
|
| }
|
|
|