| Index: chrome/browser/extensions/api/web_request/web_request_api_unittest.cc
|
| diff --git a/chrome/browser/extensions/api/web_request/web_request_api_unittest.cc b/chrome/browser/extensions/api/web_request/web_request_api_unittest.cc
|
| index c4ff795805d03987eb57f46477851091bba3f0a6..bb584772895189dd21d52d56316a65a55e7f8cd4 100644
|
| --- a/chrome/browser/extensions/api/web_request/web_request_api_unittest.cc
|
| +++ b/chrome/browser/extensions/api/web_request/web_request_api_unittest.cc
|
| @@ -79,10 +79,9 @@ bool Contains(const Collection& collection, const Key& key) {
|
| }
|
|
|
| // Returns whether |warnings| contains an extension for |extension_id|.
|
| -bool HasWarning(const std::set<linked_ptr<ExtensionWarning> > warnings,
|
| +bool HasWarning(const ExtensionWarningSet::Set& warnings,
|
| const std::string& extension_id) {
|
| - for (std::set<linked_ptr<ExtensionWarning> >::const_iterator i =
|
| - warnings.begin();
|
| + for (ExtensionWarningSet::Set::const_iterator i = warnings.begin();
|
| i != warnings.end();
|
| ++i) {
|
| if ((*i)->extension_id() == extension_id)
|
| @@ -91,6 +90,14 @@ bool HasWarning(const std::set<linked_ptr<ExtensionWarning> > warnings,
|
| return false;
|
| }
|
|
|
| +void ClearWarnings(ExtensionWarningSet::Set* warnings) {
|
| + // We cannot delete elements that are still in the set because operator<
|
| + // cannot be executed on freed pointers that are still in the set.
|
| + std::vector<ExtensionWarning*> tmp(warnings->begin(), warnings->end());
|
| + warnings->clear();
|
| + STLDeleteContainerPointers(tmp.begin(), tmp.end());
|
| +}
|
| +
|
| } // namespace
|
|
|
| // A mock event router that responds to events with a pre-arranged queue of
|
| @@ -1021,7 +1028,7 @@ TEST(ExtensionWebRequestHelpersTest, TestMergeOnBeforeRequestResponses) {
|
| net::CapturingBoundNetLog capturing_net_log;
|
| net::BoundNetLog net_log = capturing_net_log.bound();
|
| ExtensionWarningSet warning_set;
|
| - std::set<linked_ptr<ExtensionWarning> > warnings;
|
| + ExtensionWarningSet::Set warnings;
|
| GURL effective_new_url;
|
|
|
| // No redirect
|
| @@ -1046,6 +1053,7 @@ TEST(ExtensionWebRequestHelpersTest, TestMergeOnBeforeRequestResponses) {
|
| EXPECT_EQ(new_url_1, effective_new_url);
|
| EXPECT_TRUE(warnings.empty());
|
| EXPECT_EQ(1u, capturing_net_log.GetSize());
|
| + ClearWarnings(&warnings);
|
|
|
| // Ignored redirect (due to precedence).
|
| GURL new_url_2("http://bar.com");
|
| @@ -1062,6 +1070,7 @@ TEST(ExtensionWebRequestHelpersTest, TestMergeOnBeforeRequestResponses) {
|
| EXPECT_EQ(1u, warnings.size());
|
| EXPECT_TRUE(HasWarning(warnings, "extid2"));
|
| EXPECT_EQ(2u, capturing_net_log.GetSize());
|
| + ClearWarnings(&warnings);
|
|
|
| // Overriding redirect.
|
| GURL new_url_3("http://baz.com");
|
| @@ -1079,6 +1088,7 @@ TEST(ExtensionWebRequestHelpersTest, TestMergeOnBeforeRequestResponses) {
|
| EXPECT_TRUE(HasWarning(warnings, "extid1"));
|
| EXPECT_TRUE(HasWarning(warnings, "extid2"));
|
| EXPECT_EQ(3u, capturing_net_log.GetSize());
|
| + ClearWarnings(&warnings);
|
|
|
| // Check that identical redirects don't cause a conflict.
|
| linked_ptr<EventResponseDelta> d4(
|
| @@ -1095,6 +1105,7 @@ TEST(ExtensionWebRequestHelpersTest, TestMergeOnBeforeRequestResponses) {
|
| EXPECT_TRUE(HasWarning(warnings, "extid1"));
|
| EXPECT_TRUE(HasWarning(warnings, "extid2"));
|
| EXPECT_EQ(4u, capturing_net_log.GetSize());
|
| + ClearWarnings(&warnings);
|
| }
|
|
|
| // This tests that we can redirect to data:// urls, which is considered
|
| @@ -1104,7 +1115,7 @@ TEST(ExtensionWebRequestHelpersTest, TestMergeOnBeforeRequestResponses2) {
|
| net::CapturingBoundNetLog capturing_net_log;
|
| net::BoundNetLog net_log = capturing_net_log.bound();
|
| ExtensionWarningSet warning_set;
|
| - std::set<linked_ptr<ExtensionWarning> > warnings;
|
| + ExtensionWarningSet::Set warnings;
|
| GURL effective_new_url;
|
|
|
| // Single redirect.
|
| @@ -1117,6 +1128,7 @@ TEST(ExtensionWebRequestHelpersTest, TestMergeOnBeforeRequestResponses2) {
|
| deltas, &effective_new_url, &warning_set, &net_log);
|
| warnings = warning_set.Release();
|
| EXPECT_EQ(new_url_0, effective_new_url);
|
| + ClearWarnings(&warnings);
|
|
|
| // Cancel request by redirecting to a data:// URL. This shall override
|
| // the other redirect but not cause any conflict warnings.
|
| @@ -1133,6 +1145,7 @@ TEST(ExtensionWebRequestHelpersTest, TestMergeOnBeforeRequestResponses2) {
|
| EXPECT_EQ(new_url_1, effective_new_url);
|
| EXPECT_TRUE(warnings.empty());
|
| EXPECT_EQ(1u, capturing_net_log.GetSize());
|
| + ClearWarnings(&warnings);
|
|
|
| // Cancel request by redirecting to the same data:// URL. This shall
|
| // not create any conflicts as it is in line with d1.
|
| @@ -1149,6 +1162,7 @@ TEST(ExtensionWebRequestHelpersTest, TestMergeOnBeforeRequestResponses2) {
|
| EXPECT_EQ(new_url_1, effective_new_url);
|
| EXPECT_TRUE(warnings.empty());
|
| EXPECT_EQ(2u, capturing_net_log.GetSize());
|
| + ClearWarnings(&warnings);
|
|
|
| // Cancel redirect by redirecting to a different data:// URL. This needs
|
| // to create a conflict.
|
| @@ -1166,6 +1180,7 @@ TEST(ExtensionWebRequestHelpersTest, TestMergeOnBeforeRequestResponses2) {
|
| EXPECT_EQ(1u, warnings.size());
|
| EXPECT_TRUE(HasWarning(warnings, "extid3"));
|
| EXPECT_EQ(3u, capturing_net_log.GetSize());
|
| + ClearWarnings(&warnings);
|
| }
|
|
|
| // This tests that we can redirect to about:blank, which is considered
|
| @@ -1175,7 +1190,7 @@ TEST(ExtensionWebRequestHelpersTest, TestMergeOnBeforeRequestResponses3) {
|
| net::CapturingBoundNetLog capturing_net_log;
|
| net::BoundNetLog net_log = capturing_net_log.bound();
|
| ExtensionWarningSet warning_set;
|
| - std::set<linked_ptr<ExtensionWarning> > warnings;
|
| + ExtensionWarningSet::Set warnings;
|
| GURL effective_new_url;
|
|
|
| // Single redirect.
|
| @@ -1188,6 +1203,7 @@ TEST(ExtensionWebRequestHelpersTest, TestMergeOnBeforeRequestResponses3) {
|
| deltas, &effective_new_url, &warning_set, &net_log);
|
| warnings = warning_set.Release();
|
| EXPECT_EQ(new_url_0, effective_new_url);
|
| + ClearWarnings(&warnings);
|
|
|
| // Cancel request by redirecting to about:blank. This shall override
|
| // the other redirect but not cause any conflict warnings.
|
| @@ -1204,6 +1220,7 @@ TEST(ExtensionWebRequestHelpersTest, TestMergeOnBeforeRequestResponses3) {
|
| EXPECT_EQ(new_url_1, effective_new_url);
|
| EXPECT_TRUE(warnings.empty());
|
| EXPECT_EQ(1u, capturing_net_log.GetSize());
|
| + ClearWarnings(&warnings);
|
| }
|
|
|
| TEST(ExtensionWebRequestHelpersTest, TestMergeOnBeforeSendHeadersResponses) {
|
| @@ -1213,7 +1230,7 @@ TEST(ExtensionWebRequestHelpersTest, TestMergeOnBeforeSendHeadersResponses) {
|
| net::CapturingBoundNetLog capturing_net_log;
|
| net::BoundNetLog net_log = capturing_net_log.bound();
|
| ExtensionWarningSet warning_set;
|
| - std::set<linked_ptr<ExtensionWarning> > warnings;
|
| + ExtensionWarningSet::Set warnings;
|
| std::string header_value;
|
| EventResponseDeltas deltas;
|
|
|
| @@ -1231,6 +1248,7 @@ TEST(ExtensionWebRequestHelpersTest, TestMergeOnBeforeSendHeadersResponses) {
|
| EXPECT_EQ("value 2", header_value);
|
| EXPECT_EQ(0u, warnings.size());
|
| EXPECT_EQ(0u, capturing_net_log.GetSize());
|
| + ClearWarnings(&warnings);
|
|
|
| // Delete, modify and add a header.
|
| linked_ptr<EventResponseDelta> d1(
|
| @@ -1251,6 +1269,7 @@ TEST(ExtensionWebRequestHelpersTest, TestMergeOnBeforeSendHeadersResponses) {
|
| EXPECT_EQ("value 3", header_value);
|
| EXPECT_EQ(0u, warnings.size());
|
| EXPECT_EQ(1u, capturing_net_log.GetSize());
|
| + ClearWarnings(&warnings);
|
|
|
| // Check that conflicts are atomic, i.e. if one header modification
|
| // collides all other conflicts of the same extension are declined as well.
|
| @@ -1275,6 +1294,7 @@ TEST(ExtensionWebRequestHelpersTest, TestMergeOnBeforeSendHeadersResponses) {
|
| EXPECT_EQ(1u, warnings.size());
|
| EXPECT_TRUE(HasWarning(warnings, "extid2"));
|
| EXPECT_EQ(2u, capturing_net_log.GetSize());
|
| + ClearWarnings(&warnings);
|
|
|
| // Check that identical modifications don't conflict and operations
|
| // can be merged.
|
| @@ -1300,6 +1320,7 @@ TEST(ExtensionWebRequestHelpersTest, TestMergeOnBeforeSendHeadersResponses) {
|
| EXPECT_EQ(1u, warnings.size());
|
| EXPECT_TRUE(HasWarning(warnings, "extid2"));
|
| EXPECT_EQ(3u, capturing_net_log.GetSize());
|
| + ClearWarnings(&warnings);
|
| }
|
|
|
| TEST(ExtensionWebRequestHelpersTest,
|
| @@ -1310,7 +1331,7 @@ TEST(ExtensionWebRequestHelpersTest,
|
| net::CapturingBoundNetLog capturing_net_log;
|
| net::BoundNetLog net_log = capturing_net_log.bound();
|
| ExtensionWarningSet warning_set;
|
| - std::set<linked_ptr<ExtensionWarning> > warnings;
|
| + ExtensionWarningSet::Set warnings;
|
| std::string header_value;
|
| EventResponseDeltas deltas;
|
|
|
| @@ -1362,6 +1383,7 @@ TEST(ExtensionWebRequestHelpersTest,
|
| EXPECT_EQ("name=new value; name2=new value; name4=\"value 4\"", header_value);
|
| EXPECT_EQ(0u, warnings.size());
|
| EXPECT_EQ(0u, capturing_net_log.GetSize());
|
| + ClearWarnings(&warnings);
|
| }
|
|
|
| TEST(ExtensionWebRequestHelpersTest,
|
| @@ -1369,7 +1391,7 @@ TEST(ExtensionWebRequestHelpersTest,
|
| net::CapturingBoundNetLog capturing_net_log;
|
| net::BoundNetLog net_log = capturing_net_log.bound();
|
| ExtensionWarningSet warning_set;
|
| - std::set<linked_ptr<ExtensionWarning> > warnings;
|
| + ExtensionWarningSet::Set warnings;
|
| std::string header_value;
|
| EventResponseDeltas deltas;
|
|
|
| @@ -1396,6 +1418,7 @@ TEST(ExtensionWebRequestHelpersTest,
|
| EXPECT_FALSE(new_headers0.get());
|
| EXPECT_EQ(0u, warnings.size());
|
| EXPECT_EQ(0u, capturing_net_log.GetSize());
|
| + ClearWarnings(&warnings);
|
|
|
| linked_ptr<ResponseCookieModification> add_cookie =
|
| make_linked_ptr(new ResponseCookieModification);
|
| @@ -1445,6 +1468,7 @@ TEST(ExtensionWebRequestHelpersTest,
|
| MergeCookiesInOnHeadersReceivedResponses(
|
| deltas, headers1.get(), &new_headers1, &warning_set, &net_log);
|
| warnings = warning_set.Release();
|
| + ClearWarnings(&warnings);
|
|
|
| EXPECT_TRUE(new_headers1->HasHeader("Foo"));
|
| void* iter = NULL;
|
| @@ -1465,7 +1489,7 @@ TEST(ExtensionWebRequestHelpersTest, TestMergeOnHeadersReceivedResponses) {
|
| net::CapturingBoundNetLog capturing_net_log;
|
| net::BoundNetLog net_log = capturing_net_log.bound();
|
| ExtensionWarningSet warning_set;
|
| - std::set<linked_ptr<ExtensionWarning> > warnings;
|
| + ExtensionWarningSet::Set warnings;
|
| std::string header_value;
|
| EventResponseDeltas deltas;
|
|
|
| @@ -1490,6 +1514,7 @@ TEST(ExtensionWebRequestHelpersTest, TestMergeOnHeadersReceivedResponses) {
|
| EXPECT_FALSE(new_headers0.get());
|
| EXPECT_EQ(0u, warnings.size());
|
| EXPECT_EQ(0u, capturing_net_log.GetSize());
|
| + ClearWarnings(&warnings);
|
|
|
| linked_ptr<EventResponseDelta> d1(
|
| new EventResponseDelta("extid1", base::Time::FromInternalValue(2000)));
|
| @@ -1516,6 +1541,7 @@ TEST(ExtensionWebRequestHelpersTest, TestMergeOnHeadersReceivedResponses) {
|
| EXPECT_EQ(expected1, actual1);
|
| EXPECT_EQ(0u, warnings.size());
|
| EXPECT_EQ(1u, capturing_net_log.GetSize());
|
| + ClearWarnings(&warnings);
|
|
|
| // Check that we replace response headers only once.
|
| linked_ptr<EventResponseDelta> d2(
|
| @@ -1541,6 +1567,7 @@ TEST(ExtensionWebRequestHelpersTest, TestMergeOnHeadersReceivedResponses) {
|
| EXPECT_EQ(1u, warnings.size());
|
| EXPECT_TRUE(HasWarning(warnings, "extid2"));
|
| EXPECT_EQ(2u, capturing_net_log.GetSize());
|
| + ClearWarnings(&warnings);
|
| }
|
|
|
| // Check that we do not delete too much
|
| @@ -1549,7 +1576,7 @@ TEST(ExtensionWebRequestHelpersTest,
|
| net::CapturingBoundNetLog capturing_net_log;
|
| net::BoundNetLog net_log = capturing_net_log.bound();
|
| ExtensionWarningSet warning_set;
|
| - std::set<linked_ptr<ExtensionWarning> > warnings;
|
| + ExtensionWarningSet::Set warnings;
|
| std::string header_value;
|
| EventResponseDeltas deltas;
|
|
|
| @@ -1588,13 +1615,14 @@ TEST(ExtensionWebRequestHelpersTest,
|
| EXPECT_EQ(expected1, actual1);
|
| EXPECT_EQ(0u, warnings.size());
|
| EXPECT_EQ(1u, capturing_net_log.GetSize());
|
| + ClearWarnings(&warnings);
|
| }
|
|
|
| TEST(ExtensionWebRequestHelpersTest, TestMergeOnAuthRequiredResponses) {
|
| net::CapturingBoundNetLog capturing_net_log;
|
| net::BoundNetLog net_log = capturing_net_log.bound();
|
| ExtensionWarningSet warning_set;
|
| - std::set<linked_ptr<ExtensionWarning> > warnings;
|
| + ExtensionWarningSet::Set warnings;
|
| EventResponseDeltas deltas;
|
| string16 username = ASCIIToUTF16("foo");
|
| string16 password = ASCIIToUTF16("bar");
|
| @@ -1612,6 +1640,7 @@ TEST(ExtensionWebRequestHelpersTest, TestMergeOnAuthRequiredResponses) {
|
| EXPECT_TRUE(auth0.Empty());
|
| EXPECT_EQ(0u, warnings.size());
|
| EXPECT_EQ(0u, capturing_net_log.GetSize());
|
| + ClearWarnings(&warnings);
|
|
|
| // Check that we can set AuthCredentials.
|
| linked_ptr<EventResponseDelta> d1(
|
| @@ -1630,6 +1659,7 @@ TEST(ExtensionWebRequestHelpersTest, TestMergeOnAuthRequiredResponses) {
|
| EXPECT_EQ(password, auth1.password());
|
| EXPECT_EQ(0u, warnings.size());
|
| EXPECT_EQ(1u, capturing_net_log.GetSize());
|
| + ClearWarnings(&warnings);
|
|
|
| // Check that we set AuthCredentials only once.
|
| linked_ptr<EventResponseDelta> d2(
|
| @@ -1649,6 +1679,7 @@ TEST(ExtensionWebRequestHelpersTest, TestMergeOnAuthRequiredResponses) {
|
| EXPECT_EQ(1u, warnings.size());
|
| EXPECT_TRUE(HasWarning(warnings, "extid2"));
|
| EXPECT_EQ(2u, capturing_net_log.GetSize());
|
| + ClearWarnings(&warnings);
|
|
|
| // Check that we can set identical AuthCredentials twice without causing
|
| // a conflict.
|
| @@ -1669,6 +1700,7 @@ TEST(ExtensionWebRequestHelpersTest, TestMergeOnAuthRequiredResponses) {
|
| EXPECT_EQ(1u, warnings.size());
|
| EXPECT_TRUE(HasWarning(warnings, "extid2"));
|
| EXPECT_EQ(3u, capturing_net_log.GetSize());
|
| + ClearWarnings(&warnings);
|
| }
|
|
|
| } // namespace extensions
|
|
|