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