Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1432)

Unified Diff: chrome/browser/renderer_context_menu/render_view_context_menu_browsertest.cc

Issue 2862583010: [Reland 1] Save pdf file instead of web page through context menu for embedded pdf file (Closed)
Patch Set: remove flaky test Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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),
« no previous file with comments | « chrome/browser/renderer_context_menu/render_view_context_menu.cc ('k') | chrome/test/data/pdf/test-iframe-pdf.html » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698