OLD | NEW |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |