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 "base/bind.h" 65d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/prefs/pref_service.h" 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/strings/string_number_conversions.h" 8868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/app/chrome_command_ids.h" 107dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/chrome_notification_types.h" 11a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "chrome/browser/renderer_context_menu/render_view_context_menu.h" 12a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "chrome/browser/renderer_context_menu/render_view_context_menu_browsertest_util.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser_commands.h" 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/tabs/tab_strip_model.h" 165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/common/pref_names.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/in_process_browser_test.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/ui_test_utils.h" 195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "content/public/browser/navigation_controller.h" 205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (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/test/browser_test_utils.h" 25b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)#include "net/test/spawned_test_server/spawned_test_server.h" 267d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "third_party/WebKit/public/web/WebInputEvent.h" 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const base::FilePath::CharType kDocRoot[] = 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FILE_PATH_LITERAL("chrome/test/data/referrer_policy"); 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ReferrerPolicyTest : public InProcessBrowserTest { 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 37f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ReferrerPolicyTest() {} 38f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual ~ReferrerPolicyTest() {} 39f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 40f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual void SetUp() OVERRIDE { 41f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) test_server_.reset(new net::SpawnedTestServer( 42f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) net::SpawnedTestServer::TYPE_HTTP, 43f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) net::SpawnedTestServer::kLocalhost, 44f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::FilePath(kDocRoot))); 45f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ASSERT_TRUE(test_server_->Start()); 46f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ssl_test_server_.reset(new net::SpawnedTestServer( 47f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) net::SpawnedTestServer::TYPE_HTTPS, 48f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) net::SpawnedTestServer::kLocalhost, 49f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::FilePath(kDocRoot))); 50f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ASSERT_TRUE(ssl_test_server_->Start()); 51f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 52f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) InProcessBrowserTest::SetUp(); 53f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enum ExpectedReferrer { 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EMPTY_REFERRER, 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FULL_REFERRER, 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_ORIGIN_AS_REFERRER 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the expected title for the tab with the given (full) referrer and 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the expected modification of it. 64a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 GetExpectedTitle(const GURL& url, 655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ExpectedReferrer expected_referrer) { 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string referrer; 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (expected_referrer) { 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case EXPECT_EMPTY_REFERRER: 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) referrer = "Referrer is empty"; 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case EXPECT_FULL_REFERRER: 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) referrer = "Referrer is " + url.spec(); 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case EXPECT_ORIGIN_AS_REFERRER: 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) referrer = "Referrer is " + url.GetWithEmptyPath().spec(); 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return base::ASCIIToUTF16(referrer); 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Adds all possible titles to the TitleWatcher, so we don't time out 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // waiting for the title if the test fails. 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void AddAllPossibleTitles(const GURL& url, 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::TitleWatcher* title_watcher) { 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) title_watcher->AlsoWaitForTitle( 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetExpectedTitle(url, EXPECT_EMPTY_REFERRER)); 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) title_watcher->AlsoWaitForTitle( 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetExpectedTitle(url, EXPECT_FULL_REFERRER)); 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) title_watcher->AlsoWaitForTitle( 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetExpectedTitle(url, EXPECT_ORIGIN_AS_REFERRER)); 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Returns a string representation of a given |referrer_policy|. 945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::string ReferrerPolicyToString(blink::WebReferrerPolicy referrer_policy) { 955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) switch (referrer_policy) { 965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) case blink::WebReferrerPolicyDefault: 975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return "default"; 985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) case blink::WebReferrerPolicyOrigin: 995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return "origin"; 1005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) case blink::WebReferrerPolicyAlways: 1015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return "always"; 1025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) case blink::WebReferrerPolicyNever: 1035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return "never"; 1045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) default: 1055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NOTREACHED(); 1065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return ""; 1075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 1085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 1095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) enum StartOnProtocol { START_ON_HTTP, START_ON_HTTPS, }; 1115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) enum LinkType { REGULAR_LINK, LINK_WITH_TARGET_BLANK, }; 1135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) enum RedirectType { NO_REDIRECT, SERVER_REDIRECT, SERVER_REDIRECT_ON_HTTP, }; 1155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::string RedirectTypeToString(RedirectType redirect) { 1175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) switch (redirect) { 1185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) case NO_REDIRECT: 1195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return "none"; 1205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) case SERVER_REDIRECT: 1215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return "https"; 1225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) case SERVER_REDIRECT_ON_HTTP: 1235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return "http"; 1245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 1255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NOTREACHED(); 1265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return ""; 1275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 1285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Navigates from a page with a given |referrer_policy| and checks that the 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // reported referrer matches the expectation. 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Parameters: 1325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // referrer_policy: The referrer policy to test. 1335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // start_protocol: The protocol the test should start on. 1345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // link_type: The link type that is used to trigger the navigation. 1355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // redirect: Whether the link target should redirect and how. 1365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // disposition: The disposition for the navigation. 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // button: If not WebMouseEvent::ButtonNone, click on the 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // link with the specified mouse button. 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // expected_referrer: The kind of referrer to expect. 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns: 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The URL of the first page navigated to. 1435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GURL RunReferrerTest(const blink::WebReferrerPolicy referrer_policy, 1445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) StartOnProtocol start_protocol, 1455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) LinkType link_type, 1465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) RedirectType redirect, 1475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) WindowOpenDisposition disposition, 148f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebMouseEvent::Button button, 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectedReferrer expected_referrer) { 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL start_url; 1515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) net::SpawnedTestServer* start_server = start_protocol == START_ON_HTTPS 1525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ? ssl_test_server_.get() 1535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) : test_server_.get(); 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) start_url = start_server->GetURL( 1555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::string("files/referrer-policy-start.html?") + "policy=" + 1565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ReferrerPolicyToString(referrer_policy) + "&port=" + 1575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::IntToString(test_server_->host_port_pair().port()) + 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "&ssl_port=" + 1595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::IntToString(ssl_test_server_->host_port_pair().port()) + 1605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) "&redirect=" + RedirectTypeToString(redirect) + "&link=" + 1615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) (button == blink::WebMouseEvent::ButtonNone ? "false" : "true") + 1625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "&target=" + (link_type == LINK_WITH_TARGET_BLANK ? "_blank" : "")); 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::WindowedTabAddedNotificationObserver tab_added_observer( 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::AllSources()); 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 167a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 expected_title = 168a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) GetExpectedTitle(start_url, expected_referrer); 1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::WebContents* tab = 1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents(); 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::TitleWatcher title_watcher(tab, expected_title); 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Watch for all possible outcomes to avoid timeouts if something breaks. 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddAllPossibleTitles(start_url, &title_watcher); 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::NavigateToURL(browser(), start_url); 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 178f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (button != blink::WebMouseEvent::ButtonNone) { 179f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebMouseEvent mouse_event; 180f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) mouse_event.type = blink::WebInputEvent::MouseDown; 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mouse_event.button = button; 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mouse_event.x = 15; 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mouse_event.y = 15; 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mouse_event.clickCount = 1; 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tab->GetRenderViewHost()->ForwardMouseEvent(mouse_event); 186f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) mouse_event.type = blink::WebInputEvent::MouseUp; 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tab->GetRenderViewHost()->ForwardMouseEvent(mouse_event); 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (disposition == CURRENT_TAB) { 1915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(expected_title, title_watcher.WaitAndGetTitle()); 1925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } else { 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tab_added_observer.Wait(); 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tab = tab_added_observer.GetTab(); 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(tab); 1960529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch content::TitleWatcher title_watcher2(tab, expected_title); 1970529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 1980529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // Watch for all possible outcomes to avoid timeouts if something breaks. 1990529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch AddAllPossibleTitles(start_url, &title_watcher2); 2000529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 2010529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch EXPECT_EQ(expected_title, title_watcher2.WaitAndGetTitle()); 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(referrer_policy, 2055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) tab->GetController().GetActiveEntry()->GetReferrer().policy); 2065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return start_url; 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 210c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_ptr<net::SpawnedTestServer> test_server_; 211c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_ptr<net::SpawnedTestServer> ssl_test_server_; 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The basic behavior of referrer policies is covered by layout tests in 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// http/tests/security/referrer-policy-*. These tests cover (hopefully) all 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// code paths chrome uses to navigate. To keep the number of combinations down, 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// we only test the "origin" policy here. 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Some tests are marked as FAILS, see http://crbug.com/124750 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Content initiated navigation, from HTTP to HTTP. 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(ReferrerPolicyTest, Origin) { 2235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) RunReferrerTest(blink::WebReferrerPolicyOrigin, 2245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) START_ON_HTTP, 2255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) REGULAR_LINK, 2265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NO_REDIRECT, 2275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CURRENT_TAB, 228f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebMouseEvent::ButtonNone, 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_ORIGIN_AS_REFERRER); 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Content initiated navigation, from HTTPS to HTTP. 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(ReferrerPolicyTest, HttpsDefault) { 2345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) RunReferrerTest(blink::WebReferrerPolicyOrigin, 2355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) START_ON_HTTPS, 2365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) REGULAR_LINK, 2375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NO_REDIRECT, 2385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CURRENT_TAB, 239f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebMouseEvent::ButtonNone, 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_ORIGIN_AS_REFERRER); 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// User initiated navigation, from HTTP to HTTP. 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(ReferrerPolicyTest, LeftClickOrigin) { 2455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) RunReferrerTest(blink::WebReferrerPolicyOrigin, 2465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) START_ON_HTTP, 2475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) REGULAR_LINK, 2485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NO_REDIRECT, 2495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CURRENT_TAB, 250f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebMouseEvent::ButtonLeft, 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_ORIGIN_AS_REFERRER); 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// User initiated navigation, from HTTPS to HTTP. 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(ReferrerPolicyTest, HttpsLeftClickOrigin) { 2565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) RunReferrerTest(blink::WebReferrerPolicyOrigin, 2575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) START_ON_HTTPS, 2585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) REGULAR_LINK, 2595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NO_REDIRECT, 2605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CURRENT_TAB, 261f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebMouseEvent::ButtonLeft, 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_ORIGIN_AS_REFERRER); 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// User initiated navigation, middle click, from HTTP to HTTP. 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(ReferrerPolicyTest, MiddleClickOrigin) { 2675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) RunReferrerTest(blink::WebReferrerPolicyOrigin, 2685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) START_ON_HTTP, 2695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) REGULAR_LINK, 2705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NO_REDIRECT, 2715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NEW_BACKGROUND_TAB, 272f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebMouseEvent::ButtonMiddle, 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_ORIGIN_AS_REFERRER); 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// User initiated navigation, middle click, from HTTPS to HTTP. 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(ReferrerPolicyTest, HttpsMiddleClickOrigin) { 2785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) RunReferrerTest(blink::WebReferrerPolicyOrigin, 2795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) START_ON_HTTPS, 2805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) REGULAR_LINK, 2815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NO_REDIRECT, 2825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NEW_BACKGROUND_TAB, 283f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebMouseEvent::ButtonMiddle, 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_ORIGIN_AS_REFERRER); 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// User initiated navigation, target blank, from HTTP to HTTP. 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(ReferrerPolicyTest, TargetBlankOrigin) { 2895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) RunReferrerTest(blink::WebReferrerPolicyOrigin, 2905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) START_ON_HTTP, 2915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) LINK_WITH_TARGET_BLANK, 2925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NO_REDIRECT, 2935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NEW_FOREGROUND_TAB, 294f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebMouseEvent::ButtonLeft, 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_ORIGIN_AS_REFERRER); 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// User initiated navigation, target blank, from HTTPS to HTTP. 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(ReferrerPolicyTest, HttpsTargetBlankOrigin) { 3005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) RunReferrerTest(blink::WebReferrerPolicyOrigin, 3015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) START_ON_HTTPS, 3025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) LINK_WITH_TARGET_BLANK, 3035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NO_REDIRECT, 3045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NEW_FOREGROUND_TAB, 305f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebMouseEvent::ButtonLeft, 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_ORIGIN_AS_REFERRER); 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// User initiated navigation, middle click, target blank, from HTTP to HTTP. 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(ReferrerPolicyTest, MiddleClickTargetBlankOrigin) { 3115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) RunReferrerTest(blink::WebReferrerPolicyOrigin, 3125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) START_ON_HTTP, 3135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) LINK_WITH_TARGET_BLANK, 3145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NO_REDIRECT, 3155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NEW_FOREGROUND_TAB, 316f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebMouseEvent::ButtonMiddle, 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_ORIGIN_AS_REFERRER); 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// User initiated navigation, middle click, target blank, from HTTPS to HTTP. 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(ReferrerPolicyTest, HttpsMiddleClickTargetBlankOrigin) { 3225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) RunReferrerTest(blink::WebReferrerPolicyOrigin, 3235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) START_ON_HTTPS, 3245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) LINK_WITH_TARGET_BLANK, 3255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NO_REDIRECT, 3265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NEW_FOREGROUND_TAB, 327f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebMouseEvent::ButtonMiddle, 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_ORIGIN_AS_REFERRER); 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Context menu, from HTTP to HTTP. 332f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(ReferrerPolicyTest, ContextMenuOrigin) { 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContextMenuNotificationObserver context_menu_observer( 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDC_CONTENT_CONTEXT_OPENLINKNEWTAB); 3355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) RunReferrerTest(blink::WebReferrerPolicyOrigin, 3365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) START_ON_HTTP, 3375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) REGULAR_LINK, 3385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NO_REDIRECT, 3395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NEW_FOREGROUND_TAB, 340f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebMouseEvent::ButtonRight, 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_ORIGIN_AS_REFERRER); 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Context menu, from HTTPS to HTTP. 345f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(ReferrerPolicyTest, HttpsContextMenuOrigin) { 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContextMenuNotificationObserver context_menu_observer( 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDC_CONTENT_CONTEXT_OPENLINKNEWTAB); 3485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) RunReferrerTest(blink::WebReferrerPolicyOrigin, 3495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) START_ON_HTTPS, 3505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) REGULAR_LINK, 3515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NO_REDIRECT, 3525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NEW_FOREGROUND_TAB, 353f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebMouseEvent::ButtonRight, 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_ORIGIN_AS_REFERRER); 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Content initiated navigation, from HTTP to HTTP via server redirect. 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(ReferrerPolicyTest, Redirect) { 3595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) RunReferrerTest(blink::WebReferrerPolicyOrigin, 3605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) START_ON_HTTP, 3615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) REGULAR_LINK, 3625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) SERVER_REDIRECT, 3635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CURRENT_TAB, 364f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebMouseEvent::ButtonNone, 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_ORIGIN_AS_REFERRER); 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Content initiated navigation, from HTTPS to HTTP via server redirect. 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(ReferrerPolicyTest, HttpsRedirect) { 3705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) RunReferrerTest(blink::WebReferrerPolicyOrigin, 3715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) START_ON_HTTPS, 3725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) REGULAR_LINK, 3735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) SERVER_REDIRECT, 3745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CURRENT_TAB, 375f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebMouseEvent::ButtonNone, 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_ORIGIN_AS_REFERRER); 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// User initiated navigation, from HTTP to HTTP via server redirect. 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(ReferrerPolicyTest, LeftClickRedirect) { 3815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) RunReferrerTest(blink::WebReferrerPolicyOrigin, 3825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) START_ON_HTTP, 3835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) REGULAR_LINK, 3845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) SERVER_REDIRECT, 3855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CURRENT_TAB, 386f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebMouseEvent::ButtonLeft, 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_ORIGIN_AS_REFERRER); 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// User initiated navigation, from HTTPS to HTTP via server redirect. 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(ReferrerPolicyTest, HttpsLeftClickRedirect) { 3925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) RunReferrerTest(blink::WebReferrerPolicyOrigin, 3935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) START_ON_HTTPS, 3945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) REGULAR_LINK, 3955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) SERVER_REDIRECT, 3965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CURRENT_TAB, 397f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebMouseEvent::ButtonLeft, 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_ORIGIN_AS_REFERRER); 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// User initiated navigation, middle click, from HTTP to HTTP via server 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// redirect. 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(ReferrerPolicyTest, MiddleClickRedirect) { 4045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) RunReferrerTest(blink::WebReferrerPolicyOrigin, 4055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) START_ON_HTTP, 4065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) REGULAR_LINK, 4075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) SERVER_REDIRECT, 4085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NEW_BACKGROUND_TAB, 409f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebMouseEvent::ButtonMiddle, 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_ORIGIN_AS_REFERRER); 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// User initiated navigation, middle click, from HTTPS to HTTP via server 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// redirect. 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(ReferrerPolicyTest, HttpsMiddleClickRedirect) { 4165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) RunReferrerTest(blink::WebReferrerPolicyOrigin, 4175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) START_ON_HTTPS, 4185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) REGULAR_LINK, 4195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) SERVER_REDIRECT, 4205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NEW_BACKGROUND_TAB, 421f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebMouseEvent::ButtonMiddle, 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_ORIGIN_AS_REFERRER); 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// User initiated navigation, target blank, from HTTP to HTTP via server 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// redirect. 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(ReferrerPolicyTest, TargetBlankRedirect) { 4285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) RunReferrerTest(blink::WebReferrerPolicyOrigin, 4295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) START_ON_HTTP, 4305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) LINK_WITH_TARGET_BLANK, 4315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) SERVER_REDIRECT, 4325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NEW_FOREGROUND_TAB, 433f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebMouseEvent::ButtonLeft, 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_ORIGIN_AS_REFERRER); 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// User initiated navigation, target blank, from HTTPS to HTTP via server 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// redirect. 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(ReferrerPolicyTest, HttpsTargetBlankRedirect) { 4405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) RunReferrerTest(blink::WebReferrerPolicyOrigin, 4415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) START_ON_HTTPS, 4425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) LINK_WITH_TARGET_BLANK, 4435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) SERVER_REDIRECT, 4445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NEW_FOREGROUND_TAB, 445f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebMouseEvent::ButtonLeft, 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_ORIGIN_AS_REFERRER); 4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// User initiated navigation, middle click, target blank, from HTTP to HTTP via 4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// server redirect. 4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(ReferrerPolicyTest, MiddleClickTargetBlankRedirect) { 4525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) RunReferrerTest(blink::WebReferrerPolicyOrigin, 4535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) START_ON_HTTP, 4545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) LINK_WITH_TARGET_BLANK, 4555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) SERVER_REDIRECT, 4565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NEW_FOREGROUND_TAB, 457f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebMouseEvent::ButtonMiddle, 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_ORIGIN_AS_REFERRER); 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// User initiated navigation, middle click, target blank, from HTTPS to HTTP 4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// via server redirect. 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(ReferrerPolicyTest, 4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HttpsMiddleClickTargetBlankRedirect) { 4655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) RunReferrerTest(blink::WebReferrerPolicyOrigin, 4665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) START_ON_HTTPS, 4675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) LINK_WITH_TARGET_BLANK, 4685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) SERVER_REDIRECT, 4695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NEW_FOREGROUND_TAB, 470f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebMouseEvent::ButtonMiddle, 4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_ORIGIN_AS_REFERRER); 4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Context menu, from HTTP to HTTP via server redirect. 475f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(ReferrerPolicyTest, ContextMenuRedirect) { 4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContextMenuNotificationObserver context_menu_observer( 4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDC_CONTENT_CONTEXT_OPENLINKNEWTAB); 4785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) RunReferrerTest(blink::WebReferrerPolicyOrigin, 4795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) START_ON_HTTP, 4805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) REGULAR_LINK, 4815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) SERVER_REDIRECT, 4825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NEW_FOREGROUND_TAB, 483f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebMouseEvent::ButtonRight, 4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_ORIGIN_AS_REFERRER); 4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Context menu, from HTTPS to HTTP via server redirect. 488f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(ReferrerPolicyTest, HttpsContextMenuRedirect) { 4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContextMenuNotificationObserver context_menu_observer( 4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDC_CONTENT_CONTEXT_OPENLINKNEWTAB); 4915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) RunReferrerTest(blink::WebReferrerPolicyOrigin, 4925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) START_ON_HTTPS, 4935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) REGULAR_LINK, 4945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) SERVER_REDIRECT, 4955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NEW_FOREGROUND_TAB, 496f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebMouseEvent::ButtonRight, 4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_ORIGIN_AS_REFERRER); 4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests history navigation actions: Navigate from A to B with a referrer 5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// policy, then navigate to C, back to B, and reload. 5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(ReferrerPolicyTest, History) { 5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Navigate from A to B. 5045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GURL start_url = RunReferrerTest(blink::WebReferrerPolicyOrigin, 5055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) START_ON_HTTPS, 5065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) REGULAR_LINK, 5075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) SERVER_REDIRECT, 5085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CURRENT_TAB, 509f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebMouseEvent::ButtonLeft, 5105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_ORIGIN_AS_REFERRER); 5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Navigate to C. 513c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ui_test_utils::NavigateToURL(browser(), test_server_->GetURL(std::string())); 5145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 515a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 expected_title = 5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetExpectedTitle(start_url, EXPECT_ORIGIN_AS_REFERRER); 5172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::WebContents* tab = 5182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents(); 5195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<content::TitleWatcher> title_watcher( 5205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new content::TitleWatcher(tab, expected_title)); 5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Watch for all possible outcomes to avoid timeouts if something breaks. 5235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddAllPossibleTitles(start_url, title_watcher.get()); 5245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Go back to B. 5265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::GoBack(browser(), CURRENT_TAB); 5275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(expected_title, title_watcher->WaitAndGetTitle()); 5285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) title_watcher.reset(new content::TitleWatcher(tab, expected_title)); 5305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddAllPossibleTitles(start_url, title_watcher.get()); 5315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Reload to B. 5335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::Reload(browser(), CURRENT_TAB); 5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(expected_title, title_watcher->WaitAndGetTitle()); 5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) title_watcher.reset(new content::TitleWatcher(tab, expected_title)); 5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddAllPossibleTitles(start_url, title_watcher.get()); 5385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Shift-reload to B. 5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::ReloadIgnoringCache(browser(), CURRENT_TAB); 5415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(expected_title, title_watcher->WaitAndGetTitle()); 5425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 5445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Tests that reloading a site for "request tablet version" correctly clears 5455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// the referrer. 5465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(ReferrerPolicyTest, RequestTabletSite) { 5475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GURL start_url = RunReferrerTest(blink::WebReferrerPolicyOrigin, 5485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) START_ON_HTTPS, 5495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) REGULAR_LINK, 5505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) SERVER_REDIRECT_ON_HTTP, 5515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CURRENT_TAB, 5525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) blink::WebMouseEvent::ButtonLeft, 5535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_ORIGIN_AS_REFERRER); 5545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 5555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::string16 expected_title = 5565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GetExpectedTitle(start_url, EXPECT_EMPTY_REFERRER); 5575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) content::WebContents* tab = 5585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents(); 5595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) content::TitleWatcher title_watcher(tab, expected_title); 5605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 5615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Watch for all possible outcomes to avoid timeouts if something breaks. 5625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) AddAllPossibleTitles(start_url, &title_watcher); 5635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 5645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Request tablet version. 5655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) chrome::ToggleRequestTabletSite(browser()); 5665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(expected_title, title_watcher.WaitAndGetTitle()); 5675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 5685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 5695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Test that an iframes gets the parent frames referrer and referrer policy if 5705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// the load was triggered by the parent, or from the iframe itself, if the 5715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// navigations was started by the iframe. 5725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(ReferrerPolicyTest, IFrame) { 5735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) browser()->profile()->GetPrefs()->SetBoolean( 5745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) prefs::kWebKitAllowRunningInsecureContent, true); 5755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) content::WebContents* tab = 5765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents(); 5775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::string16 expected_title(base::ASCIIToUTF16("loaded")); 5785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<content::TitleWatcher> title_watcher( 5795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) new content::TitleWatcher(tab, expected_title)); 5805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 5815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Load a page that loads an iframe. 5825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ui_test_utils::NavigateToURL( 5835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) browser(), 5845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ssl_test_server_->GetURL( 5855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::string("files/referrer-policy-iframe.html?") + 5865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::IntToString(test_server_->host_port_pair().port()))); 5875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(expected_title, title_watcher->WaitAndGetTitle()); 5885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 5895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Verify that the referrer policy was honored and the main page's origin was 5905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // send as referrer. 59123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) content::RenderFrameHost* frame = content::FrameMatchingPredicate( 59223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) tab, base::Bind(&content::FrameIsChildOfMainFrame)); 5935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::string title; 59423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) EXPECT_TRUE(content::ExecuteScriptAndExtractString( 59523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) frame, 5965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) "window.domAutomationController.send(document.title)", 5975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) &title)); 5985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ("Referrer is " + ssl_test_server_->GetURL(std::string()).spec(), 5995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) title); 6005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 6015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Reload the iframe. 6025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) expected_title = base::ASCIIToUTF16("reset"); 6035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) title_watcher.reset(new content::TitleWatcher(tab, expected_title)); 6045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_TRUE(content::ExecuteScript(tab, "document.title = 'reset'")); 6055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(expected_title, title_watcher->WaitAndGetTitle()); 6065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 6075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) expected_title = base::ASCIIToUTF16("loaded"); 6085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) title_watcher.reset(new content::TitleWatcher(tab, expected_title)); 60923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) EXPECT_TRUE(content::ExecuteScript(frame, "location.reload()")); 6105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(expected_title, title_watcher->WaitAndGetTitle()); 6115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 6125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Verify that the full url of the iframe was used as referrer. 61323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) EXPECT_TRUE(content::ExecuteScriptAndExtractString( 61423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) frame, 6155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) "window.domAutomationController.send(document.title)", 6165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) &title)); 6175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ("Referrer is " + 6185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) test_server_->GetURL("files/referrer-policy-log.html").spec(), 6195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) title); 6205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 621