| 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 <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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 |
| OLD | NEW |