Chromium Code Reviews| 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..ae6bba16384ce5a0cf43c448d7c3c1b1def93e07 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, |
| + "setTimeout(\"var l = document.getElementById('link1');" |
|
lazyboy
2017/05/17 16:34:44
Is this setTimeout necessary? Add a comment explai
Wei Li
2017/05/18 23:25:28
Since wait() functions are added, I think this can
|
| + "l.click();\", 0)")); |
| + |
| + // Wait until the guest contents of the PDF plugin is created, |
| + // and then attached. |
| + WebContents* guest_contents = |
| + test_guest_view_manager_->WaitForSingleGuestCreated(); |
| + TestMimeHandlerViewGuest* guest = static_cast<TestMimeHandlerViewGuest*>( |
| + extensions::MimeHandlerViewGuest::FromWebContents(guest_contents)); |
| + ASSERT_TRUE(guest); |
| + 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,48 @@ 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); |
| + |
| + // Get the pdf plugin's WebContents and its main frame. |
| + WebContents* web_contents = |
| + browser()->tab_strip_model()->GetActiveWebContents(); |
| + 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); |
| + 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, |
| + EmbeddedPdfHasNoPageItems) { |
| + TestContextMenuOfPdfInsideWebPage(FILE_PATH_LITERAL("test-embed-pdf.html")); |
| +} |
| + |
| +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), |