| Index: chrome/browser/extensions/api/web_request/web_request_api_unittest.cc
|
| diff --git a/chrome/browser/extensions/api/web_request/web_request_api_unittest.cc b/chrome/browser/extensions/api/web_request/web_request_api_unittest.cc
|
| index cafc124c3bcbbfbdd1c0966d94b4a9c18da1a43f..eaeece0a3e2a4e574af4d924074ba462630efa83 100644
|
| --- a/chrome/browser/extensions/api/web_request/web_request_api_unittest.cc
|
| +++ b/chrome/browser/extensions/api/web_request/web_request_api_unittest.cc
|
| @@ -1274,9 +1274,15 @@ TEST(ExtensionWebRequestHelpersTest, TestCalculateOnHeadersReceivedDelta) {
|
| new_headers.push_back(ResponseHeader("Key2", "Value1")); // Modified
|
| // Key3 is deleted
|
| new_headers.push_back(ResponseHeader("Key4", "Value4")); // Added
|
| + GURL effective_new_url;
|
|
|
| - scoped_ptr<EventResponseDelta> delta(CalculateOnHeadersReceivedDelta(
|
| - "extid", base::Time::Now(), cancel, base_headers.get(), &new_headers));
|
| + scoped_ptr<EventResponseDelta> delta(
|
| + CalculateOnHeadersReceivedDelta("extid",
|
| + base::Time::Now(),
|
| + cancel,
|
| + effective_new_url,
|
| + base_headers.get(),
|
| + &new_headers));
|
| ASSERT_TRUE(delta.get());
|
| EXPECT_TRUE(delta->cancel);
|
| EXPECT_EQ(2u, delta->added_response_headers.size());
|
| @@ -1959,9 +1965,15 @@ TEST(ExtensionWebRequestHelpersTest, TestMergeOnHeadersReceivedResponses) {
|
| new EventResponseDelta("extid0", base::Time::FromInternalValue(3000)));
|
| deltas.push_back(d0);
|
| scoped_refptr<net::HttpResponseHeaders> new_headers0;
|
| - MergeOnHeadersReceivedResponses(deltas, base_headers.get(), &new_headers0,
|
| - &warning_set, &net_log);
|
| + GURL allowed_unsafe_redirect_url0;
|
| + MergeOnHeadersReceivedResponses(deltas,
|
| + base_headers.get(),
|
| + &new_headers0,
|
| + &allowed_unsafe_redirect_url0,
|
| + &warning_set,
|
| + &net_log);
|
| EXPECT_FALSE(new_headers0.get());
|
| + EXPECT_TRUE(allowed_unsafe_redirect_url0.is_empty());
|
| EXPECT_EQ(0u, warning_set.size());
|
| EXPECT_EQ(0u, capturing_net_log.GetSize());
|
|
|
| @@ -1975,9 +1987,15 @@ TEST(ExtensionWebRequestHelpersTest, TestMergeOnHeadersReceivedResponses) {
|
| warning_set.clear();
|
| capturing_net_log.Clear();
|
| scoped_refptr<net::HttpResponseHeaders> new_headers1;
|
| - MergeOnHeadersReceivedResponses(
|
| - deltas, base_headers.get(), &new_headers1, &warning_set, &net_log);
|
| + GURL allowed_unsafe_redirect_url1;
|
| + MergeOnHeadersReceivedResponses(deltas,
|
| + base_headers.get(),
|
| + &new_headers1,
|
| + &allowed_unsafe_redirect_url1,
|
| + &warning_set,
|
| + &net_log);
|
| ASSERT_TRUE(new_headers1.get());
|
| + EXPECT_TRUE(allowed_unsafe_redirect_url1.is_empty());
|
| std::multimap<std::string, std::string> expected1;
|
| expected1.insert(std::pair<std::string, std::string>("Key2", "Value3"));
|
| void* iter = NULL;
|
| @@ -2003,9 +2021,15 @@ TEST(ExtensionWebRequestHelpersTest, TestMergeOnHeadersReceivedResponses) {
|
| warning_set.clear();
|
| capturing_net_log.Clear();
|
| scoped_refptr<net::HttpResponseHeaders> new_headers2;
|
| - MergeOnHeadersReceivedResponses(
|
| - deltas, base_headers.get(), &new_headers2, &warning_set, &net_log);
|
| + GURL allowed_unsafe_redirect_url2;
|
| + MergeOnHeadersReceivedResponses(deltas,
|
| + base_headers.get(),
|
| + &new_headers2,
|
| + &allowed_unsafe_redirect_url2,
|
| + &warning_set,
|
| + &net_log);
|
| ASSERT_TRUE(new_headers2.get());
|
| + EXPECT_TRUE(allowed_unsafe_redirect_url2.is_empty());
|
| iter = NULL;
|
| std::multimap<std::string, std::string> actual2;
|
| while (new_headers2->EnumerateHeaderLines(&iter, &name, &value)) {
|
| @@ -2043,9 +2067,15 @@ TEST(ExtensionWebRequestHelpersTest,
|
| d1->deleted_response_headers.push_back(ResponseHeader("KEY1", "Value2"));
|
| deltas.push_back(d1);
|
| scoped_refptr<net::HttpResponseHeaders> new_headers1;
|
| - MergeOnHeadersReceivedResponses(
|
| - deltas, base_headers.get(), &new_headers1, &warning_set, &net_log);
|
| + GURL allowed_unsafe_redirect_url1;
|
| + MergeOnHeadersReceivedResponses(deltas,
|
| + base_headers.get(),
|
| + &new_headers1,
|
| + &allowed_unsafe_redirect_url1,
|
| + &warning_set,
|
| + &net_log);
|
| ASSERT_TRUE(new_headers1.get());
|
| + EXPECT_TRUE(allowed_unsafe_redirect_url1.is_empty());
|
| std::multimap<std::string, std::string> expected1;
|
| expected1.insert(std::pair<std::string, std::string>("Key1", "Value1"));
|
| expected1.insert(std::pair<std::string, std::string>("Key1", "Value3"));
|
| @@ -2062,6 +2092,64 @@ TEST(ExtensionWebRequestHelpersTest,
|
| EXPECT_EQ(1u, capturing_net_log.GetSize());
|
| }
|
|
|
| +// Tests whether onHeadersReceived can initiate a redirect.
|
| +// The URL merge logic is shared with onBeforeRequest, so we only need to test
|
| +// whether the URLs are merged at all.
|
| +TEST(ExtensionWebRequestHelpersTest,
|
| + TestMergeOnHeadersReceivedResponsesRedirect) {
|
| + EventResponseDeltas deltas;
|
| + net::CapturingBoundNetLog capturing_net_log;
|
| + net::BoundNetLog net_log = capturing_net_log.bound();
|
| + ExtensionWarningSet warning_set;
|
| +
|
| + char base_headers_string[] =
|
| + "HTTP/1.0 200 OK\r\n"
|
| + "\r\n";
|
| + scoped_refptr<net::HttpResponseHeaders> base_headers(
|
| + new net::HttpResponseHeaders(net::HttpUtil::AssembleRawHeaders(
|
| + base_headers_string, sizeof(base_headers_string))));
|
| +
|
| + // No redirect
|
| + linked_ptr<EventResponseDelta> d0(
|
| + new EventResponseDelta("extid0", base::Time::FromInternalValue(0)));
|
| + deltas.push_back(d0);
|
| + scoped_refptr<net::HttpResponseHeaders> new_headers0;
|
| + GURL allowed_unsafe_redirect_url0;
|
| + MergeOnHeadersReceivedResponses(deltas,
|
| + base_headers.get(),
|
| + &new_headers0,
|
| + &allowed_unsafe_redirect_url0,
|
| + &warning_set,
|
| + &net_log);
|
| + EXPECT_FALSE(new_headers0.get());
|
| + EXPECT_TRUE(allowed_unsafe_redirect_url0.is_empty());
|
| + EXPECT_EQ(0u, warning_set.size());
|
| + EXPECT_EQ(0u, capturing_net_log.GetSize());
|
| +
|
| + // Single redirect.
|
| + GURL new_url_1("http://foo.com");
|
| + linked_ptr<EventResponseDelta> d1(
|
| + new EventResponseDelta("extid1", base::Time::FromInternalValue(1000)));
|
| + d1->new_url = GURL(new_url_1);
|
| + deltas.push_back(d1);
|
| + deltas.sort(&InDecreasingExtensionInstallationTimeOrder);
|
| + capturing_net_log.Clear();
|
| + scoped_refptr<net::HttpResponseHeaders> new_headers1;
|
| + GURL allowed_unsafe_redirect_url1;
|
| + MergeOnHeadersReceivedResponses(deltas,
|
| + base_headers.get(),
|
| + &new_headers1,
|
| + &allowed_unsafe_redirect_url1,
|
| + &warning_set,
|
| + &net_log);
|
| +
|
| + EXPECT_TRUE(new_headers1.get());
|
| + EXPECT_TRUE(new_headers1->HasHeaderValue("Location", new_url_1.spec()));
|
| + EXPECT_EQ(new_url_1, allowed_unsafe_redirect_url1);
|
| + EXPECT_TRUE(warning_set.empty());
|
| + EXPECT_EQ(1u, capturing_net_log.GetSize());
|
| +}
|
| +
|
| TEST(ExtensionWebRequestHelpersTest, TestMergeOnAuthRequiredResponses) {
|
| net::CapturingBoundNetLog capturing_net_log;
|
| net::BoundNetLog net_log = capturing_net_log.bound();
|
|
|