| Index: chrome/browser/renderer_context_menu/render_view_context_menu_browsertest.cc
|
| diff --git a/chrome/browser/renderer_context_menu/render_view_context_menu_browsertest.cc b/chrome/browser/renderer_context_menu/render_view_context_menu_browsertest.cc
|
| index 2a06e4d955d28ee3f4ca856f0dd2f14683390f10..e65f6614c72cd26a16821fec61facf3df725ed2d 100644
|
| --- a/chrome/browser/renderer_context_menu/render_view_context_menu_browsertest.cc
|
| +++ b/chrome/browser/renderer_context_menu/render_view_context_menu_browsertest.cc
|
| @@ -24,6 +24,7 @@
|
| #include "chrome/app/chrome_command_ids.h"
|
| #include "chrome/browser/browser_process.h"
|
| #include "chrome/browser/chrome_notification_types.h"
|
| +#include "chrome/browser/pdf/pdf_extension_test_util.h"
|
| #include "chrome/browser/profiles/profile_attributes_entry.h"
|
| #include "chrome/browser/profiles/profile_attributes_storage.h"
|
| #include "chrome/browser/profiles/profile_window.h"
|
| @@ -34,13 +35,17 @@
|
| #include "chrome/browser/ui/tabs/tab_strip_model.h"
|
| #include "chrome/common/render_messages.h"
|
| #include "chrome/common/thumbnail_capturer.mojom.h"
|
| +#include "chrome/grit/generated_resources.h"
|
| #include "chrome/test/base/in_process_browser_test.h"
|
| #include "chrome/test/base/search_test_utils.h"
|
| #include "chrome/test/base/ui_test_utils.h"
|
| #include "components/data_reduction_proxy/core/common/data_reduction_proxy_switches.h"
|
| +#include "components/guest_view/browser/guest_view_manager_delegate.h"
|
| +#include "components/guest_view/browser/test_guest_view_manager.h"
|
| #include "components/search_engines/template_url_data.h"
|
| #include "components/search_engines/template_url_service.h"
|
| #include "content/public/browser/browser_message_filter.h"
|
| +#include "content/public/browser/browser_plugin_guest_manager.h"
|
| #include "content/public/browser/browser_thread.h"
|
| #include "content/public/browser/navigation_controller.h"
|
| #include "content/public/browser/navigation_entry.h"
|
| @@ -52,6 +57,9 @@
|
| #include "content/public/browser/web_contents.h"
|
| #include "content/public/test/browser_test_utils.h"
|
| #include "content/public/test/test_utils.h"
|
| +#include "extensions/browser/api/extensions_api_client.h"
|
| +#include "extensions/browser/guest_view/mime_handler_view/mime_handler_view_guest.h"
|
| +#include "extensions/browser/guest_view/mime_handler_view/test_mime_handler_view_guest.h"
|
| #include "net/base/load_flags.h"
|
| #include "net/test/embedded_test_server/embedded_test_server.h"
|
| #include "net/url_request/url_request.h"
|
| @@ -63,6 +71,8 @@
|
| #include "ui/base/models/menu_model.h"
|
|
|
| using content::WebContents;
|
| +using extensions::MimeHandlerViewGuest;
|
| +using extensions::TestMimeHandlerViewGuest;
|
|
|
| namespace {
|
|
|
| @@ -124,6 +134,75 @@ class ContextMenuBrowserTest : public InProcessBrowserTest {
|
| }
|
| };
|
|
|
| +class PdfPluginContextMenuBrowserTest : public InProcessBrowserTest {
|
| + public:
|
| + PdfPluginContextMenuBrowserTest() {}
|
| +
|
| + void SetUpOnMainThread() override {
|
| + guest_view::GuestViewManager::set_factory_for_testing(&factory_);
|
| + test_guest_view_manager_ = static_cast<guest_view::TestGuestViewManager*>(
|
| + guest_view::GuestViewManager::CreateWithDelegate(
|
| + browser()->profile(),
|
| + extensions::ExtensionsAPIClient::Get()
|
| + ->CreateGuestViewManagerDelegate(browser()->profile())));
|
| + }
|
| +
|
| + protected:
|
| + guest_view::TestGuestViewManager* test_guest_view_manager() const {
|
| + return test_guest_view_manager_;
|
| + }
|
| +
|
| + // Helper function for testing context menu of a pdf plugin inside a web page.
|
| + void TestContextMenuOfPdfInsideWebPage(
|
| + const base::FilePath::CharType* file_name) {
|
| + // Load a page with pdf file inside.
|
| + GURL page_url = ui_test_utils::GetTestUrl(
|
| + base::FilePath(FILE_PATH_LITERAL("pdf")), base::FilePath(file_name));
|
| + ui_test_utils::NavigateToURL(browser(), page_url);
|
| +
|
| + WebContents* web_contents =
|
| + browser()->tab_strip_model()->GetActiveWebContents();
|
| + // Prepare to load a pdf plugin inside.
|
| + test_guest_view_manager_->RegisterTestGuestViewType<MimeHandlerViewGuest>(
|
| + base::Bind(&TestMimeHandlerViewGuest::Create));
|
| + ASSERT_TRUE(
|
| + content::ExecuteScript(web_contents,
|
| + "var l = document.getElementById('link1');"
|
| + "l.click();"));
|
| +
|
| + // Wait for the guest contents of the PDF plugin is created.
|
| + WebContents* guest_contents =
|
| + test_guest_view_manager_->WaitForSingleGuestCreated();
|
| + TestMimeHandlerViewGuest* guest = static_cast<TestMimeHandlerViewGuest*>(
|
| + extensions::MimeHandlerViewGuest::FromWebContents(guest_contents));
|
| + ASSERT_TRUE(guest);
|
| + // Wait for the guest is attached to the embedder.
|
| + guest->WaitForGuestAttached();
|
| + ASSERT_NE(web_contents, guest_contents);
|
| + // Get the pdf plugin's main frame.
|
| + content::RenderFrameHost* frame = guest_contents->GetMainFrame();
|
| + ASSERT_TRUE(frame);
|
| +
|
| + content::ContextMenuParams params;
|
| + params.page_url = page_url;
|
| + params.frame_url = frame->GetLastCommittedURL();
|
| + params.frame_page_state =
|
| + content::PageState::CreateFromURL(params.frame_url);
|
| + params.media_type = blink::WebContextMenuData::kMediaTypePlugin;
|
| + TestRenderViewContextMenu menu(frame, params);
|
| + menu.Init();
|
| +
|
| + // The full page related items such as 'reload' should not be displayed.
|
| + ASSERT_FALSE(menu.IsItemPresent(IDC_RELOAD));
|
| + }
|
| +
|
| + private:
|
| + guest_view::TestGuestViewManagerFactory factory_;
|
| + guest_view::TestGuestViewManager* test_guest_view_manager_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(PdfPluginContextMenuBrowserTest);
|
| +};
|
| +
|
| IN_PROC_BROWSER_TEST_F(ContextMenuBrowserTest,
|
| OpenEntryPresentForNormalURLs) {
|
| std::unique_ptr<TestRenderViewContextMenu> menu =
|
| @@ -671,6 +750,44 @@ IN_PROC_BROWSER_TEST_F(SearchByImageBrowserTest, ImageSearchWithCorruptImage) {
|
| ASSERT_TRUE(response_received);
|
| }
|
|
|
| +IN_PROC_BROWSER_TEST_F(PdfPluginContextMenuBrowserTest,
|
| + FullPagePdfHasPageItems) {
|
| + // Load a pdf page.
|
| + GURL page_url =
|
| + ui_test_utils::GetTestUrl(base::FilePath(FILE_PATH_LITERAL("pdf")),
|
| + base::FilePath(FILE_PATH_LITERAL("test.pdf")));
|
| + ui_test_utils::NavigateToURL(browser(), page_url);
|
| +
|
| + WebContents* web_contents =
|
| + browser()->tab_strip_model()->GetActiveWebContents();
|
| + // Wait for the PDF plugin is loaded.
|
| + pdf_extension_test_util::EnsurePDFHasLoaded(web_contents);
|
| + content::BrowserPluginGuestManager* guest_manager =
|
| + web_contents->GetBrowserContext()->GetGuestManager();
|
| + WebContents* guest_contents = guest_manager->GetFullPageGuest(web_contents);
|
| + ASSERT_TRUE(guest_contents);
|
| + // Get the pdf plugin's main frame.
|
| + content::RenderFrameHost* frame = guest_contents->GetMainFrame();
|
| + ASSERT_TRUE(frame);
|
| + ASSERT_NE(frame, web_contents->GetMainFrame());
|
| +
|
| + content::ContextMenuParams params;
|
| + params.page_url = page_url;
|
| + params.frame_url = frame->GetLastCommittedURL();
|
| + params.frame_page_state = content::PageState::CreateFromURL(params.frame_url);
|
| + params.media_type = blink::WebContextMenuData::kMediaTypePlugin;
|
| + TestRenderViewContextMenu menu(frame, params);
|
| + menu.Init();
|
| +
|
| + // The full page related items such as 'reload' should be there.
|
| + ASSERT_TRUE(menu.IsItemPresent(IDC_RELOAD));
|
| +}
|
| +
|
| +IN_PROC_BROWSER_TEST_F(PdfPluginContextMenuBrowserTest,
|
| + IframedPdfHasNoPageItems) {
|
| + TestContextMenuOfPdfInsideWebPage(FILE_PATH_LITERAL("test-iframe-pdf.html"));
|
| +}
|
| +
|
| class LoadImageRequestInterceptor : public net::URLRequestInterceptor {
|
| public:
|
| LoadImageRequestInterceptor() : num_requests_(0),
|
|
|