| 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 |