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

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: -- Created 3 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 <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 1738 matching lines...) Expand 10 before | Expand all | Expand 10 after
1749 net::BoundTestNetLog capturing_net_log; 1749 net::BoundTestNetLog capturing_net_log;
1750 net::NetLogWithSource net_log = capturing_net_log.bound(); 1750 net::NetLogWithSource net_log = capturing_net_log.bound();
1751 WarningSet warning_set; 1751 WarningSet warning_set;
1752 std::string header_value; 1752 std::string header_value;
1753 EventResponseDeltas deltas; 1753 EventResponseDeltas deltas;
1754 1754
1755 // Check that we can handle not changing the headers. 1755 // Check that we can handle not changing the headers.
1756 linked_ptr<EventResponseDelta> d0( 1756 linked_ptr<EventResponseDelta> d0(
1757 new EventResponseDelta("extid0", base::Time::FromInternalValue(2500))); 1757 new EventResponseDelta("extid0", base::Time::FromInternalValue(2500)));
1758 deltas.push_back(d0); 1758 deltas.push_back(d0);
1759 bool request_headers_modified0;
1760 bool request_cookies_modified0;
1759 net::HttpRequestHeaders headers0; 1761 net::HttpRequestHeaders headers0;
1760 headers0.MergeFrom(base_headers); 1762 headers0.MergeFrom(base_headers);
1761 MergeOnBeforeSendHeadersResponses(deltas, &headers0, &warning_set, &net_log); 1763 MergeOnBeforeSendHeadersResponses(deltas, &headers0, &warning_set, &net_log,
1764 &request_headers_modified0,
1765 &request_cookies_modified0);
1762 ASSERT_TRUE(headers0.GetHeader("key1", &header_value)); 1766 ASSERT_TRUE(headers0.GetHeader("key1", &header_value));
1763 EXPECT_EQ("value 1", header_value); 1767 EXPECT_EQ("value 1", header_value);
1764 ASSERT_TRUE(headers0.GetHeader("key2", &header_value)); 1768 ASSERT_TRUE(headers0.GetHeader("key2", &header_value));
1765 EXPECT_EQ("value 2", header_value); 1769 EXPECT_EQ("value 2", header_value);
1766 EXPECT_EQ(0u, warning_set.size()); 1770 EXPECT_EQ(0u, warning_set.size());
1767 EXPECT_EQ(0u, capturing_net_log.GetSize()); 1771 EXPECT_EQ(0u, capturing_net_log.GetSize());
1772 EXPECT_FALSE(request_headers_modified0);
1773 EXPECT_FALSE(request_cookies_modified0);
1768 1774
1769 // Delete, modify and add a header. 1775 // Delete, modify and add a header.
1770 linked_ptr<EventResponseDelta> d1( 1776 linked_ptr<EventResponseDelta> d1(
1771 new EventResponseDelta("extid1", base::Time::FromInternalValue(2000))); 1777 new EventResponseDelta("extid1", base::Time::FromInternalValue(2000)));
1772 d1->deleted_request_headers.push_back("key1"); 1778 d1->deleted_request_headers.push_back("key1");
1773 d1->modified_request_headers.SetHeader("key2", "value 3"); 1779 d1->modified_request_headers.SetHeader("key2", "value 3");
1774 d1->modified_request_headers.SetHeader("key3", "value 3"); 1780 d1->modified_request_headers.SetHeader("key3", "value 3");
1775 deltas.push_back(d1); 1781 deltas.push_back(d1);
1776 deltas.sort(&InDecreasingExtensionInstallationTimeOrder); 1782 deltas.sort(&InDecreasingExtensionInstallationTimeOrder);
1777 warning_set.clear(); 1783 warning_set.clear();
1778 capturing_net_log.Clear(); 1784 capturing_net_log.Clear();
1785 bool request_headers_modified1;
1786 bool request_cookies_modified1;
1779 net::HttpRequestHeaders headers1; 1787 net::HttpRequestHeaders headers1;
1780 headers1.MergeFrom(base_headers); 1788 headers1.MergeFrom(base_headers);
1781 MergeOnBeforeSendHeadersResponses(deltas, &headers1, &warning_set, &net_log); 1789 MergeOnBeforeSendHeadersResponses(deltas, &headers1, &warning_set, &net_log,
1790 &request_headers_modified1,
1791 &request_cookies_modified1);
1782 EXPECT_FALSE(headers1.HasHeader("key1")); 1792 EXPECT_FALSE(headers1.HasHeader("key1"));
1783 ASSERT_TRUE(headers1.GetHeader("key2", &header_value)); 1793 ASSERT_TRUE(headers1.GetHeader("key2", &header_value));
1784 EXPECT_EQ("value 3", header_value); 1794 EXPECT_EQ("value 3", header_value);
1785 ASSERT_TRUE(headers1.GetHeader("key3", &header_value)); 1795 ASSERT_TRUE(headers1.GetHeader("key3", &header_value));
1786 EXPECT_EQ("value 3", header_value); 1796 EXPECT_EQ("value 3", header_value);
1787 EXPECT_EQ(0u, warning_set.size()); 1797 EXPECT_EQ(0u, warning_set.size());
1788 EXPECT_EQ(1u, capturing_net_log.GetSize()); 1798 EXPECT_EQ(1u, capturing_net_log.GetSize());
1799 EXPECT_TRUE(request_headers_modified1);
1800 EXPECT_FALSE(request_cookies_modified1);
1789 1801
1790 // Check that conflicts are atomic, i.e. if one header modification 1802 // Check that conflicts are atomic, i.e. if one header modification
1791 // collides all other conflicts of the same extension are declined as well. 1803 // collides all other conflicts of the same extension are declined as well.
1792 linked_ptr<EventResponseDelta> d2( 1804 linked_ptr<EventResponseDelta> d2(
1793 new EventResponseDelta("extid2", base::Time::FromInternalValue(1500))); 1805 new EventResponseDelta("extid2", base::Time::FromInternalValue(1500)));
1794 // This one conflicts: 1806 // This one conflicts:
1795 d2->modified_request_headers.SetHeader("key3", "value 0"); 1807 d2->modified_request_headers.SetHeader("key3", "value 0");
1796 d2->modified_request_headers.SetHeader("key4", "value 4"); 1808 d2->modified_request_headers.SetHeader("key4", "value 4");
1797 deltas.push_back(d2); 1809 deltas.push_back(d2);
1798 deltas.sort(&InDecreasingExtensionInstallationTimeOrder); 1810 deltas.sort(&InDecreasingExtensionInstallationTimeOrder);
1799 warning_set.clear(); 1811 warning_set.clear();
1800 capturing_net_log.Clear(); 1812 capturing_net_log.Clear();
1813 bool request_headers_modified2;
1814 bool request_cookies_modified2;
1801 net::HttpRequestHeaders headers2; 1815 net::HttpRequestHeaders headers2;
1802 headers2.MergeFrom(base_headers); 1816 headers2.MergeFrom(base_headers);
1803 MergeOnBeforeSendHeadersResponses(deltas, &headers2, &warning_set, &net_log); 1817 MergeOnBeforeSendHeadersResponses(deltas, &headers2, &warning_set, &net_log,
1818 &request_headers_modified2,
1819 &request_cookies_modified2);
1804 EXPECT_FALSE(headers2.HasHeader("key1")); 1820 EXPECT_FALSE(headers2.HasHeader("key1"));
1805 ASSERT_TRUE(headers2.GetHeader("key2", &header_value)); 1821 ASSERT_TRUE(headers2.GetHeader("key2", &header_value));
1806 EXPECT_EQ("value 3", header_value); 1822 EXPECT_EQ("value 3", header_value);
1807 ASSERT_TRUE(headers2.GetHeader("key3", &header_value)); 1823 ASSERT_TRUE(headers2.GetHeader("key3", &header_value));
1808 EXPECT_EQ("value 3", header_value); 1824 EXPECT_EQ("value 3", header_value);
1809 EXPECT_FALSE(headers2.HasHeader("key4")); 1825 EXPECT_FALSE(headers2.HasHeader("key4"));
1810 EXPECT_EQ(1u, warning_set.size()); 1826 EXPECT_EQ(1u, warning_set.size());
1811 EXPECT_TRUE(HasWarning(warning_set, "extid2")); 1827 EXPECT_TRUE(HasWarning(warning_set, "extid2"));
1812 EXPECT_EQ(2u, capturing_net_log.GetSize()); 1828 EXPECT_EQ(2u, capturing_net_log.GetSize());
1829 EXPECT_TRUE(request_headers_modified2);
1830 EXPECT_FALSE(request_cookies_modified2);
1813 1831
1814 // Check that identical modifications don't conflict and operations 1832 // Check that identical modifications don't conflict and operations
1815 // can be merged. 1833 // can be merged.
1816 linked_ptr<EventResponseDelta> d3( 1834 linked_ptr<EventResponseDelta> d3(
1817 new EventResponseDelta("extid3", base::Time::FromInternalValue(1000))); 1835 new EventResponseDelta("extid3", base::Time::FromInternalValue(1000)));
1818 d3->deleted_request_headers.push_back("key1"); 1836 d3->deleted_request_headers.push_back("key1");
1819 d3->modified_request_headers.SetHeader("key2", "value 3"); 1837 d3->modified_request_headers.SetHeader("key2", "value 3");
1820 d3->modified_request_headers.SetHeader("key5", "value 5"); 1838 d3->modified_request_headers.SetHeader("key5", "value 5");
1821 deltas.push_back(d3); 1839 deltas.push_back(d3);
1822 deltas.sort(&InDecreasingExtensionInstallationTimeOrder); 1840 deltas.sort(&InDecreasingExtensionInstallationTimeOrder);
1823 warning_set.clear(); 1841 warning_set.clear();
1824 capturing_net_log.Clear(); 1842 capturing_net_log.Clear();
1843 bool request_headers_modified3;
1844 bool request_cookies_modified3;
1825 net::HttpRequestHeaders headers3; 1845 net::HttpRequestHeaders headers3;
1826 headers3.MergeFrom(base_headers); 1846 headers3.MergeFrom(base_headers);
1827 MergeOnBeforeSendHeadersResponses(deltas, &headers3, &warning_set, &net_log); 1847 MergeOnBeforeSendHeadersResponses(deltas, &headers3, &warning_set, &net_log,
1848 &request_headers_modified3,
1849 &request_cookies_modified3);
1828 EXPECT_FALSE(headers3.HasHeader("key1")); 1850 EXPECT_FALSE(headers3.HasHeader("key1"));
1829 ASSERT_TRUE(headers3.GetHeader("key2", &header_value)); 1851 ASSERT_TRUE(headers3.GetHeader("key2", &header_value));
1830 EXPECT_EQ("value 3", header_value); 1852 EXPECT_EQ("value 3", header_value);
1831 ASSERT_TRUE(headers3.GetHeader("key3", &header_value)); 1853 ASSERT_TRUE(headers3.GetHeader("key3", &header_value));
1832 EXPECT_EQ("value 3", header_value); 1854 EXPECT_EQ("value 3", header_value);
1833 ASSERT_TRUE(headers3.GetHeader("key5", &header_value)); 1855 ASSERT_TRUE(headers3.GetHeader("key5", &header_value));
1834 EXPECT_EQ("value 5", header_value); 1856 EXPECT_EQ("value 5", header_value);
1835 EXPECT_EQ(1u, warning_set.size()); 1857 EXPECT_EQ(1u, warning_set.size());
1836 EXPECT_TRUE(HasWarning(warning_set, "extid2")); 1858 EXPECT_TRUE(HasWarning(warning_set, "extid2"));
1837 EXPECT_EQ(3u, capturing_net_log.GetSize()); 1859 EXPECT_EQ(3u, capturing_net_log.GetSize());
1860 EXPECT_TRUE(request_headers_modified3);
1861 EXPECT_FALSE(request_cookies_modified3);
1838 } 1862 }
1839 1863
1840 TEST(ExtensionWebRequestHelpersTest, 1864 TEST(ExtensionWebRequestHelpersTest,
1841 TestMergeOnBeforeSendHeadersResponses_Cookies) { 1865 TestMergeOnBeforeSendHeadersResponses_Cookies) {
1842 net::HttpRequestHeaders base_headers; 1866 net::HttpRequestHeaders base_headers;
1843 base_headers.AddHeaderFromString( 1867 base_headers.AddHeaderFromString(
1844 "Cookie: name=value; name2=value2; name3=\"value3\""); 1868 "Cookie: name=value; name2=value2; name3=\"value3\"");
1845 net::BoundTestNetLog capturing_net_log; 1869 net::BoundTestNetLog capturing_net_log;
1846 net::NetLogWithSource net_log = capturing_net_log.bound(); 1870 net::NetLogWithSource net_log = capturing_net_log.bound();
1847 WarningSet warning_set; 1871 WarningSet warning_set;
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
1880 add_cookie, add_cookie_2, edit_cookie, remove_cookie 1904 add_cookie, add_cookie_2, edit_cookie, remove_cookie
1881 }; 1905 };
1882 1906
1883 for (size_t i = 0; i < arraysize(operations); ++i) { 1907 for (size_t i = 0; i < arraysize(operations); ++i) {
1884 linked_ptr<EventResponseDelta> delta( 1908 linked_ptr<EventResponseDelta> delta(
1885 new EventResponseDelta("extid0", base::Time::FromInternalValue(i * 5))); 1909 new EventResponseDelta("extid0", base::Time::FromInternalValue(i * 5)));
1886 delta->request_cookie_modifications.push_back(operations[i]); 1910 delta->request_cookie_modifications.push_back(operations[i]);
1887 deltas.push_back(delta); 1911 deltas.push_back(delta);
1888 } 1912 }
1889 deltas.sort(&InDecreasingExtensionInstallationTimeOrder); 1913 deltas.sort(&InDecreasingExtensionInstallationTimeOrder);
1914 bool request_headers_modified1;
1915 bool request_cookies_modified1;
1890 net::HttpRequestHeaders headers1; 1916 net::HttpRequestHeaders headers1;
1891 headers1.MergeFrom(base_headers); 1917 headers1.MergeFrom(base_headers);
1892 warning_set.clear(); 1918 warning_set.clear();
1893 MergeOnBeforeSendHeadersResponses(deltas, &headers1, &warning_set, &net_log); 1919 MergeOnBeforeSendHeadersResponses(deltas, &headers1, &warning_set, &net_log,
1920 &request_headers_modified1,
1921 &request_cookies_modified1);
1894 EXPECT_TRUE(headers1.HasHeader("Cookie")); 1922 EXPECT_TRUE(headers1.HasHeader("Cookie"));
1895 ASSERT_TRUE(headers1.GetHeader("Cookie", &header_value)); 1923 ASSERT_TRUE(headers1.GetHeader("Cookie", &header_value));
1896 EXPECT_EQ("name=new value; name2=new value; name4=\"value 4\"", header_value); 1924 EXPECT_EQ("name=new value; name2=new value; name4=\"value 4\"", header_value);
1897 EXPECT_EQ(0u, warning_set.size()); 1925 EXPECT_EQ(0u, warning_set.size());
1898 EXPECT_EQ(0u, capturing_net_log.GetSize()); 1926 EXPECT_EQ(0u, capturing_net_log.GetSize());
1927 EXPECT_FALSE(request_headers_modified1);
1928 EXPECT_TRUE(request_cookies_modified1);
1899 } 1929 }
1900 1930
1901 namespace { 1931 namespace {
1902 1932
1903 std::string GetCookieExpirationDate(int delta_secs) { 1933 std::string GetCookieExpirationDate(int delta_secs) {
1904 const char* const kWeekDays[] = { 1934 const char* const kWeekDays[] = {
1905 "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" 1935 "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"
1906 }; 1936 };
1907 const char* const kMonthNames[] = { 1937 const char* const kMonthNames[] = {
1908 "Jan", "Feb", "Mar", "Apr", "May", "Jun", 1938 "Jan", "Feb", "Mar", "Apr", "May", "Jun",
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
1954 "\r\n"; 1984 "\r\n";
1955 scoped_refptr<net::HttpResponseHeaders> base_headers( 1985 scoped_refptr<net::HttpResponseHeaders> base_headers(
1956 new net::HttpResponseHeaders( 1986 new net::HttpResponseHeaders(
1957 net::HttpUtil::AssembleRawHeaders( 1987 net::HttpUtil::AssembleRawHeaders(
1958 base_headers_string.c_str(), base_headers_string.size()))); 1988 base_headers_string.c_str(), base_headers_string.size())));
1959 1989
1960 // Check that we can handle if not touching the response headers. 1990 // Check that we can handle if not touching the response headers.
1961 linked_ptr<EventResponseDelta> d0( 1991 linked_ptr<EventResponseDelta> d0(
1962 new EventResponseDelta("extid0", base::Time::FromInternalValue(3000))); 1992 new EventResponseDelta("extid0", base::Time::FromInternalValue(3000)));
1963 deltas.push_back(d0); 1993 deltas.push_back(d0);
1994 bool response_cookies_modified0;
1964 scoped_refptr<net::HttpResponseHeaders> new_headers0; 1995 scoped_refptr<net::HttpResponseHeaders> new_headers0;
1965 MergeCookiesInOnHeadersReceivedResponses( 1996 MergeCookiesInOnHeadersReceivedResponses(
1966 deltas, base_headers.get(), &new_headers0, &warning_set, &net_log); 1997 deltas, base_headers.get(), &new_headers0, &warning_set, &net_log,
1998 &response_cookies_modified0);
1967 EXPECT_FALSE(new_headers0.get()); 1999 EXPECT_FALSE(new_headers0.get());
1968 EXPECT_EQ(0u, warning_set.size()); 2000 EXPECT_EQ(0u, warning_set.size());
1969 EXPECT_EQ(0u, capturing_net_log.GetSize()); 2001 EXPECT_EQ(0u, capturing_net_log.GetSize());
2002 EXPECT_FALSE(response_cookies_modified0);
1970 2003
1971 linked_ptr<ResponseCookieModification> add_cookie = 2004 linked_ptr<ResponseCookieModification> add_cookie =
1972 make_linked_ptr(new ResponseCookieModification); 2005 make_linked_ptr(new ResponseCookieModification);
1973 add_cookie->type = helpers::ADD; 2006 add_cookie->type = helpers::ADD;
1974 add_cookie->modification.reset(new helpers::ResponseCookie); 2007 add_cookie->modification.reset(new helpers::ResponseCookie);
1975 add_cookie->modification->name.reset(new std::string("name4")); 2008 add_cookie->modification->name.reset(new std::string("name4"));
1976 add_cookie->modification->value.reset(new std::string("\"value4\"")); 2009 add_cookie->modification->value.reset(new std::string("\"value4\""));
1977 2010
1978 linked_ptr<ResponseCookieModification> edit_cookie = 2011 linked_ptr<ResponseCookieModification> edit_cookie =
1979 make_linked_ptr(new ResponseCookieModification); 2012 make_linked_ptr(new ResponseCookieModification);
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after
2118 remove_cookie_3, remove_cookie_4 2151 remove_cookie_3, remove_cookie_4
2119 }; 2152 };
2120 2153
2121 for (size_t i = 0; i < arraysize(operations); ++i) { 2154 for (size_t i = 0; i < arraysize(operations); ++i) {
2122 linked_ptr<EventResponseDelta> delta( 2155 linked_ptr<EventResponseDelta> delta(
2123 new EventResponseDelta("extid0", base::Time::FromInternalValue(i * 5))); 2156 new EventResponseDelta("extid0", base::Time::FromInternalValue(i * 5)));
2124 delta->response_cookie_modifications.push_back(operations[i]); 2157 delta->response_cookie_modifications.push_back(operations[i]);
2125 deltas.push_back(delta); 2158 deltas.push_back(delta);
2126 } 2159 }
2127 deltas.sort(&InDecreasingExtensionInstallationTimeOrder); 2160 deltas.sort(&InDecreasingExtensionInstallationTimeOrder);
2161 bool response_cookies_modified1;
2128 scoped_refptr<net::HttpResponseHeaders> headers1( 2162 scoped_refptr<net::HttpResponseHeaders> headers1(
2129 new net::HttpResponseHeaders( 2163 new net::HttpResponseHeaders(
2130 net::HttpUtil::AssembleRawHeaders( 2164 net::HttpUtil::AssembleRawHeaders(
2131 base_headers_string.c_str(), base_headers_string.size()))); 2165 base_headers_string.c_str(), base_headers_string.size())));
2132 scoped_refptr<net::HttpResponseHeaders> new_headers1; 2166 scoped_refptr<net::HttpResponseHeaders> new_headers1;
2133 warning_set.clear(); 2167 warning_set.clear();
2134 MergeCookiesInOnHeadersReceivedResponses( 2168 MergeCookiesInOnHeadersReceivedResponses(
2135 deltas, headers1.get(), &new_headers1, &warning_set, &net_log); 2169 deltas, headers1.get(), &new_headers1, &warning_set, &net_log,
2170 &response_cookies_modified1);
2136 2171
2137 EXPECT_TRUE(new_headers1->HasHeader("Foo")); 2172 EXPECT_TRUE(new_headers1->HasHeader("Foo"));
2138 size_t iter = 0; 2173 size_t iter = 0;
2139 std::string cookie_string; 2174 std::string cookie_string;
2140 std::set<std::string> expected_cookies; 2175 std::set<std::string> expected_cookies;
2141 expected_cookies.insert("name=value; domain=google.com; secure"); 2176 expected_cookies.insert("name=value; domain=google.com; secure");
2142 expected_cookies.insert("name2=value2; secure"); 2177 expected_cookies.insert("name2=value2; secure");
2143 expected_cookies.insert("name4=\"value4\"; secure"); 2178 expected_cookies.insert("name4=\"value4\"; secure");
2144 expected_cookies.insert( 2179 expected_cookies.insert(
2145 "lBound1=greater_1; expires=" + cookie_expiration + "; secure"); 2180 "lBound1=greater_1; expires=" + cookie_expiration + "; secure");
2146 expected_cookies.insert("lBound2=greater_2; max-age=1200; secure"); 2181 expected_cookies.insert("lBound2=greater_2; max-age=1200; secure");
2147 expected_cookies.insert("lBound3=equal_2; max-age=2000; secure"); 2182 expected_cookies.insert("lBound3=equal_2; max-age=2000; secure");
2148 expected_cookies.insert( 2183 expected_cookies.insert(
2149 "uBound1=smaller_1; expires=" + cookie_expiration + "; secure"); 2184 "uBound1=smaller_1; expires=" + cookie_expiration + "; secure");
2150 expected_cookies.insert("uBound2=smaller_2; max-age=1200; secure"); 2185 expected_cookies.insert("uBound2=smaller_2; max-age=1200; secure");
2151 expected_cookies.insert("uBound3=equal_4; max-age=2000; secure"); 2186 expected_cookies.insert("uBound3=equal_4; max-age=2000; secure");
2152 expected_cookies.insert("uBound4=value11; max-age=2500; secure"); 2187 expected_cookies.insert("uBound4=value11; max-age=2500; secure");
2153 expected_cookies.insert( 2188 expected_cookies.insert(
2154 "uBound5=value12; max-age=600; expires=" + cookie_expiration+ "; secure"); 2189 "uBound5=value12; max-age=600; expires=" + cookie_expiration+ "; secure");
2155 std::set<std::string> actual_cookies; 2190 std::set<std::string> actual_cookies;
2156 while (new_headers1->EnumerateHeader(&iter, "Set-Cookie", &cookie_string)) 2191 while (new_headers1->EnumerateHeader(&iter, "Set-Cookie", &cookie_string))
2157 actual_cookies.insert(cookie_string); 2192 actual_cookies.insert(cookie_string);
2158 EXPECT_EQ(expected_cookies, actual_cookies); 2193 EXPECT_EQ(expected_cookies, actual_cookies);
2159 EXPECT_EQ(0u, warning_set.size()); 2194 EXPECT_EQ(0u, warning_set.size());
2160 EXPECT_EQ(0u, capturing_net_log.GetSize()); 2195 EXPECT_EQ(0u, capturing_net_log.GetSize());
2196 EXPECT_TRUE(response_cookies_modified1);
2161 } 2197 }
2162 2198
2163 TEST(ExtensionWebRequestHelpersTest, TestMergeOnHeadersReceivedResponses) { 2199 TEST(ExtensionWebRequestHelpersTest, TestMergeOnHeadersReceivedResponses) {
2164 net::BoundTestNetLog capturing_net_log; 2200 net::BoundTestNetLog capturing_net_log;
2165 net::NetLogWithSource net_log = capturing_net_log.bound(); 2201 net::NetLogWithSource net_log = capturing_net_log.bound();
2166 WarningSet warning_set; 2202 WarningSet warning_set;
2167 std::string header_value; 2203 std::string header_value;
2168 EventResponseDeltas deltas; 2204 EventResponseDeltas deltas;
2169 2205
2170 char base_headers_string[] = 2206 char base_headers_string[] =
2171 "HTTP/1.0 200 OK\r\n" 2207 "HTTP/1.0 200 OK\r\n"
2172 "Key1: Value1\r\n" 2208 "Key1: Value1\r\n"
2173 "Key2: Value2, Foo\r\n" 2209 "Key2: Value2, Foo\r\n"
2174 "\r\n"; 2210 "\r\n";
2175 scoped_refptr<net::HttpResponseHeaders> base_headers( 2211 scoped_refptr<net::HttpResponseHeaders> base_headers(
2176 new net::HttpResponseHeaders( 2212 new net::HttpResponseHeaders(
2177 net::HttpUtil::AssembleRawHeaders( 2213 net::HttpUtil::AssembleRawHeaders(
2178 base_headers_string, sizeof(base_headers_string)))); 2214 base_headers_string, sizeof(base_headers_string))));
2179 2215
2180 // Check that we can handle if not touching the response headers. 2216 // Check that we can handle if not touching the response headers.
2181 linked_ptr<EventResponseDelta> d0( 2217 linked_ptr<EventResponseDelta> d0(
2182 new EventResponseDelta("extid0", base::Time::FromInternalValue(3000))); 2218 new EventResponseDelta("extid0", base::Time::FromInternalValue(3000)));
2183 deltas.push_back(d0); 2219 deltas.push_back(d0);
2220 bool response_headers_modified0;
2221 bool response_cookies_modified0;
2184 scoped_refptr<net::HttpResponseHeaders> new_headers0; 2222 scoped_refptr<net::HttpResponseHeaders> new_headers0;
2185 GURL allowed_unsafe_redirect_url0; 2223 GURL allowed_unsafe_redirect_url0;
2186 MergeOnHeadersReceivedResponses(deltas, 2224 MergeOnHeadersReceivedResponses(deltas, base_headers.get(), &new_headers0,
2187 base_headers.get(), 2225 &allowed_unsafe_redirect_url0, &warning_set,
2188 &new_headers0, 2226 &net_log, &response_headers_modified0,
2189 &allowed_unsafe_redirect_url0, 2227 &response_cookies_modified0);
2190 &warning_set,
2191 &net_log);
2192 EXPECT_FALSE(new_headers0.get()); 2228 EXPECT_FALSE(new_headers0.get());
2193 EXPECT_TRUE(allowed_unsafe_redirect_url0.is_empty()); 2229 EXPECT_TRUE(allowed_unsafe_redirect_url0.is_empty());
2194 EXPECT_EQ(0u, warning_set.size()); 2230 EXPECT_EQ(0u, warning_set.size());
2195 EXPECT_EQ(0u, capturing_net_log.GetSize()); 2231 EXPECT_EQ(0u, capturing_net_log.GetSize());
2232 EXPECT_FALSE(response_headers_modified0);
2233 EXPECT_FALSE(response_cookies_modified0);
2196 2234
2197 linked_ptr<EventResponseDelta> d1( 2235 linked_ptr<EventResponseDelta> d1(
2198 new EventResponseDelta("extid1", base::Time::FromInternalValue(2000))); 2236 new EventResponseDelta("extid1", base::Time::FromInternalValue(2000)));
2199 d1->deleted_response_headers.push_back(ResponseHeader("KEY1", "Value1")); 2237 d1->deleted_response_headers.push_back(ResponseHeader("KEY1", "Value1"));
2200 d1->deleted_response_headers.push_back(ResponseHeader("KEY2", "Value2, Foo")); 2238 d1->deleted_response_headers.push_back(ResponseHeader("KEY2", "Value2, Foo"));
2201 d1->added_response_headers.push_back(ResponseHeader("Key2", "Value3")); 2239 d1->added_response_headers.push_back(ResponseHeader("Key2", "Value3"));
2202 deltas.push_back(d1); 2240 deltas.push_back(d1);
2203 deltas.sort(&InDecreasingExtensionInstallationTimeOrder); 2241 deltas.sort(&InDecreasingExtensionInstallationTimeOrder);
2204 warning_set.clear(); 2242 warning_set.clear();
2205 capturing_net_log.Clear(); 2243 capturing_net_log.Clear();
2244 bool response_headers_modified1;
2245 bool response_cookies_modified1;
2206 scoped_refptr<net::HttpResponseHeaders> new_headers1; 2246 scoped_refptr<net::HttpResponseHeaders> new_headers1;
2207 GURL allowed_unsafe_redirect_url1; 2247 GURL allowed_unsafe_redirect_url1;
2208 MergeOnHeadersReceivedResponses(deltas, 2248 MergeOnHeadersReceivedResponses(deltas, base_headers.get(), &new_headers1,
2209 base_headers.get(), 2249 &allowed_unsafe_redirect_url1, &warning_set,
2210 &new_headers1, 2250 &net_log, &response_headers_modified1,
2211 &allowed_unsafe_redirect_url1, 2251 &response_cookies_modified1);
2212 &warning_set,
2213 &net_log);
2214 ASSERT_TRUE(new_headers1.get()); 2252 ASSERT_TRUE(new_headers1.get());
2215 EXPECT_TRUE(allowed_unsafe_redirect_url1.is_empty()); 2253 EXPECT_TRUE(allowed_unsafe_redirect_url1.is_empty());
2216 std::multimap<std::string, std::string> expected1; 2254 std::multimap<std::string, std::string> expected1;
2217 expected1.insert(std::pair<std::string, std::string>("Key2", "Value3")); 2255 expected1.insert(std::pair<std::string, std::string>("Key2", "Value3"));
2218 size_t iter = 0; 2256 size_t iter = 0;
2219 std::string name; 2257 std::string name;
2220 std::string value; 2258 std::string value;
2221 std::multimap<std::string, std::string> actual1; 2259 std::multimap<std::string, std::string> actual1;
2222 while (new_headers1->EnumerateHeaderLines(&iter, &name, &value)) { 2260 while (new_headers1->EnumerateHeaderLines(&iter, &name, &value)) {
2223 actual1.insert(std::pair<std::string, std::string>(name, value)); 2261 actual1.insert(std::pair<std::string, std::string>(name, value));
2224 } 2262 }
2225 EXPECT_EQ(expected1, actual1); 2263 EXPECT_EQ(expected1, actual1);
2226 EXPECT_EQ(0u, warning_set.size()); 2264 EXPECT_EQ(0u, warning_set.size());
2227 EXPECT_EQ(1u, capturing_net_log.GetSize()); 2265 EXPECT_EQ(1u, capturing_net_log.GetSize());
2266 EXPECT_TRUE(response_headers_modified1);
2267 EXPECT_FALSE(response_cookies_modified1);
2228 2268
2229 // Check that we replace response headers only once. 2269 // Check that we replace response headers only once.
2230 linked_ptr<EventResponseDelta> d2( 2270 linked_ptr<EventResponseDelta> d2(
2231 new EventResponseDelta("extid2", base::Time::FromInternalValue(1500))); 2271 new EventResponseDelta("extid2", base::Time::FromInternalValue(1500)));
2232 // Note that we use a different capitalization of KeY2. This should not 2272 // Note that we use a different capitalization of KeY2. This should not
2233 // matter. 2273 // matter.
2234 d2->deleted_response_headers.push_back(ResponseHeader("KeY2", "Value2, Foo")); 2274 d2->deleted_response_headers.push_back(ResponseHeader("KeY2", "Value2, Foo"));
2235 d2->added_response_headers.push_back(ResponseHeader("Key2", "Value4")); 2275 d2->added_response_headers.push_back(ResponseHeader("Key2", "Value4"));
2236 deltas.push_back(d2); 2276 deltas.push_back(d2);
2237 deltas.sort(&InDecreasingExtensionInstallationTimeOrder); 2277 deltas.sort(&InDecreasingExtensionInstallationTimeOrder);
2238 warning_set.clear(); 2278 warning_set.clear();
2239 capturing_net_log.Clear(); 2279 capturing_net_log.Clear();
2280 bool response_headers_modified2;
2281 bool response_cookies_modified2;
2240 scoped_refptr<net::HttpResponseHeaders> new_headers2; 2282 scoped_refptr<net::HttpResponseHeaders> new_headers2;
2241 GURL allowed_unsafe_redirect_url2; 2283 GURL allowed_unsafe_redirect_url2;
2242 MergeOnHeadersReceivedResponses(deltas, 2284 MergeOnHeadersReceivedResponses(deltas, base_headers.get(), &new_headers2,
2243 base_headers.get(), 2285 &allowed_unsafe_redirect_url2, &warning_set,
2244 &new_headers2, 2286 &net_log, &response_headers_modified2,
2245 &allowed_unsafe_redirect_url2, 2287 &response_cookies_modified2);
2246 &warning_set,
2247 &net_log);
2248 ASSERT_TRUE(new_headers2.get()); 2288 ASSERT_TRUE(new_headers2.get());
2249 EXPECT_TRUE(allowed_unsafe_redirect_url2.is_empty()); 2289 EXPECT_TRUE(allowed_unsafe_redirect_url2.is_empty());
2250 iter = 0; 2290 iter = 0;
2251 std::multimap<std::string, std::string> actual2; 2291 std::multimap<std::string, std::string> actual2;
2252 while (new_headers2->EnumerateHeaderLines(&iter, &name, &value)) { 2292 while (new_headers2->EnumerateHeaderLines(&iter, &name, &value)) {
2253 actual2.insert(std::pair<std::string, std::string>(name, value)); 2293 actual2.insert(std::pair<std::string, std::string>(name, value));
2254 } 2294 }
2255 EXPECT_EQ(expected1, actual2); 2295 EXPECT_EQ(expected1, actual2);
2256 EXPECT_EQ(1u, warning_set.size()); 2296 EXPECT_EQ(1u, warning_set.size());
2257 EXPECT_TRUE(HasWarning(warning_set, "extid2")); 2297 EXPECT_TRUE(HasWarning(warning_set, "extid2"));
2258 EXPECT_EQ(2u, capturing_net_log.GetSize()); 2298 EXPECT_EQ(2u, capturing_net_log.GetSize());
2299 EXPECT_TRUE(response_headers_modified2);
2300 EXPECT_FALSE(response_cookies_modified2);
2259 } 2301 }
2260 2302
2261 // Check that we do not delete too much 2303 // Check that we do not delete too much
2262 TEST(ExtensionWebRequestHelpersTest, 2304 TEST(ExtensionWebRequestHelpersTest,
2263 TestMergeOnHeadersReceivedResponsesDeletion) { 2305 TestMergeOnHeadersReceivedResponsesDeletion) {
2264 net::BoundTestNetLog capturing_net_log; 2306 net::BoundTestNetLog capturing_net_log;
2265 net::NetLogWithSource net_log = capturing_net_log.bound(); 2307 net::NetLogWithSource net_log = capturing_net_log.bound();
2266 WarningSet warning_set; 2308 WarningSet warning_set;
2267 std::string header_value; 2309 std::string header_value;
2268 EventResponseDeltas deltas; 2310 EventResponseDeltas deltas;
2269 2311
2270 char base_headers_string[] = 2312 char base_headers_string[] =
2271 "HTTP/1.0 200 OK\r\n" 2313 "HTTP/1.0 200 OK\r\n"
2272 "Key1: Value1\r\n" 2314 "Key1: Value1\r\n"
2273 "Key1: Value2\r\n" 2315 "Key1: Value2\r\n"
2274 "Key1: Value3\r\n" 2316 "Key1: Value3\r\n"
2275 "Key2: Value4\r\n" 2317 "Key2: Value4\r\n"
2276 "\r\n"; 2318 "\r\n";
2277 scoped_refptr<net::HttpResponseHeaders> base_headers( 2319 scoped_refptr<net::HttpResponseHeaders> base_headers(
2278 new net::HttpResponseHeaders( 2320 new net::HttpResponseHeaders(
2279 net::HttpUtil::AssembleRawHeaders( 2321 net::HttpUtil::AssembleRawHeaders(
2280 base_headers_string, sizeof(base_headers_string)))); 2322 base_headers_string, sizeof(base_headers_string))));
2281 2323
2282 linked_ptr<EventResponseDelta> d1( 2324 linked_ptr<EventResponseDelta> d1(
2283 new EventResponseDelta("extid1", base::Time::FromInternalValue(2000))); 2325 new EventResponseDelta("extid1", base::Time::FromInternalValue(2000)));
2284 d1->deleted_response_headers.push_back(ResponseHeader("KEY1", "Value2")); 2326 d1->deleted_response_headers.push_back(ResponseHeader("KEY1", "Value2"));
2285 deltas.push_back(d1); 2327 deltas.push_back(d1);
2328 bool response_headers_modified1;
2329 bool response_cookies_modified1;
2286 scoped_refptr<net::HttpResponseHeaders> new_headers1; 2330 scoped_refptr<net::HttpResponseHeaders> new_headers1;
2287 GURL allowed_unsafe_redirect_url1; 2331 GURL allowed_unsafe_redirect_url1;
2288 MergeOnHeadersReceivedResponses(deltas, 2332 MergeOnHeadersReceivedResponses(deltas, base_headers.get(), &new_headers1,
2289 base_headers.get(), 2333 &allowed_unsafe_redirect_url1, &warning_set,
2290 &new_headers1, 2334 &net_log, &response_headers_modified1,
2291 &allowed_unsafe_redirect_url1, 2335 &response_cookies_modified1);
2292 &warning_set,
2293 &net_log);
2294 ASSERT_TRUE(new_headers1.get()); 2336 ASSERT_TRUE(new_headers1.get());
2295 EXPECT_TRUE(allowed_unsafe_redirect_url1.is_empty()); 2337 EXPECT_TRUE(allowed_unsafe_redirect_url1.is_empty());
2296 std::multimap<std::string, std::string> expected1; 2338 std::multimap<std::string, std::string> expected1;
2297 expected1.insert(std::pair<std::string, std::string>("Key1", "Value1")); 2339 expected1.insert(std::pair<std::string, std::string>("Key1", "Value1"));
2298 expected1.insert(std::pair<std::string, std::string>("Key1", "Value3")); 2340 expected1.insert(std::pair<std::string, std::string>("Key1", "Value3"));
2299 expected1.insert(std::pair<std::string, std::string>("Key2", "Value4")); 2341 expected1.insert(std::pair<std::string, std::string>("Key2", "Value4"));
2300 size_t iter = 0; 2342 size_t iter = 0;
2301 std::string name; 2343 std::string name;
2302 std::string value; 2344 std::string value;
2303 std::multimap<std::string, std::string> actual1; 2345 std::multimap<std::string, std::string> actual1;
2304 while (new_headers1->EnumerateHeaderLines(&iter, &name, &value)) { 2346 while (new_headers1->EnumerateHeaderLines(&iter, &name, &value)) {
2305 actual1.insert(std::pair<std::string, std::string>(name, value)); 2347 actual1.insert(std::pair<std::string, std::string>(name, value));
2306 } 2348 }
2307 EXPECT_EQ(expected1, actual1); 2349 EXPECT_EQ(expected1, actual1);
2308 EXPECT_EQ(0u, warning_set.size()); 2350 EXPECT_EQ(0u, warning_set.size());
2309 EXPECT_EQ(1u, capturing_net_log.GetSize()); 2351 EXPECT_EQ(1u, capturing_net_log.GetSize());
2352 EXPECT_TRUE(response_headers_modified1);
2353 EXPECT_FALSE(response_cookies_modified1);
2310 } 2354 }
2311 2355
2312 // Tests whether onHeadersReceived can initiate a redirect. 2356 // Tests whether onHeadersReceived can initiate a redirect.
2313 // The URL merge logic is shared with onBeforeRequest, so we only need to test 2357 // The URL merge logic is shared with onBeforeRequest, so we only need to test
2314 // whether the URLs are merged at all. 2358 // whether the URLs are merged at all.
2315 TEST(ExtensionWebRequestHelpersTest, 2359 TEST(ExtensionWebRequestHelpersTest,
2316 TestMergeOnHeadersReceivedResponsesRedirect) { 2360 TestMergeOnHeadersReceivedResponsesRedirect) {
2317 EventResponseDeltas deltas; 2361 EventResponseDeltas deltas;
2318 net::BoundTestNetLog capturing_net_log; 2362 net::BoundTestNetLog capturing_net_log;
2319 net::NetLogWithSource net_log = capturing_net_log.bound(); 2363 net::NetLogWithSource net_log = capturing_net_log.bound();
2320 WarningSet warning_set; 2364 WarningSet warning_set;
2321 2365
2322 char base_headers_string[] = 2366 char base_headers_string[] =
2323 "HTTP/1.0 200 OK\r\n" 2367 "HTTP/1.0 200 OK\r\n"
2324 "\r\n"; 2368 "\r\n";
2325 scoped_refptr<net::HttpResponseHeaders> base_headers( 2369 scoped_refptr<net::HttpResponseHeaders> base_headers(
2326 new net::HttpResponseHeaders(net::HttpUtil::AssembleRawHeaders( 2370 new net::HttpResponseHeaders(net::HttpUtil::AssembleRawHeaders(
2327 base_headers_string, sizeof(base_headers_string)))); 2371 base_headers_string, sizeof(base_headers_string))));
2328 2372
2329 // No redirect 2373 // No redirect
2330 linked_ptr<EventResponseDelta> d0( 2374 linked_ptr<EventResponseDelta> d0(
2331 new EventResponseDelta("extid0", base::Time::FromInternalValue(0))); 2375 new EventResponseDelta("extid0", base::Time::FromInternalValue(0)));
2332 deltas.push_back(d0); 2376 deltas.push_back(d0);
2377 bool response_headers_modified0;
2378 bool response_cookies_modified0;
2333 scoped_refptr<net::HttpResponseHeaders> new_headers0; 2379 scoped_refptr<net::HttpResponseHeaders> new_headers0;
2334 GURL allowed_unsafe_redirect_url0; 2380 GURL allowed_unsafe_redirect_url0;
2335 MergeOnHeadersReceivedResponses(deltas, 2381 MergeOnHeadersReceivedResponses(deltas, base_headers.get(), &new_headers0,
2336 base_headers.get(), 2382 &allowed_unsafe_redirect_url0, &warning_set,
2337 &new_headers0, 2383 &net_log, &response_headers_modified0,
2338 &allowed_unsafe_redirect_url0, 2384 &response_cookies_modified0);
2339 &warning_set,
2340 &net_log);
2341 EXPECT_FALSE(new_headers0.get()); 2385 EXPECT_FALSE(new_headers0.get());
2342 EXPECT_TRUE(allowed_unsafe_redirect_url0.is_empty()); 2386 EXPECT_TRUE(allowed_unsafe_redirect_url0.is_empty());
2343 EXPECT_EQ(0u, warning_set.size()); 2387 EXPECT_EQ(0u, warning_set.size());
2344 EXPECT_EQ(0u, capturing_net_log.GetSize()); 2388 EXPECT_EQ(0u, capturing_net_log.GetSize());
2389 EXPECT_FALSE(response_headers_modified0);
2390 EXPECT_FALSE(response_cookies_modified0);
2345 2391
2346 // Single redirect. 2392 // Single redirect.
2347 GURL new_url_1("http://foo.com"); 2393 GURL new_url_1("http://foo.com");
2348 linked_ptr<EventResponseDelta> d1( 2394 linked_ptr<EventResponseDelta> d1(
2349 new EventResponseDelta("extid1", base::Time::FromInternalValue(1000))); 2395 new EventResponseDelta("extid1", base::Time::FromInternalValue(1000)));
2350 d1->new_url = GURL(new_url_1); 2396 d1->new_url = GURL(new_url_1);
2351 deltas.push_back(d1); 2397 deltas.push_back(d1);
2352 deltas.sort(&InDecreasingExtensionInstallationTimeOrder); 2398 deltas.sort(&InDecreasingExtensionInstallationTimeOrder);
2353 capturing_net_log.Clear(); 2399 capturing_net_log.Clear();
2400 bool response_headers_modified1;
2401 bool response_cookies_modified1;
2354 scoped_refptr<net::HttpResponseHeaders> new_headers1; 2402 scoped_refptr<net::HttpResponseHeaders> new_headers1;
2355 GURL allowed_unsafe_redirect_url1; 2403 GURL allowed_unsafe_redirect_url1;
2356 MergeOnHeadersReceivedResponses(deltas, 2404 MergeOnHeadersReceivedResponses(deltas, base_headers.get(), &new_headers1,
2357 base_headers.get(), 2405 &allowed_unsafe_redirect_url1, &warning_set,
2358 &new_headers1, 2406 &net_log, &response_headers_modified1,
2359 &allowed_unsafe_redirect_url1, 2407 &response_cookies_modified1);
2360 &warning_set,
2361 &net_log);
2362
2363 EXPECT_TRUE(new_headers1.get()); 2408 EXPECT_TRUE(new_headers1.get());
2364 EXPECT_TRUE(new_headers1->HasHeaderValue("Location", new_url_1.spec())); 2409 EXPECT_TRUE(new_headers1->HasHeaderValue("Location", new_url_1.spec()));
2365 EXPECT_EQ(new_url_1, allowed_unsafe_redirect_url1); 2410 EXPECT_EQ(new_url_1, allowed_unsafe_redirect_url1);
2366 EXPECT_TRUE(warning_set.empty()); 2411 EXPECT_TRUE(warning_set.empty());
2367 EXPECT_EQ(1u, capturing_net_log.GetSize()); 2412 EXPECT_EQ(1u, capturing_net_log.GetSize());
2413 EXPECT_FALSE(response_headers_modified1);
2414 EXPECT_FALSE(response_cookies_modified1);
2368 } 2415 }
2369 2416
2370 TEST(ExtensionWebRequestHelpersTest, TestMergeOnAuthRequiredResponses) { 2417 TEST(ExtensionWebRequestHelpersTest, TestMergeOnAuthRequiredResponses) {
2371 net::BoundTestNetLog capturing_net_log; 2418 net::BoundTestNetLog capturing_net_log;
2372 net::NetLogWithSource net_log = capturing_net_log.bound(); 2419 net::NetLogWithSource net_log = capturing_net_log.bound();
2373 WarningSet warning_set; 2420 WarningSet warning_set;
2374 EventResponseDeltas deltas; 2421 EventResponseDeltas deltas;
2375 base::string16 username = base::ASCIIToUTF16("foo"); 2422 base::string16 username = base::ASCIIToUTF16("foo");
2376 base::string16 password = base::ASCIIToUTF16("bar"); 2423 base::string16 password = base::ASCIIToUTF16("bar");
2377 base::string16 password2 = base::ASCIIToUTF16("baz"); 2424 base::string16 password2 = base::ASCIIToUTF16("baz");
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
2440 EXPECT_TRUE(credentials_set); 2487 EXPECT_TRUE(credentials_set);
2441 EXPECT_FALSE(auth3.Empty()); 2488 EXPECT_FALSE(auth3.Empty());
2442 EXPECT_EQ(username, auth1.username()); 2489 EXPECT_EQ(username, auth1.username());
2443 EXPECT_EQ(password, auth1.password()); 2490 EXPECT_EQ(password, auth1.password());
2444 EXPECT_EQ(1u, warning_set.size()); 2491 EXPECT_EQ(1u, warning_set.size());
2445 EXPECT_TRUE(HasWarning(warning_set, "extid2")); 2492 EXPECT_TRUE(HasWarning(warning_set, "extid2"));
2446 EXPECT_EQ(3u, capturing_net_log.GetSize()); 2493 EXPECT_EQ(3u, capturing_net_log.GetSize());
2447 } 2494 }
2448 2495
2449 } // namespace extensions 2496 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698