Index: net/url_request/url_request_job_unittest.cc |
diff --git a/net/url_request/url_request_job_unittest.cc b/net/url_request/url_request_job_unittest.cc |
index 4583aa83d85b95355e8f9e42aeb894c18fc23f3e..61d9188f540bf3290330aa8b54eafa3ec3b43eef 100644 |
--- a/net/url_request/url_request_job_unittest.cc |
+++ b/net/url_request/url_request_job_unittest.cc |
@@ -9,8 +9,6 @@ |
#include "base/run_loop.h" |
#include "net/base/request_priority.h" |
#include "net/http/http_transaction_test_util.h" |
-#include "net/test/cert_test_util.h" |
-#include "net/test/test_data_directory.h" |
#include "net/url_request/url_request.h" |
#include "net/url_request/url_request_test_util.h" |
#include "testing/gtest/include/gtest/gtest.h" |
@@ -63,32 +61,6 @@ |
response_data->assign(kBrotliHelloData, sizeof(kBrotliHelloData) - 1); |
} |
-void MakeMockReferrerPolicyTransaction(const char* original_url, |
- const char* referer_header, |
- const char* response_headers, |
- MockTransaction* transaction) { |
- transaction->url = original_url; |
- transaction->method = "GET"; |
- transaction->request_time = base::Time(); |
- transaction->request_headers = referer_header; |
- transaction->load_flags = LOAD_NORMAL; |
- transaction->status = "HTTP/1.1 302 Found"; |
- transaction->response_headers = response_headers; |
- transaction->response_time = base::Time(); |
- transaction->data = "hello"; |
- transaction->test_mode = TEST_MODE_NORMAL; |
- transaction->handler = nullptr; |
- if (GURL(original_url).SchemeIsCryptographic()) { |
- transaction->cert = |
- net::ImportCertFromFile(net::GetTestCertsDirectory(), "ok_cert.pem"); |
- } else { |
- transaction->cert = nullptr; |
- } |
- transaction->cert_status = 0; |
- transaction->ssl_connection_status = 0; |
- transaction->return_code = OK; |
-} |
- |
const MockTransaction kGZip_Transaction = { |
"http://www.google.com/gzyp", |
"GET", |
@@ -259,199 +231,6 @@ |
EXPECT_TRUE(network_layer.done_reading_called()); |
RemoveMockTransaction(&kRedirect_Transaction); |
-} |
- |
-TEST(URLRequestJob, RedirectTransactionWithReferrerPolicyHeader) { |
- struct TestCase { |
- const char* original_url; |
- const char* original_referrer; |
- const char* response_headers; |
- URLRequest::ReferrerPolicy original_referrer_policy; |
- URLRequest::ReferrerPolicy expected_final_referrer_policy; |
- const char* expected_final_referrer; |
- }; |
- |
- const TestCase kTests[] = { |
- // If a redirect serves 'Referrer-Policy: no-referrer', then the referrer |
- // should be cleared. |
- {"http://foo.test/one" /* original url */, |
- "http://foo.test/one" /* original referrer */, |
- "Location: http://foo.test/test\n" |
- "Referrer-Policy: no-referrer\n", |
- // original policy |
- URLRequest::CLEAR_REFERRER_ON_TRANSITION_FROM_SECURE_TO_INSECURE, |
- URLRequest::NO_REFERRER /* expected final policy */, |
- "" /* expected final referrer */}, |
- |
- // Same as above but for the legacy keyword 'never'. |
- {"http://foo.test/one" /* original url */, |
- "http://foo.test/one" /* original referrer */, |
- "Location: http://foo.test/test\nReferrer-Policy: never\n", |
- // original policy |
- URLRequest::CLEAR_REFERRER_ON_TRANSITION_FROM_SECURE_TO_INSECURE, |
- URLRequest::NO_REFERRER /* expected final policy */, |
- "" /* expected final referrer */}, |
- |
- // If a redirect serves 'Referrer-Policy: |
- // no-referrer-when-downgrade', then the referrer should be cleared |
- // on downgrade, even if the original request's policy specified |
- // that the referrer should never be cleared. |
- {"https://foo.test/one" /* original url */, |
- "https://foo.test/one" /* original referrer */, |
- "Location: http://foo.test\n" |
- "Referrer-Policy: no-referrer-when-downgrade\n", |
- URLRequest::NEVER_CLEAR_REFERRER /* original policy */, |
- // expected final policy |
- URLRequest::CLEAR_REFERRER_ON_TRANSITION_FROM_SECURE_TO_INSECURE, |
- "" /* expected final referrer */}, |
- |
- // Same as above but for the legacy keyword 'default'. |
- {"https://foo.test/one" /* original url */, |
- "https://foo.test/one" /* original referrer */, |
- "Location: http://foo.test\n" |
- "Referrer-Policy: default\n", |
- URLRequest::NEVER_CLEAR_REFERRER /* original policy */, |
- // expected final policy |
- URLRequest::CLEAR_REFERRER_ON_TRANSITION_FROM_SECURE_TO_INSECURE, |
- "" /* expected final referrer */}, |
- |
- // If a redirect serves 'Referrer-Policy: origin', then the referrer |
- // should be stripped to its origin, even if the original request's |
- // policy specified that the referrer should never be cleared. |
- {"https://foo.test/one" /* original url */, |
- "https://foo.test/one" /* original referrer */, |
- "Location: https://foo.test/two\n" |
- "Referrer-Policy: origin\n", |
- URLRequest::NEVER_CLEAR_REFERRER /* original policy */, |
- URLRequest::ORIGIN /* expected final policy */, |
- "https://foo.test/" /* expected final referrer */}, |
- |
- // If a redirect serves 'Referrer-Policy: origin-when-cross-origin', |
- // then the referrer should be untouched for a same-origin redirect... |
- {"https://foo.test/one" /* original url */, |
- "https://foo.test/referrer" /* original referrer */, |
- "Location: https://foo.test/two\n" |
- "Referrer-Policy: origin-when-cross-origin\n", |
- URLRequest::NEVER_CLEAR_REFERRER /* original policy */, |
- URLRequest:: |
- ORIGIN_ONLY_ON_TRANSITION_CROSS_ORIGIN /* expected final policy */, |
- "https://foo.test/referrer" /* expected final referrer */}, |
- |
- // ... but should be stripped to the origin for a cross-origin redirect. |
- {"https://foo.test/one" /* original url */, |
- "https://foo.test/one" /* original referrer */, |
- "Location: https://bar.test/two\n" |
- "Referrer-Policy: origin-when-cross-origin\n", |
- URLRequest::NEVER_CLEAR_REFERRER /* original policy */, |
- URLRequest:: |
- ORIGIN_ONLY_ON_TRANSITION_CROSS_ORIGIN /* expected final policy */, |
- "https://foo.test/" /* expected final referrer */}, |
- |
- // If a redirect serves 'Referrer-Policy: unsafe-url', then the |
- // referrer should remain, even if originally set to clear on |
- // downgrade. |
- {"https://foo.test/one" /* original url */, |
- "https://foo.test/one" /* original referrer */, |
- "Location: https://bar.test/two\n" |
- "Referrer-Policy: unsafe-url\n", |
- URLRequest::ORIGIN_ONLY_ON_TRANSITION_CROSS_ORIGIN /* original policy */, |
- URLRequest::NEVER_CLEAR_REFERRER /* expected final policy */, |
- "https://foo.test/one" /* expected final referrer */}, |
- |
- // Same as above but for the legacy keyword 'always'. |
- {"https://foo.test/one" /* original url */, |
- "https://foo.test/one" /* original referrer */, |
- "Location: https://bar.test/two\n" |
- "Referrer-Policy: always\n", |
- URLRequest::ORIGIN_ONLY_ON_TRANSITION_CROSS_ORIGIN /* original policy */, |
- URLRequest::NEVER_CLEAR_REFERRER /* expected final policy */, |
- "https://foo.test/one" /* expected final referrer */}, |
- |
- // An invalid keyword should leave the policy untouched. |
- {"https://foo.test/one" /* original url */, |
- "https://foo.test/one" /* original referrer */, |
- "Location: https://bar.test/two\n" |
- "Referrer-Policy: not-a-valid-policy\n", |
- URLRequest::ORIGIN_ONLY_ON_TRANSITION_CROSS_ORIGIN /* original policy */, |
- URLRequest:: |
- ORIGIN_ONLY_ON_TRANSITION_CROSS_ORIGIN /* expected final policy */, |
- "https://foo.test/" /* expected final referrer */}, |
- |
- {"https://foo.test/one" /* original url */, |
- "https://foo.test/one" /* original referrer */, |
- "Location: http://bar.test/two\n" |
- "Referrer-Policy: not-a-valid-policy\n", |
- // original policy |
- URLRequest::CLEAR_REFERRER_ON_TRANSITION_FROM_SECURE_TO_INSECURE, |
- // expected final policy |
- URLRequest::CLEAR_REFERRER_ON_TRANSITION_FROM_SECURE_TO_INSECURE, |
- "" /* expected final referrer */}, |
- |
- // The last valid keyword should take precedence. |
- {"https://foo.test/one" /* original url */, |
- "https://foo.test/one" /* original referrer */, |
- "Location: https://bar.test/two\n" |
- "Referrer-Policy: unsafe-url\n" |
- "Referrer-Policy: not-a-valid-policy\n", |
- URLRequest::ORIGIN_ONLY_ON_TRANSITION_CROSS_ORIGIN /* original policy */, |
- URLRequest::NEVER_CLEAR_REFERRER /* expected final policy */, |
- "https://foo.test/one" /* expected final referrer */}, |
- |
- {"https://foo.test/one" /* original url */, |
- "https://foo.test/one" /* original referrer */, |
- "Location: https://bar.test/two\n" |
- "Referrer-Policy: unsafe-url\n" |
- "Referrer-Policy: origin\n", |
- URLRequest::ORIGIN_ONLY_ON_TRANSITION_CROSS_ORIGIN /* original policy */, |
- URLRequest::ORIGIN /* expected final policy */, |
- "https://foo.test/" /* expected final referrer */}, |
- |
- // An empty header should not affect the request. |
- {"https://foo.test/one" /* original url */, |
- "https://foo.test/one" /* original referrer */, |
- "Location: https://bar.test/two\n" |
- "Referrer-Policy: \n", |
- URLRequest::ORIGIN_ONLY_ON_TRANSITION_CROSS_ORIGIN /* original policy */, |
- URLRequest:: |
- ORIGIN_ONLY_ON_TRANSITION_CROSS_ORIGIN /* expected final policy */, |
- "https://foo.test/" /* expected final referrer */}, |
- }; |
- |
- for (const auto& test : kTests) { |
- MockTransaction transaction; |
- std::string request_headers = |
- "Referer: " + std::string(test.original_referrer) + "\n"; |
- MakeMockReferrerPolicyTransaction(test.original_url, |
- request_headers.c_str(), |
- test.response_headers, &transaction); |
- |
- MockNetworkLayer network_layer; |
- TestURLRequestContext context; |
- context.set_enable_referrer_policy_header(true); |
- context.set_http_transaction_factory(&network_layer); |
- |
- TestDelegate d; |
- std::unique_ptr<URLRequest> req( |
- context.CreateRequest(GURL(transaction.url), DEFAULT_PRIORITY, &d)); |
- AddMockTransaction(&transaction); |
- |
- req->set_referrer_policy(test.original_referrer_policy); |
- req->SetReferrer(test.original_referrer); |
- |
- req->set_method("GET"); |
- req->Start(); |
- |
- base::RunLoop().Run(); |
- |
- EXPECT_TRUE(network_layer.done_reading_called()); |
- |
- RemoveMockTransaction(&transaction); |
- |
- // Test that the referrer policy and referrer were set correctly |
- // according to the header received during the redirect. |
- EXPECT_EQ(test.expected_final_referrer_policy, req->referrer_policy()); |
- EXPECT_EQ(test.expected_final_referrer, req->referrer()); |
- } |
} |
TEST(URLRequestJob, TransactionNotCachedWhenNetworkDelegateRedirects) { |