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

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

Issue 10909096: Remove use of linked_ptr from ExtensionWarningSet Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 3 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 | Annotate | Revision Log
« no previous file with comments | « no previous file | chrome/browser/extensions/extension_warning_set.h » ('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 <map> 5 #include <map>
6 #include <queue> 6 #include <queue>
7 7
8 #include "base/bind.h" 8 #include "base/bind.h"
9 #include "base/callback.h" 9 #include "base/callback.h"
10 #include "base/file_util.h" 10 #include "base/file_util.h"
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
72 72
73 // Searches |key| in |collection| by iterating over its elements and returns 73 // Searches |key| in |collection| by iterating over its elements and returns
74 // true if found. 74 // true if found.
75 template <typename Collection, typename Key> 75 template <typename Collection, typename Key>
76 bool Contains(const Collection& collection, const Key& key) { 76 bool Contains(const Collection& collection, const Key& key) {
77 return std::find(collection.begin(), collection.end(), key) != 77 return std::find(collection.begin(), collection.end(), key) !=
78 collection.end(); 78 collection.end();
79 } 79 }
80 80
81 // Returns whether |warnings| contains an extension for |extension_id|. 81 // Returns whether |warnings| contains an extension for |extension_id|.
82 bool HasWarning(const std::set<linked_ptr<ExtensionWarning> > warnings, 82 bool HasWarning(const ExtensionWarningSet::Set& warnings,
83 const std::string& extension_id) { 83 const std::string& extension_id) {
84 for (std::set<linked_ptr<ExtensionWarning> >::const_iterator i = 84 for (ExtensionWarningSet::Set::const_iterator i = warnings.begin();
85 warnings.begin();
86 i != warnings.end(); 85 i != warnings.end();
87 ++i) { 86 ++i) {
88 if ((*i)->extension_id() == extension_id) 87 if ((*i)->extension_id() == extension_id)
89 return true; 88 return true;
90 } 89 }
91 return false; 90 return false;
92 } 91 }
93 92
93 void ClearWarnings(ExtensionWarningSet::Set* warnings) {
94 // We cannot delete elements that are still in the set because operator<
95 // cannot be executed on freed pointers that are still in the set.
96 std::vector<ExtensionWarning*> tmp(warnings->begin(), warnings->end());
97 warnings->clear();
98 STLDeleteContainerPointers(tmp.begin(), tmp.end());
99 }
100
94 } // namespace 101 } // namespace
95 102
96 // A mock event router that responds to events with a pre-arranged queue of 103 // A mock event router that responds to events with a pre-arranged queue of
97 // Tasks. 104 // Tasks.
98 class TestIPCSender : public IPC::Sender { 105 class TestIPCSender : public IPC::Sender {
99 public: 106 public:
100 typedef std::list<linked_ptr<IPC::Message> > SentMessages; 107 typedef std::list<linked_ptr<IPC::Message> > SentMessages;
101 108
102 // Adds a Task to the queue. We will fire these in order as events are 109 // Adds a Task to the queue. We will fire these in order as events are
103 // dispatched. 110 // dispatched.
(...skipping 910 matching lines...) Expand 10 before | Expand all | Expand 10 after
1014 MergeCancelOfResponses(deltas, &canceled, &net_log); 1021 MergeCancelOfResponses(deltas, &canceled, &net_log);
1015 EXPECT_TRUE(canceled); 1022 EXPECT_TRUE(canceled);
1016 EXPECT_EQ(1u, capturing_net_log.GetSize()); 1023 EXPECT_EQ(1u, capturing_net_log.GetSize());
1017 } 1024 }
1018 1025
1019 TEST(ExtensionWebRequestHelpersTest, TestMergeOnBeforeRequestResponses) { 1026 TEST(ExtensionWebRequestHelpersTest, TestMergeOnBeforeRequestResponses) {
1020 EventResponseDeltas deltas; 1027 EventResponseDeltas deltas;
1021 net::CapturingBoundNetLog capturing_net_log; 1028 net::CapturingBoundNetLog capturing_net_log;
1022 net::BoundNetLog net_log = capturing_net_log.bound(); 1029 net::BoundNetLog net_log = capturing_net_log.bound();
1023 ExtensionWarningSet warning_set; 1030 ExtensionWarningSet warning_set;
1024 std::set<linked_ptr<ExtensionWarning> > warnings; 1031 ExtensionWarningSet::Set warnings;
1025 GURL effective_new_url; 1032 GURL effective_new_url;
1026 1033
1027 // No redirect 1034 // No redirect
1028 linked_ptr<EventResponseDelta> d0( 1035 linked_ptr<EventResponseDelta> d0(
1029 new EventResponseDelta("extid0", base::Time::FromInternalValue(0))); 1036 new EventResponseDelta("extid0", base::Time::FromInternalValue(0)));
1030 deltas.push_back(d0); 1037 deltas.push_back(d0);
1031 MergeOnBeforeRequestResponses( 1038 MergeOnBeforeRequestResponses(
1032 deltas, &effective_new_url, &warning_set, &net_log); 1039 deltas, &effective_new_url, &warning_set, &net_log);
1033 EXPECT_TRUE(effective_new_url.is_empty()); 1040 EXPECT_TRUE(effective_new_url.is_empty());
1034 1041
1035 // Single redirect. 1042 // Single redirect.
1036 GURL new_url_1("http://foo.com"); 1043 GURL new_url_1("http://foo.com");
1037 linked_ptr<EventResponseDelta> d1( 1044 linked_ptr<EventResponseDelta> d1(
1038 new EventResponseDelta("extid1", base::Time::FromInternalValue(1000))); 1045 new EventResponseDelta("extid1", base::Time::FromInternalValue(1000)));
1039 d1->new_url = GURL(new_url_1); 1046 d1->new_url = GURL(new_url_1);
1040 deltas.push_back(d1); 1047 deltas.push_back(d1);
1041 deltas.sort(&InDecreasingExtensionInstallationTimeOrder); 1048 deltas.sort(&InDecreasingExtensionInstallationTimeOrder);
1042 capturing_net_log.Clear(); 1049 capturing_net_log.Clear();
1043 MergeOnBeforeRequestResponses( 1050 MergeOnBeforeRequestResponses(
1044 deltas, &effective_new_url, &warning_set, &net_log); 1051 deltas, &effective_new_url, &warning_set, &net_log);
1045 warnings = warning_set.Release(); 1052 warnings = warning_set.Release();
1046 EXPECT_EQ(new_url_1, effective_new_url); 1053 EXPECT_EQ(new_url_1, effective_new_url);
1047 EXPECT_TRUE(warnings.empty()); 1054 EXPECT_TRUE(warnings.empty());
1048 EXPECT_EQ(1u, capturing_net_log.GetSize()); 1055 EXPECT_EQ(1u, capturing_net_log.GetSize());
1056 ClearWarnings(&warnings);
1049 1057
1050 // Ignored redirect (due to precedence). 1058 // Ignored redirect (due to precedence).
1051 GURL new_url_2("http://bar.com"); 1059 GURL new_url_2("http://bar.com");
1052 linked_ptr<EventResponseDelta> d2( 1060 linked_ptr<EventResponseDelta> d2(
1053 new EventResponseDelta("extid2", base::Time::FromInternalValue(500))); 1061 new EventResponseDelta("extid2", base::Time::FromInternalValue(500)));
1054 d2->new_url = GURL(new_url_2); 1062 d2->new_url = GURL(new_url_2);
1055 deltas.push_back(d2); 1063 deltas.push_back(d2);
1056 deltas.sort(&InDecreasingExtensionInstallationTimeOrder); 1064 deltas.sort(&InDecreasingExtensionInstallationTimeOrder);
1057 capturing_net_log.Clear(); 1065 capturing_net_log.Clear();
1058 MergeOnBeforeRequestResponses( 1066 MergeOnBeforeRequestResponses(
1059 deltas, &effective_new_url, &warning_set, &net_log); 1067 deltas, &effective_new_url, &warning_set, &net_log);
1060 warnings = warning_set.Release(); 1068 warnings = warning_set.Release();
1061 EXPECT_EQ(new_url_1, effective_new_url); 1069 EXPECT_EQ(new_url_1, effective_new_url);
1062 EXPECT_EQ(1u, warnings.size()); 1070 EXPECT_EQ(1u, warnings.size());
1063 EXPECT_TRUE(HasWarning(warnings, "extid2")); 1071 EXPECT_TRUE(HasWarning(warnings, "extid2"));
1064 EXPECT_EQ(2u, capturing_net_log.GetSize()); 1072 EXPECT_EQ(2u, capturing_net_log.GetSize());
1073 ClearWarnings(&warnings);
1065 1074
1066 // Overriding redirect. 1075 // Overriding redirect.
1067 GURL new_url_3("http://baz.com"); 1076 GURL new_url_3("http://baz.com");
1068 linked_ptr<EventResponseDelta> d3( 1077 linked_ptr<EventResponseDelta> d3(
1069 new EventResponseDelta("extid3", base::Time::FromInternalValue(1500))); 1078 new EventResponseDelta("extid3", base::Time::FromInternalValue(1500)));
1070 d3->new_url = GURL(new_url_3); 1079 d3->new_url = GURL(new_url_3);
1071 deltas.push_back(d3); 1080 deltas.push_back(d3);
1072 deltas.sort(&InDecreasingExtensionInstallationTimeOrder); 1081 deltas.sort(&InDecreasingExtensionInstallationTimeOrder);
1073 capturing_net_log.Clear(); 1082 capturing_net_log.Clear();
1074 MergeOnBeforeRequestResponses( 1083 MergeOnBeforeRequestResponses(
1075 deltas, &effective_new_url, &warning_set, &net_log); 1084 deltas, &effective_new_url, &warning_set, &net_log);
1076 warnings = warning_set.Release(); 1085 warnings = warning_set.Release();
1077 EXPECT_EQ(new_url_3, effective_new_url); 1086 EXPECT_EQ(new_url_3, effective_new_url);
1078 EXPECT_EQ(2u, warnings.size()); 1087 EXPECT_EQ(2u, warnings.size());
1079 EXPECT_TRUE(HasWarning(warnings, "extid1")); 1088 EXPECT_TRUE(HasWarning(warnings, "extid1"));
1080 EXPECT_TRUE(HasWarning(warnings, "extid2")); 1089 EXPECT_TRUE(HasWarning(warnings, "extid2"));
1081 EXPECT_EQ(3u, capturing_net_log.GetSize()); 1090 EXPECT_EQ(3u, capturing_net_log.GetSize());
1091 ClearWarnings(&warnings);
1082 1092
1083 // Check that identical redirects don't cause a conflict. 1093 // Check that identical redirects don't cause a conflict.
1084 linked_ptr<EventResponseDelta> d4( 1094 linked_ptr<EventResponseDelta> d4(
1085 new EventResponseDelta("extid4", base::Time::FromInternalValue(2000))); 1095 new EventResponseDelta("extid4", base::Time::FromInternalValue(2000)));
1086 d4->new_url = GURL(new_url_3); 1096 d4->new_url = GURL(new_url_3);
1087 deltas.push_back(d4); 1097 deltas.push_back(d4);
1088 deltas.sort(&InDecreasingExtensionInstallationTimeOrder); 1098 deltas.sort(&InDecreasingExtensionInstallationTimeOrder);
1089 capturing_net_log.Clear(); 1099 capturing_net_log.Clear();
1090 MergeOnBeforeRequestResponses( 1100 MergeOnBeforeRequestResponses(
1091 deltas, &effective_new_url, &warning_set, &net_log); 1101 deltas, &effective_new_url, &warning_set, &net_log);
1092 warnings = warning_set.Release(); 1102 warnings = warning_set.Release();
1093 EXPECT_EQ(new_url_3, effective_new_url); 1103 EXPECT_EQ(new_url_3, effective_new_url);
1094 EXPECT_EQ(2u, warnings.size()); 1104 EXPECT_EQ(2u, warnings.size());
1095 EXPECT_TRUE(HasWarning(warnings, "extid1")); 1105 EXPECT_TRUE(HasWarning(warnings, "extid1"));
1096 EXPECT_TRUE(HasWarning(warnings, "extid2")); 1106 EXPECT_TRUE(HasWarning(warnings, "extid2"));
1097 EXPECT_EQ(4u, capturing_net_log.GetSize()); 1107 EXPECT_EQ(4u, capturing_net_log.GetSize());
1108 ClearWarnings(&warnings);
1098 } 1109 }
1099 1110
1100 // This tests that we can redirect to data:// urls, which is considered 1111 // This tests that we can redirect to data:// urls, which is considered
1101 // a kind of cancelling requests. 1112 // a kind of cancelling requests.
1102 TEST(ExtensionWebRequestHelpersTest, TestMergeOnBeforeRequestResponses2) { 1113 TEST(ExtensionWebRequestHelpersTest, TestMergeOnBeforeRequestResponses2) {
1103 EventResponseDeltas deltas; 1114 EventResponseDeltas deltas;
1104 net::CapturingBoundNetLog capturing_net_log; 1115 net::CapturingBoundNetLog capturing_net_log;
1105 net::BoundNetLog net_log = capturing_net_log.bound(); 1116 net::BoundNetLog net_log = capturing_net_log.bound();
1106 ExtensionWarningSet warning_set; 1117 ExtensionWarningSet warning_set;
1107 std::set<linked_ptr<ExtensionWarning> > warnings; 1118 ExtensionWarningSet::Set warnings;
1108 GURL effective_new_url; 1119 GURL effective_new_url;
1109 1120
1110 // Single redirect. 1121 // Single redirect.
1111 GURL new_url_0("http://foo.com"); 1122 GURL new_url_0("http://foo.com");
1112 linked_ptr<EventResponseDelta> d0( 1123 linked_ptr<EventResponseDelta> d0(
1113 new EventResponseDelta("extid0", base::Time::FromInternalValue(2000))); 1124 new EventResponseDelta("extid0", base::Time::FromInternalValue(2000)));
1114 d0->new_url = GURL(new_url_0); 1125 d0->new_url = GURL(new_url_0);
1115 deltas.push_back(d0); 1126 deltas.push_back(d0);
1116 MergeOnBeforeRequestResponses( 1127 MergeOnBeforeRequestResponses(
1117 deltas, &effective_new_url, &warning_set, &net_log); 1128 deltas, &effective_new_url, &warning_set, &net_log);
1118 warnings = warning_set.Release(); 1129 warnings = warning_set.Release();
1119 EXPECT_EQ(new_url_0, effective_new_url); 1130 EXPECT_EQ(new_url_0, effective_new_url);
1131 ClearWarnings(&warnings);
1120 1132
1121 // Cancel request by redirecting to a data:// URL. This shall override 1133 // Cancel request by redirecting to a data:// URL. This shall override
1122 // the other redirect but not cause any conflict warnings. 1134 // the other redirect but not cause any conflict warnings.
1123 GURL new_url_1("data://foo"); 1135 GURL new_url_1("data://foo");
1124 linked_ptr<EventResponseDelta> d1( 1136 linked_ptr<EventResponseDelta> d1(
1125 new EventResponseDelta("extid1", base::Time::FromInternalValue(1500))); 1137 new EventResponseDelta("extid1", base::Time::FromInternalValue(1500)));
1126 d1->new_url = GURL(new_url_1); 1138 d1->new_url = GURL(new_url_1);
1127 deltas.push_back(d1); 1139 deltas.push_back(d1);
1128 deltas.sort(&InDecreasingExtensionInstallationTimeOrder); 1140 deltas.sort(&InDecreasingExtensionInstallationTimeOrder);
1129 capturing_net_log.Clear(); 1141 capturing_net_log.Clear();
1130 MergeOnBeforeRequestResponses( 1142 MergeOnBeforeRequestResponses(
1131 deltas, &effective_new_url, &warning_set, &net_log); 1143 deltas, &effective_new_url, &warning_set, &net_log);
1132 warnings = warning_set.Release(); 1144 warnings = warning_set.Release();
1133 EXPECT_EQ(new_url_1, effective_new_url); 1145 EXPECT_EQ(new_url_1, effective_new_url);
1134 EXPECT_TRUE(warnings.empty()); 1146 EXPECT_TRUE(warnings.empty());
1135 EXPECT_EQ(1u, capturing_net_log.GetSize()); 1147 EXPECT_EQ(1u, capturing_net_log.GetSize());
1148 ClearWarnings(&warnings);
1136 1149
1137 // Cancel request by redirecting to the same data:// URL. This shall 1150 // Cancel request by redirecting to the same data:// URL. This shall
1138 // not create any conflicts as it is in line with d1. 1151 // not create any conflicts as it is in line with d1.
1139 GURL new_url_2("data://foo"); 1152 GURL new_url_2("data://foo");
1140 linked_ptr<EventResponseDelta> d2( 1153 linked_ptr<EventResponseDelta> d2(
1141 new EventResponseDelta("extid2", base::Time::FromInternalValue(1000))); 1154 new EventResponseDelta("extid2", base::Time::FromInternalValue(1000)));
1142 d2->new_url = GURL(new_url_2); 1155 d2->new_url = GURL(new_url_2);
1143 deltas.push_back(d2); 1156 deltas.push_back(d2);
1144 deltas.sort(&InDecreasingExtensionInstallationTimeOrder); 1157 deltas.sort(&InDecreasingExtensionInstallationTimeOrder);
1145 capturing_net_log.Clear(); 1158 capturing_net_log.Clear();
1146 MergeOnBeforeRequestResponses( 1159 MergeOnBeforeRequestResponses(
1147 deltas, &effective_new_url, &warning_set, &net_log); 1160 deltas, &effective_new_url, &warning_set, &net_log);
1148 warnings = warning_set.Release(); 1161 warnings = warning_set.Release();
1149 EXPECT_EQ(new_url_1, effective_new_url); 1162 EXPECT_EQ(new_url_1, effective_new_url);
1150 EXPECT_TRUE(warnings.empty()); 1163 EXPECT_TRUE(warnings.empty());
1151 EXPECT_EQ(2u, capturing_net_log.GetSize()); 1164 EXPECT_EQ(2u, capturing_net_log.GetSize());
1165 ClearWarnings(&warnings);
1152 1166
1153 // Cancel redirect by redirecting to a different data:// URL. This needs 1167 // Cancel redirect by redirecting to a different data:// URL. This needs
1154 // to create a conflict. 1168 // to create a conflict.
1155 GURL new_url_3("data://something_totally_different"); 1169 GURL new_url_3("data://something_totally_different");
1156 linked_ptr<EventResponseDelta> d3( 1170 linked_ptr<EventResponseDelta> d3(
1157 new EventResponseDelta("extid3", base::Time::FromInternalValue(500))); 1171 new EventResponseDelta("extid3", base::Time::FromInternalValue(500)));
1158 d3->new_url = GURL(new_url_3); 1172 d3->new_url = GURL(new_url_3);
1159 deltas.push_back(d3); 1173 deltas.push_back(d3);
1160 deltas.sort(&InDecreasingExtensionInstallationTimeOrder); 1174 deltas.sort(&InDecreasingExtensionInstallationTimeOrder);
1161 capturing_net_log.Clear(); 1175 capturing_net_log.Clear();
1162 MergeOnBeforeRequestResponses( 1176 MergeOnBeforeRequestResponses(
1163 deltas, &effective_new_url, &warning_set, &net_log); 1177 deltas, &effective_new_url, &warning_set, &net_log);
1164 warnings = warning_set.Release(); 1178 warnings = warning_set.Release();
1165 EXPECT_EQ(new_url_1, effective_new_url); 1179 EXPECT_EQ(new_url_1, effective_new_url);
1166 EXPECT_EQ(1u, warnings.size()); 1180 EXPECT_EQ(1u, warnings.size());
1167 EXPECT_TRUE(HasWarning(warnings, "extid3")); 1181 EXPECT_TRUE(HasWarning(warnings, "extid3"));
1168 EXPECT_EQ(3u, capturing_net_log.GetSize()); 1182 EXPECT_EQ(3u, capturing_net_log.GetSize());
1183 ClearWarnings(&warnings);
1169 } 1184 }
1170 1185
1171 // This tests that we can redirect to about:blank, which is considered 1186 // This tests that we can redirect to about:blank, which is considered
1172 // a kind of cancelling requests. 1187 // a kind of cancelling requests.
1173 TEST(ExtensionWebRequestHelpersTest, TestMergeOnBeforeRequestResponses3) { 1188 TEST(ExtensionWebRequestHelpersTest, TestMergeOnBeforeRequestResponses3) {
1174 EventResponseDeltas deltas; 1189 EventResponseDeltas deltas;
1175 net::CapturingBoundNetLog capturing_net_log; 1190 net::CapturingBoundNetLog capturing_net_log;
1176 net::BoundNetLog net_log = capturing_net_log.bound(); 1191 net::BoundNetLog net_log = capturing_net_log.bound();
1177 ExtensionWarningSet warning_set; 1192 ExtensionWarningSet warning_set;
1178 std::set<linked_ptr<ExtensionWarning> > warnings; 1193 ExtensionWarningSet::Set warnings;
1179 GURL effective_new_url; 1194 GURL effective_new_url;
1180 1195
1181 // Single redirect. 1196 // Single redirect.
1182 GURL new_url_0("http://foo.com"); 1197 GURL new_url_0("http://foo.com");
1183 linked_ptr<EventResponseDelta> d0( 1198 linked_ptr<EventResponseDelta> d0(
1184 new EventResponseDelta("extid0", base::Time::FromInternalValue(2000))); 1199 new EventResponseDelta("extid0", base::Time::FromInternalValue(2000)));
1185 d0->new_url = GURL(new_url_0); 1200 d0->new_url = GURL(new_url_0);
1186 deltas.push_back(d0); 1201 deltas.push_back(d0);
1187 MergeOnBeforeRequestResponses( 1202 MergeOnBeforeRequestResponses(
1188 deltas, &effective_new_url, &warning_set, &net_log); 1203 deltas, &effective_new_url, &warning_set, &net_log);
1189 warnings = warning_set.Release(); 1204 warnings = warning_set.Release();
1190 EXPECT_EQ(new_url_0, effective_new_url); 1205 EXPECT_EQ(new_url_0, effective_new_url);
1206 ClearWarnings(&warnings);
1191 1207
1192 // Cancel request by redirecting to about:blank. This shall override 1208 // Cancel request by redirecting to about:blank. This shall override
1193 // the other redirect but not cause any conflict warnings. 1209 // the other redirect but not cause any conflict warnings.
1194 GURL new_url_1("about:blank"); 1210 GURL new_url_1("about:blank");
1195 linked_ptr<EventResponseDelta> d1( 1211 linked_ptr<EventResponseDelta> d1(
1196 new EventResponseDelta("extid1", base::Time::FromInternalValue(1500))); 1212 new EventResponseDelta("extid1", base::Time::FromInternalValue(1500)));
1197 d1->new_url = GURL(new_url_1); 1213 d1->new_url = GURL(new_url_1);
1198 deltas.push_back(d1); 1214 deltas.push_back(d1);
1199 deltas.sort(&InDecreasingExtensionInstallationTimeOrder); 1215 deltas.sort(&InDecreasingExtensionInstallationTimeOrder);
1200 capturing_net_log.Clear(); 1216 capturing_net_log.Clear();
1201 MergeOnBeforeRequestResponses( 1217 MergeOnBeforeRequestResponses(
1202 deltas, &effective_new_url, &warning_set, &net_log); 1218 deltas, &effective_new_url, &warning_set, &net_log);
1203 warnings = warning_set.Release(); 1219 warnings = warning_set.Release();
1204 EXPECT_EQ(new_url_1, effective_new_url); 1220 EXPECT_EQ(new_url_1, effective_new_url);
1205 EXPECT_TRUE(warnings.empty()); 1221 EXPECT_TRUE(warnings.empty());
1206 EXPECT_EQ(1u, capturing_net_log.GetSize()); 1222 EXPECT_EQ(1u, capturing_net_log.GetSize());
1223 ClearWarnings(&warnings);
1207 } 1224 }
1208 1225
1209 TEST(ExtensionWebRequestHelpersTest, TestMergeOnBeforeSendHeadersResponses) { 1226 TEST(ExtensionWebRequestHelpersTest, TestMergeOnBeforeSendHeadersResponses) {
1210 net::HttpRequestHeaders base_headers; 1227 net::HttpRequestHeaders base_headers;
1211 base_headers.AddHeaderFromString("key1: value 1"); 1228 base_headers.AddHeaderFromString("key1: value 1");
1212 base_headers.AddHeaderFromString("key2: value 2"); 1229 base_headers.AddHeaderFromString("key2: value 2");
1213 net::CapturingBoundNetLog capturing_net_log; 1230 net::CapturingBoundNetLog capturing_net_log;
1214 net::BoundNetLog net_log = capturing_net_log.bound(); 1231 net::BoundNetLog net_log = capturing_net_log.bound();
1215 ExtensionWarningSet warning_set; 1232 ExtensionWarningSet warning_set;
1216 std::set<linked_ptr<ExtensionWarning> > warnings; 1233 ExtensionWarningSet::Set warnings;
1217 std::string header_value; 1234 std::string header_value;
1218 EventResponseDeltas deltas; 1235 EventResponseDeltas deltas;
1219 1236
1220 // Check that we can handle not changing the headers. 1237 // Check that we can handle not changing the headers.
1221 linked_ptr<EventResponseDelta> d0( 1238 linked_ptr<EventResponseDelta> d0(
1222 new EventResponseDelta("extid0", base::Time::FromInternalValue(2500))); 1239 new EventResponseDelta("extid0", base::Time::FromInternalValue(2500)));
1223 deltas.push_back(d0); 1240 deltas.push_back(d0);
1224 net::HttpRequestHeaders headers0; 1241 net::HttpRequestHeaders headers0;
1225 headers0.MergeFrom(base_headers); 1242 headers0.MergeFrom(base_headers);
1226 MergeOnBeforeSendHeadersResponses(deltas, &headers0, &warning_set, &net_log); 1243 MergeOnBeforeSendHeadersResponses(deltas, &headers0, &warning_set, &net_log);
1227 warnings = warning_set.Release(); 1244 warnings = warning_set.Release();
1228 ASSERT_TRUE(headers0.GetHeader("key1", &header_value)); 1245 ASSERT_TRUE(headers0.GetHeader("key1", &header_value));
1229 EXPECT_EQ("value 1", header_value); 1246 EXPECT_EQ("value 1", header_value);
1230 ASSERT_TRUE(headers0.GetHeader("key2", &header_value)); 1247 ASSERT_TRUE(headers0.GetHeader("key2", &header_value));
1231 EXPECT_EQ("value 2", header_value); 1248 EXPECT_EQ("value 2", header_value);
1232 EXPECT_EQ(0u, warnings.size()); 1249 EXPECT_EQ(0u, warnings.size());
1233 EXPECT_EQ(0u, capturing_net_log.GetSize()); 1250 EXPECT_EQ(0u, capturing_net_log.GetSize());
1251 ClearWarnings(&warnings);
1234 1252
1235 // Delete, modify and add a header. 1253 // Delete, modify and add a header.
1236 linked_ptr<EventResponseDelta> d1( 1254 linked_ptr<EventResponseDelta> d1(
1237 new EventResponseDelta("extid1", base::Time::FromInternalValue(2000))); 1255 new EventResponseDelta("extid1", base::Time::FromInternalValue(2000)));
1238 d1->deleted_request_headers.push_back("key1"); 1256 d1->deleted_request_headers.push_back("key1");
1239 d1->modified_request_headers.AddHeaderFromString("key2: value 3"); 1257 d1->modified_request_headers.AddHeaderFromString("key2: value 3");
1240 d1->modified_request_headers.AddHeaderFromString("key3: value 3"); 1258 d1->modified_request_headers.AddHeaderFromString("key3: value 3");
1241 deltas.push_back(d1); 1259 deltas.push_back(d1);
1242 deltas.sort(&InDecreasingExtensionInstallationTimeOrder); 1260 deltas.sort(&InDecreasingExtensionInstallationTimeOrder);
1243 net::HttpRequestHeaders headers1; 1261 net::HttpRequestHeaders headers1;
1244 headers1.MergeFrom(base_headers); 1262 headers1.MergeFrom(base_headers);
1245 MergeOnBeforeSendHeadersResponses(deltas, &headers1, &warning_set, &net_log); 1263 MergeOnBeforeSendHeadersResponses(deltas, &headers1, &warning_set, &net_log);
1246 warnings = warning_set.Release(); 1264 warnings = warning_set.Release();
1247 EXPECT_FALSE(headers1.HasHeader("key1")); 1265 EXPECT_FALSE(headers1.HasHeader("key1"));
1248 ASSERT_TRUE(headers1.GetHeader("key2", &header_value)); 1266 ASSERT_TRUE(headers1.GetHeader("key2", &header_value));
1249 EXPECT_EQ("value 3", header_value); 1267 EXPECT_EQ("value 3", header_value);
1250 ASSERT_TRUE(headers1.GetHeader("key3", &header_value)); 1268 ASSERT_TRUE(headers1.GetHeader("key3", &header_value));
1251 EXPECT_EQ("value 3", header_value); 1269 EXPECT_EQ("value 3", header_value);
1252 EXPECT_EQ(0u, warnings.size()); 1270 EXPECT_EQ(0u, warnings.size());
1253 EXPECT_EQ(1u, capturing_net_log.GetSize()); 1271 EXPECT_EQ(1u, capturing_net_log.GetSize());
1272 ClearWarnings(&warnings);
1254 1273
1255 // Check that conflicts are atomic, i.e. if one header modification 1274 // Check that conflicts are atomic, i.e. if one header modification
1256 // collides all other conflicts of the same extension are declined as well. 1275 // collides all other conflicts of the same extension are declined as well.
1257 linked_ptr<EventResponseDelta> d2( 1276 linked_ptr<EventResponseDelta> d2(
1258 new EventResponseDelta("extid2", base::Time::FromInternalValue(1500))); 1277 new EventResponseDelta("extid2", base::Time::FromInternalValue(1500)));
1259 // This one conflicts: 1278 // This one conflicts:
1260 d2->modified_request_headers.AddHeaderFromString("key3: value 0"); 1279 d2->modified_request_headers.AddHeaderFromString("key3: value 0");
1261 d2->modified_request_headers.AddHeaderFromString("key4: value 4"); 1280 d2->modified_request_headers.AddHeaderFromString("key4: value 4");
1262 deltas.push_back(d2); 1281 deltas.push_back(d2);
1263 deltas.sort(&InDecreasingExtensionInstallationTimeOrder); 1282 deltas.sort(&InDecreasingExtensionInstallationTimeOrder);
1264 capturing_net_log.Clear(); 1283 capturing_net_log.Clear();
1265 net::HttpRequestHeaders headers2; 1284 net::HttpRequestHeaders headers2;
1266 headers2.MergeFrom(base_headers); 1285 headers2.MergeFrom(base_headers);
1267 MergeOnBeforeSendHeadersResponses(deltas, &headers2, &warning_set, &net_log); 1286 MergeOnBeforeSendHeadersResponses(deltas, &headers2, &warning_set, &net_log);
1268 warnings = warning_set.Release(); 1287 warnings = warning_set.Release();
1269 EXPECT_FALSE(headers2.HasHeader("key1")); 1288 EXPECT_FALSE(headers2.HasHeader("key1"));
1270 ASSERT_TRUE(headers2.GetHeader("key2", &header_value)); 1289 ASSERT_TRUE(headers2.GetHeader("key2", &header_value));
1271 EXPECT_EQ("value 3", header_value); 1290 EXPECT_EQ("value 3", header_value);
1272 ASSERT_TRUE(headers2.GetHeader("key3", &header_value)); 1291 ASSERT_TRUE(headers2.GetHeader("key3", &header_value));
1273 EXPECT_EQ("value 3", header_value); 1292 EXPECT_EQ("value 3", header_value);
1274 EXPECT_FALSE(headers2.HasHeader("key4")); 1293 EXPECT_FALSE(headers2.HasHeader("key4"));
1275 EXPECT_EQ(1u, warnings.size()); 1294 EXPECT_EQ(1u, warnings.size());
1276 EXPECT_TRUE(HasWarning(warnings, "extid2")); 1295 EXPECT_TRUE(HasWarning(warnings, "extid2"));
1277 EXPECT_EQ(2u, capturing_net_log.GetSize()); 1296 EXPECT_EQ(2u, capturing_net_log.GetSize());
1297 ClearWarnings(&warnings);
1278 1298
1279 // Check that identical modifications don't conflict and operations 1299 // Check that identical modifications don't conflict and operations
1280 // can be merged. 1300 // can be merged.
1281 linked_ptr<EventResponseDelta> d3( 1301 linked_ptr<EventResponseDelta> d3(
1282 new EventResponseDelta("extid3", base::Time::FromInternalValue(1000))); 1302 new EventResponseDelta("extid3", base::Time::FromInternalValue(1000)));
1283 d3->deleted_request_headers.push_back("key1"); 1303 d3->deleted_request_headers.push_back("key1");
1284 d3->modified_request_headers.AddHeaderFromString("key2: value 3"); 1304 d3->modified_request_headers.AddHeaderFromString("key2: value 3");
1285 d3->modified_request_headers.AddHeaderFromString("key5: value 5"); 1305 d3->modified_request_headers.AddHeaderFromString("key5: value 5");
1286 deltas.push_back(d3); 1306 deltas.push_back(d3);
1287 deltas.sort(&InDecreasingExtensionInstallationTimeOrder); 1307 deltas.sort(&InDecreasingExtensionInstallationTimeOrder);
1288 capturing_net_log.Clear(); 1308 capturing_net_log.Clear();
1289 net::HttpRequestHeaders headers3; 1309 net::HttpRequestHeaders headers3;
1290 headers3.MergeFrom(base_headers); 1310 headers3.MergeFrom(base_headers);
1291 MergeOnBeforeSendHeadersResponses(deltas, &headers3, &warning_set, &net_log); 1311 MergeOnBeforeSendHeadersResponses(deltas, &headers3, &warning_set, &net_log);
1292 warnings = warning_set.Release(); 1312 warnings = warning_set.Release();
1293 EXPECT_FALSE(headers3.HasHeader("key1")); 1313 EXPECT_FALSE(headers3.HasHeader("key1"));
1294 ASSERT_TRUE(headers3.GetHeader("key2", &header_value)); 1314 ASSERT_TRUE(headers3.GetHeader("key2", &header_value));
1295 EXPECT_EQ("value 3", header_value); 1315 EXPECT_EQ("value 3", header_value);
1296 ASSERT_TRUE(headers3.GetHeader("key3", &header_value)); 1316 ASSERT_TRUE(headers3.GetHeader("key3", &header_value));
1297 EXPECT_EQ("value 3", header_value); 1317 EXPECT_EQ("value 3", header_value);
1298 ASSERT_TRUE(headers3.GetHeader("key5", &header_value)); 1318 ASSERT_TRUE(headers3.GetHeader("key5", &header_value));
1299 EXPECT_EQ("value 5", header_value); 1319 EXPECT_EQ("value 5", header_value);
1300 EXPECT_EQ(1u, warnings.size()); 1320 EXPECT_EQ(1u, warnings.size());
1301 EXPECT_TRUE(HasWarning(warnings, "extid2")); 1321 EXPECT_TRUE(HasWarning(warnings, "extid2"));
1302 EXPECT_EQ(3u, capturing_net_log.GetSize()); 1322 EXPECT_EQ(3u, capturing_net_log.GetSize());
1323 ClearWarnings(&warnings);
1303 } 1324 }
1304 1325
1305 TEST(ExtensionWebRequestHelpersTest, 1326 TEST(ExtensionWebRequestHelpersTest,
1306 TestMergeOnBeforeSendHeadersResponses_Cookies) { 1327 TestMergeOnBeforeSendHeadersResponses_Cookies) {
1307 net::HttpRequestHeaders base_headers; 1328 net::HttpRequestHeaders base_headers;
1308 base_headers.AddHeaderFromString( 1329 base_headers.AddHeaderFromString(
1309 "Cookie: name=value; name2=value2; name3=value3"); 1330 "Cookie: name=value; name2=value2; name3=value3");
1310 net::CapturingBoundNetLog capturing_net_log; 1331 net::CapturingBoundNetLog capturing_net_log;
1311 net::BoundNetLog net_log = capturing_net_log.bound(); 1332 net::BoundNetLog net_log = capturing_net_log.bound();
1312 ExtensionWarningSet warning_set; 1333 ExtensionWarningSet warning_set;
1313 std::set<linked_ptr<ExtensionWarning> > warnings; 1334 ExtensionWarningSet::Set warnings;
1314 std::string header_value; 1335 std::string header_value;
1315 EventResponseDeltas deltas; 1336 EventResponseDeltas deltas;
1316 1337
1317 linked_ptr<RequestCookieModification> add_cookie = 1338 linked_ptr<RequestCookieModification> add_cookie =
1318 make_linked_ptr(new RequestCookieModification); 1339 make_linked_ptr(new RequestCookieModification);
1319 add_cookie->type = helpers::ADD; 1340 add_cookie->type = helpers::ADD;
1320 add_cookie->modification.reset(new helpers::RequestCookie); 1341 add_cookie->modification.reset(new helpers::RequestCookie);
1321 add_cookie->modification->name.reset(new std::string("name4")); 1342 add_cookie->modification->name.reset(new std::string("name4"));
1322 add_cookie->modification->value.reset(new std::string("\"value 4\"")); 1343 add_cookie->modification->value.reset(new std::string("\"value 4\""));
1323 1344
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
1355 deltas.sort(&InDecreasingExtensionInstallationTimeOrder); 1376 deltas.sort(&InDecreasingExtensionInstallationTimeOrder);
1356 net::HttpRequestHeaders headers1; 1377 net::HttpRequestHeaders headers1;
1357 headers1.MergeFrom(base_headers); 1378 headers1.MergeFrom(base_headers);
1358 MergeOnBeforeSendHeadersResponses(deltas, &headers1, &warning_set, &net_log); 1379 MergeOnBeforeSendHeadersResponses(deltas, &headers1, &warning_set, &net_log);
1359 warnings = warning_set.Release(); 1380 warnings = warning_set.Release();
1360 EXPECT_TRUE(headers1.HasHeader("Cookie")); 1381 EXPECT_TRUE(headers1.HasHeader("Cookie"));
1361 ASSERT_TRUE(headers1.GetHeader("Cookie", &header_value)); 1382 ASSERT_TRUE(headers1.GetHeader("Cookie", &header_value));
1362 EXPECT_EQ("name=new value; name2=new value; name4=\"value 4\"", header_value); 1383 EXPECT_EQ("name=new value; name2=new value; name4=\"value 4\"", header_value);
1363 EXPECT_EQ(0u, warnings.size()); 1384 EXPECT_EQ(0u, warnings.size());
1364 EXPECT_EQ(0u, capturing_net_log.GetSize()); 1385 EXPECT_EQ(0u, capturing_net_log.GetSize());
1386 ClearWarnings(&warnings);
1365 } 1387 }
1366 1388
1367 TEST(ExtensionWebRequestHelpersTest, 1389 TEST(ExtensionWebRequestHelpersTest,
1368 TestMergeCookiesInOnHeadersReceivedResponses) { 1390 TestMergeCookiesInOnHeadersReceivedResponses) {
1369 net::CapturingBoundNetLog capturing_net_log; 1391 net::CapturingBoundNetLog capturing_net_log;
1370 net::BoundNetLog net_log = capturing_net_log.bound(); 1392 net::BoundNetLog net_log = capturing_net_log.bound();
1371 ExtensionWarningSet warning_set; 1393 ExtensionWarningSet warning_set;
1372 std::set<linked_ptr<ExtensionWarning> > warnings; 1394 ExtensionWarningSet::Set warnings;
1373 std::string header_value; 1395 std::string header_value;
1374 EventResponseDeltas deltas; 1396 EventResponseDeltas deltas;
1375 1397
1376 char base_headers_string[] = 1398 char base_headers_string[] =
1377 "HTTP/1.0 200 OK\r\n" 1399 "HTTP/1.0 200 OK\r\n"
1378 "Foo: Bar\r\n" 1400 "Foo: Bar\r\n"
1379 "Set-Cookie: name=value; DOMAIN=google.com; Secure\r\n" 1401 "Set-Cookie: name=value; DOMAIN=google.com; Secure\r\n"
1380 "Set-Cookie: name2=value2\r\n" 1402 "Set-Cookie: name2=value2\r\n"
1381 "Set-Cookie: name3=value3\r\n" 1403 "Set-Cookie: name3=value3\r\n"
1382 "\r\n"; 1404 "\r\n";
1383 scoped_refptr<net::HttpResponseHeaders> base_headers( 1405 scoped_refptr<net::HttpResponseHeaders> base_headers(
1384 new net::HttpResponseHeaders( 1406 new net::HttpResponseHeaders(
1385 net::HttpUtil::AssembleRawHeaders( 1407 net::HttpUtil::AssembleRawHeaders(
1386 base_headers_string, sizeof(base_headers_string)))); 1408 base_headers_string, sizeof(base_headers_string))));
1387 1409
1388 // Check that we can handle if not touching the response headers. 1410 // Check that we can handle if not touching the response headers.
1389 linked_ptr<EventResponseDelta> d0( 1411 linked_ptr<EventResponseDelta> d0(
1390 new EventResponseDelta("extid0", base::Time::FromInternalValue(3000))); 1412 new EventResponseDelta("extid0", base::Time::FromInternalValue(3000)));
1391 deltas.push_back(d0); 1413 deltas.push_back(d0);
1392 scoped_refptr<net::HttpResponseHeaders> new_headers0; 1414 scoped_refptr<net::HttpResponseHeaders> new_headers0;
1393 MergeCookiesInOnHeadersReceivedResponses( 1415 MergeCookiesInOnHeadersReceivedResponses(
1394 deltas, base_headers.get(), &new_headers0, &warning_set, &net_log); 1416 deltas, base_headers.get(), &new_headers0, &warning_set, &net_log);
1395 warnings = warning_set.Release(); 1417 warnings = warning_set.Release();
1396 EXPECT_FALSE(new_headers0.get()); 1418 EXPECT_FALSE(new_headers0.get());
1397 EXPECT_EQ(0u, warnings.size()); 1419 EXPECT_EQ(0u, warnings.size());
1398 EXPECT_EQ(0u, capturing_net_log.GetSize()); 1420 EXPECT_EQ(0u, capturing_net_log.GetSize());
1421 ClearWarnings(&warnings);
1399 1422
1400 linked_ptr<ResponseCookieModification> add_cookie = 1423 linked_ptr<ResponseCookieModification> add_cookie =
1401 make_linked_ptr(new ResponseCookieModification); 1424 make_linked_ptr(new ResponseCookieModification);
1402 add_cookie->type = helpers::ADD; 1425 add_cookie->type = helpers::ADD;
1403 add_cookie->modification.reset(new helpers::ResponseCookie); 1426 add_cookie->modification.reset(new helpers::ResponseCookie);
1404 add_cookie->modification->name.reset(new std::string("name4")); 1427 add_cookie->modification->name.reset(new std::string("name4"));
1405 add_cookie->modification->value.reset(new std::string("\"value4\"")); 1428 add_cookie->modification->value.reset(new std::string("\"value4\""));
1406 1429
1407 linked_ptr<ResponseCookieModification> edit_cookie = 1430 linked_ptr<ResponseCookieModification> edit_cookie =
1408 make_linked_ptr(new ResponseCookieModification); 1431 make_linked_ptr(new ResponseCookieModification);
(...skipping 29 matching lines...) Expand all
1438 } 1461 }
1439 deltas.sort(&InDecreasingExtensionInstallationTimeOrder); 1462 deltas.sort(&InDecreasingExtensionInstallationTimeOrder);
1440 scoped_refptr<net::HttpResponseHeaders> headers1( 1463 scoped_refptr<net::HttpResponseHeaders> headers1(
1441 new net::HttpResponseHeaders( 1464 new net::HttpResponseHeaders(
1442 net::HttpUtil::AssembleRawHeaders( 1465 net::HttpUtil::AssembleRawHeaders(
1443 base_headers_string, sizeof(base_headers_string)))); 1466 base_headers_string, sizeof(base_headers_string))));
1444 scoped_refptr<net::HttpResponseHeaders> new_headers1; 1467 scoped_refptr<net::HttpResponseHeaders> new_headers1;
1445 MergeCookiesInOnHeadersReceivedResponses( 1468 MergeCookiesInOnHeadersReceivedResponses(
1446 deltas, headers1.get(), &new_headers1, &warning_set, &net_log); 1469 deltas, headers1.get(), &new_headers1, &warning_set, &net_log);
1447 warnings = warning_set.Release(); 1470 warnings = warning_set.Release();
1471 ClearWarnings(&warnings);
1448 1472
1449 EXPECT_TRUE(new_headers1->HasHeader("Foo")); 1473 EXPECT_TRUE(new_headers1->HasHeader("Foo"));
1450 void* iter = NULL; 1474 void* iter = NULL;
1451 std::string cookie_string; 1475 std::string cookie_string;
1452 std::set<std::string> expected_cookies; 1476 std::set<std::string> expected_cookies;
1453 expected_cookies.insert("name=value; domain=google.com; secure"); 1477 expected_cookies.insert("name=value; domain=google.com; secure");
1454 expected_cookies.insert("name2=value2; secure"); 1478 expected_cookies.insert("name2=value2; secure");
1455 expected_cookies.insert("name4=\"value4\"; secure"); 1479 expected_cookies.insert("name4=\"value4\"; secure");
1456 std::set<std::string> actual_cookies; 1480 std::set<std::string> actual_cookies;
1457 while (new_headers1->EnumerateHeader(&iter, "Set-Cookie", &cookie_string)) 1481 while (new_headers1->EnumerateHeader(&iter, "Set-Cookie", &cookie_string))
1458 actual_cookies.insert(cookie_string); 1482 actual_cookies.insert(cookie_string);
1459 EXPECT_EQ(expected_cookies, actual_cookies); 1483 EXPECT_EQ(expected_cookies, actual_cookies);
1460 EXPECT_EQ(0u, warnings.size()); 1484 EXPECT_EQ(0u, warnings.size());
1461 EXPECT_EQ(0u, capturing_net_log.GetSize()); 1485 EXPECT_EQ(0u, capturing_net_log.GetSize());
1462 } 1486 }
1463 1487
1464 TEST(ExtensionWebRequestHelpersTest, TestMergeOnHeadersReceivedResponses) { 1488 TEST(ExtensionWebRequestHelpersTest, TestMergeOnHeadersReceivedResponses) {
1465 net::CapturingBoundNetLog capturing_net_log; 1489 net::CapturingBoundNetLog capturing_net_log;
1466 net::BoundNetLog net_log = capturing_net_log.bound(); 1490 net::BoundNetLog net_log = capturing_net_log.bound();
1467 ExtensionWarningSet warning_set; 1491 ExtensionWarningSet warning_set;
1468 std::set<linked_ptr<ExtensionWarning> > warnings; 1492 ExtensionWarningSet::Set warnings;
1469 std::string header_value; 1493 std::string header_value;
1470 EventResponseDeltas deltas; 1494 EventResponseDeltas deltas;
1471 1495
1472 char base_headers_string[] = 1496 char base_headers_string[] =
1473 "HTTP/1.0 200 OK\r\n" 1497 "HTTP/1.0 200 OK\r\n"
1474 "Key1: Value1\r\n" 1498 "Key1: Value1\r\n"
1475 "Key2: Value2, Foo\r\n" 1499 "Key2: Value2, Foo\r\n"
1476 "\r\n"; 1500 "\r\n";
1477 scoped_refptr<net::HttpResponseHeaders> base_headers( 1501 scoped_refptr<net::HttpResponseHeaders> base_headers(
1478 new net::HttpResponseHeaders( 1502 new net::HttpResponseHeaders(
1479 net::HttpUtil::AssembleRawHeaders( 1503 net::HttpUtil::AssembleRawHeaders(
1480 base_headers_string, sizeof(base_headers_string)))); 1504 base_headers_string, sizeof(base_headers_string))));
1481 1505
1482 // Check that we can handle if not touching the response headers. 1506 // Check that we can handle if not touching the response headers.
1483 linked_ptr<EventResponseDelta> d0( 1507 linked_ptr<EventResponseDelta> d0(
1484 new EventResponseDelta("extid0", base::Time::FromInternalValue(3000))); 1508 new EventResponseDelta("extid0", base::Time::FromInternalValue(3000)));
1485 deltas.push_back(d0); 1509 deltas.push_back(d0);
1486 scoped_refptr<net::HttpResponseHeaders> new_headers0; 1510 scoped_refptr<net::HttpResponseHeaders> new_headers0;
1487 MergeOnHeadersReceivedResponses(deltas, base_headers.get(), &new_headers0, 1511 MergeOnHeadersReceivedResponses(deltas, base_headers.get(), &new_headers0,
1488 &warning_set, &net_log); 1512 &warning_set, &net_log);
1489 warnings = warning_set.Release(); 1513 warnings = warning_set.Release();
1490 EXPECT_FALSE(new_headers0.get()); 1514 EXPECT_FALSE(new_headers0.get());
1491 EXPECT_EQ(0u, warnings.size()); 1515 EXPECT_EQ(0u, warnings.size());
1492 EXPECT_EQ(0u, capturing_net_log.GetSize()); 1516 EXPECT_EQ(0u, capturing_net_log.GetSize());
1517 ClearWarnings(&warnings);
1493 1518
1494 linked_ptr<EventResponseDelta> d1( 1519 linked_ptr<EventResponseDelta> d1(
1495 new EventResponseDelta("extid1", base::Time::FromInternalValue(2000))); 1520 new EventResponseDelta("extid1", base::Time::FromInternalValue(2000)));
1496 d1->deleted_response_headers.push_back(ResponseHeader("KEY1", "Value1")); 1521 d1->deleted_response_headers.push_back(ResponseHeader("KEY1", "Value1"));
1497 d1->deleted_response_headers.push_back(ResponseHeader("KEY2", "Value2, Foo")); 1522 d1->deleted_response_headers.push_back(ResponseHeader("KEY2", "Value2, Foo"));
1498 d1->added_response_headers.push_back(ResponseHeader("Key2", "Value3")); 1523 d1->added_response_headers.push_back(ResponseHeader("Key2", "Value3"));
1499 deltas.push_back(d1); 1524 deltas.push_back(d1);
1500 deltas.sort(&InDecreasingExtensionInstallationTimeOrder); 1525 deltas.sort(&InDecreasingExtensionInstallationTimeOrder);
1501 capturing_net_log.Clear(); 1526 capturing_net_log.Clear();
1502 scoped_refptr<net::HttpResponseHeaders> new_headers1; 1527 scoped_refptr<net::HttpResponseHeaders> new_headers1;
1503 MergeOnHeadersReceivedResponses( 1528 MergeOnHeadersReceivedResponses(
1504 deltas, base_headers.get(), &new_headers1, &warning_set, &net_log); 1529 deltas, base_headers.get(), &new_headers1, &warning_set, &net_log);
1505 warnings = warning_set.Release(); 1530 warnings = warning_set.Release();
1506 ASSERT_TRUE(new_headers1.get()); 1531 ASSERT_TRUE(new_headers1.get());
1507 std::multimap<std::string, std::string> expected1; 1532 std::multimap<std::string, std::string> expected1;
1508 expected1.insert(std::pair<std::string, std::string>("Key2", "Value3")); 1533 expected1.insert(std::pair<std::string, std::string>("Key2", "Value3"));
1509 void* iter = NULL; 1534 void* iter = NULL;
1510 std::string name; 1535 std::string name;
1511 std::string value; 1536 std::string value;
1512 std::multimap<std::string, std::string> actual1; 1537 std::multimap<std::string, std::string> actual1;
1513 while (new_headers1->EnumerateHeaderLines(&iter, &name, &value)) { 1538 while (new_headers1->EnumerateHeaderLines(&iter, &name, &value)) {
1514 actual1.insert(std::pair<std::string, std::string>(name, value)); 1539 actual1.insert(std::pair<std::string, std::string>(name, value));
1515 } 1540 }
1516 EXPECT_EQ(expected1, actual1); 1541 EXPECT_EQ(expected1, actual1);
1517 EXPECT_EQ(0u, warnings.size()); 1542 EXPECT_EQ(0u, warnings.size());
1518 EXPECT_EQ(1u, capturing_net_log.GetSize()); 1543 EXPECT_EQ(1u, capturing_net_log.GetSize());
1544 ClearWarnings(&warnings);
1519 1545
1520 // Check that we replace response headers only once. 1546 // Check that we replace response headers only once.
1521 linked_ptr<EventResponseDelta> d2( 1547 linked_ptr<EventResponseDelta> d2(
1522 new EventResponseDelta("extid2", base::Time::FromInternalValue(1500))); 1548 new EventResponseDelta("extid2", base::Time::FromInternalValue(1500)));
1523 // Note that we use a different capitalization of KeY2. This should not 1549 // Note that we use a different capitalization of KeY2. This should not
1524 // matter. 1550 // matter.
1525 d2->deleted_response_headers.push_back(ResponseHeader("KeY2", "Value2, Foo")); 1551 d2->deleted_response_headers.push_back(ResponseHeader("KeY2", "Value2, Foo"));
1526 d2->added_response_headers.push_back(ResponseHeader("Key2", "Value4")); 1552 d2->added_response_headers.push_back(ResponseHeader("Key2", "Value4"));
1527 deltas.push_back(d2); 1553 deltas.push_back(d2);
1528 deltas.sort(&InDecreasingExtensionInstallationTimeOrder); 1554 deltas.sort(&InDecreasingExtensionInstallationTimeOrder);
1529 capturing_net_log.Clear(); 1555 capturing_net_log.Clear();
1530 scoped_refptr<net::HttpResponseHeaders> new_headers2; 1556 scoped_refptr<net::HttpResponseHeaders> new_headers2;
1531 MergeOnHeadersReceivedResponses( 1557 MergeOnHeadersReceivedResponses(
1532 deltas, base_headers.get(), &new_headers2, &warning_set, &net_log); 1558 deltas, base_headers.get(), &new_headers2, &warning_set, &net_log);
1533 warnings = warning_set.Release(); 1559 warnings = warning_set.Release();
1534 ASSERT_TRUE(new_headers2.get()); 1560 ASSERT_TRUE(new_headers2.get());
1535 iter = NULL; 1561 iter = NULL;
1536 std::multimap<std::string, std::string> actual2; 1562 std::multimap<std::string, std::string> actual2;
1537 while (new_headers2->EnumerateHeaderLines(&iter, &name, &value)) { 1563 while (new_headers2->EnumerateHeaderLines(&iter, &name, &value)) {
1538 actual2.insert(std::pair<std::string, std::string>(name, value)); 1564 actual2.insert(std::pair<std::string, std::string>(name, value));
1539 } 1565 }
1540 EXPECT_EQ(expected1, actual2); 1566 EXPECT_EQ(expected1, actual2);
1541 EXPECT_EQ(1u, warnings.size()); 1567 EXPECT_EQ(1u, warnings.size());
1542 EXPECT_TRUE(HasWarning(warnings, "extid2")); 1568 EXPECT_TRUE(HasWarning(warnings, "extid2"));
1543 EXPECT_EQ(2u, capturing_net_log.GetSize()); 1569 EXPECT_EQ(2u, capturing_net_log.GetSize());
1570 ClearWarnings(&warnings);
1544 } 1571 }
1545 1572
1546 // Check that we do not delete too much 1573 // Check that we do not delete too much
1547 TEST(ExtensionWebRequestHelpersTest, 1574 TEST(ExtensionWebRequestHelpersTest,
1548 TestMergeOnHeadersReceivedResponsesDeletion) { 1575 TestMergeOnHeadersReceivedResponsesDeletion) {
1549 net::CapturingBoundNetLog capturing_net_log; 1576 net::CapturingBoundNetLog capturing_net_log;
1550 net::BoundNetLog net_log = capturing_net_log.bound(); 1577 net::BoundNetLog net_log = capturing_net_log.bound();
1551 ExtensionWarningSet warning_set; 1578 ExtensionWarningSet warning_set;
1552 std::set<linked_ptr<ExtensionWarning> > warnings; 1579 ExtensionWarningSet::Set warnings;
1553 std::string header_value; 1580 std::string header_value;
1554 EventResponseDeltas deltas; 1581 EventResponseDeltas deltas;
1555 1582
1556 char base_headers_string[] = 1583 char base_headers_string[] =
1557 "HTTP/1.0 200 OK\r\n" 1584 "HTTP/1.0 200 OK\r\n"
1558 "Key1: Value1\r\n" 1585 "Key1: Value1\r\n"
1559 "Key1: Value2\r\n" 1586 "Key1: Value2\r\n"
1560 "Key1: Value3\r\n" 1587 "Key1: Value3\r\n"
1561 "Key2: Value4\r\n" 1588 "Key2: Value4\r\n"
1562 "\r\n"; 1589 "\r\n";
(...skipping 18 matching lines...) Expand all
1581 void* iter = NULL; 1608 void* iter = NULL;
1582 std::string name; 1609 std::string name;
1583 std::string value; 1610 std::string value;
1584 std::multimap<std::string, std::string> actual1; 1611 std::multimap<std::string, std::string> actual1;
1585 while (new_headers1->EnumerateHeaderLines(&iter, &name, &value)) { 1612 while (new_headers1->EnumerateHeaderLines(&iter, &name, &value)) {
1586 actual1.insert(std::pair<std::string, std::string>(name, value)); 1613 actual1.insert(std::pair<std::string, std::string>(name, value));
1587 } 1614 }
1588 EXPECT_EQ(expected1, actual1); 1615 EXPECT_EQ(expected1, actual1);
1589 EXPECT_EQ(0u, warnings.size()); 1616 EXPECT_EQ(0u, warnings.size());
1590 EXPECT_EQ(1u, capturing_net_log.GetSize()); 1617 EXPECT_EQ(1u, capturing_net_log.GetSize());
1618 ClearWarnings(&warnings);
1591 } 1619 }
1592 1620
1593 TEST(ExtensionWebRequestHelpersTest, TestMergeOnAuthRequiredResponses) { 1621 TEST(ExtensionWebRequestHelpersTest, TestMergeOnAuthRequiredResponses) {
1594 net::CapturingBoundNetLog capturing_net_log; 1622 net::CapturingBoundNetLog capturing_net_log;
1595 net::BoundNetLog net_log = capturing_net_log.bound(); 1623 net::BoundNetLog net_log = capturing_net_log.bound();
1596 ExtensionWarningSet warning_set; 1624 ExtensionWarningSet warning_set;
1597 std::set<linked_ptr<ExtensionWarning> > warnings; 1625 ExtensionWarningSet::Set warnings;
1598 EventResponseDeltas deltas; 1626 EventResponseDeltas deltas;
1599 string16 username = ASCIIToUTF16("foo"); 1627 string16 username = ASCIIToUTF16("foo");
1600 string16 password = ASCIIToUTF16("bar"); 1628 string16 password = ASCIIToUTF16("bar");
1601 string16 password2 = ASCIIToUTF16("baz"); 1629 string16 password2 = ASCIIToUTF16("baz");
1602 1630
1603 // Check that we can handle if not returning credentials. 1631 // Check that we can handle if not returning credentials.
1604 linked_ptr<EventResponseDelta> d0( 1632 linked_ptr<EventResponseDelta> d0(
1605 new EventResponseDelta("extid0", base::Time::FromInternalValue(3000))); 1633 new EventResponseDelta("extid0", base::Time::FromInternalValue(3000)));
1606 deltas.push_back(d0); 1634 deltas.push_back(d0);
1607 net::AuthCredentials auth0; 1635 net::AuthCredentials auth0;
1608 bool credentials_set = MergeOnAuthRequiredResponses( 1636 bool credentials_set = MergeOnAuthRequiredResponses(
1609 deltas, &auth0, &warning_set, &net_log); 1637 deltas, &auth0, &warning_set, &net_log);
1610 warnings = warning_set.Release(); 1638 warnings = warning_set.Release();
1611 EXPECT_FALSE(credentials_set); 1639 EXPECT_FALSE(credentials_set);
1612 EXPECT_TRUE(auth0.Empty()); 1640 EXPECT_TRUE(auth0.Empty());
1613 EXPECT_EQ(0u, warnings.size()); 1641 EXPECT_EQ(0u, warnings.size());
1614 EXPECT_EQ(0u, capturing_net_log.GetSize()); 1642 EXPECT_EQ(0u, capturing_net_log.GetSize());
1643 ClearWarnings(&warnings);
1615 1644
1616 // Check that we can set AuthCredentials. 1645 // Check that we can set AuthCredentials.
1617 linked_ptr<EventResponseDelta> d1( 1646 linked_ptr<EventResponseDelta> d1(
1618 new EventResponseDelta("extid1", base::Time::FromInternalValue(2000))); 1647 new EventResponseDelta("extid1", base::Time::FromInternalValue(2000)));
1619 d1->auth_credentials.reset(new net::AuthCredentials(username, password)); 1648 d1->auth_credentials.reset(new net::AuthCredentials(username, password));
1620 deltas.push_back(d1); 1649 deltas.push_back(d1);
1621 deltas.sort(&InDecreasingExtensionInstallationTimeOrder); 1650 deltas.sort(&InDecreasingExtensionInstallationTimeOrder);
1622 capturing_net_log.Clear(); 1651 capturing_net_log.Clear();
1623 net::AuthCredentials auth1; 1652 net::AuthCredentials auth1;
1624 credentials_set = MergeOnAuthRequiredResponses( 1653 credentials_set = MergeOnAuthRequiredResponses(
1625 deltas, &auth1, &warning_set, &net_log); 1654 deltas, &auth1, &warning_set, &net_log);
1626 warnings = warning_set.Release(); 1655 warnings = warning_set.Release();
1627 EXPECT_TRUE(credentials_set); 1656 EXPECT_TRUE(credentials_set);
1628 EXPECT_FALSE(auth1.Empty()); 1657 EXPECT_FALSE(auth1.Empty());
1629 EXPECT_EQ(username, auth1.username()); 1658 EXPECT_EQ(username, auth1.username());
1630 EXPECT_EQ(password, auth1.password()); 1659 EXPECT_EQ(password, auth1.password());
1631 EXPECT_EQ(0u, warnings.size()); 1660 EXPECT_EQ(0u, warnings.size());
1632 EXPECT_EQ(1u, capturing_net_log.GetSize()); 1661 EXPECT_EQ(1u, capturing_net_log.GetSize());
1662 ClearWarnings(&warnings);
1633 1663
1634 // Check that we set AuthCredentials only once. 1664 // Check that we set AuthCredentials only once.
1635 linked_ptr<EventResponseDelta> d2( 1665 linked_ptr<EventResponseDelta> d2(
1636 new EventResponseDelta("extid2", base::Time::FromInternalValue(1500))); 1666 new EventResponseDelta("extid2", base::Time::FromInternalValue(1500)));
1637 d2->auth_credentials.reset(new net::AuthCredentials(username, password2)); 1667 d2->auth_credentials.reset(new net::AuthCredentials(username, password2));
1638 deltas.push_back(d2); 1668 deltas.push_back(d2);
1639 deltas.sort(&InDecreasingExtensionInstallationTimeOrder); 1669 deltas.sort(&InDecreasingExtensionInstallationTimeOrder);
1640 capturing_net_log.Clear(); 1670 capturing_net_log.Clear();
1641 net::AuthCredentials auth2; 1671 net::AuthCredentials auth2;
1642 credentials_set = MergeOnAuthRequiredResponses( 1672 credentials_set = MergeOnAuthRequiredResponses(
1643 deltas, &auth2, &warning_set, &net_log); 1673 deltas, &auth2, &warning_set, &net_log);
1644 warnings = warning_set.Release(); 1674 warnings = warning_set.Release();
1645 EXPECT_TRUE(credentials_set); 1675 EXPECT_TRUE(credentials_set);
1646 EXPECT_FALSE(auth2.Empty()); 1676 EXPECT_FALSE(auth2.Empty());
1647 EXPECT_EQ(username, auth1.username()); 1677 EXPECT_EQ(username, auth1.username());
1648 EXPECT_EQ(password, auth1.password()); 1678 EXPECT_EQ(password, auth1.password());
1649 EXPECT_EQ(1u, warnings.size()); 1679 EXPECT_EQ(1u, warnings.size());
1650 EXPECT_TRUE(HasWarning(warnings, "extid2")); 1680 EXPECT_TRUE(HasWarning(warnings, "extid2"));
1651 EXPECT_EQ(2u, capturing_net_log.GetSize()); 1681 EXPECT_EQ(2u, capturing_net_log.GetSize());
1682 ClearWarnings(&warnings);
1652 1683
1653 // Check that we can set identical AuthCredentials twice without causing 1684 // Check that we can set identical AuthCredentials twice without causing
1654 // a conflict. 1685 // a conflict.
1655 linked_ptr<EventResponseDelta> d3( 1686 linked_ptr<EventResponseDelta> d3(
1656 new EventResponseDelta("extid3", base::Time::FromInternalValue(1000))); 1687 new EventResponseDelta("extid3", base::Time::FromInternalValue(1000)));
1657 d3->auth_credentials.reset(new net::AuthCredentials(username, password)); 1688 d3->auth_credentials.reset(new net::AuthCredentials(username, password));
1658 deltas.push_back(d3); 1689 deltas.push_back(d3);
1659 deltas.sort(&InDecreasingExtensionInstallationTimeOrder); 1690 deltas.sort(&InDecreasingExtensionInstallationTimeOrder);
1660 capturing_net_log.Clear(); 1691 capturing_net_log.Clear();
1661 net::AuthCredentials auth3; 1692 net::AuthCredentials auth3;
1662 credentials_set = MergeOnAuthRequiredResponses( 1693 credentials_set = MergeOnAuthRequiredResponses(
1663 deltas, &auth3, &warning_set, &net_log); 1694 deltas, &auth3, &warning_set, &net_log);
1664 warnings = warning_set.Release(); 1695 warnings = warning_set.Release();
1665 EXPECT_TRUE(credentials_set); 1696 EXPECT_TRUE(credentials_set);
1666 EXPECT_FALSE(auth3.Empty()); 1697 EXPECT_FALSE(auth3.Empty());
1667 EXPECT_EQ(username, auth1.username()); 1698 EXPECT_EQ(username, auth1.username());
1668 EXPECT_EQ(password, auth1.password()); 1699 EXPECT_EQ(password, auth1.password());
1669 EXPECT_EQ(1u, warnings.size()); 1700 EXPECT_EQ(1u, warnings.size());
1670 EXPECT_TRUE(HasWarning(warnings, "extid2")); 1701 EXPECT_TRUE(HasWarning(warnings, "extid2"));
1671 EXPECT_EQ(3u, capturing_net_log.GetSize()); 1702 EXPECT_EQ(3u, capturing_net_log.GetSize());
1703 ClearWarnings(&warnings);
1672 } 1704 }
1673 1705
1674 } // namespace extensions 1706 } // namespace extensions
OLDNEW
« no previous file with comments | « no previous file | chrome/browser/extensions/extension_warning_set.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698