| 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 9ee55a747e08088ea7db2d2d2ed289b27e5b2cf2..4ede0abecb39d3ec1ad28de2d54d85fead41c251 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
|
| @@ -1275,9 +1275,11 @@ 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));
|
| + "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());
|
| @@ -1944,6 +1946,7 @@ TEST(ExtensionWebRequestHelpersTest, TestMergeOnHeadersReceivedResponses) {
|
| ExtensionWarningSet warning_set;
|
| std::string header_value;
|
| EventResponseDeltas deltas;
|
| + GURL effective_new_url;
|
|
|
| char base_headers_string[] =
|
| "HTTP/1.0 200 OK\r\n"
|
| @@ -1960,8 +1963,9 @@ 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);
|
| + MergeOnHeadersReceivedResponses(
|
| + deltas, &effective_new_url, base_headers.get(), &new_headers0,
|
| + &warning_set, &net_log);
|
| EXPECT_FALSE(new_headers0.get());
|
| EXPECT_EQ(0u, warning_set.size());
|
| EXPECT_EQ(0u, capturing_net_log.GetSize());
|
| @@ -1977,7 +1981,8 @@ TEST(ExtensionWebRequestHelpersTest, TestMergeOnHeadersReceivedResponses) {
|
| capturing_net_log.Clear();
|
| scoped_refptr<net::HttpResponseHeaders> new_headers1;
|
| MergeOnHeadersReceivedResponses(
|
| - deltas, base_headers.get(), &new_headers1, &warning_set, &net_log);
|
| + deltas, &effective_new_url, base_headers.get(), &new_headers1,
|
| + &warning_set, &net_log);
|
| ASSERT_TRUE(new_headers1.get());
|
| std::multimap<std::string, std::string> expected1;
|
| expected1.insert(std::pair<std::string, std::string>("Key2", "Value3"));
|
| @@ -2005,7 +2010,8 @@ TEST(ExtensionWebRequestHelpersTest, TestMergeOnHeadersReceivedResponses) {
|
| capturing_net_log.Clear();
|
| scoped_refptr<net::HttpResponseHeaders> new_headers2;
|
| MergeOnHeadersReceivedResponses(
|
| - deltas, base_headers.get(), &new_headers2, &warning_set, &net_log);
|
| + deltas, &effective_new_url, base_headers.get(), &new_headers2,
|
| + &warning_set, &net_log);
|
| ASSERT_TRUE(new_headers2.get());
|
| iter = NULL;
|
| std::multimap<std::string, std::string> actual2;
|
| @@ -2026,6 +2032,7 @@ TEST(ExtensionWebRequestHelpersTest,
|
| ExtensionWarningSet warning_set;
|
| std::string header_value;
|
| EventResponseDeltas deltas;
|
| + GURL effective_new_url;
|
|
|
| char base_headers_string[] =
|
| "HTTP/1.0 200 OK\r\n"
|
| @@ -2045,7 +2052,8 @@ TEST(ExtensionWebRequestHelpersTest,
|
| deltas.push_back(d1);
|
| scoped_refptr<net::HttpResponseHeaders> new_headers1;
|
| MergeOnHeadersReceivedResponses(
|
| - deltas, base_headers.get(), &new_headers1, &warning_set, &net_log);
|
| + deltas, &effective_new_url, base_headers.get(), &new_headers1,
|
| + &warning_set, &net_log);
|
| ASSERT_TRUE(new_headers1.get());
|
| std::multimap<std::string, std::string> expected1;
|
| expected1.insert(std::pair<std::string, std::string>("Key1", "Value1"));
|
| @@ -2063,6 +2071,40 @@ 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;
|
| + GURL effective_new_url;
|
| +
|
| + // No redirect
|
| + linked_ptr<EventResponseDelta> d0(
|
| + new EventResponseDelta("extid0", base::Time::FromInternalValue(0)));
|
| + deltas.push_back(d0);
|
| + MergeOnBeforeRequestResponses(
|
| + deltas, &effective_new_url, &warning_set, &net_log);
|
| + EXPECT_TRUE(effective_new_url.is_empty());
|
| +
|
| + // 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();
|
| + MergeOnBeforeRequestResponses(
|
| + deltas, &effective_new_url, &warning_set, &net_log);
|
| + EXPECT_EQ(new_url_1, effective_new_url);
|
| + 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();
|
|
|