Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(199)

Side by Side Diff: chrome/browser/extensions/api/web_request/web_request_api_unittest.cc

Issue 154473002: Support redirectUrl at onHeadersReceived in WebRequest / DWR API (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebased Created 6 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <map> 5 #include <map>
6 #include <queue> 6 #include <queue>
7 7
8 #include "base/basictypes.h" 8 #include "base/basictypes.h"
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/callback.h" 10 #include "base/callback.h"
(...skipping 1257 matching lines...) Expand 10 before | Expand all | Expand 10 after
1268 scoped_refptr<net::HttpResponseHeaders> base_headers( 1268 scoped_refptr<net::HttpResponseHeaders> base_headers(
1269 new net::HttpResponseHeaders( 1269 new net::HttpResponseHeaders(
1270 net::HttpUtil::AssembleRawHeaders( 1270 net::HttpUtil::AssembleRawHeaders(
1271 base_headers_string, sizeof(base_headers_string)))); 1271 base_headers_string, sizeof(base_headers_string))));
1272 1272
1273 ResponseHeaders new_headers; 1273 ResponseHeaders new_headers;
1274 new_headers.push_back(ResponseHeader("kEy1", "Value1")); // Unchanged 1274 new_headers.push_back(ResponseHeader("kEy1", "Value1")); // Unchanged
1275 new_headers.push_back(ResponseHeader("Key2", "Value1")); // Modified 1275 new_headers.push_back(ResponseHeader("Key2", "Value1")); // Modified
1276 // Key3 is deleted 1276 // Key3 is deleted
1277 new_headers.push_back(ResponseHeader("Key4", "Value4")); // Added 1277 new_headers.push_back(ResponseHeader("Key4", "Value4")); // Added
1278 GURL effective_new_url;
1278 1279
1279 scoped_ptr<EventResponseDelta> delta(CalculateOnHeadersReceivedDelta( 1280 scoped_ptr<EventResponseDelta> delta(CalculateOnHeadersReceivedDelta(
1280 "extid", base::Time::Now(), cancel, base_headers.get(), &new_headers)); 1281 "extid", base::Time::Now(), cancel, effective_new_url,
1282 base_headers.get(), &new_headers));
1281 ASSERT_TRUE(delta.get()); 1283 ASSERT_TRUE(delta.get());
1282 EXPECT_TRUE(delta->cancel); 1284 EXPECT_TRUE(delta->cancel);
1283 EXPECT_EQ(2u, delta->added_response_headers.size()); 1285 EXPECT_EQ(2u, delta->added_response_headers.size());
1284 EXPECT_TRUE(Contains(delta->added_response_headers, 1286 EXPECT_TRUE(Contains(delta->added_response_headers,
1285 ResponseHeader("Key2", "Value1"))); 1287 ResponseHeader("Key2", "Value1")));
1286 EXPECT_TRUE(Contains(delta->added_response_headers, 1288 EXPECT_TRUE(Contains(delta->added_response_headers,
1287 ResponseHeader("Key4", "Value4"))); 1289 ResponseHeader("Key4", "Value4")));
1288 EXPECT_EQ(2u, delta->deleted_response_headers.size()); 1290 EXPECT_EQ(2u, delta->deleted_response_headers.size());
1289 EXPECT_TRUE(Contains(delta->deleted_response_headers, 1291 EXPECT_TRUE(Contains(delta->deleted_response_headers,
1290 ResponseHeader("Key2", "Value2, Bar"))); 1292 ResponseHeader("Key2", "Value2, Bar")));
(...skipping 646 matching lines...) Expand 10 before | Expand all | Expand 10 after
1937 EXPECT_EQ(0u, warning_set.size()); 1939 EXPECT_EQ(0u, warning_set.size());
1938 EXPECT_EQ(0u, capturing_net_log.GetSize()); 1940 EXPECT_EQ(0u, capturing_net_log.GetSize());
1939 } 1941 }
1940 1942
1941 TEST(ExtensionWebRequestHelpersTest, TestMergeOnHeadersReceivedResponses) { 1943 TEST(ExtensionWebRequestHelpersTest, TestMergeOnHeadersReceivedResponses) {
1942 net::CapturingBoundNetLog capturing_net_log; 1944 net::CapturingBoundNetLog capturing_net_log;
1943 net::BoundNetLog net_log = capturing_net_log.bound(); 1945 net::BoundNetLog net_log = capturing_net_log.bound();
1944 ExtensionWarningSet warning_set; 1946 ExtensionWarningSet warning_set;
1945 std::string header_value; 1947 std::string header_value;
1946 EventResponseDeltas deltas; 1948 EventResponseDeltas deltas;
1949 GURL effective_new_url;
1947 1950
1948 char base_headers_string[] = 1951 char base_headers_string[] =
1949 "HTTP/1.0 200 OK\r\n" 1952 "HTTP/1.0 200 OK\r\n"
1950 "Key1: Value1\r\n" 1953 "Key1: Value1\r\n"
1951 "Key2: Value2, Foo\r\n" 1954 "Key2: Value2, Foo\r\n"
1952 "\r\n"; 1955 "\r\n";
1953 scoped_refptr<net::HttpResponseHeaders> base_headers( 1956 scoped_refptr<net::HttpResponseHeaders> base_headers(
1954 new net::HttpResponseHeaders( 1957 new net::HttpResponseHeaders(
1955 net::HttpUtil::AssembleRawHeaders( 1958 net::HttpUtil::AssembleRawHeaders(
1956 base_headers_string, sizeof(base_headers_string)))); 1959 base_headers_string, sizeof(base_headers_string))));
1957 1960
1958 // Check that we can handle if not touching the response headers. 1961 // Check that we can handle if not touching the response headers.
1959 linked_ptr<EventResponseDelta> d0( 1962 linked_ptr<EventResponseDelta> d0(
1960 new EventResponseDelta("extid0", base::Time::FromInternalValue(3000))); 1963 new EventResponseDelta("extid0", base::Time::FromInternalValue(3000)));
1961 deltas.push_back(d0); 1964 deltas.push_back(d0);
1962 scoped_refptr<net::HttpResponseHeaders> new_headers0; 1965 scoped_refptr<net::HttpResponseHeaders> new_headers0;
1963 MergeOnHeadersReceivedResponses(deltas, base_headers.get(), &new_headers0, 1966 MergeOnHeadersReceivedResponses(
1964 &warning_set, &net_log); 1967 deltas, &effective_new_url, base_headers.get(), &new_headers0,
1968 &warning_set, &net_log);
1965 EXPECT_FALSE(new_headers0.get()); 1969 EXPECT_FALSE(new_headers0.get());
1966 EXPECT_EQ(0u, warning_set.size()); 1970 EXPECT_EQ(0u, warning_set.size());
1967 EXPECT_EQ(0u, capturing_net_log.GetSize()); 1971 EXPECT_EQ(0u, capturing_net_log.GetSize());
1968 1972
1969 linked_ptr<EventResponseDelta> d1( 1973 linked_ptr<EventResponseDelta> d1(
1970 new EventResponseDelta("extid1", base::Time::FromInternalValue(2000))); 1974 new EventResponseDelta("extid1", base::Time::FromInternalValue(2000)));
1971 d1->deleted_response_headers.push_back(ResponseHeader("KEY1", "Value1")); 1975 d1->deleted_response_headers.push_back(ResponseHeader("KEY1", "Value1"));
1972 d1->deleted_response_headers.push_back(ResponseHeader("KEY2", "Value2, Foo")); 1976 d1->deleted_response_headers.push_back(ResponseHeader("KEY2", "Value2, Foo"));
1973 d1->added_response_headers.push_back(ResponseHeader("Key2", "Value3")); 1977 d1->added_response_headers.push_back(ResponseHeader("Key2", "Value3"));
1974 deltas.push_back(d1); 1978 deltas.push_back(d1);
1975 deltas.sort(&InDecreasingExtensionInstallationTimeOrder); 1979 deltas.sort(&InDecreasingExtensionInstallationTimeOrder);
1976 warning_set.clear(); 1980 warning_set.clear();
1977 capturing_net_log.Clear(); 1981 capturing_net_log.Clear();
1978 scoped_refptr<net::HttpResponseHeaders> new_headers1; 1982 scoped_refptr<net::HttpResponseHeaders> new_headers1;
1979 MergeOnHeadersReceivedResponses( 1983 MergeOnHeadersReceivedResponses(
1980 deltas, base_headers.get(), &new_headers1, &warning_set, &net_log); 1984 deltas, &effective_new_url, base_headers.get(), &new_headers1,
1985 &warning_set, &net_log);
1981 ASSERT_TRUE(new_headers1.get()); 1986 ASSERT_TRUE(new_headers1.get());
1982 std::multimap<std::string, std::string> expected1; 1987 std::multimap<std::string, std::string> expected1;
1983 expected1.insert(std::pair<std::string, std::string>("Key2", "Value3")); 1988 expected1.insert(std::pair<std::string, std::string>("Key2", "Value3"));
1984 void* iter = NULL; 1989 void* iter = NULL;
1985 std::string name; 1990 std::string name;
1986 std::string value; 1991 std::string value;
1987 std::multimap<std::string, std::string> actual1; 1992 std::multimap<std::string, std::string> actual1;
1988 while (new_headers1->EnumerateHeaderLines(&iter, &name, &value)) { 1993 while (new_headers1->EnumerateHeaderLines(&iter, &name, &value)) {
1989 actual1.insert(std::pair<std::string, std::string>(name, value)); 1994 actual1.insert(std::pair<std::string, std::string>(name, value));
1990 } 1995 }
1991 EXPECT_EQ(expected1, actual1); 1996 EXPECT_EQ(expected1, actual1);
1992 EXPECT_EQ(0u, warning_set.size()); 1997 EXPECT_EQ(0u, warning_set.size());
1993 EXPECT_EQ(1u, capturing_net_log.GetSize()); 1998 EXPECT_EQ(1u, capturing_net_log.GetSize());
1994 1999
1995 // Check that we replace response headers only once. 2000 // Check that we replace response headers only once.
1996 linked_ptr<EventResponseDelta> d2( 2001 linked_ptr<EventResponseDelta> d2(
1997 new EventResponseDelta("extid2", base::Time::FromInternalValue(1500))); 2002 new EventResponseDelta("extid2", base::Time::FromInternalValue(1500)));
1998 // Note that we use a different capitalization of KeY2. This should not 2003 // Note that we use a different capitalization of KeY2. This should not
1999 // matter. 2004 // matter.
2000 d2->deleted_response_headers.push_back(ResponseHeader("KeY2", "Value2, Foo")); 2005 d2->deleted_response_headers.push_back(ResponseHeader("KeY2", "Value2, Foo"));
2001 d2->added_response_headers.push_back(ResponseHeader("Key2", "Value4")); 2006 d2->added_response_headers.push_back(ResponseHeader("Key2", "Value4"));
2002 deltas.push_back(d2); 2007 deltas.push_back(d2);
2003 deltas.sort(&InDecreasingExtensionInstallationTimeOrder); 2008 deltas.sort(&InDecreasingExtensionInstallationTimeOrder);
2004 warning_set.clear(); 2009 warning_set.clear();
2005 capturing_net_log.Clear(); 2010 capturing_net_log.Clear();
2006 scoped_refptr<net::HttpResponseHeaders> new_headers2; 2011 scoped_refptr<net::HttpResponseHeaders> new_headers2;
2007 MergeOnHeadersReceivedResponses( 2012 MergeOnHeadersReceivedResponses(
2008 deltas, base_headers.get(), &new_headers2, &warning_set, &net_log); 2013 deltas, &effective_new_url, base_headers.get(), &new_headers2,
2014 &warning_set, &net_log);
2009 ASSERT_TRUE(new_headers2.get()); 2015 ASSERT_TRUE(new_headers2.get());
2010 iter = NULL; 2016 iter = NULL;
2011 std::multimap<std::string, std::string> actual2; 2017 std::multimap<std::string, std::string> actual2;
2012 while (new_headers2->EnumerateHeaderLines(&iter, &name, &value)) { 2018 while (new_headers2->EnumerateHeaderLines(&iter, &name, &value)) {
2013 actual2.insert(std::pair<std::string, std::string>(name, value)); 2019 actual2.insert(std::pair<std::string, std::string>(name, value));
2014 } 2020 }
2015 EXPECT_EQ(expected1, actual2); 2021 EXPECT_EQ(expected1, actual2);
2016 EXPECT_EQ(1u, warning_set.size()); 2022 EXPECT_EQ(1u, warning_set.size());
2017 EXPECT_TRUE(HasWarning(warning_set, "extid2")); 2023 EXPECT_TRUE(HasWarning(warning_set, "extid2"));
2018 EXPECT_EQ(2u, capturing_net_log.GetSize()); 2024 EXPECT_EQ(2u, capturing_net_log.GetSize());
2019 } 2025 }
2020 2026
2021 // Check that we do not delete too much 2027 // Check that we do not delete too much
2022 TEST(ExtensionWebRequestHelpersTest, 2028 TEST(ExtensionWebRequestHelpersTest,
2023 TestMergeOnHeadersReceivedResponsesDeletion) { 2029 TestMergeOnHeadersReceivedResponsesDeletion) {
2024 net::CapturingBoundNetLog capturing_net_log; 2030 net::CapturingBoundNetLog capturing_net_log;
2025 net::BoundNetLog net_log = capturing_net_log.bound(); 2031 net::BoundNetLog net_log = capturing_net_log.bound();
2026 ExtensionWarningSet warning_set; 2032 ExtensionWarningSet warning_set;
2027 std::string header_value; 2033 std::string header_value;
2028 EventResponseDeltas deltas; 2034 EventResponseDeltas deltas;
2035 GURL effective_new_url;
2029 2036
2030 char base_headers_string[] = 2037 char base_headers_string[] =
2031 "HTTP/1.0 200 OK\r\n" 2038 "HTTP/1.0 200 OK\r\n"
2032 "Key1: Value1\r\n" 2039 "Key1: Value1\r\n"
2033 "Key1: Value2\r\n" 2040 "Key1: Value2\r\n"
2034 "Key1: Value3\r\n" 2041 "Key1: Value3\r\n"
2035 "Key2: Value4\r\n" 2042 "Key2: Value4\r\n"
2036 "\r\n"; 2043 "\r\n";
2037 scoped_refptr<net::HttpResponseHeaders> base_headers( 2044 scoped_refptr<net::HttpResponseHeaders> base_headers(
2038 new net::HttpResponseHeaders( 2045 new net::HttpResponseHeaders(
2039 net::HttpUtil::AssembleRawHeaders( 2046 net::HttpUtil::AssembleRawHeaders(
2040 base_headers_string, sizeof(base_headers_string)))); 2047 base_headers_string, sizeof(base_headers_string))));
2041 2048
2042 linked_ptr<EventResponseDelta> d1( 2049 linked_ptr<EventResponseDelta> d1(
2043 new EventResponseDelta("extid1", base::Time::FromInternalValue(2000))); 2050 new EventResponseDelta("extid1", base::Time::FromInternalValue(2000)));
2044 d1->deleted_response_headers.push_back(ResponseHeader("KEY1", "Value2")); 2051 d1->deleted_response_headers.push_back(ResponseHeader("KEY1", "Value2"));
2045 deltas.push_back(d1); 2052 deltas.push_back(d1);
2046 scoped_refptr<net::HttpResponseHeaders> new_headers1; 2053 scoped_refptr<net::HttpResponseHeaders> new_headers1;
2047 MergeOnHeadersReceivedResponses( 2054 MergeOnHeadersReceivedResponses(
2048 deltas, base_headers.get(), &new_headers1, &warning_set, &net_log); 2055 deltas, &effective_new_url, base_headers.get(), &new_headers1,
2056 &warning_set, &net_log);
2049 ASSERT_TRUE(new_headers1.get()); 2057 ASSERT_TRUE(new_headers1.get());
2050 std::multimap<std::string, std::string> expected1; 2058 std::multimap<std::string, std::string> expected1;
2051 expected1.insert(std::pair<std::string, std::string>("Key1", "Value1")); 2059 expected1.insert(std::pair<std::string, std::string>("Key1", "Value1"));
2052 expected1.insert(std::pair<std::string, std::string>("Key1", "Value3")); 2060 expected1.insert(std::pair<std::string, std::string>("Key1", "Value3"));
2053 expected1.insert(std::pair<std::string, std::string>("Key2", "Value4")); 2061 expected1.insert(std::pair<std::string, std::string>("Key2", "Value4"));
2054 void* iter = NULL; 2062 void* iter = NULL;
2055 std::string name; 2063 std::string name;
2056 std::string value; 2064 std::string value;
2057 std::multimap<std::string, std::string> actual1; 2065 std::multimap<std::string, std::string> actual1;
2058 while (new_headers1->EnumerateHeaderLines(&iter, &name, &value)) { 2066 while (new_headers1->EnumerateHeaderLines(&iter, &name, &value)) {
2059 actual1.insert(std::pair<std::string, std::string>(name, value)); 2067 actual1.insert(std::pair<std::string, std::string>(name, value));
2060 } 2068 }
2061 EXPECT_EQ(expected1, actual1); 2069 EXPECT_EQ(expected1, actual1);
2062 EXPECT_EQ(0u, warning_set.size()); 2070 EXPECT_EQ(0u, warning_set.size());
2063 EXPECT_EQ(1u, capturing_net_log.GetSize()); 2071 EXPECT_EQ(1u, capturing_net_log.GetSize());
2064 } 2072 }
2065 2073
2074 // Tests whether onHeadersReceived can initiate a redirect.
2075 // The URL merge logic is shared with onBeforeRequest, so we only need to test
2076 // whether the URLs are merged at all.
2077 TEST(ExtensionWebRequestHelpersTest,
2078 TestMergeOnHeadersReceivedResponsesRedirect) {
2079 EventResponseDeltas deltas;
2080 net::CapturingBoundNetLog capturing_net_log;
2081 net::BoundNetLog net_log = capturing_net_log.bound();
2082 ExtensionWarningSet warning_set;
2083 GURL effective_new_url;
2084
2085 // No redirect
2086 linked_ptr<EventResponseDelta> d0(
2087 new EventResponseDelta("extid0", base::Time::FromInternalValue(0)));
2088 deltas.push_back(d0);
2089 MergeOnBeforeRequestResponses(
2090 deltas, &effective_new_url, &warning_set, &net_log);
2091 EXPECT_TRUE(effective_new_url.is_empty());
2092
2093 // Single redirect.
2094 GURL new_url_1("http://foo.com");
2095 linked_ptr<EventResponseDelta> d1(
2096 new EventResponseDelta("extid1", base::Time::FromInternalValue(1000)));
2097 d1->new_url = GURL(new_url_1);
2098 deltas.push_back(d1);
2099 deltas.sort(&InDecreasingExtensionInstallationTimeOrder);
2100 capturing_net_log.Clear();
2101 MergeOnBeforeRequestResponses(
2102 deltas, &effective_new_url, &warning_set, &net_log);
2103 EXPECT_EQ(new_url_1, effective_new_url);
2104 EXPECT_TRUE(warning_set.empty());
2105 EXPECT_EQ(1u, capturing_net_log.GetSize());
2106 }
2107
2066 TEST(ExtensionWebRequestHelpersTest, TestMergeOnAuthRequiredResponses) { 2108 TEST(ExtensionWebRequestHelpersTest, TestMergeOnAuthRequiredResponses) {
2067 net::CapturingBoundNetLog capturing_net_log; 2109 net::CapturingBoundNetLog capturing_net_log;
2068 net::BoundNetLog net_log = capturing_net_log.bound(); 2110 net::BoundNetLog net_log = capturing_net_log.bound();
2069 ExtensionWarningSet warning_set; 2111 ExtensionWarningSet warning_set;
2070 EventResponseDeltas deltas; 2112 EventResponseDeltas deltas;
2071 base::string16 username = base::ASCIIToUTF16("foo"); 2113 base::string16 username = base::ASCIIToUTF16("foo");
2072 base::string16 password = base::ASCIIToUTF16("bar"); 2114 base::string16 password = base::ASCIIToUTF16("bar");
2073 base::string16 password2 = base::ASCIIToUTF16("baz"); 2115 base::string16 password2 = base::ASCIIToUTF16("baz");
2074 2116
2075 // Check that we can handle if not returning credentials. 2117 // Check that we can handle if not returning credentials.
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
2136 EXPECT_TRUE(credentials_set); 2178 EXPECT_TRUE(credentials_set);
2137 EXPECT_FALSE(auth3.Empty()); 2179 EXPECT_FALSE(auth3.Empty());
2138 EXPECT_EQ(username, auth1.username()); 2180 EXPECT_EQ(username, auth1.username());
2139 EXPECT_EQ(password, auth1.password()); 2181 EXPECT_EQ(password, auth1.password());
2140 EXPECT_EQ(1u, warning_set.size()); 2182 EXPECT_EQ(1u, warning_set.size());
2141 EXPECT_TRUE(HasWarning(warning_set, "extid2")); 2183 EXPECT_TRUE(HasWarning(warning_set, "extid2"));
2142 EXPECT_EQ(3u, capturing_net_log.GetSize()); 2184 EXPECT_EQ(3u, capturing_net_log.GetSize());
2143 } 2185 }
2144 2186
2145 } // namespace extensions 2187 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698