Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(826)

Unified Diff: chrome/browser/referrer_policy_browsertest.cc

Issue 8823008: Test for referrer policy (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 9 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | chrome/chrome_tests.gypi » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/referrer_policy_browsertest.cc
diff --git a/chrome/browser/referrer_policy_browsertest.cc b/chrome/browser/referrer_policy_browsertest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..a59d98c1536b84f5ee1522b5423ea91960491ae2
--- /dev/null
+++ b/chrome/browser/referrer_policy_browsertest.cc
@@ -0,0 +1,126 @@
+// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "base/bind.h"
+#include "base/string_number_conversions.h"
+#include "base/utf_string_conversions.h"
+#include "chrome/browser/ui/browser.h"
+#include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h"
+#include "chrome/test/base/in_process_browser_test.h"
+#include "chrome/test/base/ui_test_utils.h"
+#include "net/test/test_server.h"
+
+namespace {
+
+const FilePath::CharType kDocRoot[] =
+ FILE_PATH_LITERAL("chrome/test/data/referrer_policy");
+
+} // namespace
+
+class ReferrerPolicyTest : public InProcessBrowserTest {
+ public:
+ // Navigates to the given URL and waits for |num_navigations| to occur, and
+ // the title to change to |expected_title|.
+ void NavigateToURLAndWaitForTitle(const GURL& url,
+ const std::string& expected_title,
+ int num_navigations) {
+ ui_test_utils::TitleWatcher title_watcher(
+ browser()->GetSelectedTabContents(),
+ ASCIIToUTF16(expected_title));
+
+ ui_test_utils::NavigateToURLBlockUntilNavigationsComplete(
+ browser(), url, num_navigations);
+
+ EXPECT_EQ(title_watcher.WaitAndGetTitle(), ASCIIToUTF16(expected_title));
+ }
+
+ enum ExpectedReferrer {
+ ExpectedReferrerIsEmpty,
+ ExpectedReferrerIsFull,
+ ExpectedReferrerIsOrigin
+ };
+
+ // Navigates from a page with a given |referrer_policy| (optionally on https)
+ // to a page on http that reports the passed referrer and checks that it
+ // matches the |expected_referrer|.
+ void RunReferrerTest(const std::string referrer_policy,
+ bool start_on_https,
+ ExpectedReferrer expected_referrer) {
+ net::TestServer test_server(net::TestServer::TYPE_HTTP, FilePath(kDocRoot));
+ ASSERT_TRUE(test_server.Start());
+ net::TestServer ssl_test_server(net::TestServer::TYPE_HTTPS,
+ FilePath(kDocRoot));
+ ASSERT_TRUE(ssl_test_server.Start());
+
+ GURL start_url = test_server.GetURL(
+ std::string("files/referrer-policy-start.html?") + referrer_policy +
+ "&port=" + base::IntToString(test_server.host_port_pair().port()));
+ if (start_on_https) {
+ start_url = ssl_test_server.GetURL(
+ std::string("files/referrer-policy-start.html?") + referrer_policy +
+ "&port=" + base::IntToString(test_server.host_port_pair().port()));
+ }
+
+ std::string referrer;
+ switch (expected_referrer) {
+ case ExpectedReferrerIsEmpty:
+ referrer = "Referrer is empty";
+ break;
+ case ExpectedReferrerIsFull:
+ referrer = "Referrer is " + start_url.spec();
+ break;
+ case ExpectedReferrerIsOrigin:
+ referrer = "Referrer is " + start_url.GetWithEmptyPath().spec();
+ break;
+ }
+
+ NavigateToURLAndWaitForTitle(start_url, referrer, 2);
+ }
+};
+
+IN_PROC_BROWSER_TEST_F(ReferrerPolicyTest, Default) {
+ RunReferrerTest("default", false, ExpectedReferrerIsFull);
+}
+
+IN_PROC_BROWSER_TEST_F(ReferrerPolicyTest, Always) {
+ RunReferrerTest("always", false, ExpectedReferrerIsFull);
+}
+
+IN_PROC_BROWSER_TEST_F(ReferrerPolicyTest, Origin) {
+ RunReferrerTest("origin", false, ExpectedReferrerIsOrigin);
+}
+
+IN_PROC_BROWSER_TEST_F(ReferrerPolicyTest, Never) {
+ RunReferrerTest("never", false, ExpectedReferrerIsEmpty);
+}
+
+IN_PROC_BROWSER_TEST_F(ReferrerPolicyTest, HttpsDefault) {
+ RunReferrerTest("default", true, ExpectedReferrerIsEmpty);
+}
+
+IN_PROC_BROWSER_TEST_F(ReferrerPolicyTest, HttpsAlways) {
+ RunReferrerTest("always", true, ExpectedReferrerIsFull);
+}
+
+IN_PROC_BROWSER_TEST_F(ReferrerPolicyTest, HttpsOrigin) {
+ RunReferrerTest("origin", true, ExpectedReferrerIsOrigin);
+}
+
+IN_PROC_BROWSER_TEST_F(ReferrerPolicyTest, HttpsNever) {
+ RunReferrerTest("never", true, ExpectedReferrerIsEmpty);
+}
+
+IN_PROC_BROWSER_TEST_F(ReferrerPolicyTest, Redirect) {
+ net::TestServer test_server(net::TestServer::TYPE_HTTP, FilePath(kDocRoot));
+ ASSERT_TRUE(test_server.Start());
+ net::TestServer ssl_test_server(net::TestServer::TYPE_HTTPS,
+ FilePath(kDocRoot));
+ ASSERT_TRUE(ssl_test_server.Start());
+ GURL start_url = test_server.GetURL(
+ std::string("files/referrer-policy-redirect.html?") +
+ "ssl_port=" + base::IntToString(ssl_test_server.host_port_pair().port()) +
+ "&port=" + base::IntToString(test_server.host_port_pair().port()));
+ std::string referrer = "Referrer is " + start_url.GetWithEmptyPath().spec();
+ NavigateToURLAndWaitForTitle(start_url, referrer, 2);
+}
« no previous file with comments | « no previous file | chrome/chrome_tests.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698