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

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

Issue 2708923005: Extensions: Add metrics for Web Request API actions. (Closed)
Patch Set: Rename enum WebRequestAction -> RequestAction in histograms.xml to be in line with the implementation. Created 3 years, 9 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
« no previous file with comments | « no previous file | extensions/browser/api/web_request/web_request_api.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 <stddef.h> 5 #include <stddef.h>
6 #include <stdint.h> 6 #include <stdint.h>
7 7
8 #include <map> 8 #include <map>
9 #include <memory> 9 #include <memory>
10 #include <queue> 10 #include <queue>
(...skipping 1758 matching lines...) Expand 10 before | Expand all | Expand 10 after
1769 net::BoundTestNetLog capturing_net_log; 1769 net::BoundTestNetLog capturing_net_log;
1770 net::NetLogWithSource net_log = capturing_net_log.bound(); 1770 net::NetLogWithSource net_log = capturing_net_log.bound();
1771 WarningSet warning_set; 1771 WarningSet warning_set;
1772 std::string header_value; 1772 std::string header_value;
1773 EventResponseDeltas deltas; 1773 EventResponseDeltas deltas;
1774 1774
1775 // Check that we can handle not changing the headers. 1775 // Check that we can handle not changing the headers.
1776 linked_ptr<EventResponseDelta> d0( 1776 linked_ptr<EventResponseDelta> d0(
1777 new EventResponseDelta("extid0", base::Time::FromInternalValue(2500))); 1777 new EventResponseDelta("extid0", base::Time::FromInternalValue(2500)));
1778 deltas.push_back(d0); 1778 deltas.push_back(d0);
1779 bool request_headers_modified0;
1779 net::HttpRequestHeaders headers0; 1780 net::HttpRequestHeaders headers0;
1780 headers0.MergeFrom(base_headers); 1781 headers0.MergeFrom(base_headers);
1781 MergeOnBeforeSendHeadersResponses(deltas, &headers0, &warning_set, &net_log); 1782 MergeOnBeforeSendHeadersResponses(deltas, &headers0, &warning_set, &net_log,
1783 &request_headers_modified0);
1782 ASSERT_TRUE(headers0.GetHeader("key1", &header_value)); 1784 ASSERT_TRUE(headers0.GetHeader("key1", &header_value));
1783 EXPECT_EQ("value 1", header_value); 1785 EXPECT_EQ("value 1", header_value);
1784 ASSERT_TRUE(headers0.GetHeader("key2", &header_value)); 1786 ASSERT_TRUE(headers0.GetHeader("key2", &header_value));
1785 EXPECT_EQ("value 2", header_value); 1787 EXPECT_EQ("value 2", header_value);
1786 EXPECT_EQ(0u, warning_set.size()); 1788 EXPECT_EQ(0u, warning_set.size());
1787 EXPECT_EQ(0u, capturing_net_log.GetSize()); 1789 EXPECT_EQ(0u, capturing_net_log.GetSize());
1790 EXPECT_FALSE(request_headers_modified0);
1788 1791
1789 // Delete, modify and add a header. 1792 // Delete, modify and add a header.
1790 linked_ptr<EventResponseDelta> d1( 1793 linked_ptr<EventResponseDelta> d1(
1791 new EventResponseDelta("extid1", base::Time::FromInternalValue(2000))); 1794 new EventResponseDelta("extid1", base::Time::FromInternalValue(2000)));
1792 d1->deleted_request_headers.push_back("key1"); 1795 d1->deleted_request_headers.push_back("key1");
1793 d1->modified_request_headers.SetHeader("key2", "value 3"); 1796 d1->modified_request_headers.SetHeader("key2", "value 3");
1794 d1->modified_request_headers.SetHeader("key3", "value 3"); 1797 d1->modified_request_headers.SetHeader("key3", "value 3");
1795 deltas.push_back(d1); 1798 deltas.push_back(d1);
1796 deltas.sort(&InDecreasingExtensionInstallationTimeOrder); 1799 deltas.sort(&InDecreasingExtensionInstallationTimeOrder);
1797 warning_set.clear(); 1800 warning_set.clear();
1798 capturing_net_log.Clear(); 1801 capturing_net_log.Clear();
1802 bool request_headers_modified1;
1799 net::HttpRequestHeaders headers1; 1803 net::HttpRequestHeaders headers1;
1800 headers1.MergeFrom(base_headers); 1804 headers1.MergeFrom(base_headers);
1801 MergeOnBeforeSendHeadersResponses(deltas, &headers1, &warning_set, &net_log); 1805 MergeOnBeforeSendHeadersResponses(deltas, &headers1, &warning_set, &net_log,
1806 &request_headers_modified1);
1802 EXPECT_FALSE(headers1.HasHeader("key1")); 1807 EXPECT_FALSE(headers1.HasHeader("key1"));
1803 ASSERT_TRUE(headers1.GetHeader("key2", &header_value)); 1808 ASSERT_TRUE(headers1.GetHeader("key2", &header_value));
1804 EXPECT_EQ("value 3", header_value); 1809 EXPECT_EQ("value 3", header_value);
1805 ASSERT_TRUE(headers1.GetHeader("key3", &header_value)); 1810 ASSERT_TRUE(headers1.GetHeader("key3", &header_value));
1806 EXPECT_EQ("value 3", header_value); 1811 EXPECT_EQ("value 3", header_value);
1807 EXPECT_EQ(0u, warning_set.size()); 1812 EXPECT_EQ(0u, warning_set.size());
1808 EXPECT_EQ(1u, capturing_net_log.GetSize()); 1813 EXPECT_EQ(1u, capturing_net_log.GetSize());
1814 EXPECT_TRUE(request_headers_modified1);
1809 1815
1810 // Check that conflicts are atomic, i.e. if one header modification 1816 // Check that conflicts are atomic, i.e. if one header modification
1811 // collides all other conflicts of the same extension are declined as well. 1817 // collides all other conflicts of the same extension are declined as well.
1812 linked_ptr<EventResponseDelta> d2( 1818 linked_ptr<EventResponseDelta> d2(
1813 new EventResponseDelta("extid2", base::Time::FromInternalValue(1500))); 1819 new EventResponseDelta("extid2", base::Time::FromInternalValue(1500)));
1814 // This one conflicts: 1820 // This one conflicts:
1815 d2->modified_request_headers.SetHeader("key3", "value 0"); 1821 d2->modified_request_headers.SetHeader("key3", "value 0");
1816 d2->modified_request_headers.SetHeader("key4", "value 4"); 1822 d2->modified_request_headers.SetHeader("key4", "value 4");
1817 deltas.push_back(d2); 1823 deltas.push_back(d2);
1818 deltas.sort(&InDecreasingExtensionInstallationTimeOrder); 1824 deltas.sort(&InDecreasingExtensionInstallationTimeOrder);
1819 warning_set.clear(); 1825 warning_set.clear();
1820 capturing_net_log.Clear(); 1826 capturing_net_log.Clear();
1827 bool request_headers_modified2;
1821 net::HttpRequestHeaders headers2; 1828 net::HttpRequestHeaders headers2;
1822 headers2.MergeFrom(base_headers); 1829 headers2.MergeFrom(base_headers);
1823 MergeOnBeforeSendHeadersResponses(deltas, &headers2, &warning_set, &net_log); 1830 MergeOnBeforeSendHeadersResponses(deltas, &headers2, &warning_set, &net_log,
1831 &request_headers_modified2);
1824 EXPECT_FALSE(headers2.HasHeader("key1")); 1832 EXPECT_FALSE(headers2.HasHeader("key1"));
1825 ASSERT_TRUE(headers2.GetHeader("key2", &header_value)); 1833 ASSERT_TRUE(headers2.GetHeader("key2", &header_value));
1826 EXPECT_EQ("value 3", header_value); 1834 EXPECT_EQ("value 3", header_value);
1827 ASSERT_TRUE(headers2.GetHeader("key3", &header_value)); 1835 ASSERT_TRUE(headers2.GetHeader("key3", &header_value));
1828 EXPECT_EQ("value 3", header_value); 1836 EXPECT_EQ("value 3", header_value);
1829 EXPECT_FALSE(headers2.HasHeader("key4")); 1837 EXPECT_FALSE(headers2.HasHeader("key4"));
1830 EXPECT_EQ(1u, warning_set.size()); 1838 EXPECT_EQ(1u, warning_set.size());
1831 EXPECT_TRUE(HasWarning(warning_set, "extid2")); 1839 EXPECT_TRUE(HasWarning(warning_set, "extid2"));
1832 EXPECT_EQ(2u, capturing_net_log.GetSize()); 1840 EXPECT_EQ(2u, capturing_net_log.GetSize());
1841 EXPECT_TRUE(request_headers_modified2);
1833 1842
1834 // Check that identical modifications don't conflict and operations 1843 // Check that identical modifications don't conflict and operations
1835 // can be merged. 1844 // can be merged.
1836 linked_ptr<EventResponseDelta> d3( 1845 linked_ptr<EventResponseDelta> d3(
1837 new EventResponseDelta("extid3", base::Time::FromInternalValue(1000))); 1846 new EventResponseDelta("extid3", base::Time::FromInternalValue(1000)));
1838 d3->deleted_request_headers.push_back("key1"); 1847 d3->deleted_request_headers.push_back("key1");
1839 d3->modified_request_headers.SetHeader("key2", "value 3"); 1848 d3->modified_request_headers.SetHeader("key2", "value 3");
1840 d3->modified_request_headers.SetHeader("key5", "value 5"); 1849 d3->modified_request_headers.SetHeader("key5", "value 5");
1841 deltas.push_back(d3); 1850 deltas.push_back(d3);
1842 deltas.sort(&InDecreasingExtensionInstallationTimeOrder); 1851 deltas.sort(&InDecreasingExtensionInstallationTimeOrder);
1843 warning_set.clear(); 1852 warning_set.clear();
1844 capturing_net_log.Clear(); 1853 capturing_net_log.Clear();
1854 bool request_headers_modified3;
1845 net::HttpRequestHeaders headers3; 1855 net::HttpRequestHeaders headers3;
1846 headers3.MergeFrom(base_headers); 1856 headers3.MergeFrom(base_headers);
1847 MergeOnBeforeSendHeadersResponses(deltas, &headers3, &warning_set, &net_log); 1857 MergeOnBeforeSendHeadersResponses(deltas, &headers3, &warning_set, &net_log,
1858 &request_headers_modified3);
1848 EXPECT_FALSE(headers3.HasHeader("key1")); 1859 EXPECT_FALSE(headers3.HasHeader("key1"));
1849 ASSERT_TRUE(headers3.GetHeader("key2", &header_value)); 1860 ASSERT_TRUE(headers3.GetHeader("key2", &header_value));
1850 EXPECT_EQ("value 3", header_value); 1861 EXPECT_EQ("value 3", header_value);
1851 ASSERT_TRUE(headers3.GetHeader("key3", &header_value)); 1862 ASSERT_TRUE(headers3.GetHeader("key3", &header_value));
1852 EXPECT_EQ("value 3", header_value); 1863 EXPECT_EQ("value 3", header_value);
1853 ASSERT_TRUE(headers3.GetHeader("key5", &header_value)); 1864 ASSERT_TRUE(headers3.GetHeader("key5", &header_value));
1854 EXPECT_EQ("value 5", header_value); 1865 EXPECT_EQ("value 5", header_value);
1855 EXPECT_EQ(1u, warning_set.size()); 1866 EXPECT_EQ(1u, warning_set.size());
1856 EXPECT_TRUE(HasWarning(warning_set, "extid2")); 1867 EXPECT_TRUE(HasWarning(warning_set, "extid2"));
1857 EXPECT_EQ(3u, capturing_net_log.GetSize()); 1868 EXPECT_EQ(3u, capturing_net_log.GetSize());
1869 EXPECT_TRUE(request_headers_modified3);
1858 } 1870 }
1859 1871
1860 TEST(ExtensionWebRequestHelpersTest, 1872 TEST(ExtensionWebRequestHelpersTest,
1861 TestMergeOnBeforeSendHeadersResponses_Cookies) { 1873 TestMergeOnBeforeSendHeadersResponses_Cookies) {
1862 net::HttpRequestHeaders base_headers; 1874 net::HttpRequestHeaders base_headers;
1863 base_headers.AddHeaderFromString( 1875 base_headers.AddHeaderFromString(
1864 "Cookie: name=value; name2=value2; name3=\"value3\""); 1876 "Cookie: name=value; name2=value2; name3=\"value3\"");
1865 net::BoundTestNetLog capturing_net_log; 1877 net::BoundTestNetLog capturing_net_log;
1866 net::NetLogWithSource net_log = capturing_net_log.bound(); 1878 net::NetLogWithSource net_log = capturing_net_log.bound();
1867 WarningSet warning_set; 1879 WarningSet warning_set;
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
1900 add_cookie, add_cookie_2, edit_cookie, remove_cookie 1912 add_cookie, add_cookie_2, edit_cookie, remove_cookie
1901 }; 1913 };
1902 1914
1903 for (size_t i = 0; i < arraysize(operations); ++i) { 1915 for (size_t i = 0; i < arraysize(operations); ++i) {
1904 linked_ptr<EventResponseDelta> delta( 1916 linked_ptr<EventResponseDelta> delta(
1905 new EventResponseDelta("extid0", base::Time::FromInternalValue(i * 5))); 1917 new EventResponseDelta("extid0", base::Time::FromInternalValue(i * 5)));
1906 delta->request_cookie_modifications.push_back(operations[i]); 1918 delta->request_cookie_modifications.push_back(operations[i]);
1907 deltas.push_back(delta); 1919 deltas.push_back(delta);
1908 } 1920 }
1909 deltas.sort(&InDecreasingExtensionInstallationTimeOrder); 1921 deltas.sort(&InDecreasingExtensionInstallationTimeOrder);
1922 bool request_headers_modified1;
1910 net::HttpRequestHeaders headers1; 1923 net::HttpRequestHeaders headers1;
1911 headers1.MergeFrom(base_headers); 1924 headers1.MergeFrom(base_headers);
1912 warning_set.clear(); 1925 warning_set.clear();
1913 MergeOnBeforeSendHeadersResponses(deltas, &headers1, &warning_set, &net_log); 1926 MergeOnBeforeSendHeadersResponses(deltas, &headers1, &warning_set, &net_log,
1927 &request_headers_modified1);
1914 EXPECT_TRUE(headers1.HasHeader("Cookie")); 1928 EXPECT_TRUE(headers1.HasHeader("Cookie"));
1915 ASSERT_TRUE(headers1.GetHeader("Cookie", &header_value)); 1929 ASSERT_TRUE(headers1.GetHeader("Cookie", &header_value));
1916 EXPECT_EQ("name=new value; name2=new value; name4=\"value 4\"", header_value); 1930 EXPECT_EQ("name=new value; name2=new value; name4=\"value 4\"", header_value);
1917 EXPECT_EQ(0u, warning_set.size()); 1931 EXPECT_EQ(0u, warning_set.size());
1918 EXPECT_EQ(0u, capturing_net_log.GetSize()); 1932 EXPECT_EQ(0u, capturing_net_log.GetSize());
1933 EXPECT_FALSE(request_headers_modified1);
1919 } 1934 }
1920 1935
1921 namespace { 1936 namespace {
1922 1937
1923 std::string GetCookieExpirationDate(int delta_secs) { 1938 std::string GetCookieExpirationDate(int delta_secs) {
1924 const char* const kWeekDays[] = { 1939 const char* const kWeekDays[] = {
1925 "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" 1940 "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"
1926 }; 1941 };
1927 const char* const kMonthNames[] = { 1942 const char* const kMonthNames[] = {
1928 "Jan", "Feb", "Mar", "Apr", "May", "Jun", 1943 "Jan", "Feb", "Mar", "Apr", "May", "Jun",
(...skipping 265 matching lines...) Expand 10 before | Expand all | Expand 10 after
2194 "\r\n"; 2209 "\r\n";
2195 scoped_refptr<net::HttpResponseHeaders> base_headers( 2210 scoped_refptr<net::HttpResponseHeaders> base_headers(
2196 new net::HttpResponseHeaders( 2211 new net::HttpResponseHeaders(
2197 net::HttpUtil::AssembleRawHeaders( 2212 net::HttpUtil::AssembleRawHeaders(
2198 base_headers_string, sizeof(base_headers_string)))); 2213 base_headers_string, sizeof(base_headers_string))));
2199 2214
2200 // Check that we can handle if not touching the response headers. 2215 // Check that we can handle if not touching the response headers.
2201 linked_ptr<EventResponseDelta> d0( 2216 linked_ptr<EventResponseDelta> d0(
2202 new EventResponseDelta("extid0", base::Time::FromInternalValue(3000))); 2217 new EventResponseDelta("extid0", base::Time::FromInternalValue(3000)));
2203 deltas.push_back(d0); 2218 deltas.push_back(d0);
2219 bool response_headers_modified0;
2204 scoped_refptr<net::HttpResponseHeaders> new_headers0; 2220 scoped_refptr<net::HttpResponseHeaders> new_headers0;
2205 GURL allowed_unsafe_redirect_url0; 2221 GURL allowed_unsafe_redirect_url0;
2206 MergeOnHeadersReceivedResponses(GURL(kExampleUrl), deltas, base_headers.get(), 2222 MergeOnHeadersReceivedResponses(GURL(kExampleUrl), deltas, base_headers.get(),
2207 &new_headers0, &allowed_unsafe_redirect_url0, 2223 &new_headers0, &allowed_unsafe_redirect_url0,
2208 &warning_set, &net_log); 2224 &warning_set, &net_log,
2225 &response_headers_modified0);
2209 EXPECT_FALSE(new_headers0.get()); 2226 EXPECT_FALSE(new_headers0.get());
2210 EXPECT_TRUE(allowed_unsafe_redirect_url0.is_empty()); 2227 EXPECT_TRUE(allowed_unsafe_redirect_url0.is_empty());
2211 EXPECT_EQ(0u, warning_set.size()); 2228 EXPECT_EQ(0u, warning_set.size());
2212 EXPECT_EQ(0u, capturing_net_log.GetSize()); 2229 EXPECT_EQ(0u, capturing_net_log.GetSize());
2230 EXPECT_FALSE(response_headers_modified0);
2213 2231
2214 linked_ptr<EventResponseDelta> d1( 2232 linked_ptr<EventResponseDelta> d1(
2215 new EventResponseDelta("extid1", base::Time::FromInternalValue(2000))); 2233 new EventResponseDelta("extid1", base::Time::FromInternalValue(2000)));
2216 d1->deleted_response_headers.push_back(ResponseHeader("KEY1", "Value1")); 2234 d1->deleted_response_headers.push_back(ResponseHeader("KEY1", "Value1"));
2217 d1->deleted_response_headers.push_back(ResponseHeader("KEY2", "Value2, Foo")); 2235 d1->deleted_response_headers.push_back(ResponseHeader("KEY2", "Value2, Foo"));
2218 d1->added_response_headers.push_back(ResponseHeader("Key2", "Value3")); 2236 d1->added_response_headers.push_back(ResponseHeader("Key2", "Value3"));
2219 deltas.push_back(d1); 2237 deltas.push_back(d1);
2220 deltas.sort(&InDecreasingExtensionInstallationTimeOrder); 2238 deltas.sort(&InDecreasingExtensionInstallationTimeOrder);
2221 warning_set.clear(); 2239 warning_set.clear();
2222 capturing_net_log.Clear(); 2240 capturing_net_log.Clear();
2241 bool response_headers_modified1;
2223 scoped_refptr<net::HttpResponseHeaders> new_headers1; 2242 scoped_refptr<net::HttpResponseHeaders> new_headers1;
2224 GURL allowed_unsafe_redirect_url1; 2243 GURL allowed_unsafe_redirect_url1;
2225 MergeOnHeadersReceivedResponses(GURL(kExampleUrl), deltas, base_headers.get(), 2244 MergeOnHeadersReceivedResponses(GURL(kExampleUrl), deltas, base_headers.get(),
2226 &new_headers1, &allowed_unsafe_redirect_url1, 2245 &new_headers1, &allowed_unsafe_redirect_url1,
2227 &warning_set, &net_log); 2246 &warning_set, &net_log,
2247 &response_headers_modified1);
2228 ASSERT_TRUE(new_headers1.get()); 2248 ASSERT_TRUE(new_headers1.get());
2229 EXPECT_TRUE(allowed_unsafe_redirect_url1.is_empty()); 2249 EXPECT_TRUE(allowed_unsafe_redirect_url1.is_empty());
2230 std::multimap<std::string, std::string> expected1; 2250 std::multimap<std::string, std::string> expected1;
2231 expected1.insert(std::pair<std::string, std::string>("Key2", "Value3")); 2251 expected1.insert(std::pair<std::string, std::string>("Key2", "Value3"));
2232 size_t iter = 0; 2252 size_t iter = 0;
2233 std::string name; 2253 std::string name;
2234 std::string value; 2254 std::string value;
2235 std::multimap<std::string, std::string> actual1; 2255 std::multimap<std::string, std::string> actual1;
2236 while (new_headers1->EnumerateHeaderLines(&iter, &name, &value)) { 2256 while (new_headers1->EnumerateHeaderLines(&iter, &name, &value)) {
2237 actual1.insert(std::pair<std::string, std::string>(name, value)); 2257 actual1.insert(std::pair<std::string, std::string>(name, value));
2238 } 2258 }
2239 EXPECT_EQ(expected1, actual1); 2259 EXPECT_EQ(expected1, actual1);
2240 EXPECT_EQ(0u, warning_set.size()); 2260 EXPECT_EQ(0u, warning_set.size());
2241 EXPECT_EQ(1u, capturing_net_log.GetSize()); 2261 EXPECT_EQ(1u, capturing_net_log.GetSize());
2262 EXPECT_TRUE(response_headers_modified1);
2242 2263
2243 // Check that we replace response headers only once. 2264 // Check that we replace response headers only once.
2244 linked_ptr<EventResponseDelta> d2( 2265 linked_ptr<EventResponseDelta> d2(
2245 new EventResponseDelta("extid2", base::Time::FromInternalValue(1500))); 2266 new EventResponseDelta("extid2", base::Time::FromInternalValue(1500)));
2246 // Note that we use a different capitalization of KeY2. This should not 2267 // Note that we use a different capitalization of KeY2. This should not
2247 // matter. 2268 // matter.
2248 d2->deleted_response_headers.push_back(ResponseHeader("KeY2", "Value2, Foo")); 2269 d2->deleted_response_headers.push_back(ResponseHeader("KeY2", "Value2, Foo"));
2249 d2->added_response_headers.push_back(ResponseHeader("Key2", "Value4")); 2270 d2->added_response_headers.push_back(ResponseHeader("Key2", "Value4"));
2250 deltas.push_back(d2); 2271 deltas.push_back(d2);
2251 deltas.sort(&InDecreasingExtensionInstallationTimeOrder); 2272 deltas.sort(&InDecreasingExtensionInstallationTimeOrder);
2252 warning_set.clear(); 2273 warning_set.clear();
2253 capturing_net_log.Clear(); 2274 capturing_net_log.Clear();
2275 bool response_headers_modified2;
2254 scoped_refptr<net::HttpResponseHeaders> new_headers2; 2276 scoped_refptr<net::HttpResponseHeaders> new_headers2;
2255 GURL allowed_unsafe_redirect_url2; 2277 GURL allowed_unsafe_redirect_url2;
2256 MergeOnHeadersReceivedResponses(GURL(kExampleUrl), deltas, base_headers.get(), 2278 MergeOnHeadersReceivedResponses(GURL(kExampleUrl), deltas, base_headers.get(),
2257 &new_headers2, &allowed_unsafe_redirect_url2, 2279 &new_headers2, &allowed_unsafe_redirect_url2,
2258 &warning_set, &net_log); 2280 &warning_set, &net_log,
2281 &response_headers_modified2);
2259 ASSERT_TRUE(new_headers2.get()); 2282 ASSERT_TRUE(new_headers2.get());
2260 EXPECT_TRUE(allowed_unsafe_redirect_url2.is_empty()); 2283 EXPECT_TRUE(allowed_unsafe_redirect_url2.is_empty());
2261 iter = 0; 2284 iter = 0;
2262 std::multimap<std::string, std::string> actual2; 2285 std::multimap<std::string, std::string> actual2;
2263 while (new_headers2->EnumerateHeaderLines(&iter, &name, &value)) { 2286 while (new_headers2->EnumerateHeaderLines(&iter, &name, &value)) {
2264 actual2.insert(std::pair<std::string, std::string>(name, value)); 2287 actual2.insert(std::pair<std::string, std::string>(name, value));
2265 } 2288 }
2266 EXPECT_EQ(expected1, actual2); 2289 EXPECT_EQ(expected1, actual2);
2267 EXPECT_EQ(1u, warning_set.size()); 2290 EXPECT_EQ(1u, warning_set.size());
2268 EXPECT_TRUE(HasWarning(warning_set, "extid2")); 2291 EXPECT_TRUE(HasWarning(warning_set, "extid2"));
2269 EXPECT_EQ(2u, capturing_net_log.GetSize()); 2292 EXPECT_EQ(2u, capturing_net_log.GetSize());
2293 EXPECT_TRUE(response_headers_modified2);
2270 } 2294 }
2271 2295
2272 // Check that we do not delete too much 2296 // Check that we do not delete too much
2273 TEST(ExtensionWebRequestHelpersTest, 2297 TEST(ExtensionWebRequestHelpersTest,
2274 TestMergeOnHeadersReceivedResponsesDeletion) { 2298 TestMergeOnHeadersReceivedResponsesDeletion) {
2275 net::BoundTestNetLog capturing_net_log; 2299 net::BoundTestNetLog capturing_net_log;
2276 net::NetLogWithSource net_log = capturing_net_log.bound(); 2300 net::NetLogWithSource net_log = capturing_net_log.bound();
2277 WarningSet warning_set; 2301 WarningSet warning_set;
2278 std::string header_value; 2302 std::string header_value;
2279 EventResponseDeltas deltas; 2303 EventResponseDeltas deltas;
2280 2304
2281 char base_headers_string[] = 2305 char base_headers_string[] =
2282 "HTTP/1.0 200 OK\r\n" 2306 "HTTP/1.0 200 OK\r\n"
2283 "Key1: Value1\r\n" 2307 "Key1: Value1\r\n"
2284 "Key1: Value2\r\n" 2308 "Key1: Value2\r\n"
2285 "Key1: Value3\r\n" 2309 "Key1: Value3\r\n"
2286 "Key2: Value4\r\n" 2310 "Key2: Value4\r\n"
2287 "\r\n"; 2311 "\r\n";
2288 scoped_refptr<net::HttpResponseHeaders> base_headers( 2312 scoped_refptr<net::HttpResponseHeaders> base_headers(
2289 new net::HttpResponseHeaders( 2313 new net::HttpResponseHeaders(
2290 net::HttpUtil::AssembleRawHeaders( 2314 net::HttpUtil::AssembleRawHeaders(
2291 base_headers_string, sizeof(base_headers_string)))); 2315 base_headers_string, sizeof(base_headers_string))));
2292 2316
2293 linked_ptr<EventResponseDelta> d1( 2317 linked_ptr<EventResponseDelta> d1(
2294 new EventResponseDelta("extid1", base::Time::FromInternalValue(2000))); 2318 new EventResponseDelta("extid1", base::Time::FromInternalValue(2000)));
2295 d1->deleted_response_headers.push_back(ResponseHeader("KEY1", "Value2")); 2319 d1->deleted_response_headers.push_back(ResponseHeader("KEY1", "Value2"));
2296 deltas.push_back(d1); 2320 deltas.push_back(d1);
2321 bool response_headers_modified1;
2297 scoped_refptr<net::HttpResponseHeaders> new_headers1; 2322 scoped_refptr<net::HttpResponseHeaders> new_headers1;
2298 GURL allowed_unsafe_redirect_url1; 2323 GURL allowed_unsafe_redirect_url1;
2299 MergeOnHeadersReceivedResponses(GURL(kExampleUrl), deltas, base_headers.get(), 2324 MergeOnHeadersReceivedResponses(GURL(kExampleUrl), deltas, base_headers.get(),
2300 &new_headers1, &allowed_unsafe_redirect_url1, 2325 &new_headers1, &allowed_unsafe_redirect_url1,
2301 &warning_set, &net_log); 2326 &warning_set, &net_log,
2327 &response_headers_modified1);
2302 ASSERT_TRUE(new_headers1.get()); 2328 ASSERT_TRUE(new_headers1.get());
2303 EXPECT_TRUE(allowed_unsafe_redirect_url1.is_empty()); 2329 EXPECT_TRUE(allowed_unsafe_redirect_url1.is_empty());
2304 std::multimap<std::string, std::string> expected1; 2330 std::multimap<std::string, std::string> expected1;
2305 expected1.insert(std::pair<std::string, std::string>("Key1", "Value1")); 2331 expected1.insert(std::pair<std::string, std::string>("Key1", "Value1"));
2306 expected1.insert(std::pair<std::string, std::string>("Key1", "Value3")); 2332 expected1.insert(std::pair<std::string, std::string>("Key1", "Value3"));
2307 expected1.insert(std::pair<std::string, std::string>("Key2", "Value4")); 2333 expected1.insert(std::pair<std::string, std::string>("Key2", "Value4"));
2308 size_t iter = 0; 2334 size_t iter = 0;
2309 std::string name; 2335 std::string name;
2310 std::string value; 2336 std::string value;
2311 std::multimap<std::string, std::string> actual1; 2337 std::multimap<std::string, std::string> actual1;
2312 while (new_headers1->EnumerateHeaderLines(&iter, &name, &value)) { 2338 while (new_headers1->EnumerateHeaderLines(&iter, &name, &value)) {
2313 actual1.insert(std::pair<std::string, std::string>(name, value)); 2339 actual1.insert(std::pair<std::string, std::string>(name, value));
2314 } 2340 }
2315 EXPECT_EQ(expected1, actual1); 2341 EXPECT_EQ(expected1, actual1);
2316 EXPECT_EQ(0u, warning_set.size()); 2342 EXPECT_EQ(0u, warning_set.size());
2317 EXPECT_EQ(1u, capturing_net_log.GetSize()); 2343 EXPECT_EQ(1u, capturing_net_log.GetSize());
2344 EXPECT_TRUE(response_headers_modified1);
2318 } 2345 }
2319 2346
2320 // Tests whether onHeadersReceived can initiate a redirect. 2347 // Tests whether onHeadersReceived can initiate a redirect.
2321 // The URL merge logic is shared with onBeforeRequest, so we only need to test 2348 // The URL merge logic is shared with onBeforeRequest, so we only need to test
2322 // whether the URLs are merged at all. 2349 // whether the URLs are merged at all.
2323 TEST(ExtensionWebRequestHelpersTest, 2350 TEST(ExtensionWebRequestHelpersTest,
2324 TestMergeOnHeadersReceivedResponsesRedirect) { 2351 TestMergeOnHeadersReceivedResponsesRedirect) {
2325 EventResponseDeltas deltas; 2352 EventResponseDeltas deltas;
2326 net::BoundTestNetLog capturing_net_log; 2353 net::BoundTestNetLog capturing_net_log;
2327 net::NetLogWithSource net_log = capturing_net_log.bound(); 2354 net::NetLogWithSource net_log = capturing_net_log.bound();
2328 WarningSet warning_set; 2355 WarningSet warning_set;
2329 2356
2330 char base_headers_string[] = 2357 char base_headers_string[] =
2331 "HTTP/1.0 200 OK\r\n" 2358 "HTTP/1.0 200 OK\r\n"
2332 "\r\n"; 2359 "\r\n";
2333 scoped_refptr<net::HttpResponseHeaders> base_headers( 2360 scoped_refptr<net::HttpResponseHeaders> base_headers(
2334 new net::HttpResponseHeaders(net::HttpUtil::AssembleRawHeaders( 2361 new net::HttpResponseHeaders(net::HttpUtil::AssembleRawHeaders(
2335 base_headers_string, sizeof(base_headers_string)))); 2362 base_headers_string, sizeof(base_headers_string))));
2336 2363
2337 // No redirect 2364 // No redirect
2338 linked_ptr<EventResponseDelta> d0( 2365 linked_ptr<EventResponseDelta> d0(
2339 new EventResponseDelta("extid0", base::Time::FromInternalValue(0))); 2366 new EventResponseDelta("extid0", base::Time::FromInternalValue(0)));
2340 deltas.push_back(d0); 2367 deltas.push_back(d0);
2368 bool response_headers_modified0;
2341 scoped_refptr<net::HttpResponseHeaders> new_headers0; 2369 scoped_refptr<net::HttpResponseHeaders> new_headers0;
2342 GURL allowed_unsafe_redirect_url0; 2370 GURL allowed_unsafe_redirect_url0;
2343 MergeOnHeadersReceivedResponses(GURL(kExampleUrl), deltas, base_headers.get(), 2371 MergeOnHeadersReceivedResponses(GURL(kExampleUrl), deltas, base_headers.get(),
2344 &new_headers0, &allowed_unsafe_redirect_url0, 2372 &new_headers0, &allowed_unsafe_redirect_url0,
2345 &warning_set, &net_log); 2373 &warning_set, &net_log,
2374 &response_headers_modified0);
2346 EXPECT_FALSE(new_headers0.get()); 2375 EXPECT_FALSE(new_headers0.get());
2347 EXPECT_TRUE(allowed_unsafe_redirect_url0.is_empty()); 2376 EXPECT_TRUE(allowed_unsafe_redirect_url0.is_empty());
2348 EXPECT_EQ(0u, warning_set.size()); 2377 EXPECT_EQ(0u, warning_set.size());
2349 EXPECT_EQ(0u, capturing_net_log.GetSize()); 2378 EXPECT_EQ(0u, capturing_net_log.GetSize());
2379 EXPECT_FALSE(response_headers_modified0);
2350 2380
2351 // Single redirect. 2381 // Single redirect.
2352 GURL new_url_1("http://foo.com"); 2382 GURL new_url_1("http://foo.com");
2353 linked_ptr<EventResponseDelta> d1( 2383 linked_ptr<EventResponseDelta> d1(
2354 new EventResponseDelta("extid1", base::Time::FromInternalValue(1000))); 2384 new EventResponseDelta("extid1", base::Time::FromInternalValue(1000)));
2355 d1->new_url = GURL(new_url_1); 2385 d1->new_url = GURL(new_url_1);
2356 deltas.push_back(d1); 2386 deltas.push_back(d1);
2357 deltas.sort(&InDecreasingExtensionInstallationTimeOrder); 2387 deltas.sort(&InDecreasingExtensionInstallationTimeOrder);
2358 capturing_net_log.Clear(); 2388 capturing_net_log.Clear();
2389 bool response_headers_modified1;
2359 scoped_refptr<net::HttpResponseHeaders> new_headers1; 2390 scoped_refptr<net::HttpResponseHeaders> new_headers1;
2360 GURL allowed_unsafe_redirect_url1; 2391 GURL allowed_unsafe_redirect_url1;
2361 MergeOnHeadersReceivedResponses(GURL(kExampleUrl), deltas, base_headers.get(), 2392 MergeOnHeadersReceivedResponses(GURL(kExampleUrl), deltas, base_headers.get(),
2362 &new_headers1, &allowed_unsafe_redirect_url1, 2393 &new_headers1, &allowed_unsafe_redirect_url1,
2363 &warning_set, &net_log); 2394 &warning_set, &net_log,
2395 &response_headers_modified1);
2364 2396
2365 EXPECT_TRUE(new_headers1.get()); 2397 EXPECT_TRUE(new_headers1.get());
2366 EXPECT_TRUE(new_headers1->HasHeaderValue("Location", new_url_1.spec())); 2398 EXPECT_TRUE(new_headers1->HasHeaderValue("Location", new_url_1.spec()));
2367 EXPECT_EQ(new_url_1, allowed_unsafe_redirect_url1); 2399 EXPECT_EQ(new_url_1, allowed_unsafe_redirect_url1);
2368 EXPECT_TRUE(warning_set.empty()); 2400 EXPECT_TRUE(warning_set.empty());
2369 EXPECT_EQ(1u, capturing_net_log.GetSize()); 2401 EXPECT_EQ(1u, capturing_net_log.GetSize());
2402 EXPECT_FALSE(response_headers_modified1);
2370 } 2403 }
2371 2404
2372 TEST(ExtensionWebRequestHelpersTest, TestMergeOnAuthRequiredResponses) { 2405 TEST(ExtensionWebRequestHelpersTest, TestMergeOnAuthRequiredResponses) {
2373 net::BoundTestNetLog capturing_net_log; 2406 net::BoundTestNetLog capturing_net_log;
2374 net::NetLogWithSource net_log = capturing_net_log.bound(); 2407 net::NetLogWithSource net_log = capturing_net_log.bound();
2375 WarningSet warning_set; 2408 WarningSet warning_set;
2376 EventResponseDeltas deltas; 2409 EventResponseDeltas deltas;
2377 base::string16 username = base::ASCIIToUTF16("foo"); 2410 base::string16 username = base::ASCIIToUTF16("foo");
2378 base::string16 password = base::ASCIIToUTF16("bar"); 2411 base::string16 password = base::ASCIIToUTF16("bar");
2379 base::string16 password2 = base::ASCIIToUTF16("baz"); 2412 base::string16 password2 = base::ASCIIToUTF16("baz");
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
2442 EXPECT_TRUE(credentials_set); 2475 EXPECT_TRUE(credentials_set);
2443 EXPECT_FALSE(auth3.Empty()); 2476 EXPECT_FALSE(auth3.Empty());
2444 EXPECT_EQ(username, auth1.username()); 2477 EXPECT_EQ(username, auth1.username());
2445 EXPECT_EQ(password, auth1.password()); 2478 EXPECT_EQ(password, auth1.password());
2446 EXPECT_EQ(1u, warning_set.size()); 2479 EXPECT_EQ(1u, warning_set.size());
2447 EXPECT_TRUE(HasWarning(warning_set, "extid2")); 2480 EXPECT_TRUE(HasWarning(warning_set, "extid2"));
2448 EXPECT_EQ(3u, capturing_net_log.GetSize()); 2481 EXPECT_EQ(3u, capturing_net_log.GetSize());
2449 } 2482 }
2450 2483
2451 } // namespace extensions 2484 } // namespace extensions
OLDNEW
« no previous file with comments | « no previous file | extensions/browser/api/web_request/web_request_api.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698