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

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

Issue 2449913002: Support WebSocket in WebRequest API. (Closed)
Patch Set: Address comments from Devlin. 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
« no previous file with comments | « no previous file | chrome/browser/extensions/api/web_request/web_request_apitest.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 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
87 using helpers::RequestCookieModification; 87 using helpers::RequestCookieModification;
88 using helpers::ResponseCookieModification; 88 using helpers::ResponseCookieModification;
89 using helpers::ResponseHeader; 89 using helpers::ResponseHeader;
90 using helpers::ResponseHeaders; 90 using helpers::ResponseHeaders;
91 using helpers::StringToCharList; 91 using helpers::StringToCharList;
92 92
93 namespace extensions { 93 namespace extensions {
94 94
95 namespace { 95 namespace {
96 96
97 constexpr const char kExampleUrl[] = "http://example.com";
98
97 static void EventHandledOnIOThread( 99 static void EventHandledOnIOThread(
98 void* profile, 100 void* profile,
99 const std::string& extension_id, 101 const std::string& extension_id,
100 const std::string& event_name, 102 const std::string& event_name,
101 const std::string& sub_event_name, 103 const std::string& sub_event_name,
102 uint64_t request_id, 104 uint64_t request_id,
103 ExtensionWebRequestEventRouter::EventResponse* response) { 105 ExtensionWebRequestEventRouter::EventResponse* response) {
104 ExtensionWebRequestEventRouter::GetInstance()->OnEventHandled( 106 ExtensionWebRequestEventRouter::GetInstance()->OnEventHandled(
105 profile, extension_id, event_name, sub_event_name, request_id, 107 profile, extension_id, event_name, sub_event_name, request_id,
106 response); 108 response);
(...skipping 1455 matching lines...) Expand 10 before | Expand all | Expand 10 after
1562 EventResponseDeltas deltas; 1564 EventResponseDeltas deltas;
1563 net::BoundTestNetLog capturing_net_log; 1565 net::BoundTestNetLog capturing_net_log;
1564 net::NetLogWithSource net_log = capturing_net_log.bound(); 1566 net::NetLogWithSource net_log = capturing_net_log.bound();
1565 WarningSet warning_set; 1567 WarningSet warning_set;
1566 GURL effective_new_url; 1568 GURL effective_new_url;
1567 1569
1568 // No redirect 1570 // No redirect
1569 linked_ptr<EventResponseDelta> d0( 1571 linked_ptr<EventResponseDelta> d0(
1570 new EventResponseDelta("extid0", base::Time::FromInternalValue(0))); 1572 new EventResponseDelta("extid0", base::Time::FromInternalValue(0)));
1571 deltas.push_back(d0); 1573 deltas.push_back(d0);
1572 MergeOnBeforeRequestResponses( 1574 MergeOnBeforeRequestResponses(GURL(kExampleUrl), deltas, &effective_new_url,
1573 deltas, &effective_new_url, &warning_set, &net_log); 1575 &warning_set, &net_log);
1574 EXPECT_TRUE(effective_new_url.is_empty()); 1576 EXPECT_TRUE(effective_new_url.is_empty());
1575 1577
1576 // Single redirect. 1578 // Single redirect.
1577 GURL new_url_1("http://foo.com"); 1579 GURL new_url_1("http://foo.com");
1578 linked_ptr<EventResponseDelta> d1( 1580 linked_ptr<EventResponseDelta> d1(
1579 new EventResponseDelta("extid1", base::Time::FromInternalValue(1000))); 1581 new EventResponseDelta("extid1", base::Time::FromInternalValue(1000)));
1580 d1->new_url = GURL(new_url_1); 1582 d1->new_url = GURL(new_url_1);
1581 deltas.push_back(d1); 1583 deltas.push_back(d1);
1582 deltas.sort(&InDecreasingExtensionInstallationTimeOrder); 1584 deltas.sort(&InDecreasingExtensionInstallationTimeOrder);
1583 capturing_net_log.Clear(); 1585 capturing_net_log.Clear();
1584 MergeOnBeforeRequestResponses( 1586 MergeOnBeforeRequestResponses(GURL(kExampleUrl), deltas, &effective_new_url,
1585 deltas, &effective_new_url, &warning_set, &net_log); 1587 &warning_set, &net_log);
1586 EXPECT_EQ(new_url_1, effective_new_url); 1588 EXPECT_EQ(new_url_1, effective_new_url);
1587 EXPECT_TRUE(warning_set.empty()); 1589 EXPECT_TRUE(warning_set.empty());
1588 EXPECT_EQ(1u, capturing_net_log.GetSize()); 1590 EXPECT_EQ(1u, capturing_net_log.GetSize());
1589 1591
1590 // Ignored redirect (due to precedence). 1592 // Ignored redirect (due to precedence).
1591 GURL new_url_2("http://bar.com"); 1593 GURL new_url_2("http://bar.com");
1592 linked_ptr<EventResponseDelta> d2( 1594 linked_ptr<EventResponseDelta> d2(
1593 new EventResponseDelta("extid2", base::Time::FromInternalValue(500))); 1595 new EventResponseDelta("extid2", base::Time::FromInternalValue(500)));
1594 d2->new_url = GURL(new_url_2); 1596 d2->new_url = GURL(new_url_2);
1595 deltas.push_back(d2); 1597 deltas.push_back(d2);
1596 deltas.sort(&InDecreasingExtensionInstallationTimeOrder); 1598 deltas.sort(&InDecreasingExtensionInstallationTimeOrder);
1597 warning_set.clear(); 1599 warning_set.clear();
1598 capturing_net_log.Clear(); 1600 capturing_net_log.Clear();
1599 MergeOnBeforeRequestResponses( 1601 MergeOnBeforeRequestResponses(GURL(kExampleUrl), deltas, &effective_new_url,
1600 deltas, &effective_new_url, &warning_set, &net_log); 1602 &warning_set, &net_log);
1601 EXPECT_EQ(new_url_1, effective_new_url); 1603 EXPECT_EQ(new_url_1, effective_new_url);
1602 EXPECT_EQ(1u, warning_set.size()); 1604 EXPECT_EQ(1u, warning_set.size());
1603 EXPECT_TRUE(HasWarning(warning_set, "extid2")); 1605 EXPECT_TRUE(HasWarning(warning_set, "extid2"));
1604 EXPECT_EQ(2u, capturing_net_log.GetSize()); 1606 EXPECT_EQ(2u, capturing_net_log.GetSize());
1605 1607
1606 // Overriding redirect. 1608 // Overriding redirect.
1607 GURL new_url_3("http://baz.com"); 1609 GURL new_url_3("http://baz.com");
1608 linked_ptr<EventResponseDelta> d3( 1610 linked_ptr<EventResponseDelta> d3(
1609 new EventResponseDelta("extid3", base::Time::FromInternalValue(1500))); 1611 new EventResponseDelta("extid3", base::Time::FromInternalValue(1500)));
1610 d3->new_url = GURL(new_url_3); 1612 d3->new_url = GURL(new_url_3);
1611 deltas.push_back(d3); 1613 deltas.push_back(d3);
1612 deltas.sort(&InDecreasingExtensionInstallationTimeOrder); 1614 deltas.sort(&InDecreasingExtensionInstallationTimeOrder);
1613 warning_set.clear(); 1615 warning_set.clear();
1614 capturing_net_log.Clear(); 1616 capturing_net_log.Clear();
1615 MergeOnBeforeRequestResponses( 1617 MergeOnBeforeRequestResponses(GURL(kExampleUrl), deltas, &effective_new_url,
1616 deltas, &effective_new_url, &warning_set, &net_log); 1618 &warning_set, &net_log);
1617 EXPECT_EQ(new_url_3, effective_new_url); 1619 EXPECT_EQ(new_url_3, effective_new_url);
1618 EXPECT_EQ(2u, warning_set.size()); 1620 EXPECT_EQ(2u, warning_set.size());
1619 EXPECT_TRUE(HasWarning(warning_set, "extid1")); 1621 EXPECT_TRUE(HasWarning(warning_set, "extid1"));
1620 EXPECT_TRUE(HasWarning(warning_set, "extid2")); 1622 EXPECT_TRUE(HasWarning(warning_set, "extid2"));
1621 EXPECT_EQ(3u, capturing_net_log.GetSize()); 1623 EXPECT_EQ(3u, capturing_net_log.GetSize());
1622 1624
1623 // Check that identical redirects don't cause a conflict. 1625 // Check that identical redirects don't cause a conflict.
1624 linked_ptr<EventResponseDelta> d4( 1626 linked_ptr<EventResponseDelta> d4(
1625 new EventResponseDelta("extid4", base::Time::FromInternalValue(2000))); 1627 new EventResponseDelta("extid4", base::Time::FromInternalValue(2000)));
1626 d4->new_url = GURL(new_url_3); 1628 d4->new_url = GURL(new_url_3);
1627 deltas.push_back(d4); 1629 deltas.push_back(d4);
1628 deltas.sort(&InDecreasingExtensionInstallationTimeOrder); 1630 deltas.sort(&InDecreasingExtensionInstallationTimeOrder);
1629 warning_set.clear(); 1631 warning_set.clear();
1630 capturing_net_log.Clear(); 1632 capturing_net_log.Clear();
1631 MergeOnBeforeRequestResponses( 1633 MergeOnBeforeRequestResponses(GURL(kExampleUrl), deltas, &effective_new_url,
1632 deltas, &effective_new_url, &warning_set, &net_log); 1634 &warning_set, &net_log);
1633 EXPECT_EQ(new_url_3, effective_new_url); 1635 EXPECT_EQ(new_url_3, effective_new_url);
1634 EXPECT_EQ(2u, warning_set.size()); 1636 EXPECT_EQ(2u, warning_set.size());
1635 EXPECT_TRUE(HasWarning(warning_set, "extid1")); 1637 EXPECT_TRUE(HasWarning(warning_set, "extid1"));
1636 EXPECT_TRUE(HasWarning(warning_set, "extid2")); 1638 EXPECT_TRUE(HasWarning(warning_set, "extid2"));
1637 EXPECT_EQ(4u, capturing_net_log.GetSize()); 1639 EXPECT_EQ(4u, capturing_net_log.GetSize());
1638 } 1640 }
1639 1641
1640 // This tests that we can redirect to data:// urls, which is considered 1642 // This tests that we can redirect to data:// urls, which is considered
1641 // a kind of cancelling requests. 1643 // a kind of cancelling requests.
1642 TEST(ExtensionWebRequestHelpersTest, TestMergeOnBeforeRequestResponses2) { 1644 TEST(ExtensionWebRequestHelpersTest, TestMergeOnBeforeRequestResponses2) {
1643 EventResponseDeltas deltas; 1645 EventResponseDeltas deltas;
1644 net::BoundTestNetLog capturing_net_log; 1646 net::BoundTestNetLog capturing_net_log;
1645 net::NetLogWithSource net_log = capturing_net_log.bound(); 1647 net::NetLogWithSource net_log = capturing_net_log.bound();
1646 WarningSet warning_set; 1648 WarningSet warning_set;
1647 GURL effective_new_url; 1649 GURL effective_new_url;
1648 1650
1649 // Single redirect. 1651 // Single redirect.
1650 GURL new_url_0("http://foo.com"); 1652 GURL new_url_0("http://foo.com");
1651 linked_ptr<EventResponseDelta> d0( 1653 linked_ptr<EventResponseDelta> d0(
1652 new EventResponseDelta("extid0", base::Time::FromInternalValue(2000))); 1654 new EventResponseDelta("extid0", base::Time::FromInternalValue(2000)));
1653 d0->new_url = GURL(new_url_0); 1655 d0->new_url = GURL(new_url_0);
1654 deltas.push_back(d0); 1656 deltas.push_back(d0);
1655 MergeOnBeforeRequestResponses( 1657 MergeOnBeforeRequestResponses(GURL(kExampleUrl), deltas, &effective_new_url,
1656 deltas, &effective_new_url, &warning_set, &net_log); 1658 &warning_set, &net_log);
1657 EXPECT_EQ(new_url_0, effective_new_url); 1659 EXPECT_EQ(new_url_0, effective_new_url);
1658 1660
1659 // Cancel request by redirecting to a data:// URL. This shall override 1661 // Cancel request by redirecting to a data:// URL. This shall override
1660 // the other redirect but not cause any conflict warnings. 1662 // the other redirect but not cause any conflict warnings.
1661 GURL new_url_1("data://foo"); 1663 GURL new_url_1("data://foo");
1662 linked_ptr<EventResponseDelta> d1( 1664 linked_ptr<EventResponseDelta> d1(
1663 new EventResponseDelta("extid1", base::Time::FromInternalValue(1500))); 1665 new EventResponseDelta("extid1", base::Time::FromInternalValue(1500)));
1664 d1->new_url = GURL(new_url_1); 1666 d1->new_url = GURL(new_url_1);
1665 deltas.push_back(d1); 1667 deltas.push_back(d1);
1666 deltas.sort(&InDecreasingExtensionInstallationTimeOrder); 1668 deltas.sort(&InDecreasingExtensionInstallationTimeOrder);
1667 warning_set.clear(); 1669 warning_set.clear();
1668 capturing_net_log.Clear(); 1670 capturing_net_log.Clear();
1669 MergeOnBeforeRequestResponses( 1671 MergeOnBeforeRequestResponses(GURL(kExampleUrl), deltas, &effective_new_url,
1670 deltas, &effective_new_url, &warning_set, &net_log); 1672 &warning_set, &net_log);
1671 EXPECT_EQ(new_url_1, effective_new_url); 1673 EXPECT_EQ(new_url_1, effective_new_url);
1672 EXPECT_TRUE(warning_set.empty()); 1674 EXPECT_TRUE(warning_set.empty());
1673 EXPECT_EQ(1u, capturing_net_log.GetSize()); 1675 EXPECT_EQ(1u, capturing_net_log.GetSize());
1674 1676
1675 // Cancel request by redirecting to the same data:// URL. This shall 1677 // Cancel request by redirecting to the same data:// URL. This shall
1676 // not create any conflicts as it is in line with d1. 1678 // not create any conflicts as it is in line with d1.
1677 GURL new_url_2("data://foo"); 1679 GURL new_url_2("data://foo");
1678 linked_ptr<EventResponseDelta> d2( 1680 linked_ptr<EventResponseDelta> d2(
1679 new EventResponseDelta("extid2", base::Time::FromInternalValue(1000))); 1681 new EventResponseDelta("extid2", base::Time::FromInternalValue(1000)));
1680 d2->new_url = GURL(new_url_2); 1682 d2->new_url = GURL(new_url_2);
1681 deltas.push_back(d2); 1683 deltas.push_back(d2);
1682 deltas.sort(&InDecreasingExtensionInstallationTimeOrder); 1684 deltas.sort(&InDecreasingExtensionInstallationTimeOrder);
1683 warning_set.clear(); 1685 warning_set.clear();
1684 capturing_net_log.Clear(); 1686 capturing_net_log.Clear();
1685 MergeOnBeforeRequestResponses( 1687 MergeOnBeforeRequestResponses(GURL(kExampleUrl), deltas, &effective_new_url,
1686 deltas, &effective_new_url, &warning_set, &net_log); 1688 &warning_set, &net_log);
1687 EXPECT_EQ(new_url_1, effective_new_url); 1689 EXPECT_EQ(new_url_1, effective_new_url);
1688 EXPECT_TRUE(warning_set.empty()); 1690 EXPECT_TRUE(warning_set.empty());
1689 EXPECT_EQ(2u, capturing_net_log.GetSize()); 1691 EXPECT_EQ(2u, capturing_net_log.GetSize());
1690 1692
1691 // Cancel redirect by redirecting to a different data:// URL. This needs 1693 // Cancel redirect by redirecting to a different data:// URL. This needs
1692 // to create a conflict. 1694 // to create a conflict.
1693 GURL new_url_3("data://something_totally_different"); 1695 GURL new_url_3("data://something_totally_different");
1694 linked_ptr<EventResponseDelta> d3( 1696 linked_ptr<EventResponseDelta> d3(
1695 new EventResponseDelta("extid3", base::Time::FromInternalValue(500))); 1697 new EventResponseDelta("extid3", base::Time::FromInternalValue(500)));
1696 d3->new_url = GURL(new_url_3); 1698 d3->new_url = GURL(new_url_3);
1697 deltas.push_back(d3); 1699 deltas.push_back(d3);
1698 deltas.sort(&InDecreasingExtensionInstallationTimeOrder); 1700 deltas.sort(&InDecreasingExtensionInstallationTimeOrder);
1699 warning_set.clear(); 1701 warning_set.clear();
1700 capturing_net_log.Clear(); 1702 capturing_net_log.Clear();
1701 MergeOnBeforeRequestResponses( 1703 MergeOnBeforeRequestResponses(GURL(kExampleUrl), deltas, &effective_new_url,
1702 deltas, &effective_new_url, &warning_set, &net_log); 1704 &warning_set, &net_log);
1703 EXPECT_EQ(new_url_1, effective_new_url); 1705 EXPECT_EQ(new_url_1, effective_new_url);
1704 EXPECT_EQ(1u, warning_set.size()); 1706 EXPECT_EQ(1u, warning_set.size());
1705 EXPECT_TRUE(HasWarning(warning_set, "extid3")); 1707 EXPECT_TRUE(HasWarning(warning_set, "extid3"));
1706 EXPECT_EQ(3u, capturing_net_log.GetSize()); 1708 EXPECT_EQ(3u, capturing_net_log.GetSize());
1707 } 1709 }
1708 1710
1709 // This tests that we can redirect to about:blank, which is considered 1711 // This tests that we can redirect to about:blank, which is considered
1710 // a kind of cancelling requests. 1712 // a kind of cancelling requests.
1711 TEST(ExtensionWebRequestHelpersTest, TestMergeOnBeforeRequestResponses3) { 1713 TEST(ExtensionWebRequestHelpersTest, TestMergeOnBeforeRequestResponses3) {
1712 EventResponseDeltas deltas; 1714 EventResponseDeltas deltas;
1713 net::BoundTestNetLog capturing_net_log; 1715 net::BoundTestNetLog capturing_net_log;
1714 net::NetLogWithSource net_log = capturing_net_log.bound(); 1716 net::NetLogWithSource net_log = capturing_net_log.bound();
1715 WarningSet warning_set; 1717 WarningSet warning_set;
1716 GURL effective_new_url; 1718 GURL effective_new_url;
1717 1719
1718 // Single redirect. 1720 // Single redirect.
1719 GURL new_url_0("http://foo.com"); 1721 GURL new_url_0("http://foo.com");
1720 linked_ptr<EventResponseDelta> d0( 1722 linked_ptr<EventResponseDelta> d0(
1721 new EventResponseDelta("extid0", base::Time::FromInternalValue(2000))); 1723 new EventResponseDelta("extid0", base::Time::FromInternalValue(2000)));
1722 d0->new_url = GURL(new_url_0); 1724 d0->new_url = GURL(new_url_0);
1723 deltas.push_back(d0); 1725 deltas.push_back(d0);
1724 MergeOnBeforeRequestResponses( 1726 MergeOnBeforeRequestResponses(GURL(kExampleUrl), deltas, &effective_new_url,
1725 deltas, &effective_new_url, &warning_set, &net_log); 1727 &warning_set, &net_log);
1726 EXPECT_EQ(new_url_0, effective_new_url); 1728 EXPECT_EQ(new_url_0, effective_new_url);
1727 1729
1728 // Cancel request by redirecting to about:blank. This shall override 1730 // Cancel request by redirecting to about:blank. This shall override
1729 // the other redirect but not cause any conflict warnings. 1731 // the other redirect but not cause any conflict warnings.
1730 GURL new_url_1("about:blank"); 1732 GURL new_url_1("about:blank");
1731 linked_ptr<EventResponseDelta> d1( 1733 linked_ptr<EventResponseDelta> d1(
1732 new EventResponseDelta("extid1", base::Time::FromInternalValue(1500))); 1734 new EventResponseDelta("extid1", base::Time::FromInternalValue(1500)));
1733 d1->new_url = GURL(new_url_1); 1735 d1->new_url = GURL(new_url_1);
1734 deltas.push_back(d1); 1736 deltas.push_back(d1);
1735 deltas.sort(&InDecreasingExtensionInstallationTimeOrder); 1737 deltas.sort(&InDecreasingExtensionInstallationTimeOrder);
1736 warning_set.clear(); 1738 warning_set.clear();
1737 capturing_net_log.Clear(); 1739 capturing_net_log.Clear();
1738 MergeOnBeforeRequestResponses( 1740 MergeOnBeforeRequestResponses(GURL(kExampleUrl), deltas, &effective_new_url,
1739 deltas, &effective_new_url, &warning_set, &net_log); 1741 &warning_set, &net_log);
1740 EXPECT_EQ(new_url_1, effective_new_url); 1742 EXPECT_EQ(new_url_1, effective_new_url);
1741 EXPECT_TRUE(warning_set.empty()); 1743 EXPECT_TRUE(warning_set.empty());
1742 EXPECT_EQ(1u, capturing_net_log.GetSize()); 1744 EXPECT_EQ(1u, capturing_net_log.GetSize());
1743 } 1745 }
1744 1746
1747 // This tests that WebSocket requests can not be redirected.
1748 TEST(ExtensionWebRequestHelpersTest, TestMergeOnBeforeRequestResponses4) {
1749 EventResponseDeltas deltas;
1750 net::BoundTestNetLog capturing_net_log;
1751 net::NetLogWithSource net_log = capturing_net_log.bound();
1752 WarningSet warning_set;
1753 GURL effective_new_url;
1754
1755 // Single redirect.
1756 linked_ptr<EventResponseDelta> delta(
1757 new EventResponseDelta("extid", base::Time::FromInternalValue(2000)));
1758 delta->new_url = GURL("http://foo.com");
1759 deltas.push_back(delta);
1760 MergeOnBeforeRequestResponses(GURL("ws://example.com"), deltas,
1761 &effective_new_url, &warning_set, &net_log);
1762 EXPECT_EQ(GURL::EmptyGURL(), effective_new_url);
Devlin 2017/02/21 20:34:11 nit: just use GURL() instead of EmptyGURL()
pkalinnikov 2017/02/21 22:28:54 Done.
1763 }
1764
1745 TEST(ExtensionWebRequestHelpersTest, TestMergeOnBeforeSendHeadersResponses) { 1765 TEST(ExtensionWebRequestHelpersTest, TestMergeOnBeforeSendHeadersResponses) {
1746 net::HttpRequestHeaders base_headers; 1766 net::HttpRequestHeaders base_headers;
1747 base_headers.SetHeader("key1", "value 1"); 1767 base_headers.SetHeader("key1", "value 1");
1748 base_headers.SetHeader("key2", "value 2"); 1768 base_headers.SetHeader("key2", "value 2");
1749 net::BoundTestNetLog capturing_net_log; 1769 net::BoundTestNetLog capturing_net_log;
1750 net::NetLogWithSource net_log = capturing_net_log.bound(); 1770 net::NetLogWithSource net_log = capturing_net_log.bound();
1751 WarningSet warning_set; 1771 WarningSet warning_set;
1752 std::string header_value; 1772 std::string header_value;
1753 EventResponseDeltas deltas; 1773 EventResponseDeltas deltas;
1754 1774
(...skipping 421 matching lines...) Expand 10 before | Expand all | Expand 10 after
2176 new net::HttpResponseHeaders( 2196 new net::HttpResponseHeaders(
2177 net::HttpUtil::AssembleRawHeaders( 2197 net::HttpUtil::AssembleRawHeaders(
2178 base_headers_string, sizeof(base_headers_string)))); 2198 base_headers_string, sizeof(base_headers_string))));
2179 2199
2180 // Check that we can handle if not touching the response headers. 2200 // Check that we can handle if not touching the response headers.
2181 linked_ptr<EventResponseDelta> d0( 2201 linked_ptr<EventResponseDelta> d0(
2182 new EventResponseDelta("extid0", base::Time::FromInternalValue(3000))); 2202 new EventResponseDelta("extid0", base::Time::FromInternalValue(3000)));
2183 deltas.push_back(d0); 2203 deltas.push_back(d0);
2184 scoped_refptr<net::HttpResponseHeaders> new_headers0; 2204 scoped_refptr<net::HttpResponseHeaders> new_headers0;
2185 GURL allowed_unsafe_redirect_url0; 2205 GURL allowed_unsafe_redirect_url0;
2186 MergeOnHeadersReceivedResponses(deltas, 2206 MergeOnHeadersReceivedResponses(GURL(kExampleUrl), deltas, base_headers.get(),
2187 base_headers.get(), 2207 &new_headers0, &allowed_unsafe_redirect_url0,
2188 &new_headers0, 2208 &warning_set, &net_log);
2189 &allowed_unsafe_redirect_url0,
2190 &warning_set,
2191 &net_log);
2192 EXPECT_FALSE(new_headers0.get()); 2209 EXPECT_FALSE(new_headers0.get());
2193 EXPECT_TRUE(allowed_unsafe_redirect_url0.is_empty()); 2210 EXPECT_TRUE(allowed_unsafe_redirect_url0.is_empty());
2194 EXPECT_EQ(0u, warning_set.size()); 2211 EXPECT_EQ(0u, warning_set.size());
2195 EXPECT_EQ(0u, capturing_net_log.GetSize()); 2212 EXPECT_EQ(0u, capturing_net_log.GetSize());
2196 2213
2197 linked_ptr<EventResponseDelta> d1( 2214 linked_ptr<EventResponseDelta> d1(
2198 new EventResponseDelta("extid1", base::Time::FromInternalValue(2000))); 2215 new EventResponseDelta("extid1", base::Time::FromInternalValue(2000)));
2199 d1->deleted_response_headers.push_back(ResponseHeader("KEY1", "Value1")); 2216 d1->deleted_response_headers.push_back(ResponseHeader("KEY1", "Value1"));
2200 d1->deleted_response_headers.push_back(ResponseHeader("KEY2", "Value2, Foo")); 2217 d1->deleted_response_headers.push_back(ResponseHeader("KEY2", "Value2, Foo"));
2201 d1->added_response_headers.push_back(ResponseHeader("Key2", "Value3")); 2218 d1->added_response_headers.push_back(ResponseHeader("Key2", "Value3"));
2202 deltas.push_back(d1); 2219 deltas.push_back(d1);
2203 deltas.sort(&InDecreasingExtensionInstallationTimeOrder); 2220 deltas.sort(&InDecreasingExtensionInstallationTimeOrder);
2204 warning_set.clear(); 2221 warning_set.clear();
2205 capturing_net_log.Clear(); 2222 capturing_net_log.Clear();
2206 scoped_refptr<net::HttpResponseHeaders> new_headers1; 2223 scoped_refptr<net::HttpResponseHeaders> new_headers1;
2207 GURL allowed_unsafe_redirect_url1; 2224 GURL allowed_unsafe_redirect_url1;
2208 MergeOnHeadersReceivedResponses(deltas, 2225 MergeOnHeadersReceivedResponses(GURL(kExampleUrl), deltas, base_headers.get(),
2209 base_headers.get(), 2226 &new_headers1, &allowed_unsafe_redirect_url1,
2210 &new_headers1, 2227 &warning_set, &net_log);
2211 &allowed_unsafe_redirect_url1,
2212 &warning_set,
2213 &net_log);
2214 ASSERT_TRUE(new_headers1.get()); 2228 ASSERT_TRUE(new_headers1.get());
2215 EXPECT_TRUE(allowed_unsafe_redirect_url1.is_empty()); 2229 EXPECT_TRUE(allowed_unsafe_redirect_url1.is_empty());
2216 std::multimap<std::string, std::string> expected1; 2230 std::multimap<std::string, std::string> expected1;
2217 expected1.insert(std::pair<std::string, std::string>("Key2", "Value3")); 2231 expected1.insert(std::pair<std::string, std::string>("Key2", "Value3"));
2218 size_t iter = 0; 2232 size_t iter = 0;
2219 std::string name; 2233 std::string name;
2220 std::string value; 2234 std::string value;
2221 std::multimap<std::string, std::string> actual1; 2235 std::multimap<std::string, std::string> actual1;
2222 while (new_headers1->EnumerateHeaderLines(&iter, &name, &value)) { 2236 while (new_headers1->EnumerateHeaderLines(&iter, &name, &value)) {
2223 actual1.insert(std::pair<std::string, std::string>(name, value)); 2237 actual1.insert(std::pair<std::string, std::string>(name, value));
2224 } 2238 }
2225 EXPECT_EQ(expected1, actual1); 2239 EXPECT_EQ(expected1, actual1);
2226 EXPECT_EQ(0u, warning_set.size()); 2240 EXPECT_EQ(0u, warning_set.size());
2227 EXPECT_EQ(1u, capturing_net_log.GetSize()); 2241 EXPECT_EQ(1u, capturing_net_log.GetSize());
2228 2242
2229 // Check that we replace response headers only once. 2243 // Check that we replace response headers only once.
2230 linked_ptr<EventResponseDelta> d2( 2244 linked_ptr<EventResponseDelta> d2(
2231 new EventResponseDelta("extid2", base::Time::FromInternalValue(1500))); 2245 new EventResponseDelta("extid2", base::Time::FromInternalValue(1500)));
2232 // Note that we use a different capitalization of KeY2. This should not 2246 // Note that we use a different capitalization of KeY2. This should not
2233 // matter. 2247 // matter.
2234 d2->deleted_response_headers.push_back(ResponseHeader("KeY2", "Value2, Foo")); 2248 d2->deleted_response_headers.push_back(ResponseHeader("KeY2", "Value2, Foo"));
2235 d2->added_response_headers.push_back(ResponseHeader("Key2", "Value4")); 2249 d2->added_response_headers.push_back(ResponseHeader("Key2", "Value4"));
2236 deltas.push_back(d2); 2250 deltas.push_back(d2);
2237 deltas.sort(&InDecreasingExtensionInstallationTimeOrder); 2251 deltas.sort(&InDecreasingExtensionInstallationTimeOrder);
2238 warning_set.clear(); 2252 warning_set.clear();
2239 capturing_net_log.Clear(); 2253 capturing_net_log.Clear();
2240 scoped_refptr<net::HttpResponseHeaders> new_headers2; 2254 scoped_refptr<net::HttpResponseHeaders> new_headers2;
2241 GURL allowed_unsafe_redirect_url2; 2255 GURL allowed_unsafe_redirect_url2;
2242 MergeOnHeadersReceivedResponses(deltas, 2256 MergeOnHeadersReceivedResponses(GURL(kExampleUrl), deltas, base_headers.get(),
2243 base_headers.get(), 2257 &new_headers2, &allowed_unsafe_redirect_url2,
2244 &new_headers2, 2258 &warning_set, &net_log);
2245 &allowed_unsafe_redirect_url2,
2246 &warning_set,
2247 &net_log);
2248 ASSERT_TRUE(new_headers2.get()); 2259 ASSERT_TRUE(new_headers2.get());
2249 EXPECT_TRUE(allowed_unsafe_redirect_url2.is_empty()); 2260 EXPECT_TRUE(allowed_unsafe_redirect_url2.is_empty());
2250 iter = 0; 2261 iter = 0;
2251 std::multimap<std::string, std::string> actual2; 2262 std::multimap<std::string, std::string> actual2;
2252 while (new_headers2->EnumerateHeaderLines(&iter, &name, &value)) { 2263 while (new_headers2->EnumerateHeaderLines(&iter, &name, &value)) {
2253 actual2.insert(std::pair<std::string, std::string>(name, value)); 2264 actual2.insert(std::pair<std::string, std::string>(name, value));
2254 } 2265 }
2255 EXPECT_EQ(expected1, actual2); 2266 EXPECT_EQ(expected1, actual2);
2256 EXPECT_EQ(1u, warning_set.size()); 2267 EXPECT_EQ(1u, warning_set.size());
2257 EXPECT_TRUE(HasWarning(warning_set, "extid2")); 2268 EXPECT_TRUE(HasWarning(warning_set, "extid2"));
(...skipping 20 matching lines...) Expand all
2278 new net::HttpResponseHeaders( 2289 new net::HttpResponseHeaders(
2279 net::HttpUtil::AssembleRawHeaders( 2290 net::HttpUtil::AssembleRawHeaders(
2280 base_headers_string, sizeof(base_headers_string)))); 2291 base_headers_string, sizeof(base_headers_string))));
2281 2292
2282 linked_ptr<EventResponseDelta> d1( 2293 linked_ptr<EventResponseDelta> d1(
2283 new EventResponseDelta("extid1", base::Time::FromInternalValue(2000))); 2294 new EventResponseDelta("extid1", base::Time::FromInternalValue(2000)));
2284 d1->deleted_response_headers.push_back(ResponseHeader("KEY1", "Value2")); 2295 d1->deleted_response_headers.push_back(ResponseHeader("KEY1", "Value2"));
2285 deltas.push_back(d1); 2296 deltas.push_back(d1);
2286 scoped_refptr<net::HttpResponseHeaders> new_headers1; 2297 scoped_refptr<net::HttpResponseHeaders> new_headers1;
2287 GURL allowed_unsafe_redirect_url1; 2298 GURL allowed_unsafe_redirect_url1;
2288 MergeOnHeadersReceivedResponses(deltas, 2299 MergeOnHeadersReceivedResponses(GURL(kExampleUrl), deltas, base_headers.get(),
2289 base_headers.get(), 2300 &new_headers1, &allowed_unsafe_redirect_url1,
2290 &new_headers1, 2301 &warning_set, &net_log);
2291 &allowed_unsafe_redirect_url1,
2292 &warning_set,
2293 &net_log);
2294 ASSERT_TRUE(new_headers1.get()); 2302 ASSERT_TRUE(new_headers1.get());
2295 EXPECT_TRUE(allowed_unsafe_redirect_url1.is_empty()); 2303 EXPECT_TRUE(allowed_unsafe_redirect_url1.is_empty());
2296 std::multimap<std::string, std::string> expected1; 2304 std::multimap<std::string, std::string> expected1;
2297 expected1.insert(std::pair<std::string, std::string>("Key1", "Value1")); 2305 expected1.insert(std::pair<std::string, std::string>("Key1", "Value1"));
2298 expected1.insert(std::pair<std::string, std::string>("Key1", "Value3")); 2306 expected1.insert(std::pair<std::string, std::string>("Key1", "Value3"));
2299 expected1.insert(std::pair<std::string, std::string>("Key2", "Value4")); 2307 expected1.insert(std::pair<std::string, std::string>("Key2", "Value4"));
2300 size_t iter = 0; 2308 size_t iter = 0;
2301 std::string name; 2309 std::string name;
2302 std::string value; 2310 std::string value;
2303 std::multimap<std::string, std::string> actual1; 2311 std::multimap<std::string, std::string> actual1;
(...skipping 21 matching lines...) Expand all
2325 scoped_refptr<net::HttpResponseHeaders> base_headers( 2333 scoped_refptr<net::HttpResponseHeaders> base_headers(
2326 new net::HttpResponseHeaders(net::HttpUtil::AssembleRawHeaders( 2334 new net::HttpResponseHeaders(net::HttpUtil::AssembleRawHeaders(
2327 base_headers_string, sizeof(base_headers_string)))); 2335 base_headers_string, sizeof(base_headers_string))));
2328 2336
2329 // No redirect 2337 // No redirect
2330 linked_ptr<EventResponseDelta> d0( 2338 linked_ptr<EventResponseDelta> d0(
2331 new EventResponseDelta("extid0", base::Time::FromInternalValue(0))); 2339 new EventResponseDelta("extid0", base::Time::FromInternalValue(0)));
2332 deltas.push_back(d0); 2340 deltas.push_back(d0);
2333 scoped_refptr<net::HttpResponseHeaders> new_headers0; 2341 scoped_refptr<net::HttpResponseHeaders> new_headers0;
2334 GURL allowed_unsafe_redirect_url0; 2342 GURL allowed_unsafe_redirect_url0;
2335 MergeOnHeadersReceivedResponses(deltas, 2343 MergeOnHeadersReceivedResponses(GURL(kExampleUrl), deltas, base_headers.get(),
2336 base_headers.get(), 2344 &new_headers0, &allowed_unsafe_redirect_url0,
2337 &new_headers0, 2345 &warning_set, &net_log);
2338 &allowed_unsafe_redirect_url0,
2339 &warning_set,
2340 &net_log);
2341 EXPECT_FALSE(new_headers0.get()); 2346 EXPECT_FALSE(new_headers0.get());
2342 EXPECT_TRUE(allowed_unsafe_redirect_url0.is_empty()); 2347 EXPECT_TRUE(allowed_unsafe_redirect_url0.is_empty());
2343 EXPECT_EQ(0u, warning_set.size()); 2348 EXPECT_EQ(0u, warning_set.size());
2344 EXPECT_EQ(0u, capturing_net_log.GetSize()); 2349 EXPECT_EQ(0u, capturing_net_log.GetSize());
2345 2350
2346 // Single redirect. 2351 // Single redirect.
2347 GURL new_url_1("http://foo.com"); 2352 GURL new_url_1("http://foo.com");
2348 linked_ptr<EventResponseDelta> d1( 2353 linked_ptr<EventResponseDelta> d1(
2349 new EventResponseDelta("extid1", base::Time::FromInternalValue(1000))); 2354 new EventResponseDelta("extid1", base::Time::FromInternalValue(1000)));
2350 d1->new_url = GURL(new_url_1); 2355 d1->new_url = GURL(new_url_1);
2351 deltas.push_back(d1); 2356 deltas.push_back(d1);
2352 deltas.sort(&InDecreasingExtensionInstallationTimeOrder); 2357 deltas.sort(&InDecreasingExtensionInstallationTimeOrder);
2353 capturing_net_log.Clear(); 2358 capturing_net_log.Clear();
2354 scoped_refptr<net::HttpResponseHeaders> new_headers1; 2359 scoped_refptr<net::HttpResponseHeaders> new_headers1;
2355 GURL allowed_unsafe_redirect_url1; 2360 GURL allowed_unsafe_redirect_url1;
2356 MergeOnHeadersReceivedResponses(deltas, 2361 MergeOnHeadersReceivedResponses(GURL(kExampleUrl), deltas, base_headers.get(),
2357 base_headers.get(), 2362 &new_headers1, &allowed_unsafe_redirect_url1,
2358 &new_headers1, 2363 &warning_set, &net_log);
2359 &allowed_unsafe_redirect_url1,
2360 &warning_set,
2361 &net_log);
2362 2364
2363 EXPECT_TRUE(new_headers1.get()); 2365 EXPECT_TRUE(new_headers1.get());
2364 EXPECT_TRUE(new_headers1->HasHeaderValue("Location", new_url_1.spec())); 2366 EXPECT_TRUE(new_headers1->HasHeaderValue("Location", new_url_1.spec()));
2365 EXPECT_EQ(new_url_1, allowed_unsafe_redirect_url1); 2367 EXPECT_EQ(new_url_1, allowed_unsafe_redirect_url1);
2366 EXPECT_TRUE(warning_set.empty()); 2368 EXPECT_TRUE(warning_set.empty());
2367 EXPECT_EQ(1u, capturing_net_log.GetSize()); 2369 EXPECT_EQ(1u, capturing_net_log.GetSize());
2368 } 2370 }
2369 2371
2370 TEST(ExtensionWebRequestHelpersTest, TestMergeOnAuthRequiredResponses) { 2372 TEST(ExtensionWebRequestHelpersTest, TestMergeOnAuthRequiredResponses) {
2371 net::BoundTestNetLog capturing_net_log; 2373 net::BoundTestNetLog capturing_net_log;
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
2440 EXPECT_TRUE(credentials_set); 2442 EXPECT_TRUE(credentials_set);
2441 EXPECT_FALSE(auth3.Empty()); 2443 EXPECT_FALSE(auth3.Empty());
2442 EXPECT_EQ(username, auth1.username()); 2444 EXPECT_EQ(username, auth1.username());
2443 EXPECT_EQ(password, auth1.password()); 2445 EXPECT_EQ(password, auth1.password());
2444 EXPECT_EQ(1u, warning_set.size()); 2446 EXPECT_EQ(1u, warning_set.size());
2445 EXPECT_TRUE(HasWarning(warning_set, "extid2")); 2447 EXPECT_TRUE(HasWarning(warning_set, "extid2"));
2446 EXPECT_EQ(3u, capturing_net_log.GetSize()); 2448 EXPECT_EQ(3u, capturing_net_log.GetSize());
2447 } 2449 }
2448 2450
2449 } // namespace extensions 2451 } // namespace extensions
OLDNEW
« no previous file with comments | « no previous file | chrome/browser/extensions/api/web_request/web_request_apitest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698