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 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
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 Loading... |
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); |
| 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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |