| Index: chrome/browser/extensions/extension_webrequest_api_unittest.cc
|
| diff --git a/chrome/browser/extensions/extension_webrequest_api_unittest.cc b/chrome/browser/extensions/extension_webrequest_api_unittest.cc
|
| index 7d6d6936698be0cca704e97661067cd8563f9848..2d266b5bd1de495c8c3e7f182db079975681ba7c 100644
|
| --- a/chrome/browser/extensions/extension_webrequest_api_unittest.cc
|
| +++ b/chrome/browser/extensions/extension_webrequest_api_unittest.cc
|
| @@ -988,6 +988,72 @@ TEST(ExtensionWebRequestHelpersTest, TestMergeOnBeforeRequestResponses) {
|
| EXPECT_EQ(4u, event_log.size());
|
| }
|
|
|
| +// This tests that we can redirect to data:// urls, which is considered
|
| +// a kind of cancelling requests.
|
| +TEST(ExtensionWebRequestHelpersTest, TestMergeOnBeforeRequestResponses2) {
|
| + using namespace extension_webrequest_api_helpers;
|
| + EventResponseDeltas deltas;
|
| + EventLogEntries event_log;
|
| + std::set<std::string> conflicting_extensions;
|
| + GURL effective_new_url;
|
| +
|
| + // Single redirect.
|
| + GURL new_url_0("http://foo.com");
|
| + linked_ptr<EventResponseDelta> d0(
|
| + new EventResponseDelta("extid0", base::Time::FromInternalValue(2000)));
|
| + d0->new_url = GURL(new_url_0);
|
| + deltas.push_back(d0);
|
| + MergeOnBeforeRequestResponses(
|
| + deltas, &effective_new_url, &conflicting_extensions, &event_log);
|
| + EXPECT_EQ(new_url_0, effective_new_url);
|
| +
|
| + // Cancel request by redirecting to a data:// URL. This shall override
|
| + // the other redirect but not cause any conflict warnings.
|
| + GURL new_url_1("data://foo");
|
| + linked_ptr<EventResponseDelta> d1(
|
| + new EventResponseDelta("extid1", base::Time::FromInternalValue(1500)));
|
| + d1->new_url = GURL(new_url_1);
|
| + deltas.push_back(d1);
|
| + deltas.sort(&InDecreasingExtensionInstallationTimeOrder);
|
| + event_log.clear();
|
| + MergeOnBeforeRequestResponses(
|
| + deltas, &effective_new_url, &conflicting_extensions, &event_log);
|
| + EXPECT_EQ(new_url_1, effective_new_url);
|
| + EXPECT_TRUE(conflicting_extensions.empty());
|
| + EXPECT_EQ(1u, event_log.size());
|
| +
|
| + // Cancel request by redirecting to the same data:// URL. This shall
|
| + // not create any conflicts as it is in line with d1.
|
| + GURL new_url_2("data://foo");
|
| + linked_ptr<EventResponseDelta> d2(
|
| + new EventResponseDelta("extid2", base::Time::FromInternalValue(1000)));
|
| + d2->new_url = GURL(new_url_2);
|
| + deltas.push_back(d2);
|
| + deltas.sort(&InDecreasingExtensionInstallationTimeOrder);
|
| + event_log.clear();
|
| + MergeOnBeforeRequestResponses(
|
| + deltas, &effective_new_url, &conflicting_extensions, &event_log);
|
| + EXPECT_EQ(new_url_1, effective_new_url);
|
| + EXPECT_TRUE(conflicting_extensions.empty());
|
| + EXPECT_EQ(2u, event_log.size());
|
| +
|
| + // Cancel redirect by redirecting to a different data:// URL. This needs
|
| + // to create a conflict.
|
| + GURL new_url_3("data://something_totally_different");
|
| + linked_ptr<EventResponseDelta> d3(
|
| + new EventResponseDelta("extid3", base::Time::FromInternalValue(500)));
|
| + d3->new_url = GURL(new_url_3);
|
| + deltas.push_back(d3);
|
| + deltas.sort(&InDecreasingExtensionInstallationTimeOrder);
|
| + event_log.clear();
|
| + MergeOnBeforeRequestResponses(
|
| + deltas, &effective_new_url, &conflicting_extensions, &event_log);
|
| + EXPECT_EQ(new_url_1, effective_new_url);
|
| + EXPECT_EQ(1u, conflicting_extensions.size());
|
| + EXPECT_TRUE(ContainsKey(conflicting_extensions, "extid3"));
|
| + EXPECT_EQ(3u, event_log.size());
|
| +}
|
| +
|
| TEST(ExtensionWebRequestHelpersTest, TestMergeOnBeforeSendHeadersResponses) {
|
| using namespace extension_webrequest_api_helpers;
|
| net::HttpRequestHeaders base_headers;
|
|
|