referrer_policy_browsertest.cc revision 7dbb3d5cf0c15f500944d211057644d6a2f37371
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"
62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/strings/string_number_conversions.h"
7868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/app/chrome_command_ids.h"
97dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/chrome_notification_types.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/tab_contents/render_view_context_menu.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/tab_contents/render_view_context_menu_browsertest_util.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser_commands.h"
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/tabs/tab_strip_model.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/in_process_browser_test.h"
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/ui_test_utils.h"
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_service.h"
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/render_view_host.h"
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_contents.h"
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/test/browser_test_utils.h"
21b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)#include "net/test/spawned_test_server/spawned_test_server.h"
227d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "third_party/WebKit/public/web/WebInputEvent.h"
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// GTK requires a X11-level mouse event to open a context menu correctly.
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(TOOLKIT_GTK)
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define MAYBE_ContextMenuOrigin DISABLED_ContextMenuOrigin
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define MAYBE_HttpsContextMenuOrigin DISABLED_HttpsContextMenuOrigin
28c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#define MAYBE_ContextMenuRedirect DISABLED_ContextMenuRedirect
29c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#define MAYBE_HttpsContextMenuRedirect DISABLED_HttpsContextMenuRedirect
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define MAYBE_ContextMenuOrigin ContextMenuOrigin
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define MAYBE_HttpsContextMenuOrigin HttpsContextMenuOrigin
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define MAYBE_ContextMenuRedirect ContextMenuRedirect
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define MAYBE_HttpsContextMenuRedirect HttpsContextMenuRedirect
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace {
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const base::FilePath::CharType kDocRoot[] =
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    FILE_PATH_LITERAL("chrome/test/data/referrer_policy");
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ReferrerPolicyTest : public InProcessBrowserTest {
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   ReferrerPolicyTest() {}
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   virtual ~ReferrerPolicyTest() {}
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   virtual void SetUp() OVERRIDE {
50c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     test_server_.reset(new net::SpawnedTestServer(
51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                            net::SpawnedTestServer::TYPE_HTTP,
52c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                            net::SpawnedTestServer::kLocalhost,
53c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                            base::FilePath(kDocRoot)));
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     ASSERT_TRUE(test_server_->Start());
55c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     ssl_test_server_.reset(new net::SpawnedTestServer(
56c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                                net::SpawnedTestServer::TYPE_HTTPS,
57c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                                net::SpawnedTestServer::kLocalhost,
58c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                                base::FilePath(kDocRoot)));
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     ASSERT_TRUE(ssl_test_server_->Start());
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     InProcessBrowserTest::SetUp();
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   }
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected:
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  enum ExpectedReferrer {
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_EMPTY_REFERRER,
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_FULL_REFERRER,
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_ORIGIN_AS_REFERRER
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns the expected title for the tab with the given (full) referrer and
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // the expected modification of it.
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  string16 GetExpectedTitle(const GURL& url,
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                            ExpectedReferrer expected_referrer) {
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    std::string referrer;
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    switch (expected_referrer) {
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      case EXPECT_EMPTY_REFERRER:
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        referrer = "Referrer is empty";
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        break;
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      case EXPECT_FULL_REFERRER:
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        referrer = "Referrer is " + url.spec();
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        break;
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      case EXPECT_ORIGIN_AS_REFERRER:
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        referrer = "Referrer is " + url.GetWithEmptyPath().spec();
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        break;
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return ASCIIToUTF16(referrer);
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Adds all possible titles to the TitleWatcher, so we don't time out
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // waiting for the title if the test fails.
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void AddAllPossibleTitles(const GURL& url,
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                            content::TitleWatcher* title_watcher) {
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    title_watcher->AlsoWaitForTitle(
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        GetExpectedTitle(url, EXPECT_EMPTY_REFERRER));
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    title_watcher->AlsoWaitForTitle(
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        GetExpectedTitle(url, EXPECT_FULL_REFERRER));
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    title_watcher->AlsoWaitForTitle(
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        GetExpectedTitle(url, EXPECT_ORIGIN_AS_REFERRER));
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Navigates from a page with a given |referrer_policy| and checks that the
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // reported referrer matches the expectation.
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Parameters:
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //  referrer_policy:   The referrer policy to test ("default", "always",
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //                     "origin", "never")
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //  start_on_https:    True if the test should start on an HTTPS page.
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //  target_blank:      True if the link that is generated should have the
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //                     attribute target=_blank
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //  redirect:          True if the link target should first do a server
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //                     redirect before evaluating the passed referrer.
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //  opens_new_tab:     True if this test opens a new tab.
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //  button:            If not WebMouseEvent::ButtonNone, click on the
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //                     link with the specified mouse button.
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //  expected_referrer: The kind of referrer to expect.
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns:
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //  The URL of the first page navigated to.
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GURL RunReferrerTest(const std::string referrer_policy,
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       bool start_on_https,
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       bool target_blank,
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       bool redirect,
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       bool opens_new_tab,
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       WebKit::WebMouseEvent::Button button,
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       ExpectedReferrer expected_referrer) {
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    GURL start_url;
127c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    net::SpawnedTestServer* start_server =
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        start_on_https ? ssl_test_server_.get() : test_server_.get();
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    start_url = start_server->GetURL(
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        std::string("files/referrer-policy-start.html?") +
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        "policy=" + referrer_policy +
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        "&port=" + base::IntToString(test_server_->host_port_pair().port()) +
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        "&ssl_port=" +
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            base::IntToString(ssl_test_server_->host_port_pair().port()) +
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        "&redirect=" + (redirect ? "true" : "false") +
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        "&link=" +
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            (button == WebKit::WebMouseEvent::ButtonNone ? "false" : "true") +
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        "&target=" + (target_blank ? "_blank" : ""));
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ui_test_utils::WindowedTabAddedNotificationObserver tab_added_observer(
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        content::NotificationService::AllSources());
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    string16 expected_title = GetExpectedTitle(start_url, expected_referrer);
1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    content::WebContents* tab =
1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        browser()->tab_strip_model()->GetActiveWebContents();
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    content::TitleWatcher title_watcher(tab, expected_title);
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Watch for all possible outcomes to avoid timeouts if something breaks.
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    AddAllPossibleTitles(start_url, &title_watcher);
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ui_test_utils::NavigateToURL(browser(), start_url);
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (button != WebKit::WebMouseEvent::ButtonNone) {
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      WebKit::WebMouseEvent mouse_event;
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      mouse_event.type = WebKit::WebInputEvent::MouseDown;
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      mouse_event.button = button;
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      mouse_event.x = 15;
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      mouse_event.y = 15;
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      mouse_event.clickCount = 1;
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      tab->GetRenderViewHost()->ForwardMouseEvent(mouse_event);
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      mouse_event.type = WebKit::WebInputEvent::MouseUp;
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      tab->GetRenderViewHost()->ForwardMouseEvent(mouse_event);
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (opens_new_tab) {
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      tab_added_observer.Wait();
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      tab = tab_added_observer.GetTab();
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      EXPECT_TRUE(tab);
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      content::WaitForLoadStop(tab);
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      EXPECT_EQ(expected_title, tab->GetTitle());
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    } else {
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      EXPECT_EQ(expected_title, title_watcher.WaitAndGetTitle());
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return start_url;
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
178c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  scoped_ptr<net::SpawnedTestServer> test_server_;
179c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  scoped_ptr<net::SpawnedTestServer> ssl_test_server_;
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The basic behavior of referrer policies is covered by layout tests in
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// http/tests/security/referrer-policy-*. These tests cover (hopefully) all
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// code paths chrome uses to navigate. To keep the number of combinations down,
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// we only test the "origin" policy here.
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Some tests are marked as FAILS, see http://crbug.com/124750
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Content initiated navigation, from HTTP to HTTP.
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(ReferrerPolicyTest, Origin) {
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RunReferrerTest("origin", false, false, false, false,
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  WebKit::WebMouseEvent::ButtonNone,
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  EXPECT_ORIGIN_AS_REFERRER);
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Content initiated navigation, from HTTPS to HTTP.
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(ReferrerPolicyTest, HttpsDefault) {
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RunReferrerTest("origin", true, false, false, false,
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  WebKit::WebMouseEvent::ButtonNone,
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  EXPECT_ORIGIN_AS_REFERRER);
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// User initiated navigation, from HTTP to HTTP.
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(ReferrerPolicyTest, LeftClickOrigin) {
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RunReferrerTest("origin", false, false, false, false,
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  WebKit::WebMouseEvent::ButtonLeft,
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  EXPECT_ORIGIN_AS_REFERRER);
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// User initiated navigation, from HTTPS to HTTP.
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(ReferrerPolicyTest, HttpsLeftClickOrigin) {
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RunReferrerTest("origin", true, false, false, false,
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  WebKit::WebMouseEvent::ButtonLeft,
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  EXPECT_ORIGIN_AS_REFERRER);
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// User initiated navigation, middle click, from HTTP to HTTP.
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(ReferrerPolicyTest, MiddleClickOrigin) {
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RunReferrerTest("origin", false, false, false, true,
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  WebKit::WebMouseEvent::ButtonMiddle,
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  EXPECT_ORIGIN_AS_REFERRER);
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// User initiated navigation, middle click, from HTTPS to HTTP.
2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(ReferrerPolicyTest, HttpsMiddleClickOrigin) {
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RunReferrerTest("origin", true, false, false, true,
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  WebKit::WebMouseEvent::ButtonMiddle,
2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  EXPECT_ORIGIN_AS_REFERRER);
2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// User initiated navigation, target blank, from HTTP to HTTP.
2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(ReferrerPolicyTest, TargetBlankOrigin) {
2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RunReferrerTest("origin", false, true, false, true,
2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  WebKit::WebMouseEvent::ButtonLeft,
2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  EXPECT_ORIGIN_AS_REFERRER);
2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// User initiated navigation, target blank, from HTTPS to HTTP.
2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(ReferrerPolicyTest, HttpsTargetBlankOrigin) {
2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RunReferrerTest("origin", true, true, false, true,
2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  WebKit::WebMouseEvent::ButtonLeft,
2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  EXPECT_ORIGIN_AS_REFERRER);
2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// User initiated navigation, middle click, target blank, from HTTP to HTTP.
2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(ReferrerPolicyTest, MiddleClickTargetBlankOrigin) {
2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RunReferrerTest("origin", false, true, false, true,
2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  WebKit::WebMouseEvent::ButtonMiddle,
2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  EXPECT_ORIGIN_AS_REFERRER);
2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// User initiated navigation, middle click, target blank, from HTTPS to HTTP.
2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(ReferrerPolicyTest, HttpsMiddleClickTargetBlankOrigin) {
2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RunReferrerTest("origin", true, true, false, true,
2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  WebKit::WebMouseEvent::ButtonMiddle,
2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  EXPECT_ORIGIN_AS_REFERRER);
2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Context menu, from HTTP to HTTP.
2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(ReferrerPolicyTest, MAYBE_ContextMenuOrigin) {
2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ContextMenuNotificationObserver context_menu_observer(
2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDC_CONTENT_CONTEXT_OPENLINKNEWTAB);
2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RunReferrerTest("origin", false, false, false, true,
2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  WebKit::WebMouseEvent::ButtonRight,
2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  EXPECT_ORIGIN_AS_REFERRER);
2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Context menu, from HTTPS to HTTP.
2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(ReferrerPolicyTest, MAYBE_HttpsContextMenuOrigin) {
2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ContextMenuNotificationObserver context_menu_observer(
2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDC_CONTENT_CONTEXT_OPENLINKNEWTAB);
2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RunReferrerTest("origin", true, false, false, true,
2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  WebKit::WebMouseEvent::ButtonRight,
2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  EXPECT_ORIGIN_AS_REFERRER);
2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Content initiated navigation, from HTTP to HTTP via server redirect.
2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(ReferrerPolicyTest, Redirect) {
2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RunReferrerTest("origin", false, false, true, false,
2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  WebKit::WebMouseEvent::ButtonNone,
2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  EXPECT_ORIGIN_AS_REFERRER);
2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Content initiated navigation, from HTTPS to HTTP via server redirect.
2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(ReferrerPolicyTest, HttpsRedirect) {
2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RunReferrerTest("origin", true, false, true, false,
2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  WebKit::WebMouseEvent::ButtonNone,
2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  EXPECT_ORIGIN_AS_REFERRER);
2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// User initiated navigation, from HTTP to HTTP via server redirect.
2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(ReferrerPolicyTest, LeftClickRedirect) {
2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RunReferrerTest("origin", false, false, true, false,
2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  WebKit::WebMouseEvent::ButtonLeft,
2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  EXPECT_ORIGIN_AS_REFERRER);
2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// User initiated navigation, from HTTPS to HTTP via server redirect.
2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(ReferrerPolicyTest, HttpsLeftClickRedirect) {
3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RunReferrerTest("origin", true, false, true, false,
3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  WebKit::WebMouseEvent::ButtonLeft,
3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  EXPECT_ORIGIN_AS_REFERRER);
3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// User initiated navigation, middle click, from HTTP to HTTP via server
3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// redirect.
3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(ReferrerPolicyTest, MiddleClickRedirect) {
3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RunReferrerTest("origin", false, false, true, true,
3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  WebKit::WebMouseEvent::ButtonMiddle,
3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  EXPECT_ORIGIN_AS_REFERRER);
3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// User initiated navigation, middle click, from HTTPS to HTTP via server
3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// redirect.
3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(ReferrerPolicyTest, HttpsMiddleClickRedirect) {
3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RunReferrerTest("origin", true, false, true, true,
3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  WebKit::WebMouseEvent::ButtonMiddle,
3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  EXPECT_ORIGIN_AS_REFERRER);
3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// User initiated navigation, target blank, from HTTP to HTTP via server
3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// redirect.
3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(ReferrerPolicyTest, TargetBlankRedirect) {
3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RunReferrerTest("origin", false, true, true, true,
3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  WebKit::WebMouseEvent::ButtonLeft,
3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  EXPECT_ORIGIN_AS_REFERRER);
3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// User initiated navigation, target blank, from HTTPS to HTTP via server
3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// redirect.
3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(ReferrerPolicyTest, HttpsTargetBlankRedirect) {
3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RunReferrerTest("origin", true, true, true, true,
3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  WebKit::WebMouseEvent::ButtonLeft,
3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  EXPECT_ORIGIN_AS_REFERRER);
3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// User initiated navigation, middle click, target blank, from HTTP to HTTP via
3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// server redirect.
3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(ReferrerPolicyTest, MiddleClickTargetBlankRedirect) {
3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RunReferrerTest("origin", false, true, true, true,
3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  WebKit::WebMouseEvent::ButtonMiddle,
3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  EXPECT_ORIGIN_AS_REFERRER);
3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// User initiated navigation, middle click, target blank, from HTTPS to HTTP
3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// via server redirect.
3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(ReferrerPolicyTest,
3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       HttpsMiddleClickTargetBlankRedirect) {
3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RunReferrerTest("origin", true, true, true, true,
3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  WebKit::WebMouseEvent::ButtonMiddle,
3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  EXPECT_ORIGIN_AS_REFERRER);
3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Context menu, from HTTP to HTTP via server redirect.
3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(ReferrerPolicyTest, MAYBE_ContextMenuRedirect) {
3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ContextMenuNotificationObserver context_menu_observer(
3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDC_CONTENT_CONTEXT_OPENLINKNEWTAB);
3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RunReferrerTest("origin", false, false, true, true,
3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  WebKit::WebMouseEvent::ButtonRight,
3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  EXPECT_ORIGIN_AS_REFERRER);
3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Context menu, from HTTPS to HTTP via server redirect.
3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(ReferrerPolicyTest, MAYBE_HttpsContextMenuRedirect) {
3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ContextMenuNotificationObserver context_menu_observer(
3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDC_CONTENT_CONTEXT_OPENLINKNEWTAB);
3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RunReferrerTest("origin", true, false, true, true,
3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  WebKit::WebMouseEvent::ButtonRight,
3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  EXPECT_ORIGIN_AS_REFERRER);
3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests history navigation actions: Navigate from A to B with a referrer
3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// policy, then navigate to C, back to B, and reload.
3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(ReferrerPolicyTest, History) {
3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Navigate from A to B.
3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GURL start_url = RunReferrerTest("origin", true, false, true, false,
3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                   WebKit::WebMouseEvent::ButtonLeft,
3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                   EXPECT_ORIGIN_AS_REFERRER);
3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Navigate to C.
381c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  ui_test_utils::NavigateToURL(browser(), test_server_->GetURL(std::string()));
3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  string16 expected_title =
3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GetExpectedTitle(start_url, EXPECT_ORIGIN_AS_REFERRER);
3852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  content::WebContents* tab =
3862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      browser()->tab_strip_model()->GetActiveWebContents();
3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<content::TitleWatcher> title_watcher(
3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      new content::TitleWatcher(tab, expected_title));
3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Watch for all possible outcomes to avoid timeouts if something breaks.
3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AddAllPossibleTitles(start_url, title_watcher.get());
3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Go back to B.
3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  chrome::GoBack(browser(), CURRENT_TAB);
3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(expected_title, title_watcher->WaitAndGetTitle());
3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  title_watcher.reset(new content::TitleWatcher(tab, expected_title));
3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AddAllPossibleTitles(start_url, title_watcher.get());
3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Reload to B.
4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  chrome::Reload(browser(), CURRENT_TAB);
4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(expected_title, title_watcher->WaitAndGetTitle());
4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  title_watcher.reset(new content::TitleWatcher(tab, expected_title));
4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AddAllPossibleTitles(start_url, title_watcher.get());
4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Shift-reload to B.
4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  chrome::ReloadIgnoringCache(browser(), CURRENT_TAB);
4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(expected_title, title_watcher->WaitAndGetTitle());
4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
411