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(); |