15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string> 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 8868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/string16.h" 9868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/app/chrome_command_ids.h" 117dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/chrome_notification_types.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/tab_contents/render_view_context_menu.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/tab_contents/render_view_context_menu_browsertest_util.h" 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/tab_contents/render_view_context_menu_test_util.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser.h" 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/tabs/tab_strip_model.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/in_process_browser_test.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/ui_test_utils.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/navigation_controller.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/navigation_entry.h" 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_service.h" 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/render_view_host.h" 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_contents.h" 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_contents_view.h" 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/test/browser_test_utils.h" 267d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "third_party/WebKit/public/web/WebContextMenuData.h" 277d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "third_party/WebKit/public/web/WebInputEvent.h" 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::WebContents; 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ContextMenuBrowserTest : public InProcessBrowserTest { 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContextMenuBrowserTest() { } 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestRenderViewContextMenu* CreateContextMenu(GURL unfiltered_url, GURL url) { 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::ContextMenuParams params; 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params.media_type = WebKit::WebContextMenuData::MediaTypeNone; 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params.unfiltered_link_url = unfiltered_url; 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params.link_url = url; 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebContents* web_contents = 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents(); 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params.page_url = web_contents->GetController().GetActiveEntry()->GetURL(); 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_MACOSX) 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params.writing_direction_default = 0; 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params.writing_direction_left_to_right = 0; 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params.writing_direction_right_to_left = 0; 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // OS_MACOSX 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestRenderViewContextMenu* menu = new TestRenderViewContextMenu( 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents(), params); 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) menu->Init(); 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return menu; 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(ContextMenuBrowserTest, 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OpenEntryPresentForNormalURLs) { 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<TestRenderViewContextMenu> menu( 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateContextMenu(GURL("http://www.google.com/"), 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL("http://www.google.com/"))); 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu->IsItemPresent(IDC_CONTENT_CONTEXT_OPENLINKNEWTAB)); 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu->IsItemPresent(IDC_CONTENT_CONTEXT_OPENLINKNEWWINDOW)); 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu->IsItemPresent(IDC_CONTENT_CONTEXT_COPYLINKLOCATION)); 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(ContextMenuBrowserTest, 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OpenEntryAbsentForFilteredURLs) { 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<TestRenderViewContextMenu> menu( 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateContextMenu(GURL("chrome://history"), 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL())); 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(menu->IsItemPresent(IDC_CONTENT_CONTEXT_OPENLINKNEWTAB)); 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(menu->IsItemPresent(IDC_CONTENT_CONTEXT_OPENLINKNEWWINDOW)); 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu->IsItemPresent(IDC_CONTENT_CONTEXT_COPYLINKLOCATION)); 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// GTK requires a X11-level mouse event to open a context menu correctly. 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(TOOLKIT_GTK) 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define MAYBE_RealMenu DISABLED_RealMenu 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define MAYBE_RealMenu RealMenu 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Opens a link in a new tab via a "real" context menu. 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(ContextMenuBrowserTest, 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MAYBE_RealMenu) { 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContextMenuNotificationObserver menu_observer( 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDC_CONTENT_CONTEXT_OPENLINKNEWTAB); 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::WindowedTabAddedNotificationObserver tab_observer( 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::AllSources()); 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Go to a page with a link 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::NavigateToURL( 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser(), GURL("data:text/html,<a href='about:blank'>link</a>")); 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Open a context menu. 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebKit::WebMouseEvent mouse_event; 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mouse_event.type = WebKit::WebInputEvent::MouseDown; 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mouse_event.button = WebKit::WebMouseEvent::ButtonRight; 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mouse_event.x = 15; 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mouse_event.y = 15; 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect offset; 1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::WebContents* tab = 1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents(); 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tab->GetView()->GetContainerBounds(&offset); 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mouse_event.globalX = 15 + offset.x(); 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mouse_event.globalY = 15 + offset.y(); 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mouse_event.clickCount = 1; 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tab->GetRenderViewHost()->ForwardMouseEvent(mouse_event); 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mouse_event.type = WebKit::WebInputEvent::MouseUp; 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tab->GetRenderViewHost()->ForwardMouseEvent(mouse_event); 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The menu_observer will select "Open in new tab", wait for the new tab to 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // be added. 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tab_observer.Wait(); 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tab = tab_observer.GetTab(); 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::WaitForLoadStop(tab); 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify that it's the correct tab. 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GURL("about:blank"), tab->GetURL()); 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 124c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Verify that "Open Link in New Tab" doesn't send URL fragment as referrer. 125c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(ContextMenuBrowserTest, OpenInNewTabReferrer) { 126c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ui_test_utils::WindowedTabAddedNotificationObserver tab_observer( 127c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) content::NotificationService::AllSources()); 128c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 129c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(test_server()->Start()); 130c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GURL echoheader(test_server()->GetURL("echoheader?Referer")); 131c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 132c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Go to a |page| with a link to echoheader URL. 133c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GURL page("data:text/html,<a href='" + echoheader.spec() + "'>link</a>"); 134c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ui_test_utils::NavigateToURL(browser(), page); 135c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 136c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Set up referrer URL with fragment. 137c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const GURL kReferrerWithFragment("http://foo.com/test#fragment"); 138c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string kCorrectReferrer("http://foo.com/test"); 139c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 140c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Set up menu with link URL. 141c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) content::ContextMenuParams context_menu_params; 142c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) context_menu_params.page_url = kReferrerWithFragment; 143c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) context_menu_params.link_url = echoheader; 144c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 145c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Select "Open Link in New Tab" and wait for the new tab to be added. 146c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) TestRenderViewContextMenu menu( 147c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents(), 148c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) context_menu_params); 149c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) menu.Init(); 150c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) menu.ExecuteCommand(IDC_CONTENT_CONTEXT_OPENLINKNEWTAB, 0); 151c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 152c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) tab_observer.Wait(); 153c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) content::WebContents* tab = tab_observer.GetTab(); 154c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) content::WaitForLoadStop(tab); 155c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 156c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Verify that it's the correct tab. 157c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_EQ(echoheader, tab->GetURL()); 158c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Verify that the text on the page matches |kCorrectReferrer|. 159c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string actual_referrer; 160c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(content::ExecuteScriptAndExtractString( 161c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) tab, 162c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "window.domAutomationController.send(window.document.body.textContent);", 163c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) &actual_referrer)); 164c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_EQ(kCorrectReferrer, actual_referrer); 165c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 166c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Verify that the referrer on the page matches |kCorrectReferrer|. 167c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string page_referrer; 168c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(content::ExecuteScriptAndExtractString( 169c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) tab, 170c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "window.domAutomationController.send(window.document.referrer);", 171c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) &page_referrer)); 172c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_EQ(kCorrectReferrer, page_referrer); 173c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 174c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 175c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Verify that "Open Link in Incognito Window " doesn't send referrer URL. 176c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(ContextMenuBrowserTest, OpenIncognitoNoneReferrer) { 177c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ui_test_utils::WindowedTabAddedNotificationObserver tab_observer( 178c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) content::NotificationService::AllSources()); 179c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 180c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(test_server()->Start()); 181c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GURL echoheader(test_server()->GetURL("echoheader?Referer")); 182c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 183c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Go to a |page| with a link to echoheader URL. 184c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GURL page("data:text/html,<a href='" + echoheader.spec() + "'>link</a>"); 185c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ui_test_utils::NavigateToURL(browser(), page); 186c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 187c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Set up referrer URL with fragment. 188c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const GURL kReferrerWithFragment("http://foo.com/test#fragment"); 189c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string kNoneReferrer("None"); 190c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string kEmptyReferrer(""); 191c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 192c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Set up menu with link URL. 193c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) content::ContextMenuParams context_menu_params; 194c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) context_menu_params.page_url = kReferrerWithFragment; 195c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) context_menu_params.link_url = echoheader; 196c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 197c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Select "Open Link in Incognito Window" and wait for window to be added. 198c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) TestRenderViewContextMenu menu( 199c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents(), 200c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) context_menu_params); 201c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) menu.Init(); 202c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) menu.ExecuteCommand(IDC_CONTENT_CONTEXT_OPENLINKOFFTHERECORD, 0); 203c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 204c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) tab_observer.Wait(); 205c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) content::WebContents* tab = tab_observer.GetTab(); 206c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) content::WaitForLoadStop(tab); 207c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 208c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Verify that it's the correct tab. 209c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_EQ(echoheader, tab->GetURL()); 210c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Verify that the text on the page matches |kNoneReferrer|. 211c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string actual_referrer; 212c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(content::ExecuteScriptAndExtractString( 213c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) tab, 214c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "window.domAutomationController.send(window.document.body.textContent);", 215c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) &actual_referrer)); 216c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_EQ(kNoneReferrer, actual_referrer); 217c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 218c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Verify that the referrer on the page matches |kEmptyReferrer|. 219c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string page_referrer; 220c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(content::ExecuteScriptAndExtractString( 221c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) tab, 222c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "window.domAutomationController.send(window.document.referrer);", 223c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) &page_referrer)); 224c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_EQ(kEmptyReferrer, page_referrer); 225c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 226c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 228