blob: 77a59728b1729f1c393f5bf95dd5feba8f3fcf97 [file] [log] [blame]
[email protected]1fd0ff3f2012-02-24 23:05:301// Copyright (c) 2012 The Chromium Authors. All rights reserved.
[email protected]dc3d1a32011-12-07 00:54:262// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "base/bind.h"
6#include "base/string_number_conversions.h"
7#include "base/utf_string_conversions.h"
8#include "chrome/browser/ui/browser.h"
9#include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h"
10#include "chrome/test/base/in_process_browser_test.h"
11#include "chrome/test/base/ui_test_utils.h"
12#include "net/test/test_server.h"
13
14namespace {
15
16const FilePath::CharType kDocRoot[] =
17 FILE_PATH_LITERAL("chrome/test/data/referrer_policy");
18
19} // namespace
20
21class ReferrerPolicyTest : public InProcessBrowserTest {
22 public:
23 // Navigates to the given URL and waits for |num_navigations| to occur, and
24 // the title to change to |expected_title|.
25 void NavigateToURLAndWaitForTitle(const GURL& url,
26 const std::string& expected_title,
27 int num_navigations) {
28 ui_test_utils::TitleWatcher title_watcher(
[email protected]bb81f382012-01-03 22:45:4429 browser()->GetSelectedWebContents(),
[email protected]dc3d1a32011-12-07 00:54:2630 ASCIIToUTF16(expected_title));
31
32 ui_test_utils::NavigateToURLBlockUntilNavigationsComplete(
33 browser(), url, num_navigations);
34
35 EXPECT_EQ(title_watcher.WaitAndGetTitle(), ASCIIToUTF16(expected_title));
36 }
37
38 enum ExpectedReferrer {
39 ExpectedReferrerIsEmpty,
40 ExpectedReferrerIsFull,
41 ExpectedReferrerIsOrigin
42 };
43
44 // Navigates from a page with a given |referrer_policy| (optionally on https)
45 // to a page on http that reports the passed referrer and checks that it
46 // matches the |expected_referrer|.
47 void RunReferrerTest(const std::string referrer_policy,
48 bool start_on_https,
49 ExpectedReferrer expected_referrer) {
[email protected]1fd0ff3f2012-02-24 23:05:3050 net::TestServer test_server(net::TestServer::TYPE_HTTP,
51 net::TestServer::kLocalhost,
52 FilePath(kDocRoot));
[email protected]dc3d1a32011-12-07 00:54:2653 ASSERT_TRUE(test_server.Start());
54 net::TestServer ssl_test_server(net::TestServer::TYPE_HTTPS,
[email protected]1fd0ff3f2012-02-24 23:05:3055 net::TestServer::kLocalhost,
[email protected]dc3d1a32011-12-07 00:54:2656 FilePath(kDocRoot));
57 ASSERT_TRUE(ssl_test_server.Start());
58
59 GURL start_url = test_server.GetURL(
60 std::string("files/referrer-policy-start.html?") + referrer_policy +
61 "&port=" + base::IntToString(test_server.host_port_pair().port()));
62 if (start_on_https) {
63 start_url = ssl_test_server.GetURL(
64 std::string("files/referrer-policy-start.html?") + referrer_policy +
65 "&port=" + base::IntToString(test_server.host_port_pair().port()));
66 }
67
68 std::string referrer;
69 switch (expected_referrer) {
70 case ExpectedReferrerIsEmpty:
71 referrer = "Referrer is empty";
72 break;
73 case ExpectedReferrerIsFull:
74 referrer = "Referrer is " + start_url.spec();
75 break;
76 case ExpectedReferrerIsOrigin:
77 referrer = "Referrer is " + start_url.GetWithEmptyPath().spec();
78 break;
79 }
80
81 NavigateToURLAndWaitForTitle(start_url, referrer, 2);
82 }
83};
84
85IN_PROC_BROWSER_TEST_F(ReferrerPolicyTest, Default) {
86 RunReferrerTest("default", false, ExpectedReferrerIsFull);
87}
88
89IN_PROC_BROWSER_TEST_F(ReferrerPolicyTest, Always) {
90 RunReferrerTest("always", false, ExpectedReferrerIsFull);
91}
92
93IN_PROC_BROWSER_TEST_F(ReferrerPolicyTest, Origin) {
94 RunReferrerTest("origin", false, ExpectedReferrerIsOrigin);
95}
96
97IN_PROC_BROWSER_TEST_F(ReferrerPolicyTest, Never) {
98 RunReferrerTest("never", false, ExpectedReferrerIsEmpty);
99}
100
101IN_PROC_BROWSER_TEST_F(ReferrerPolicyTest, HttpsDefault) {
102 RunReferrerTest("default", true, ExpectedReferrerIsEmpty);
103}
104
105IN_PROC_BROWSER_TEST_F(ReferrerPolicyTest, HttpsAlways) {
106 RunReferrerTest("always", true, ExpectedReferrerIsFull);
107}
108
109IN_PROC_BROWSER_TEST_F(ReferrerPolicyTest, HttpsOrigin) {
110 RunReferrerTest("origin", true, ExpectedReferrerIsOrigin);
111}
112
113IN_PROC_BROWSER_TEST_F(ReferrerPolicyTest, HttpsNever) {
114 RunReferrerTest("never", true, ExpectedReferrerIsEmpty);
115}
116
117IN_PROC_BROWSER_TEST_F(ReferrerPolicyTest, Redirect) {
[email protected]1fd0ff3f2012-02-24 23:05:30118 net::TestServer test_server(net::TestServer::TYPE_HTTP,
119 net::TestServer::kLocalhost,
120 FilePath(kDocRoot));
[email protected]dc3d1a32011-12-07 00:54:26121 ASSERT_TRUE(test_server.Start());
122 net::TestServer ssl_test_server(net::TestServer::TYPE_HTTPS,
[email protected]1fd0ff3f2012-02-24 23:05:30123 net::TestServer::kLocalhost,
[email protected]dc3d1a32011-12-07 00:54:26124 FilePath(kDocRoot));
125 ASSERT_TRUE(ssl_test_server.Start());
126 GURL start_url = test_server.GetURL(
127 std::string("files/referrer-policy-redirect.html?") +
128 "ssl_port=" + base::IntToString(ssl_test_server.host_port_pair().port()) +
129 "&port=" + base::IntToString(test_server.host_port_pair().port()));
130 std::string referrer = "Referrer is " + start_url.GetWithEmptyPath().spec();
131 NavigateToURLAndWaitForTitle(start_url, referrer, 2);
132}