| 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 abd1d61068948ac77373f71725538b0c91b55891..a7ff1034401d65b064eebb641be700e57f0c217e 100644
|
| --- a/content/browser/browser_plugin/browser_plugin_guest.cc
|
| +++ b/content/browser/browser_plugin/browser_plugin_guest.cc
|
| @@ -6,6 +6,7 @@
|
|
|
| #include <algorithm>
|
|
|
| +#include "base/command_line.h"
|
| #include "base/message_loop.h"
|
| #include "base/string_util.h"
|
| #include "base/utf_string_conversions.h"
|
| @@ -37,6 +38,7 @@
|
| #include "content/public/browser/resource_request_details.h"
|
| #include "content/public/browser/user_metrics.h"
|
| #include "content/public/browser/web_contents_view.h"
|
| +#include "content/public/common/content_switches.h"
|
| #include "content/public/common/media_stream_request.h"
|
| #include "content/public/common/result_codes.h"
|
| #include "net/base/net_errors.h"
|
| @@ -607,6 +609,29 @@ void BrowserPluginGuest::SendMessageToEmbedder(IPC::Message* msg) {
|
| embedder_web_contents_->Send(msg);
|
| }
|
|
|
| +void BrowserPluginGuest::DragSourceEndedAt(int client_x, int client_y,
|
| + int screen_x, int screen_y, WebKit::WebDragOperation operation) {
|
| + web_contents()->GetRenderViewHost()->DragSourceEndedAt(client_x, client_y,
|
| + screen_x, screen_y, operation);
|
| +}
|
| +
|
| +void BrowserPluginGuest::DragSourceMovedTo(int client_x, int client_y,
|
| + int screen_x, int screen_y) {
|
| + web_contents()->GetRenderViewHost()->DragSourceMovedTo(client_x, client_y,
|
| + screen_x, screen_y);
|
| +}
|
| +
|
| +void BrowserPluginGuest::EndSystemDrag() {
|
| + RenderViewHostImpl* guest_rvh = static_cast<RenderViewHostImpl*>(
|
| + GetWebContents()->GetRenderViewHost());
|
| + guest_rvh->DragSourceSystemDragEnded();
|
| + // Issue a MouseUp event to get out of a selection state.
|
| + WebKit::WebMouseEvent mouse_event;
|
| + mouse_event.type = WebKit::WebInputEvent::MouseUp;
|
| + mouse_event.button = WebKit::WebMouseEvent::ButtonLeft;
|
| + guest_rvh->ForwardMouseEvent(mouse_event);
|
| +}
|
| +
|
| void BrowserPluginGuest::LoadRedirect(
|
| const GURL& old_url,
|
| const GURL& new_url,
|
| @@ -689,13 +714,22 @@ void BrowserPluginGuest::DidCommitProvisionalLoadForFrame(
|
| }
|
|
|
| void BrowserPluginGuest::DidStopLoading(RenderViewHost* render_view_host) {
|
| - // Initiating a drag from inside a guest is currently not supported. So inject
|
| - // some JS to disable it. http://crbug.com/161112
|
| - const char script[] = "window.addEventListener('dragstart', function() { "
|
| - " window.event.preventDefault(); "
|
| - "});";
|
| - render_view_host->ExecuteJavascriptInWebFrame(string16(),
|
| - ASCIIToUTF16(script));
|
| + bool disable_dragdrop = true;
|
| +#if defined(OS_LINUX) || defined(OS_MACOSX)
|
| + if (CommandLine::ForCurrentProcess()->HasSwitch(
|
| + switches::kEnableBrowserPluginDragDrop))
|
| + disable_dragdrop = false;
|
| +#endif // defined(OS_LINUX) || defined(OS_MACOSX)
|
| + if (disable_dragdrop) {
|
| + // Initiating a drag from inside a guest is currently not supported without
|
| + // the kEnableBrowserPluginDragDrop flag on a linux platform. So inject some
|
| + // JS to disable it. http://crbug.com/161112
|
| + const char script[] = "window.addEventListener('dragstart', function() { "
|
| + " window.event.preventDefault(); "
|
| + "});";
|
| + render_view_host->ExecuteJavascriptInWebFrame(string16(),
|
| + ASCIIToUTF16(script));
|
| + }
|
| SendMessageToEmbedder(new BrowserPluginMsg_LoadStop(instance_id()));
|
| }
|
|
|
| @@ -796,7 +830,6 @@ bool BrowserPluginGuest::OnMessageReceived(const IPC::Message& message) {
|
| IPC_MESSAGE_HANDLER(ViewHostMsg_ShowWidget, OnShowWidget)
|
| IPC_MESSAGE_HANDLER(ViewHostMsg_TakeFocus, OnTakeFocus)
|
| IPC_MESSAGE_HANDLER(ViewHostMsg_UnlockMouse, OnUnlockMouse)
|
| - IPC_MESSAGE_HANDLER(DragHostMsg_UpdateDragCursor, OnUpdateDragCursor)
|
| IPC_MESSAGE_HANDLER(ViewHostMsg_UpdateFrameName, OnUpdateFrameName)
|
| IPC_MESSAGE_HANDLER(ViewHostMsg_UpdateRect, OnUpdateRect)
|
| IPC_MESSAGE_UNHANDLED(handled = false)
|
| @@ -882,16 +915,20 @@ void BrowserPluginGuest::OnDragStatusUpdate(int instance_id,
|
| RenderViewHost* host = GetWebContents()->GetRenderViewHost();
|
| switch (drag_status) {
|
| case WebKit::WebDragStatusEnter:
|
| + embedder_web_contents_->GetBrowserPluginEmbedder()->DragEnteredGuest(
|
| + this);
|
| host->DragTargetDragEnter(drop_data, location, location, mask, 0);
|
| break;
|
| case WebKit::WebDragStatusOver:
|
| host->DragTargetDragOver(location, location, mask, 0);
|
| break;
|
| case WebKit::WebDragStatusLeave:
|
| + embedder_web_contents_->GetBrowserPluginEmbedder()->DragLeftGuest(this);
|
| host->DragTargetDragLeave();
|
| break;
|
| case WebKit::WebDragStatusDrop:
|
| host->DragTargetDrop(location, location, 0);
|
| + EndSystemDrag();
|
| break;
|
| case WebKit::WebDragStatusUnknown:
|
| NOTREACHED();
|
| @@ -1222,18 +1259,6 @@ void BrowserPluginGuest::OnTakeFocus(bool reverse) {
|
| new BrowserPluginMsg_AdvanceFocus(instance_id(), reverse));
|
| }
|
|
|
| -void BrowserPluginGuest::OnUpdateDragCursor(
|
| - WebKit::WebDragOperation operation) {
|
| - RenderViewHostImpl* embedder_render_view_host =
|
| - static_cast<RenderViewHostImpl*>(
|
| - embedder_web_contents_->GetRenderViewHost());
|
| - CHECK(embedder_render_view_host);
|
| - RenderViewHostDelegateView* view =
|
| - embedder_render_view_host->GetDelegate()->GetDelegateView();
|
| - if (view)
|
| - view->UpdateDragCursor(operation);
|
| -}
|
| -
|
| void BrowserPluginGuest::OnUpdateFrameName(int frame_id,
|
| bool is_top_level,
|
| const std::string& name) {
|
|
|