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..bfa728bac95fd5bd876fd3ae8e2aaae840e33b75 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()); |
@@ -2063,6 +2065,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(); |