diff options
author | lazyboy <lazyboy@chromium.org> | 2014-10-21 23:29:23 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2014-10-22 06:30:04 +0000 |
commit | b4adc139a023f5e77cabc715f46e3c4e0e432105 (patch) | |
tree | 0b5276096862ba8f1ebc5f185c5354cfdfe28ec3 | |
parent | f6495730cb973fb920701f04af53ee635bf44f38 (diff) | |
download | chromium_src-b4adc139a023f5e77cabc715f46e3c4e0e432105.zip chromium_src-b4adc139a023f5e77cabc715f46e3c4e0e432105.tar.gz chromium_src-b4adc139a023f5e77cabc715f46e3c4e0e432105.tar.bz2 |
Fix context menu positioning in MimeHandlerViewGuest.
BUG=422641
Test=Load chrome with the following flags:
--out-of-process-pdf, --enable-mime-handler-view
Load a PDF in a <webview>, e.g. use the webview-sample/browser app:
https://chrome.google.com/webstore/detail/edggnmnajhcbhlnpjnogkjpghaikidaa
and navigate to a PDF.
Right clicking the PDF should bring context menu to correct
position relative to the cursor.
Review URL: https://codereview.chromium.org/667273002
Cr-Commit-Position: refs/heads/master@{#300639}
8 files changed, 50 insertions, 0 deletions
diff --git a/chrome/browser/guest_view/mime_handler_view/chrome_mime_handler_view_guest_delegate.cc b/chrome/browser/guest_view/mime_handler_view/chrome_mime_handler_view_guest_delegate.cc index 0423d54..f4c32e1 100644 --- a/chrome/browser/guest_view/mime_handler_view/chrome_mime_handler_view_guest_delegate.cc +++ b/chrome/browser/guest_view/mime_handler_view/chrome_mime_handler_view_guest_delegate.cc @@ -5,8 +5,10 @@ #include "chrome/browser/guest_view/mime_handler_view/chrome_mime_handler_view_guest_delegate.h" #include "chrome/browser/chrome_page_zoom.h" +#include "chrome/browser/renderer_context_menu/render_view_context_menu.h" #include "chrome/browser/ui/pdf/chrome_pdf_web_contents_helper_client.h" #include "components/pdf/browser/pdf_web_contents_helper.h" +#include "components/renderer_context_menu/context_menu_delegate.h" #include "extensions/browser/guest_view/mime_handler_view/mime_handler_view_guest.h" #if defined(ENABLE_PRINTING) @@ -53,4 +55,17 @@ void ChromeMimeHandlerViewGuestDelegate::ChangeZoom(bool zoom_in) { zoom_in ? content::PAGE_ZOOM_IN : content::PAGE_ZOOM_OUT); } +bool ChromeMimeHandlerViewGuestDelegate::HandleContextMenu( + content::WebContents* web_contents, + const content::ContextMenuParams& params) { + ContextMenuDelegate* menu_delegate = + ContextMenuDelegate::FromWebContents(web_contents); + DCHECK(menu_delegate); + + scoped_ptr<RenderViewContextMenu> menu = + menu_delegate->BuildMenu(web_contents, params); + menu_delegate->ShowMenu(menu.Pass()); + return true; +} + } // namespace extensions diff --git a/chrome/browser/guest_view/mime_handler_view/chrome_mime_handler_view_guest_delegate.h b/chrome/browser/guest_view/mime_handler_view/chrome_mime_handler_view_guest_delegate.h index 5f38244..eaa88bf 100644 --- a/chrome/browser/guest_view/mime_handler_view/chrome_mime_handler_view_guest_delegate.h +++ b/chrome/browser/guest_view/mime_handler_view/chrome_mime_handler_view_guest_delegate.h @@ -9,6 +9,7 @@ namespace content { class WebContents; +struct ContextMenuParams; } // namespace content namespace extensions { @@ -20,6 +21,8 @@ class ChromeMimeHandlerViewGuestDelegate : public MimeHandlerViewGuestDelegate { // MimeHandlerViewGuestDelegate. void AttachHelpers() override; + bool HandleContextMenu(content::WebContents* web_contents, + const content::ContextMenuParams& params) override; void ChangeZoom(bool zoom_in) override; private: diff --git a/extensions/browser/BUILD.gn b/extensions/browser/BUILD.gn index 06ed416..036c7b8 100644 --- a/extensions/browser/BUILD.gn +++ b/extensions/browser/BUILD.gn @@ -370,6 +370,7 @@ source_set("browser") { "guest_view/mime_handler_view/mime_handler_view_constants.h", "guest_view/mime_handler_view/mime_handler_view_guest.h", "guest_view/mime_handler_view/mime_handler_view_guest.cc", + "guest_view/mime_handler_view/mime_handler_view_guest_delegate.cc", "guest_view/mime_handler_view/mime_handler_view_guest_delegate.h", "guest_view/web_view/javascript_dialog_helper.cc", "guest_view/web_view/javascript_dialog_helper.h", diff --git a/extensions/browser/guest_view/mime_handler_view/mime_handler_view_guest.cc b/extensions/browser/guest_view/mime_handler_view/mime_handler_view_guest.cc index ab25a52..9230f34c 100644 --- a/extensions/browser/guest_view/mime_handler_view/mime_handler_view_guest.cc +++ b/extensions/browser/guest_view/mime_handler_view/mime_handler_view_guest.cc @@ -147,6 +147,14 @@ void MimeHandlerViewGuest::ContentsZoomChange(bool zoom_in) { delegate_->ChangeZoom(zoom_in); } +bool MimeHandlerViewGuest::HandleContextMenu( + const content::ContextMenuParams& params) { + if (delegate_) + return delegate_->HandleContextMenu(web_contents(), params); + + return false; +} + void MimeHandlerViewGuest::HandleKeyboardEvent( WebContents* source, const content::NativeWebKeyboardEvent& event) { diff --git a/extensions/browser/guest_view/mime_handler_view/mime_handler_view_guest.h b/extensions/browser/guest_view/mime_handler_view/mime_handler_view_guest.h index d788cb5..f678d4e 100644 --- a/extensions/browser/guest_view/mime_handler_view/mime_handler_view_guest.h +++ b/extensions/browser/guest_view/mime_handler_view/mime_handler_view_guest.h @@ -10,6 +10,7 @@ namespace content { class WebContents; +struct ContextMenuParams; } // namespace content namespace extensions { @@ -47,6 +48,7 @@ class MimeHandlerViewGuest : public GuestView<MimeHandlerViewGuest>, // WebContentsDelegate implementation. void ContentsZoomChange(bool zoom_in) override; + bool HandleContextMenu(const content::ContextMenuParams& params) override; void HandleKeyboardEvent( content::WebContents* source, const content::NativeWebKeyboardEvent& event) override; diff --git a/extensions/browser/guest_view/mime_handler_view/mime_handler_view_guest_delegate.cc b/extensions/browser/guest_view/mime_handler_view/mime_handler_view_guest_delegate.cc new file mode 100644 index 0000000..63b81b8 --- /dev/null +++ b/extensions/browser/guest_view/mime_handler_view/mime_handler_view_guest_delegate.cc @@ -0,0 +1,15 @@ +// Copyright 2014 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 "extensions/browser/guest_view/mime_handler_view/mime_handler_view_guest_delegate.h" + +namespace extensions { + +bool MimeHandlerViewGuestDelegate::HandleContextMenu( + content::WebContents* web_contents, + const content::ContextMenuParams& params) { + return false; +} + +} // namespace extensions diff --git a/extensions/browser/guest_view/mime_handler_view/mime_handler_view_guest_delegate.h b/extensions/browser/guest_view/mime_handler_view/mime_handler_view_guest_delegate.h index 53e8cc7..b9a6fe3 100644 --- a/extensions/browser/guest_view/mime_handler_view/mime_handler_view_guest_delegate.h +++ b/extensions/browser/guest_view/mime_handler_view/mime_handler_view_guest_delegate.h @@ -9,6 +9,7 @@ namespace content { class WebContents; +struct ContextMenuParams; } // namespace content namespace extensions { @@ -24,6 +25,10 @@ class MimeHandlerViewGuestDelegate { // Attaches helpers upon initializing the WebContents. virtual void AttachHelpers() {} + // Handles context menu, or returns false if unhandled. + virtual bool HandleContextMenu(content::WebContents* web_contents, + const content::ContextMenuParams& params); + // Request to change the zoom level of the top level page containing // this view. virtual void ChangeZoom(bool zoom_in) {} diff --git a/extensions/extensions.gyp b/extensions/extensions.gyp index 0c9a8ac..6122641 100644 --- a/extensions/extensions.gyp +++ b/extensions/extensions.gyp @@ -668,6 +668,7 @@ 'browser/guest_view/guest_view.h', 'browser/guest_view/mime_handler_view/mime_handler_view_constants.cc', 'browser/guest_view/mime_handler_view/mime_handler_view_constants.h', + 'browser/guest_view/mime_handler_view/mime_handler_view_guest_delegate.cc', 'browser/guest_view/mime_handler_view/mime_handler_view_guest_delegate.h', 'browser/guest_view/mime_handler_view/mime_handler_view_guest.cc', 'browser/guest_view/mime_handler_view/mime_handler_view_guest.h', |