| 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 8cd15af9a9d5389e9e67b37797a278c5764721a4..95c3b97f0a42edaa598003c5935521c731f2806e 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
|
| @@ -1756,15 +1756,21 @@ TEST(ExtensionWebRequestHelpersTest, TestMergeOnBeforeSendHeadersResponses) {
|
| linked_ptr<EventResponseDelta> d0(
|
| new EventResponseDelta("extid0", base::Time::FromInternalValue(2500)));
|
| deltas.push_back(d0);
|
| + bool request_headers_modified0;
|
| + bool request_cookies_modified0;
|
| net::HttpRequestHeaders headers0;
|
| headers0.MergeFrom(base_headers);
|
| - MergeOnBeforeSendHeadersResponses(deltas, &headers0, &warning_set, &net_log);
|
| + MergeOnBeforeSendHeadersResponses(deltas, &headers0, &warning_set, &net_log,
|
| + &request_headers_modified0,
|
| + &request_cookies_modified0);
|
| ASSERT_TRUE(headers0.GetHeader("key1", &header_value));
|
| EXPECT_EQ("value 1", header_value);
|
| ASSERT_TRUE(headers0.GetHeader("key2", &header_value));
|
| EXPECT_EQ("value 2", header_value);
|
| EXPECT_EQ(0u, warning_set.size());
|
| EXPECT_EQ(0u, capturing_net_log.GetSize());
|
| + EXPECT_FALSE(request_headers_modified0);
|
| + EXPECT_FALSE(request_cookies_modified0);
|
|
|
| // Delete, modify and add a header.
|
| linked_ptr<EventResponseDelta> d1(
|
| @@ -1776,9 +1782,13 @@ TEST(ExtensionWebRequestHelpersTest, TestMergeOnBeforeSendHeadersResponses) {
|
| deltas.sort(&InDecreasingExtensionInstallationTimeOrder);
|
| warning_set.clear();
|
| capturing_net_log.Clear();
|
| + bool request_headers_modified1;
|
| + bool request_cookies_modified1;
|
| net::HttpRequestHeaders headers1;
|
| headers1.MergeFrom(base_headers);
|
| - MergeOnBeforeSendHeadersResponses(deltas, &headers1, &warning_set, &net_log);
|
| + MergeOnBeforeSendHeadersResponses(deltas, &headers1, &warning_set, &net_log,
|
| + &request_headers_modified1,
|
| + &request_cookies_modified1);
|
| EXPECT_FALSE(headers1.HasHeader("key1"));
|
| ASSERT_TRUE(headers1.GetHeader("key2", &header_value));
|
| EXPECT_EQ("value 3", header_value);
|
| @@ -1786,6 +1796,8 @@ TEST(ExtensionWebRequestHelpersTest, TestMergeOnBeforeSendHeadersResponses) {
|
| EXPECT_EQ("value 3", header_value);
|
| EXPECT_EQ(0u, warning_set.size());
|
| EXPECT_EQ(1u, capturing_net_log.GetSize());
|
| + EXPECT_TRUE(request_headers_modified1);
|
| + EXPECT_FALSE(request_cookies_modified1);
|
|
|
| // Check that conflicts are atomic, i.e. if one header modification
|
| // collides all other conflicts of the same extension are declined as well.
|
| @@ -1798,9 +1810,13 @@ TEST(ExtensionWebRequestHelpersTest, TestMergeOnBeforeSendHeadersResponses) {
|
| deltas.sort(&InDecreasingExtensionInstallationTimeOrder);
|
| warning_set.clear();
|
| capturing_net_log.Clear();
|
| + bool request_headers_modified2;
|
| + bool request_cookies_modified2;
|
| net::HttpRequestHeaders headers2;
|
| headers2.MergeFrom(base_headers);
|
| - MergeOnBeforeSendHeadersResponses(deltas, &headers2, &warning_set, &net_log);
|
| + MergeOnBeforeSendHeadersResponses(deltas, &headers2, &warning_set, &net_log,
|
| + &request_headers_modified2,
|
| + &request_cookies_modified2);
|
| EXPECT_FALSE(headers2.HasHeader("key1"));
|
| ASSERT_TRUE(headers2.GetHeader("key2", &header_value));
|
| EXPECT_EQ("value 3", header_value);
|
| @@ -1810,6 +1826,8 @@ TEST(ExtensionWebRequestHelpersTest, TestMergeOnBeforeSendHeadersResponses) {
|
| EXPECT_EQ(1u, warning_set.size());
|
| EXPECT_TRUE(HasWarning(warning_set, "extid2"));
|
| EXPECT_EQ(2u, capturing_net_log.GetSize());
|
| + EXPECT_TRUE(request_headers_modified2);
|
| + EXPECT_FALSE(request_cookies_modified2);
|
|
|
| // Check that identical modifications don't conflict and operations
|
| // can be merged.
|
| @@ -1822,9 +1840,13 @@ TEST(ExtensionWebRequestHelpersTest, TestMergeOnBeforeSendHeadersResponses) {
|
| deltas.sort(&InDecreasingExtensionInstallationTimeOrder);
|
| warning_set.clear();
|
| capturing_net_log.Clear();
|
| + bool request_headers_modified3;
|
| + bool request_cookies_modified3;
|
| net::HttpRequestHeaders headers3;
|
| headers3.MergeFrom(base_headers);
|
| - MergeOnBeforeSendHeadersResponses(deltas, &headers3, &warning_set, &net_log);
|
| + MergeOnBeforeSendHeadersResponses(deltas, &headers3, &warning_set, &net_log,
|
| + &request_headers_modified3,
|
| + &request_cookies_modified3);
|
| EXPECT_FALSE(headers3.HasHeader("key1"));
|
| ASSERT_TRUE(headers3.GetHeader("key2", &header_value));
|
| EXPECT_EQ("value 3", header_value);
|
| @@ -1835,6 +1857,8 @@ TEST(ExtensionWebRequestHelpersTest, TestMergeOnBeforeSendHeadersResponses) {
|
| EXPECT_EQ(1u, warning_set.size());
|
| EXPECT_TRUE(HasWarning(warning_set, "extid2"));
|
| EXPECT_EQ(3u, capturing_net_log.GetSize());
|
| + EXPECT_TRUE(request_headers_modified3);
|
| + EXPECT_FALSE(request_cookies_modified3);
|
| }
|
|
|
| TEST(ExtensionWebRequestHelpersTest,
|
| @@ -1887,15 +1911,21 @@ TEST(ExtensionWebRequestHelpersTest,
|
| deltas.push_back(delta);
|
| }
|
| deltas.sort(&InDecreasingExtensionInstallationTimeOrder);
|
| + bool request_headers_modified1;
|
| + bool request_cookies_modified1;
|
| net::HttpRequestHeaders headers1;
|
| headers1.MergeFrom(base_headers);
|
| warning_set.clear();
|
| - MergeOnBeforeSendHeadersResponses(deltas, &headers1, &warning_set, &net_log);
|
| + MergeOnBeforeSendHeadersResponses(deltas, &headers1, &warning_set, &net_log,
|
| + &request_headers_modified1,
|
| + &request_cookies_modified1);
|
| EXPECT_TRUE(headers1.HasHeader("Cookie"));
|
| ASSERT_TRUE(headers1.GetHeader("Cookie", &header_value));
|
| EXPECT_EQ("name=new value; name2=new value; name4=\"value 4\"", header_value);
|
| EXPECT_EQ(0u, warning_set.size());
|
| EXPECT_EQ(0u, capturing_net_log.GetSize());
|
| + EXPECT_FALSE(request_headers_modified1);
|
| + EXPECT_TRUE(request_cookies_modified1);
|
| }
|
|
|
| namespace {
|
| @@ -1961,12 +1991,15 @@ TEST(ExtensionWebRequestHelpersTest,
|
| linked_ptr<EventResponseDelta> d0(
|
| new EventResponseDelta("extid0", base::Time::FromInternalValue(3000)));
|
| deltas.push_back(d0);
|
| + bool response_cookies_modified0;
|
| scoped_refptr<net::HttpResponseHeaders> new_headers0;
|
| MergeCookiesInOnHeadersReceivedResponses(
|
| - deltas, base_headers.get(), &new_headers0, &warning_set, &net_log);
|
| + deltas, base_headers.get(), &new_headers0, &warning_set, &net_log,
|
| + &response_cookies_modified0);
|
| EXPECT_FALSE(new_headers0.get());
|
| EXPECT_EQ(0u, warning_set.size());
|
| EXPECT_EQ(0u, capturing_net_log.GetSize());
|
| + EXPECT_FALSE(response_cookies_modified0);
|
|
|
| linked_ptr<ResponseCookieModification> add_cookie =
|
| make_linked_ptr(new ResponseCookieModification);
|
| @@ -2125,6 +2158,7 @@ TEST(ExtensionWebRequestHelpersTest,
|
| deltas.push_back(delta);
|
| }
|
| deltas.sort(&InDecreasingExtensionInstallationTimeOrder);
|
| + bool response_cookies_modified1;
|
| scoped_refptr<net::HttpResponseHeaders> headers1(
|
| new net::HttpResponseHeaders(
|
| net::HttpUtil::AssembleRawHeaders(
|
| @@ -2132,7 +2166,8 @@ TEST(ExtensionWebRequestHelpersTest,
|
| scoped_refptr<net::HttpResponseHeaders> new_headers1;
|
| warning_set.clear();
|
| MergeCookiesInOnHeadersReceivedResponses(
|
| - deltas, headers1.get(), &new_headers1, &warning_set, &net_log);
|
| + deltas, headers1.get(), &new_headers1, &warning_set, &net_log,
|
| + &response_cookies_modified1);
|
|
|
| EXPECT_TRUE(new_headers1->HasHeader("Foo"));
|
| size_t iter = 0;
|
| @@ -2158,6 +2193,7 @@ TEST(ExtensionWebRequestHelpersTest,
|
| EXPECT_EQ(expected_cookies, actual_cookies);
|
| EXPECT_EQ(0u, warning_set.size());
|
| EXPECT_EQ(0u, capturing_net_log.GetSize());
|
| + EXPECT_TRUE(response_cookies_modified1);
|
| }
|
|
|
| TEST(ExtensionWebRequestHelpersTest, TestMergeOnHeadersReceivedResponses) {
|
| @@ -2181,18 +2217,20 @@ TEST(ExtensionWebRequestHelpersTest, TestMergeOnHeadersReceivedResponses) {
|
| linked_ptr<EventResponseDelta> d0(
|
| new EventResponseDelta("extid0", base::Time::FromInternalValue(3000)));
|
| deltas.push_back(d0);
|
| + bool response_headers_modified0;
|
| + bool response_cookies_modified0;
|
| 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);
|
| + MergeOnHeadersReceivedResponses(deltas, base_headers.get(), &new_headers0,
|
| + &allowed_unsafe_redirect_url0, &warning_set,
|
| + &net_log, &response_headers_modified0,
|
| + &response_cookies_modified0);
|
| 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());
|
| + EXPECT_FALSE(response_headers_modified0);
|
| + EXPECT_FALSE(response_cookies_modified0);
|
|
|
| linked_ptr<EventResponseDelta> d1(
|
| new EventResponseDelta("extid1", base::Time::FromInternalValue(2000)));
|
| @@ -2203,14 +2241,14 @@ TEST(ExtensionWebRequestHelpersTest, TestMergeOnHeadersReceivedResponses) {
|
| deltas.sort(&InDecreasingExtensionInstallationTimeOrder);
|
| warning_set.clear();
|
| capturing_net_log.Clear();
|
| + bool response_headers_modified1;
|
| + bool response_cookies_modified1;
|
| 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);
|
| + MergeOnHeadersReceivedResponses(deltas, base_headers.get(), &new_headers1,
|
| + &allowed_unsafe_redirect_url1, &warning_set,
|
| + &net_log, &response_headers_modified1,
|
| + &response_cookies_modified1);
|
| ASSERT_TRUE(new_headers1.get());
|
| EXPECT_TRUE(allowed_unsafe_redirect_url1.is_empty());
|
| std::multimap<std::string, std::string> expected1;
|
| @@ -2225,6 +2263,8 @@ TEST(ExtensionWebRequestHelpersTest, TestMergeOnHeadersReceivedResponses) {
|
| EXPECT_EQ(expected1, actual1);
|
| EXPECT_EQ(0u, warning_set.size());
|
| EXPECT_EQ(1u, capturing_net_log.GetSize());
|
| + EXPECT_TRUE(response_headers_modified1);
|
| + EXPECT_FALSE(response_cookies_modified1);
|
|
|
| // Check that we replace response headers only once.
|
| linked_ptr<EventResponseDelta> d2(
|
| @@ -2237,14 +2277,14 @@ TEST(ExtensionWebRequestHelpersTest, TestMergeOnHeadersReceivedResponses) {
|
| deltas.sort(&InDecreasingExtensionInstallationTimeOrder);
|
| warning_set.clear();
|
| capturing_net_log.Clear();
|
| + bool response_headers_modified2;
|
| + bool response_cookies_modified2;
|
| scoped_refptr<net::HttpResponseHeaders> new_headers2;
|
| GURL allowed_unsafe_redirect_url2;
|
| - MergeOnHeadersReceivedResponses(deltas,
|
| - base_headers.get(),
|
| - &new_headers2,
|
| - &allowed_unsafe_redirect_url2,
|
| - &warning_set,
|
| - &net_log);
|
| + MergeOnHeadersReceivedResponses(deltas, base_headers.get(), &new_headers2,
|
| + &allowed_unsafe_redirect_url2, &warning_set,
|
| + &net_log, &response_headers_modified2,
|
| + &response_cookies_modified2);
|
| ASSERT_TRUE(new_headers2.get());
|
| EXPECT_TRUE(allowed_unsafe_redirect_url2.is_empty());
|
| iter = 0;
|
| @@ -2256,6 +2296,8 @@ TEST(ExtensionWebRequestHelpersTest, TestMergeOnHeadersReceivedResponses) {
|
| EXPECT_EQ(1u, warning_set.size());
|
| EXPECT_TRUE(HasWarning(warning_set, "extid2"));
|
| EXPECT_EQ(2u, capturing_net_log.GetSize());
|
| + EXPECT_TRUE(response_headers_modified2);
|
| + EXPECT_FALSE(response_cookies_modified2);
|
| }
|
|
|
| // Check that we do not delete too much
|
| @@ -2283,14 +2325,14 @@ TEST(ExtensionWebRequestHelpersTest,
|
| new EventResponseDelta("extid1", base::Time::FromInternalValue(2000)));
|
| d1->deleted_response_headers.push_back(ResponseHeader("KEY1", "Value2"));
|
| deltas.push_back(d1);
|
| + bool response_headers_modified1;
|
| + bool response_cookies_modified1;
|
| 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);
|
| + MergeOnHeadersReceivedResponses(deltas, base_headers.get(), &new_headers1,
|
| + &allowed_unsafe_redirect_url1, &warning_set,
|
| + &net_log, &response_headers_modified1,
|
| + &response_cookies_modified1);
|
| ASSERT_TRUE(new_headers1.get());
|
| EXPECT_TRUE(allowed_unsafe_redirect_url1.is_empty());
|
| std::multimap<std::string, std::string> expected1;
|
| @@ -2307,6 +2349,8 @@ TEST(ExtensionWebRequestHelpersTest,
|
| EXPECT_EQ(expected1, actual1);
|
| EXPECT_EQ(0u, warning_set.size());
|
| EXPECT_EQ(1u, capturing_net_log.GetSize());
|
| + EXPECT_TRUE(response_headers_modified1);
|
| + EXPECT_FALSE(response_cookies_modified1);
|
| }
|
|
|
| // Tests whether onHeadersReceived can initiate a redirect.
|
| @@ -2330,18 +2374,20 @@ TEST(ExtensionWebRequestHelpersTest,
|
| linked_ptr<EventResponseDelta> d0(
|
| new EventResponseDelta("extid0", base::Time::FromInternalValue(0)));
|
| deltas.push_back(d0);
|
| + bool response_headers_modified0;
|
| + bool response_cookies_modified0;
|
| 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);
|
| + MergeOnHeadersReceivedResponses(deltas, base_headers.get(), &new_headers0,
|
| + &allowed_unsafe_redirect_url0, &warning_set,
|
| + &net_log, &response_headers_modified0,
|
| + &response_cookies_modified0);
|
| 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());
|
| + EXPECT_FALSE(response_headers_modified0);
|
| + EXPECT_FALSE(response_cookies_modified0);
|
|
|
| // Single redirect.
|
| GURL new_url_1("http://foo.com");
|
| @@ -2351,20 +2397,21 @@ TEST(ExtensionWebRequestHelpersTest,
|
| deltas.push_back(d1);
|
| deltas.sort(&InDecreasingExtensionInstallationTimeOrder);
|
| capturing_net_log.Clear();
|
| + bool response_headers_modified1;
|
| + bool response_cookies_modified1;
|
| 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);
|
| -
|
| + MergeOnHeadersReceivedResponses(deltas, base_headers.get(), &new_headers1,
|
| + &allowed_unsafe_redirect_url1, &warning_set,
|
| + &net_log, &response_headers_modified1,
|
| + &response_cookies_modified1);
|
| 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());
|
| + EXPECT_FALSE(response_headers_modified1);
|
| + EXPECT_FALSE(response_cookies_modified1);
|
| }
|
|
|
| TEST(ExtensionWebRequestHelpersTest, TestMergeOnAuthRequiredResponses) {
|
|
|