summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorfsamuel@chromium.org <fsamuel@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-05-31 03:57:14 +0000
committerfsamuel@chromium.org <fsamuel@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-05-31 03:57:14 +0000
commitfeaa8cfb22d783a2285ed854f7526832734e5bae (patch)
tree9299792bcc15dc73d15d975561a1bf2e9700e758
parent9e8409936af40297c35b45232c6109edb83ad9dc (diff)
downloadchromium_src-feaa8cfb22d783a2285ed854f7526832734e5bae.zip
chromium_src-feaa8cfb22d783a2285ed854f7526832734e5bae.tar.gz
chromium_src-feaa8cfb22d783a2285ed854f7526832734e5bae.tar.bz2
GuestView: Move Disable Drag and Drop Out to Chrome
BUG=364141, 330264 TBR=jam@chromium.org for content/public/browser_plugin_guest_delegate code deletion. Review URL: https://codereview.chromium.org/301303003 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@274002 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/browser/guest_view/guest_view_base.cc18
-rw-r--r--chrome/browser/guest_view/guest_view_base.h11
-rw-r--r--chrome/browser/guest_view/web_view/web_view_guest.cc18
-rw-r--r--chrome/browser/guest_view/web_view/web_view_guest.h5
-rw-r--r--content/browser/browser_plugin/browser_plugin_guest.cc14
-rw-r--r--content/browser/browser_plugin/browser_plugin_guest.h1
-rw-r--r--content/content_browser.gypi1
-rw-r--r--content/public/browser/browser_plugin_guest_delegate.cc13
-rw-r--r--content/public/browser/browser_plugin_guest_delegate.h2
9 files changed, 40 insertions, 43 deletions
diff --git a/chrome/browser/guest_view/guest_view_base.cc b/chrome/browser/guest_view/guest_view_base.cc
index 0c0970a..5acf36a 100644
--- a/chrome/browser/guest_view/guest_view_base.cc
+++ b/chrome/browser/guest_view/guest_view_base.cc
@@ -5,13 +5,16 @@
#include "chrome/browser/guest_view/guest_view_base.h"
#include "base/lazy_instance.h"
+#include "base/strings/utf_string_conversions.h"
#include "chrome/browser/guest_view/ad_view/ad_view_guest.h"
#include "chrome/browser/guest_view/guest_view_constants.h"
#include "chrome/browser/guest_view/guest_view_manager.h"
#include "chrome/browser/guest_view/web_view/web_view_guest.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/common/content_settings.h"
+#include "content/public/browser/render_frame_host.h"
#include "content/public/browser/render_process_host.h"
+#include "content/public/browser/render_view_host.h"
#include "content/public/browser/web_contents.h"
#include "content/public/common/url_constants.h"
#include "extensions/browser/event_router.h"
@@ -177,6 +180,10 @@ base::WeakPtr<GuestViewBase> GuestViewBase::AsWeakPtr() {
return weak_ptr_factory_.GetWeakPtr();
}
+bool GuestViewBase::IsDragAndDropEnabled() const {
+ return false;
+}
+
void GuestViewBase::Attach(content::WebContents* embedder_web_contents,
const base::DictionaryValue& args) {
embedder_web_contents_ = embedder_web_contents;
@@ -223,6 +230,17 @@ void GuestViewBase::RegisterDestructionCallback(
destruction_callback_ = callback;
}
+void GuestViewBase::DidStopLoading(content::RenderViewHost* render_view_host) {
+ if (!IsDragAndDropEnabled()) {
+ const char script[] = "window.addEventListener('dragstart', function() { "
+ " window.event.preventDefault(); "
+ "});";
+ render_view_host->GetMainFrame()->ExecuteJavaScript(
+ base::ASCIIToUTF16(script));
+ }
+ DidStopLoading();
+}
+
void GuestViewBase::WebContentsDestroyed() {
delete this;
}
diff --git a/chrome/browser/guest_view/guest_view_base.h b/chrome/browser/guest_view/guest_view_base.h
index 2fd6acc..79f0b3f 100644
--- a/chrome/browser/guest_view/guest_view_base.h
+++ b/chrome/browser/guest_view/guest_view_base.h
@@ -76,11 +76,20 @@ class GuestViewBase : public content::BrowserPluginGuestDelegate,
virtual const char* GetViewType() const = 0;
+ // This method can be overriden by subclasses. This method is called when
+ // the initial set of frames within the page have completed loading.
+ virtual void DidStopLoading() {}
+
// This method can be overridden by subclasses. It indicates that this guest's
// embedder has been destroyed and the guest will be destroyed shortly. This
// method gives derived classes the opportunity to perform some cleanup.
virtual void EmbedderDestroyed() {}
+ // This method queries whether drag-and-drop is enabled for this particular
+ // view. By default, drag-and-drop is disabled. Derived classes can override
+ // this behavior to enable drag-and-drop.
+ virtual bool IsDragAndDropEnabled() const;
+
bool IsViewType(const char* const view_type) const {
return !strcmp(GetViewType(), view_type);
}
@@ -135,6 +144,8 @@ class GuestViewBase : public content::BrowserPluginGuestDelegate,
void SetOpener(GuestViewBase* opener);
// WebContentsObserver implementation.
+ virtual void DidStopLoading(
+ content::RenderViewHost* render_view_host) OVERRIDE FINAL;
virtual void WebContentsDestroyed() OVERRIDE;
// WebContentsDelegate implementation.
diff --git a/chrome/browser/guest_view/web_view/web_view_guest.cc b/chrome/browser/guest_view/web_view/web_view_guest.cc
index 2e0ace2..e78045b 100644
--- a/chrome/browser/guest_view/web_view/web_view_guest.cc
+++ b/chrome/browser/guest_view/web_view/web_view_guest.cc
@@ -335,6 +335,11 @@ void WebViewGuest::Attach(WebContents* embedder_web_contents,
AddWebViewToExtensionRendererState();
}
+void WebViewGuest::DidStopLoading() {
+ scoped_ptr<base::DictionaryValue> args(new base::DictionaryValue());
+ DispatchEvent(new GuestViewBase::Event(webview::kEventLoadStop, args.Pass()));
+}
+
void WebViewGuest::EmbedderDestroyed() {
// TODO(fsamuel): WebRequest event listeners for <webview> should survive
// reparenting of a <webview> within a single embedder. Right now, we keep
@@ -353,6 +358,10 @@ void WebViewGuest::EmbedderDestroyed() {
view_instance_id()));
}
+bool WebViewGuest::IsDragAndDropEnabled() const {
+ return true;
+}
+
bool WebViewGuest::AddMessageToConsole(WebContents* source,
int32 level,
const base::string16& message,
@@ -449,10 +458,6 @@ void WebViewGuest::HandleKeyboardEvent(
web_contents(), event);
}
-bool WebViewGuest::IsDragAndDropEnabled() {
- return true;
-}
-
void WebViewGuest::LoadProgressChanged(content::WebContents* source,
double progress) {
scoped_ptr<base::DictionaryValue> args(new base::DictionaryValue());
@@ -838,11 +843,6 @@ void WebViewGuest::DocumentLoadedInFrame(
InjectChromeVoxIfNeeded(render_view_host);
}
-void WebViewGuest::DidStopLoading(content::RenderViewHost* render_view_host) {
- scoped_ptr<base::DictionaryValue> args(new base::DictionaryValue());
- DispatchEvent(new GuestViewBase::Event(webview::kEventLoadStop, args.Pass()));
-}
-
bool WebViewGuest::OnMessageReceived(const IPC::Message& message,
RenderFrameHost* render_frame_host) {
bool handled = true;
diff --git a/chrome/browser/guest_view/web_view/web_view_guest.h b/chrome/browser/guest_view/web_view/web_view_guest.h
index 68fa307..87e26fe 100644
--- a/chrome/browser/guest_view/web_view/web_view_guest.h
+++ b/chrome/browser/guest_view/web_view/web_view_guest.h
@@ -69,7 +69,9 @@ class WebViewGuest : public GuestView<WebViewGuest>,
// GuestViewBase implementation.
virtual void Attach(content::WebContents* embedder_web_contents,
const base::DictionaryValue& args) OVERRIDE;
+ virtual void DidStopLoading() OVERRIDE;
virtual void EmbedderDestroyed() OVERRIDE;
+ virtual bool IsDragAndDropEnabled() const OVERRIDE;
// WebContentsDelegate implementation.
virtual bool AddMessageToConsole(content::WebContents* source,
@@ -127,7 +129,6 @@ class WebViewGuest : public GuestView<WebViewGuest>,
// BrowserPluginGuestDelegate implementation.
virtual void DidAttach() OVERRIDE;
- virtual bool IsDragAndDropEnabled() OVERRIDE;
virtual void SizeChanged(const gfx::Size& old_size, const gfx::Size& new_size)
OVERRIDE;
virtual void RequestPointerLockPermission(
@@ -294,8 +295,6 @@ class WebViewGuest : public GuestView<WebViewGuest>,
virtual void DocumentLoadedInFrame(
int64 frame_id,
content::RenderViewHost* render_view_host) OVERRIDE;
- virtual void DidStopLoading(
- content::RenderViewHost* render_view_host) OVERRIDE;
virtual bool OnMessageReceived(
const IPC::Message& message,
content::RenderFrameHost* render_frame_host) OVERRIDE;
diff --git a/content/browser/browser_plugin/browser_plugin_guest.cc b/content/browser/browser_plugin/browser_plugin_guest.cc
index 15c3dcf..d01bbd0 100644
--- a/content/browser/browser_plugin/browser_plugin_guest.cc
+++ b/content/browser/browser_plugin/browser_plugin_guest.cc
@@ -410,20 +410,6 @@ void BrowserPluginGuest::DidCommitProvisionalLoadForFrame(
RecordAction(base::UserMetricsAction("BrowserPlugin.Guest.DidNavigate"));
}
-void BrowserPluginGuest::DidStopLoading(RenderViewHost* render_view_host) {
- bool enable_dragdrop = delegate_ && delegate_->IsDragAndDropEnabled();
- if (!enable_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->GetMainFrame()->ExecuteJavaScript(
- base::ASCIIToUTF16(script));
- }
-}
-
void BrowserPluginGuest::RenderViewReady() {
RenderViewHost* rvh = GetWebContents()->GetRenderViewHost();
// TODO(fsamuel): Investigate whether it's possible to update state earlier
diff --git a/content/browser/browser_plugin/browser_plugin_guest.h b/content/browser/browser_plugin/browser_plugin_guest.h
index d72073c..f1c6fe0 100644
--- a/content/browser/browser_plugin/browser_plugin_guest.h
+++ b/content/browser/browser_plugin/browser_plugin_guest.h
@@ -154,7 +154,6 @@ class CONTENT_EXPORT BrowserPluginGuest : public WebContentsObserver {
const GURL& url,
PageTransition transition_type,
RenderViewHost* render_view_host) OVERRIDE;
- virtual void DidStopLoading(RenderViewHost* render_view_host) OVERRIDE;
virtual void RenderViewReady() OVERRIDE;
virtual void RenderProcessGone(base::TerminationStatus status) OVERRIDE;
diff --git a/content/content_browser.gypi b/content/content_browser.gypi
index 92c5e7d..5e703cf 100644
--- a/content/content_browser.gypi
+++ b/content/content_browser.gypi
@@ -69,7 +69,6 @@
'public/browser/browser_main_runner.h',
'public/browser/browser_message_filter.cc',
'public/browser/browser_message_filter.h',
- 'public/browser/browser_plugin_guest_delegate.cc',
'public/browser/browser_plugin_guest_delegate.h',
'public/browser/browser_plugin_guest_manager.cc',
'public/browser/browser_plugin_guest_manager.h',
diff --git a/content/public/browser/browser_plugin_guest_delegate.cc b/content/public/browser/browser_plugin_guest_delegate.cc
deleted file mode 100644
index 866b356..0000000
--- a/content/public/browser/browser_plugin_guest_delegate.cc
+++ /dev/null
@@ -1,13 +0,0 @@
-// Copyright 2013 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 "content/public/browser/browser_plugin_guest_delegate.h"
-
-namespace content {
-
-bool BrowserPluginGuestDelegate::IsDragAndDropEnabled() {
- return false;
-}
-
-} // namespace content
diff --git a/content/public/browser/browser_plugin_guest_delegate.h b/content/public/browser/browser_plugin_guest_delegate.h
index ed527b1..c6df728 100644
--- a/content/public/browser/browser_plugin_guest_delegate.h
+++ b/content/public/browser/browser_plugin_guest_delegate.h
@@ -26,8 +26,6 @@ class CONTENT_EXPORT BrowserPluginGuestDelegate {
// Notification that the embedder has completed attachment.
virtual void DidAttach() {}
- virtual bool IsDragAndDropEnabled();
-
// Notifies that the content size of the guest has changed in autosize mode.
virtual void SizeChanged(const gfx::Size& old_size,
const gfx::Size& new_size) {}