From b4adc139a023f5e77cabc715f46e3c4e0e432105 Mon Sep 17 00:00:00 2001 From: lazyboy Date: Tue, 21 Oct 2014 23:29:23 -0700 Subject: 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 , 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} --- .../chrome_mime_handler_view_guest_delegate.cc | 15 +++++++++++++++ .../chrome_mime_handler_view_guest_delegate.h | 3 +++ extensions/browser/BUILD.gn | 1 + .../mime_handler_view/mime_handler_view_guest.cc | 8 ++++++++ .../mime_handler_view/mime_handler_view_guest.h | 2 ++ .../mime_handler_view/mime_handler_view_guest_delegate.cc | 15 +++++++++++++++ .../mime_handler_view/mime_handler_view_guest_delegate.h | 5 +++++ extensions/extensions.gyp | 1 + 8 files changed, 50 insertions(+) create mode 100644 extensions/browser/guest_view/mime_handler_view/mime_handler_view_guest_delegate.cc 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 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, // 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', -- cgit v1.1