diff options
author | fsamuel@chromium.org <fsamuel@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-05-31 03:57:14 +0000 |
---|---|---|
committer | fsamuel@chromium.org <fsamuel@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-05-31 03:57:14 +0000 |
commit | feaa8cfb22d783a2285ed854f7526832734e5bae (patch) | |
tree | 9299792bcc15dc73d15d975561a1bf2e9700e758 | |
parent | 9e8409936af40297c35b45232c6109edb83ad9dc (diff) | |
download | chromium_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.cc | 18 | ||||
-rw-r--r-- | chrome/browser/guest_view/guest_view_base.h | 11 | ||||
-rw-r--r-- | chrome/browser/guest_view/web_view/web_view_guest.cc | 18 | ||||
-rw-r--r-- | chrome/browser/guest_view/web_view/web_view_guest.h | 5 | ||||
-rw-r--r-- | content/browser/browser_plugin/browser_plugin_guest.cc | 14 | ||||
-rw-r--r-- | content/browser/browser_plugin/browser_plugin_guest.h | 1 | ||||
-rw-r--r-- | content/content_browser.gypi | 1 | ||||
-rw-r--r-- | content/public/browser/browser_plugin_guest_delegate.cc | 13 | ||||
-rw-r--r-- | content/public/browser/browser_plugin_guest_delegate.h | 2 |
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) {} |