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

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

Issue 10407105: Improve error messaging of webRequest API in case of conflicts (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Merged with ToT Created 8 years, 2 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
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_path.h" 10 #include "base/file_path.h"
11 #include "base/file_util.h" 11 #include "base/file_util.h"
12 #include "base/json/json_reader.h" 12 #include "base/json/json_reader.h"
13 #include "base/json/json_string_value_serializer.h" 13 #include "base/json/json_string_value_serializer.h"
14 #include "base/memory/weak_ptr.h" 14 #include "base/memory/weak_ptr.h"
15 #include "base/message_loop.h" 15 #include "base/message_loop.h"
16 #include "base/path_service.h" 16 #include "base/path_service.h"
17 #include "base/stl_util.h" 17 #include "base/stl_util.h"
18 #include "base/string_piece.h" 18 #include "base/string_piece.h"
19 #include "base/utf_string_conversions.h" 19 #include "base/utf_string_conversions.h"
20 #include "chrome/browser/api/prefs/pref_member.h" 20 #include "chrome/browser/api/prefs/pref_member.h"
21 #include "chrome/browser/content_settings/cookie_settings.h" 21 #include "chrome/browser/content_settings/cookie_settings.h"
22 #include "chrome/browser/extensions/api/web_request/upload_data_presenter.h" 22 #include "chrome/browser/extensions/api/web_request/upload_data_presenter.h"
23 #include "chrome/browser/extensions/api/web_request/web_request_api.h" 23 #include "chrome/browser/extensions/api/web_request/web_request_api.h"
24 #include "chrome/browser/extensions/api/web_request/web_request_api_constants.h" 24 #include "chrome/browser/extensions/api/web_request/web_request_api_constants.h"
25 #include "chrome/browser/extensions/api/web_request/web_request_api_helpers.h" 25 #include "chrome/browser/extensions/api/web_request/web_request_api_helpers.h"
26 #include "chrome/browser/extensions/event_router_forwarder.h" 26 #include "chrome/browser/extensions/event_router_forwarder.h"
27 #include "chrome/browser/extensions/extension_warning_set.h"
27 #include "chrome/browser/net/chrome_network_delegate.h" 28 #include "chrome/browser/net/chrome_network_delegate.h"
28 #include "chrome/common/extensions/extension_messages.h" 29 #include "chrome/common/extensions/extension_messages.h"
29 #include "chrome/common/extensions/features/feature.h" 30 #include "chrome/common/extensions/features/feature.h"
30 #include "chrome/common/pref_names.h" 31 #include "chrome/common/pref_names.h"
31 #include "chrome/test/base/testing_browser_process.h" 32 #include "chrome/test/base/testing_browser_process.h"
32 #include "chrome/test/base/testing_pref_service.h" 33 #include "chrome/test/base/testing_pref_service.h"
33 #include "chrome/test/base/testing_profile.h" 34 #include "chrome/test/base/testing_profile.h"
34 #include "content/public/test/test_browser_thread.h" 35 #include "content/public/test/test_browser_thread.h"
35 #include "net/base/auth.h" 36 #include "net/base/auth.h"
36 #include "net/base/capturing_net_log.h" 37 #include "net/base/capturing_net_log.h"
(...skipping 23 matching lines...) Expand all
60 using helpers::EventResponseDeltas; 61 using helpers::EventResponseDeltas;
61 using helpers::InDecreasingExtensionInstallationTimeOrder; 62 using helpers::InDecreasingExtensionInstallationTimeOrder;
62 using helpers::MergeCancelOfResponses; 63 using helpers::MergeCancelOfResponses;
63 using helpers::MergeOnBeforeRequestResponses; 64 using helpers::MergeOnBeforeRequestResponses;
64 using helpers::RequestCookieModification; 65 using helpers::RequestCookieModification;
65 using helpers::ResponseCookieModification; 66 using helpers::ResponseCookieModification;
66 using helpers::ResponseHeader; 67 using helpers::ResponseHeader;
67 using helpers::ResponseHeaders; 68 using helpers::ResponseHeaders;
68 using helpers::StringToCharList; 69 using helpers::StringToCharList;
69 70
71 namespace extensions {
72
70 namespace { 73 namespace {
71 static void EventHandledOnIOThread( 74 static void EventHandledOnIOThread(
72 void* profile, 75 void* profile,
73 const std::string& extension_id, 76 const std::string& extension_id,
74 const std::string& event_name, 77 const std::string& event_name,
75 const std::string& sub_event_name, 78 const std::string& sub_event_name,
76 uint64 request_id, 79 uint64 request_id,
77 ExtensionWebRequestEventRouter::EventResponse* response) { 80 ExtensionWebRequestEventRouter::EventResponse* response) {
78 ExtensionWebRequestEventRouter::GetInstance()->OnEventHandled( 81 ExtensionWebRequestEventRouter::GetInstance()->OnEventHandled(
79 profile, extension_id, event_name, sub_event_name, request_id, 82 profile, extension_id, event_name, sub_event_name, request_id,
(...skipping 17 matching lines...) Expand all
97 ASSERT_TRUE(ExtensionMsg_MessageInvoke::Read(message, param)); 100 ASSERT_TRUE(ExtensionMsg_MessageInvoke::Read(message, param));
98 ASSERT_GE(param->c.GetSize(), 2u); 101 ASSERT_GE(param->c.GetSize(), 2u);
99 const Value* value = NULL; 102 const Value* value = NULL;
100 ASSERT_TRUE(param->c.Get(1, &value)); 103 ASSERT_TRUE(param->c.Get(1, &value));
101 const ListValue* list = NULL; 104 const ListValue* list = NULL;
102 ASSERT_TRUE(value->GetAsList(&list)); 105 ASSERT_TRUE(value->GetAsList(&list));
103 ASSERT_EQ(1u, list->GetSize()); 106 ASSERT_EQ(1u, list->GetSize());
104 ASSERT_TRUE(list->GetDictionary(0, out)); 107 ASSERT_TRUE(list->GetDictionary(0, out));
105 } 108 }
106 109
110 // Returns whether |warnings| contains an extension for |extension_id|.
111 bool HasWarning(const std::set<ExtensionWarning>& warnings,
112 const std::string& extension_id) {
113 for (std::set<ExtensionWarning>::const_iterator i = warnings.begin();
114 i != warnings.end(); ++i) {
115 if (i->extension_id() == extension_id)
116 return true;
117 }
118 return false;
119 }
120
107 } // namespace 121 } // namespace
108 122
109 // A mock event router that responds to events with a pre-arranged queue of 123 // A mock event router that responds to events with a pre-arranged queue of
110 // Tasks. 124 // Tasks.
111 class TestIPCSender : public IPC::Sender { 125 class TestIPCSender : public IPC::Sender {
112 public: 126 public:
113 typedef std::list<linked_ptr<IPC::Message> > SentMessages; 127 typedef std::list<linked_ptr<IPC::Message> > SentMessages;
114 128
115 // Adds a Task to the queue. We will fire these in order as events are 129 // Adds a Task to the queue. We will fire these in order as events are
116 // dispatched. 130 // dispatched.
(...skipping 29 matching lines...) Expand all
146 }; 160 };
147 161
148 class ExtensionWebRequestTest : public testing::Test { 162 class ExtensionWebRequestTest : public testing::Test {
149 public: 163 public:
150 ExtensionWebRequestTest() 164 ExtensionWebRequestTest()
151 : ui_thread_(content::BrowserThread::UI, &message_loop_), 165 : ui_thread_(content::BrowserThread::UI, &message_loop_),
152 io_thread_(content::BrowserThread::IO, &message_loop_) {} 166 io_thread_(content::BrowserThread::IO, &message_loop_) {}
153 167
154 protected: 168 protected:
155 virtual void SetUp() OVERRIDE { 169 virtual void SetUp() OVERRIDE {
156 event_router_ = new extensions::EventRouterForwarder(); 170 event_router_ = new EventRouterForwarder();
157 enable_referrers_.Init( 171 enable_referrers_.Init(
158 prefs::kEnableReferrers, profile_.GetTestingPrefService(), NULL); 172 prefs::kEnableReferrers, profile_.GetTestingPrefService(), NULL);
159 network_delegate_.reset(new ChromeNetworkDelegate( 173 network_delegate_.reset(new ChromeNetworkDelegate(
160 event_router_.get(), NULL, NULL, NULL, &profile_, 174 event_router_.get(), NULL, NULL, NULL, &profile_,
161 CookieSettings::Factory::GetForProfile(&profile_), &enable_referrers_, 175 CookieSettings::Factory::GetForProfile(&profile_), &enable_referrers_,
162 NULL, NULL)); 176 NULL, NULL));
163 context_.reset(new TestURLRequestContext(true)); 177 context_.reset(new TestURLRequestContext(true));
164 context_->set_network_delegate(network_delegate_.get()); 178 context_->set_network_delegate(network_delegate_.get());
165 context_->Init(); 179 context_->Init();
166 } 180 }
167 181
168 // Fires a URLRequest with the specified |method|, |content_type| and three 182 // Fires a URLRequest with the specified |method|, |content_type| and three
169 // elements of upload data: bytes_1, a dummy empty file, bytes_2. 183 // elements of upload data: bytes_1, a dummy empty file, bytes_2.
170 void FireURLRequestWithData(const std::string& method, 184 void FireURLRequestWithData(const std::string& method,
171 const char* content_type, 185 const char* content_type,
172 const std::vector<char>& bytes_1, 186 const std::vector<char>& bytes_1,
173 const std::vector<char>& bytes_2); 187 const std::vector<char>& bytes_2);
174 188
175 MessageLoopForIO message_loop_; 189 MessageLoopForIO message_loop_;
176 content::TestBrowserThread ui_thread_; 190 content::TestBrowserThread ui_thread_;
177 content::TestBrowserThread io_thread_; 191 content::TestBrowserThread io_thread_;
178 TestingProfile profile_; 192 TestingProfile profile_;
179 TestDelegate delegate_; 193 TestDelegate delegate_;
180 BooleanPrefMember enable_referrers_; 194 BooleanPrefMember enable_referrers_;
181 TestIPCSender ipc_sender_; 195 TestIPCSender ipc_sender_;
182 scoped_refptr<extensions::EventRouterForwarder> event_router_; 196 scoped_refptr<EventRouterForwarder> event_router_;
183 scoped_refptr<ExtensionInfoMap> extension_info_map_; 197 scoped_refptr<ExtensionInfoMap> extension_info_map_;
184 scoped_ptr<ChromeNetworkDelegate> network_delegate_; 198 scoped_ptr<ChromeNetworkDelegate> network_delegate_;
185 scoped_ptr<TestURLRequestContext> context_; 199 scoped_ptr<TestURLRequestContext> context_;
186 }; 200 };
187 201
188 // Tests that we handle disagreements among extensions about responses to 202 // Tests that we handle disagreements among extensions about responses to
189 // blocking events (redirection) by choosing the response from the 203 // blocking events (redirection) by choosing the response from the
190 // most-recently-installed extension. 204 // most-recently-installed extension.
191 TEST_F(ExtensionWebRequestTest, BlockingEventPrecedenceRedirect) { 205 TEST_F(ExtensionWebRequestTest, BlockingEventPrecedenceRedirect) {
192 std::string extension1_id("1"); 206 std::string extension1_id("1");
(...skipping 497 matching lines...) Expand 10 before | Expand all | Expand 10 after
690 704
691 class ExtensionWebRequestHeaderModificationTest : 705 class ExtensionWebRequestHeaderModificationTest :
692 public testing::TestWithParam<HeaderModificationTest> { 706 public testing::TestWithParam<HeaderModificationTest> {
693 public: 707 public:
694 ExtensionWebRequestHeaderModificationTest() 708 ExtensionWebRequestHeaderModificationTest()
695 : ui_thread_(content::BrowserThread::UI, &message_loop_), 709 : ui_thread_(content::BrowserThread::UI, &message_loop_),
696 io_thread_(content::BrowserThread::IO, &message_loop_) {} 710 io_thread_(content::BrowserThread::IO, &message_loop_) {}
697 711
698 protected: 712 protected:
699 virtual void SetUp() { 713 virtual void SetUp() {
700 event_router_ = new extensions::EventRouterForwarder(); 714 event_router_ = new EventRouterForwarder();
701 enable_referrers_.Init( 715 enable_referrers_.Init(
702 prefs::kEnableReferrers, profile_.GetTestingPrefService(), NULL); 716 prefs::kEnableReferrers, profile_.GetTestingPrefService(), NULL);
703 network_delegate_.reset(new ChromeNetworkDelegate( 717 network_delegate_.reset(new ChromeNetworkDelegate(
704 event_router_.get(), NULL, NULL, NULL, &profile_, 718 event_router_.get(), NULL, NULL, NULL, &profile_,
705 CookieSettings::Factory::GetForProfile(&profile_), &enable_referrers_, 719 CookieSettings::Factory::GetForProfile(&profile_), &enable_referrers_,
706 NULL, NULL)); 720 NULL, NULL));
707 context_.reset(new TestURLRequestContext(true)); 721 context_.reset(new TestURLRequestContext(true));
708 host_resolver_.reset(new net::MockHostResolver()); 722 host_resolver_.reset(new net::MockHostResolver());
709 host_resolver_->rules()->AddSimulatedFailure("doesnotexist"); 723 host_resolver_->rules()->AddSimulatedFailure("doesnotexist");
710 context_->set_host_resolver(host_resolver_.get()); 724 context_->set_host_resolver(host_resolver_.get());
711 context_->set_network_delegate(network_delegate_.get()); 725 context_->set_network_delegate(network_delegate_.get());
712 context_->Init(); 726 context_->Init();
713 } 727 }
714 728
715 MessageLoopForIO message_loop_; 729 MessageLoopForIO message_loop_;
716 content::TestBrowserThread ui_thread_; 730 content::TestBrowserThread ui_thread_;
717 content::TestBrowserThread io_thread_; 731 content::TestBrowserThread io_thread_;
718 TestingProfile profile_; 732 TestingProfile profile_;
719 TestDelegate delegate_; 733 TestDelegate delegate_;
720 BooleanPrefMember enable_referrers_; 734 BooleanPrefMember enable_referrers_;
721 TestIPCSender ipc_sender_; 735 TestIPCSender ipc_sender_;
722 scoped_refptr<extensions::EventRouterForwarder> event_router_; 736 scoped_refptr<EventRouterForwarder> event_router_;
723 scoped_refptr<ExtensionInfoMap> extension_info_map_; 737 scoped_refptr<ExtensionInfoMap> extension_info_map_;
724 scoped_ptr<ChromeNetworkDelegate> network_delegate_; 738 scoped_ptr<ChromeNetworkDelegate> network_delegate_;
725 scoped_ptr<net::MockHostResolver> host_resolver_; 739 scoped_ptr<net::MockHostResolver> host_resolver_;
726 scoped_ptr<TestURLRequestContext> context_; 740 scoped_ptr<TestURLRequestContext> context_;
727 }; 741 };
728 742
729 TEST_P(ExtensionWebRequestHeaderModificationTest, TestModifications) { 743 TEST_P(ExtensionWebRequestHeaderModificationTest, TestModifications) {
730 std::string extension1_id("1"); 744 std::string extension1_id("1");
731 std::string extension2_id("2"); 745 std::string extension2_id("2");
732 std::string extension3_id("3"); 746 std::string extension3_id("3");
(...skipping 477 matching lines...) Expand 10 before | Expand all | Expand 10 after
1210 EXPECT_TRUE(delta->cancel); 1224 EXPECT_TRUE(delta->cancel);
1211 EXPECT_EQ(2u, delta->added_response_headers.size()); 1225 EXPECT_EQ(2u, delta->added_response_headers.size());
1212 EXPECT_TRUE(Contains(delta->added_response_headers, 1226 EXPECT_TRUE(Contains(delta->added_response_headers,
1213 ResponseHeader("Key2", "Value1"))); 1227 ResponseHeader("Key2", "Value1")));
1214 EXPECT_TRUE(Contains(delta->added_response_headers, 1228 EXPECT_TRUE(Contains(delta->added_response_headers,
1215 ResponseHeader("Key4", "Value4"))); 1229 ResponseHeader("Key4", "Value4")));
1216 EXPECT_EQ(2u, delta->deleted_response_headers.size()); 1230 EXPECT_EQ(2u, delta->deleted_response_headers.size());
1217 EXPECT_TRUE(Contains(delta->deleted_response_headers, 1231 EXPECT_TRUE(Contains(delta->deleted_response_headers,
1218 ResponseHeader("Key2", "Value2, Bar"))); 1232 ResponseHeader("Key2", "Value2, Bar")));
1219 EXPECT_TRUE(Contains(delta->deleted_response_headers, 1233 EXPECT_TRUE(Contains(delta->deleted_response_headers,
1220 ResponseHeader("Key3", "Value3"))); 1234 ResponseHeader("Key3", "Value3")));
1221 } 1235 }
1222 1236
1223 TEST(ExtensionWebRequestHelpersTest, TestCalculateOnAuthRequiredDelta) { 1237 TEST(ExtensionWebRequestHelpersTest, TestCalculateOnAuthRequiredDelta) {
1224 const bool cancel = true; 1238 const bool cancel = true;
1225 1239
1226 string16 username = ASCIIToUTF16("foo"); 1240 string16 username = ASCIIToUTF16("foo");
1227 string16 password = ASCIIToUTF16("bar"); 1241 string16 password = ASCIIToUTF16("bar");
1228 scoped_ptr<net::AuthCredentials> credentials( 1242 scoped_ptr<net::AuthCredentials> credentials(
1229 new net::AuthCredentials(username, password)); 1243 new net::AuthCredentials(username, password));
1230 1244
(...skipping 30 matching lines...) Expand all
1261 deltas.sort(&InDecreasingExtensionInstallationTimeOrder); 1275 deltas.sort(&InDecreasingExtensionInstallationTimeOrder);
1262 MergeCancelOfResponses(deltas, &canceled, &net_log); 1276 MergeCancelOfResponses(deltas, &canceled, &net_log);
1263 EXPECT_TRUE(canceled); 1277 EXPECT_TRUE(canceled);
1264 EXPECT_EQ(1u, capturing_net_log.GetSize()); 1278 EXPECT_EQ(1u, capturing_net_log.GetSize());
1265 } 1279 }
1266 1280
1267 TEST(ExtensionWebRequestHelpersTest, TestMergeOnBeforeRequestResponses) { 1281 TEST(ExtensionWebRequestHelpersTest, TestMergeOnBeforeRequestResponses) {
1268 EventResponseDeltas deltas; 1282 EventResponseDeltas deltas;
1269 net::CapturingBoundNetLog capturing_net_log; 1283 net::CapturingBoundNetLog capturing_net_log;
1270 net::BoundNetLog net_log = capturing_net_log.bound(); 1284 net::BoundNetLog net_log = capturing_net_log.bound();
1271 std::set<std::string> conflicting_extensions; 1285 std::set<ExtensionWarning> warning_set;
1272 GURL effective_new_url; 1286 GURL effective_new_url;
1273 1287
1274 // No redirect 1288 // No redirect
1275 linked_ptr<EventResponseDelta> d0( 1289 linked_ptr<EventResponseDelta> d0(
1276 new EventResponseDelta("extid0", base::Time::FromInternalValue(0))); 1290 new EventResponseDelta("extid0", base::Time::FromInternalValue(0)));
1277 deltas.push_back(d0); 1291 deltas.push_back(d0);
1278 MergeOnBeforeRequestResponses( 1292 MergeOnBeforeRequestResponses(
1279 deltas, &effective_new_url, &conflicting_extensions, &net_log); 1293 deltas, &effective_new_url, &warning_set, &net_log);
1280 EXPECT_TRUE(effective_new_url.is_empty()); 1294 EXPECT_TRUE(effective_new_url.is_empty());
1281 1295
1282 // Single redirect. 1296 // Single redirect.
1283 GURL new_url_1("http://foo.com"); 1297 GURL new_url_1("http://foo.com");
1284 linked_ptr<EventResponseDelta> d1( 1298 linked_ptr<EventResponseDelta> d1(
1285 new EventResponseDelta("extid1", base::Time::FromInternalValue(1000))); 1299 new EventResponseDelta("extid1", base::Time::FromInternalValue(1000)));
1286 d1->new_url = GURL(new_url_1); 1300 d1->new_url = GURL(new_url_1);
1287 deltas.push_back(d1); 1301 deltas.push_back(d1);
1288 deltas.sort(&InDecreasingExtensionInstallationTimeOrder); 1302 deltas.sort(&InDecreasingExtensionInstallationTimeOrder);
1289 capturing_net_log.Clear(); 1303 capturing_net_log.Clear();
1290 MergeOnBeforeRequestResponses( 1304 MergeOnBeforeRequestResponses(
1291 deltas, &effective_new_url, &conflicting_extensions, &net_log); 1305 deltas, &effective_new_url, &warning_set, &net_log);
1292 EXPECT_EQ(new_url_1, effective_new_url); 1306 EXPECT_EQ(new_url_1, effective_new_url);
1293 EXPECT_TRUE(conflicting_extensions.empty()); 1307 EXPECT_TRUE(warning_set.empty());
1294 EXPECT_EQ(1u, capturing_net_log.GetSize()); 1308 EXPECT_EQ(1u, capturing_net_log.GetSize());
1295 1309
1296 // Ignored redirect (due to precedence). 1310 // Ignored redirect (due to precedence).
1297 GURL new_url_2("http://bar.com"); 1311 GURL new_url_2("http://bar.com");
1298 linked_ptr<EventResponseDelta> d2( 1312 linked_ptr<EventResponseDelta> d2(
1299 new EventResponseDelta("extid2", base::Time::FromInternalValue(500))); 1313 new EventResponseDelta("extid2", base::Time::FromInternalValue(500)));
1300 d2->new_url = GURL(new_url_2); 1314 d2->new_url = GURL(new_url_2);
1301 deltas.push_back(d2); 1315 deltas.push_back(d2);
1302 deltas.sort(&InDecreasingExtensionInstallationTimeOrder); 1316 deltas.sort(&InDecreasingExtensionInstallationTimeOrder);
1317 warning_set.clear();
1303 capturing_net_log.Clear(); 1318 capturing_net_log.Clear();
1304 MergeOnBeforeRequestResponses( 1319 MergeOnBeforeRequestResponses(
1305 deltas, &effective_new_url, &conflicting_extensions, &net_log); 1320 deltas, &effective_new_url, &warning_set, &net_log);
1306 EXPECT_EQ(new_url_1, effective_new_url); 1321 EXPECT_EQ(new_url_1, effective_new_url);
1307 EXPECT_EQ(1u, conflicting_extensions.size()); 1322 EXPECT_EQ(1u, warning_set.size());
1308 EXPECT_TRUE(ContainsKey(conflicting_extensions, "extid2")); 1323 EXPECT_TRUE(HasWarning(warning_set, "extid2"));
1309 EXPECT_EQ(2u, capturing_net_log.GetSize()); 1324 EXPECT_EQ(2u, capturing_net_log.GetSize());
1310 1325
1311 // Overriding redirect. 1326 // Overriding redirect.
1312 GURL new_url_3("http://baz.com"); 1327 GURL new_url_3("http://baz.com");
1313 linked_ptr<EventResponseDelta> d3( 1328 linked_ptr<EventResponseDelta> d3(
1314 new EventResponseDelta("extid3", base::Time::FromInternalValue(1500))); 1329 new EventResponseDelta("extid3", base::Time::FromInternalValue(1500)));
1315 d3->new_url = GURL(new_url_3); 1330 d3->new_url = GURL(new_url_3);
1316 deltas.push_back(d3); 1331 deltas.push_back(d3);
1317 deltas.sort(&InDecreasingExtensionInstallationTimeOrder); 1332 deltas.sort(&InDecreasingExtensionInstallationTimeOrder);
1318 conflicting_extensions.clear(); 1333 warning_set.clear();
1319 capturing_net_log.Clear(); 1334 capturing_net_log.Clear();
1320 MergeOnBeforeRequestResponses( 1335 MergeOnBeforeRequestResponses(
1321 deltas, &effective_new_url, &conflicting_extensions, &net_log); 1336 deltas, &effective_new_url, &warning_set, &net_log);
1322 EXPECT_EQ(new_url_3, effective_new_url); 1337 EXPECT_EQ(new_url_3, effective_new_url);
1323 EXPECT_EQ(2u, conflicting_extensions.size()); 1338 EXPECT_EQ(2u, warning_set.size());
1324 EXPECT_TRUE(ContainsKey(conflicting_extensions, "extid1")); 1339 EXPECT_TRUE(HasWarning(warning_set, "extid1"));
1325 EXPECT_TRUE(ContainsKey(conflicting_extensions, "extid2")); 1340 EXPECT_TRUE(HasWarning(warning_set, "extid2"));
1326 EXPECT_EQ(3u, capturing_net_log.GetSize()); 1341 EXPECT_EQ(3u, capturing_net_log.GetSize());
1327 1342
1328 // Check that identical redirects don't cause a conflict. 1343 // Check that identical redirects don't cause a conflict.
1329 linked_ptr<EventResponseDelta> d4( 1344 linked_ptr<EventResponseDelta> d4(
1330 new EventResponseDelta("extid4", base::Time::FromInternalValue(2000))); 1345 new EventResponseDelta("extid4", base::Time::FromInternalValue(2000)));
1331 d4->new_url = GURL(new_url_3); 1346 d4->new_url = GURL(new_url_3);
1332 deltas.push_back(d4); 1347 deltas.push_back(d4);
1333 deltas.sort(&InDecreasingExtensionInstallationTimeOrder); 1348 deltas.sort(&InDecreasingExtensionInstallationTimeOrder);
1334 conflicting_extensions.clear(); 1349 warning_set.clear();
1335 capturing_net_log.Clear(); 1350 capturing_net_log.Clear();
1336 MergeOnBeforeRequestResponses( 1351 MergeOnBeforeRequestResponses(
1337 deltas, &effective_new_url, &conflicting_extensions, &net_log); 1352 deltas, &effective_new_url, &warning_set, &net_log);
1338 EXPECT_EQ(new_url_3, effective_new_url); 1353 EXPECT_EQ(new_url_3, effective_new_url);
1339 EXPECT_EQ(2u, conflicting_extensions.size()); 1354 EXPECT_EQ(2u, warning_set.size());
1340 EXPECT_TRUE(ContainsKey(conflicting_extensions, "extid1")); 1355 EXPECT_TRUE(HasWarning(warning_set, "extid1"));
1341 EXPECT_TRUE(ContainsKey(conflicting_extensions, "extid2")); 1356 EXPECT_TRUE(HasWarning(warning_set, "extid2"));
1342 EXPECT_EQ(4u, capturing_net_log.GetSize()); 1357 EXPECT_EQ(4u, capturing_net_log.GetSize());
1343 } 1358 }
1344 1359
1345 // This tests that we can redirect to data:// urls, which is considered 1360 // This tests that we can redirect to data:// urls, which is considered
1346 // a kind of cancelling requests. 1361 // a kind of cancelling requests.
1347 TEST(ExtensionWebRequestHelpersTest, TestMergeOnBeforeRequestResponses2) { 1362 TEST(ExtensionWebRequestHelpersTest, TestMergeOnBeforeRequestResponses2) {
1348 EventResponseDeltas deltas; 1363 EventResponseDeltas deltas;
1349 net::CapturingBoundNetLog capturing_net_log; 1364 net::CapturingBoundNetLog capturing_net_log;
1350 net::BoundNetLog net_log = capturing_net_log.bound(); 1365 net::BoundNetLog net_log = capturing_net_log.bound();
1351 std::set<std::string> conflicting_extensions; 1366 std::set<ExtensionWarning> warning_set;
1352 GURL effective_new_url; 1367 GURL effective_new_url;
1353 1368
1354 // Single redirect. 1369 // Single redirect.
1355 GURL new_url_0("http://foo.com"); 1370 GURL new_url_0("http://foo.com");
1356 linked_ptr<EventResponseDelta> d0( 1371 linked_ptr<EventResponseDelta> d0(
1357 new EventResponseDelta("extid0", base::Time::FromInternalValue(2000))); 1372 new EventResponseDelta("extid0", base::Time::FromInternalValue(2000)));
1358 d0->new_url = GURL(new_url_0); 1373 d0->new_url = GURL(new_url_0);
1359 deltas.push_back(d0); 1374 deltas.push_back(d0);
1360 MergeOnBeforeRequestResponses( 1375 MergeOnBeforeRequestResponses(
1361 deltas, &effective_new_url, &conflicting_extensions, &net_log); 1376 deltas, &effective_new_url, &warning_set, &net_log);
1362 EXPECT_EQ(new_url_0, effective_new_url); 1377 EXPECT_EQ(new_url_0, effective_new_url);
1363 1378
1364 // Cancel request by redirecting to a data:// URL. This shall override 1379 // Cancel request by redirecting to a data:// URL. This shall override
1365 // the other redirect but not cause any conflict warnings. 1380 // the other redirect but not cause any conflict warnings.
1366 GURL new_url_1("data://foo"); 1381 GURL new_url_1("data://foo");
1367 linked_ptr<EventResponseDelta> d1( 1382 linked_ptr<EventResponseDelta> d1(
1368 new EventResponseDelta("extid1", base::Time::FromInternalValue(1500))); 1383 new EventResponseDelta("extid1", base::Time::FromInternalValue(1500)));
1369 d1->new_url = GURL(new_url_1); 1384 d1->new_url = GURL(new_url_1);
1370 deltas.push_back(d1); 1385 deltas.push_back(d1);
1371 deltas.sort(&InDecreasingExtensionInstallationTimeOrder); 1386 deltas.sort(&InDecreasingExtensionInstallationTimeOrder);
1387 warning_set.clear();
1372 capturing_net_log.Clear(); 1388 capturing_net_log.Clear();
1373 MergeOnBeforeRequestResponses( 1389 MergeOnBeforeRequestResponses(
1374 deltas, &effective_new_url, &conflicting_extensions, &net_log); 1390 deltas, &effective_new_url, &warning_set, &net_log);
1375 EXPECT_EQ(new_url_1, effective_new_url); 1391 EXPECT_EQ(new_url_1, effective_new_url);
1376 EXPECT_TRUE(conflicting_extensions.empty()); 1392 EXPECT_TRUE(warning_set.empty());
1377 EXPECT_EQ(1u, capturing_net_log.GetSize()); 1393 EXPECT_EQ(1u, capturing_net_log.GetSize());
1378 1394
1379 // Cancel request by redirecting to the same data:// URL. This shall 1395 // Cancel request by redirecting to the same data:// URL. This shall
1380 // not create any conflicts as it is in line with d1. 1396 // not create any conflicts as it is in line with d1.
1381 GURL new_url_2("data://foo"); 1397 GURL new_url_2("data://foo");
1382 linked_ptr<EventResponseDelta> d2( 1398 linked_ptr<EventResponseDelta> d2(
1383 new EventResponseDelta("extid2", base::Time::FromInternalValue(1000))); 1399 new EventResponseDelta("extid2", base::Time::FromInternalValue(1000)));
1384 d2->new_url = GURL(new_url_2); 1400 d2->new_url = GURL(new_url_2);
1385 deltas.push_back(d2); 1401 deltas.push_back(d2);
1386 deltas.sort(&InDecreasingExtensionInstallationTimeOrder); 1402 deltas.sort(&InDecreasingExtensionInstallationTimeOrder);
1403 warning_set.clear();
1387 capturing_net_log.Clear(); 1404 capturing_net_log.Clear();
1388 MergeOnBeforeRequestResponses( 1405 MergeOnBeforeRequestResponses(
1389 deltas, &effective_new_url, &conflicting_extensions, &net_log); 1406 deltas, &effective_new_url, &warning_set, &net_log);
1390 EXPECT_EQ(new_url_1, effective_new_url); 1407 EXPECT_EQ(new_url_1, effective_new_url);
1391 EXPECT_TRUE(conflicting_extensions.empty()); 1408 EXPECT_TRUE(warning_set.empty());
1392 EXPECT_EQ(2u, capturing_net_log.GetSize()); 1409 EXPECT_EQ(2u, capturing_net_log.GetSize());
1393 1410
1394 // Cancel redirect by redirecting to a different data:// URL. This needs 1411 // Cancel redirect by redirecting to a different data:// URL. This needs
1395 // to create a conflict. 1412 // to create a conflict.
1396 GURL new_url_3("data://something_totally_different"); 1413 GURL new_url_3("data://something_totally_different");
1397 linked_ptr<EventResponseDelta> d3( 1414 linked_ptr<EventResponseDelta> d3(
1398 new EventResponseDelta("extid3", base::Time::FromInternalValue(500))); 1415 new EventResponseDelta("extid3", base::Time::FromInternalValue(500)));
1399 d3->new_url = GURL(new_url_3); 1416 d3->new_url = GURL(new_url_3);
1400 deltas.push_back(d3); 1417 deltas.push_back(d3);
1401 deltas.sort(&InDecreasingExtensionInstallationTimeOrder); 1418 deltas.sort(&InDecreasingExtensionInstallationTimeOrder);
1419 warning_set.clear();
1402 capturing_net_log.Clear(); 1420 capturing_net_log.Clear();
1403 MergeOnBeforeRequestResponses( 1421 MergeOnBeforeRequestResponses(
1404 deltas, &effective_new_url, &conflicting_extensions, &net_log); 1422 deltas, &effective_new_url, &warning_set, &net_log);
1405 EXPECT_EQ(new_url_1, effective_new_url); 1423 EXPECT_EQ(new_url_1, effective_new_url);
1406 EXPECT_EQ(1u, conflicting_extensions.size()); 1424 EXPECT_EQ(1u, warning_set.size());
1407 EXPECT_TRUE(ContainsKey(conflicting_extensions, "extid3")); 1425 EXPECT_TRUE(HasWarning(warning_set, "extid3"));
1408 EXPECT_EQ(3u, capturing_net_log.GetSize()); 1426 EXPECT_EQ(3u, capturing_net_log.GetSize());
1409 } 1427 }
1410 1428
1411 // This tests that we can redirect to about:blank, which is considered 1429 // This tests that we can redirect to about:blank, which is considered
1412 // a kind of cancelling requests. 1430 // a kind of cancelling requests.
1413 TEST(ExtensionWebRequestHelpersTest, TestMergeOnBeforeRequestResponses3) { 1431 TEST(ExtensionWebRequestHelpersTest, TestMergeOnBeforeRequestResponses3) {
1414 EventResponseDeltas deltas; 1432 EventResponseDeltas deltas;
1415 net::CapturingBoundNetLog capturing_net_log; 1433 net::CapturingBoundNetLog capturing_net_log;
1416 net::BoundNetLog net_log = capturing_net_log.bound(); 1434 net::BoundNetLog net_log = capturing_net_log.bound();
1417 std::set<std::string> conflicting_extensions; 1435 std::set<ExtensionWarning> warning_set;
1418 GURL effective_new_url; 1436 GURL effective_new_url;
1419 1437
1420 // Single redirect. 1438 // Single redirect.
1421 GURL new_url_0("http://foo.com"); 1439 GURL new_url_0("http://foo.com");
1422 linked_ptr<EventResponseDelta> d0( 1440 linked_ptr<EventResponseDelta> d0(
1423 new EventResponseDelta("extid0", base::Time::FromInternalValue(2000))); 1441 new EventResponseDelta("extid0", base::Time::FromInternalValue(2000)));
1424 d0->new_url = GURL(new_url_0); 1442 d0->new_url = GURL(new_url_0);
1425 deltas.push_back(d0); 1443 deltas.push_back(d0);
1426 MergeOnBeforeRequestResponses( 1444 MergeOnBeforeRequestResponses(
1427 deltas, &effective_new_url, &conflicting_extensions, &net_log); 1445 deltas, &effective_new_url, &warning_set, &net_log);
1428 EXPECT_EQ(new_url_0, effective_new_url); 1446 EXPECT_EQ(new_url_0, effective_new_url);
1429 1447
1430 // Cancel request by redirecting to about:blank. This shall override 1448 // Cancel request by redirecting to about:blank. This shall override
1431 // the other redirect but not cause any conflict warnings. 1449 // the other redirect but not cause any conflict warnings.
1432 GURL new_url_1("about:blank"); 1450 GURL new_url_1("about:blank");
1433 linked_ptr<EventResponseDelta> d1( 1451 linked_ptr<EventResponseDelta> d1(
1434 new EventResponseDelta("extid1", base::Time::FromInternalValue(1500))); 1452 new EventResponseDelta("extid1", base::Time::FromInternalValue(1500)));
1435 d1->new_url = GURL(new_url_1); 1453 d1->new_url = GURL(new_url_1);
1436 deltas.push_back(d1); 1454 deltas.push_back(d1);
1437 deltas.sort(&InDecreasingExtensionInstallationTimeOrder); 1455 deltas.sort(&InDecreasingExtensionInstallationTimeOrder);
1456 warning_set.clear();
1438 capturing_net_log.Clear(); 1457 capturing_net_log.Clear();
1439 MergeOnBeforeRequestResponses( 1458 MergeOnBeforeRequestResponses(
1440 deltas, &effective_new_url, &conflicting_extensions, &net_log); 1459 deltas, &effective_new_url, &warning_set, &net_log);
1441 EXPECT_EQ(new_url_1, effective_new_url); 1460 EXPECT_EQ(new_url_1, effective_new_url);
1442 EXPECT_TRUE(conflicting_extensions.empty()); 1461 EXPECT_TRUE(warning_set.empty());
1443 EXPECT_EQ(1u, capturing_net_log.GetSize()); 1462 EXPECT_EQ(1u, capturing_net_log.GetSize());
1444 } 1463 }
1445 1464
1446 TEST(ExtensionWebRequestHelpersTest, TestMergeOnBeforeSendHeadersResponses) { 1465 TEST(ExtensionWebRequestHelpersTest, TestMergeOnBeforeSendHeadersResponses) {
1447 net::HttpRequestHeaders base_headers; 1466 net::HttpRequestHeaders base_headers;
1448 base_headers.AddHeaderFromString("key1: value 1"); 1467 base_headers.AddHeaderFromString("key1: value 1");
1449 base_headers.AddHeaderFromString("key2: value 2"); 1468 base_headers.AddHeaderFromString("key2: value 2");
1450 net::CapturingBoundNetLog capturing_net_log; 1469 net::CapturingBoundNetLog capturing_net_log;
1451 net::BoundNetLog net_log = capturing_net_log.bound(); 1470 net::BoundNetLog net_log = capturing_net_log.bound();
1452 std::set<std::string> conflicting_extensions; 1471 std::set<ExtensionWarning> warning_set;
1453 std::string header_value; 1472 std::string header_value;
1454 EventResponseDeltas deltas; 1473 EventResponseDeltas deltas;
1455 1474
1456 // Check that we can handle not changing the headers. 1475 // Check that we can handle not changing the headers.
1457 linked_ptr<EventResponseDelta> d0( 1476 linked_ptr<EventResponseDelta> d0(
1458 new EventResponseDelta("extid0", base::Time::FromInternalValue(2500))); 1477 new EventResponseDelta("extid0", base::Time::FromInternalValue(2500)));
1459 deltas.push_back(d0); 1478 deltas.push_back(d0);
1460 net::HttpRequestHeaders headers0; 1479 net::HttpRequestHeaders headers0;
1461 headers0.MergeFrom(base_headers); 1480 headers0.MergeFrom(base_headers);
1462 MergeOnBeforeSendHeadersResponses( 1481 MergeOnBeforeSendHeadersResponses(deltas, &headers0, &warning_set, &net_log);
1463 deltas, &headers0, &conflicting_extensions, &net_log);
1464 ASSERT_TRUE(headers0.GetHeader("key1", &header_value)); 1482 ASSERT_TRUE(headers0.GetHeader("key1", &header_value));
1465 EXPECT_EQ("value 1", header_value); 1483 EXPECT_EQ("value 1", header_value);
1466 ASSERT_TRUE(headers0.GetHeader("key2", &header_value)); 1484 ASSERT_TRUE(headers0.GetHeader("key2", &header_value));
1467 EXPECT_EQ("value 2", header_value); 1485 EXPECT_EQ("value 2", header_value);
1468 EXPECT_EQ(0u, conflicting_extensions.size()); 1486 EXPECT_EQ(0u, warning_set.size());
1469 EXPECT_EQ(0u, capturing_net_log.GetSize()); 1487 EXPECT_EQ(0u, capturing_net_log.GetSize());
1470 1488
1471 // Delete, modify and add a header. 1489 // Delete, modify and add a header.
1472 linked_ptr<EventResponseDelta> d1( 1490 linked_ptr<EventResponseDelta> d1(
1473 new EventResponseDelta("extid1", base::Time::FromInternalValue(2000))); 1491 new EventResponseDelta("extid1", base::Time::FromInternalValue(2000)));
1474 d1->deleted_request_headers.push_back("key1"); 1492 d1->deleted_request_headers.push_back("key1");
1475 d1->modified_request_headers.AddHeaderFromString("key2: value 3"); 1493 d1->modified_request_headers.AddHeaderFromString("key2: value 3");
1476 d1->modified_request_headers.AddHeaderFromString("key3: value 3"); 1494 d1->modified_request_headers.AddHeaderFromString("key3: value 3");
1477 deltas.push_back(d1); 1495 deltas.push_back(d1);
1478 deltas.sort(&InDecreasingExtensionInstallationTimeOrder); 1496 deltas.sort(&InDecreasingExtensionInstallationTimeOrder);
1497 warning_set.clear();
1498 capturing_net_log.Clear();
1479 net::HttpRequestHeaders headers1; 1499 net::HttpRequestHeaders headers1;
1480 headers1.MergeFrom(base_headers); 1500 headers1.MergeFrom(base_headers);
1481 MergeOnBeforeSendHeadersResponses( 1501 MergeOnBeforeSendHeadersResponses(deltas, &headers1, &warning_set, &net_log);
1482 deltas, &headers1, &conflicting_extensions, &net_log);
1483 EXPECT_FALSE(headers1.HasHeader("key1")); 1502 EXPECT_FALSE(headers1.HasHeader("key1"));
1484 ASSERT_TRUE(headers1.GetHeader("key2", &header_value)); 1503 ASSERT_TRUE(headers1.GetHeader("key2", &header_value));
1485 EXPECT_EQ("value 3", header_value); 1504 EXPECT_EQ("value 3", header_value);
1486 ASSERT_TRUE(headers1.GetHeader("key3", &header_value)); 1505 ASSERT_TRUE(headers1.GetHeader("key3", &header_value));
1487 EXPECT_EQ("value 3", header_value); 1506 EXPECT_EQ("value 3", header_value);
1488 EXPECT_EQ(0u, conflicting_extensions.size()); 1507 EXPECT_EQ(0u, warning_set.size());
1489 EXPECT_EQ(1u, capturing_net_log.GetSize()); 1508 EXPECT_EQ(1u, capturing_net_log.GetSize());
1490 1509
1491 // Check that conflicts are atomic, i.e. if one header modification 1510 // Check that conflicts are atomic, i.e. if one header modification
1492 // collides all other conflicts of the same extension are declined as well. 1511 // collides all other conflicts of the same extension are declined as well.
1493 linked_ptr<EventResponseDelta> d2( 1512 linked_ptr<EventResponseDelta> d2(
1494 new EventResponseDelta("extid2", base::Time::FromInternalValue(1500))); 1513 new EventResponseDelta("extid2", base::Time::FromInternalValue(1500)));
1495 // This one conflicts: 1514 // This one conflicts:
1496 d2->modified_request_headers.AddHeaderFromString("key3: value 0"); 1515 d2->modified_request_headers.AddHeaderFromString("key3: value 0");
1497 d2->modified_request_headers.AddHeaderFromString("key4: value 4"); 1516 d2->modified_request_headers.AddHeaderFromString("key4: value 4");
1498 deltas.push_back(d2); 1517 deltas.push_back(d2);
1499 deltas.sort(&InDecreasingExtensionInstallationTimeOrder); 1518 deltas.sort(&InDecreasingExtensionInstallationTimeOrder);
1500 conflicting_extensions.clear(); 1519 warning_set.clear();
1501 capturing_net_log.Clear(); 1520 capturing_net_log.Clear();
1502 net::HttpRequestHeaders headers2; 1521 net::HttpRequestHeaders headers2;
1503 headers2.MergeFrom(base_headers); 1522 headers2.MergeFrom(base_headers);
1504 MergeOnBeforeSendHeadersResponses( 1523 MergeOnBeforeSendHeadersResponses(deltas, &headers2, &warning_set, &net_log);
1505 deltas, &headers2, &conflicting_extensions, &net_log);
1506 EXPECT_FALSE(headers2.HasHeader("key1")); 1524 EXPECT_FALSE(headers2.HasHeader("key1"));
1507 ASSERT_TRUE(headers2.GetHeader("key2", &header_value)); 1525 ASSERT_TRUE(headers2.GetHeader("key2", &header_value));
1508 EXPECT_EQ("value 3", header_value); 1526 EXPECT_EQ("value 3", header_value);
1509 ASSERT_TRUE(headers2.GetHeader("key3", &header_value)); 1527 ASSERT_TRUE(headers2.GetHeader("key3", &header_value));
1510 EXPECT_EQ("value 3", header_value); 1528 EXPECT_EQ("value 3", header_value);
1511 EXPECT_FALSE(headers2.HasHeader("key4")); 1529 EXPECT_FALSE(headers2.HasHeader("key4"));
1512 EXPECT_EQ(1u, conflicting_extensions.size()); 1530 EXPECT_EQ(1u, warning_set.size());
1513 EXPECT_TRUE(ContainsKey(conflicting_extensions, "extid2")); 1531 EXPECT_TRUE(HasWarning(warning_set, "extid2"));
1514 EXPECT_EQ(2u, capturing_net_log.GetSize()); 1532 EXPECT_EQ(2u, capturing_net_log.GetSize());
1515 1533
1516 // Check that identical modifications don't conflict and operations 1534 // Check that identical modifications don't conflict and operations
1517 // can be merged. 1535 // can be merged.
1518 linked_ptr<EventResponseDelta> d3( 1536 linked_ptr<EventResponseDelta> d3(
1519 new EventResponseDelta("extid3", base::Time::FromInternalValue(1000))); 1537 new EventResponseDelta("extid3", base::Time::FromInternalValue(1000)));
1520 d3->deleted_request_headers.push_back("key1"); 1538 d3->deleted_request_headers.push_back("key1");
1521 d3->modified_request_headers.AddHeaderFromString("key2: value 3"); 1539 d3->modified_request_headers.AddHeaderFromString("key2: value 3");
1522 d3->modified_request_headers.AddHeaderFromString("key5: value 5"); 1540 d3->modified_request_headers.AddHeaderFromString("key5: value 5");
1523 deltas.push_back(d3); 1541 deltas.push_back(d3);
1524 deltas.sort(&InDecreasingExtensionInstallationTimeOrder); 1542 deltas.sort(&InDecreasingExtensionInstallationTimeOrder);
1525 conflicting_extensions.clear(); 1543 warning_set.clear();
1526 capturing_net_log.Clear(); 1544 capturing_net_log.Clear();
1527 net::HttpRequestHeaders headers3; 1545 net::HttpRequestHeaders headers3;
1528 headers3.MergeFrom(base_headers); 1546 headers3.MergeFrom(base_headers);
1529 MergeOnBeforeSendHeadersResponses( 1547 MergeOnBeforeSendHeadersResponses(deltas, &headers3, &warning_set, &net_log);
1530 deltas, &headers3, &conflicting_extensions, &net_log);
1531 EXPECT_FALSE(headers3.HasHeader("key1")); 1548 EXPECT_FALSE(headers3.HasHeader("key1"));
1532 ASSERT_TRUE(headers3.GetHeader("key2", &header_value)); 1549 ASSERT_TRUE(headers3.GetHeader("key2", &header_value));
1533 EXPECT_EQ("value 3", header_value); 1550 EXPECT_EQ("value 3", header_value);
1534 ASSERT_TRUE(headers3.GetHeader("key3", &header_value)); 1551 ASSERT_TRUE(headers3.GetHeader("key3", &header_value));
1535 EXPECT_EQ("value 3", header_value); 1552 EXPECT_EQ("value 3", header_value);
1536 ASSERT_TRUE(headers3.GetHeader("key5", &header_value)); 1553 ASSERT_TRUE(headers3.GetHeader("key5", &header_value));
1537 EXPECT_EQ("value 5", header_value); 1554 EXPECT_EQ("value 5", header_value);
1538 EXPECT_EQ(1u, conflicting_extensions.size()); 1555 EXPECT_EQ(1u, warning_set.size());
1539 EXPECT_TRUE(ContainsKey(conflicting_extensions, "extid2")); 1556 EXPECT_TRUE(HasWarning(warning_set, "extid2"));
1540 EXPECT_EQ(3u, capturing_net_log.GetSize()); 1557 EXPECT_EQ(3u, capturing_net_log.GetSize());
1541 } 1558 }
1542 1559
1543 TEST(ExtensionWebRequestHelpersTest, 1560 TEST(ExtensionWebRequestHelpersTest,
1544 TestMergeOnBeforeSendHeadersResponses_Cookies) { 1561 TestMergeOnBeforeSendHeadersResponses_Cookies) {
1545 net::HttpRequestHeaders base_headers; 1562 net::HttpRequestHeaders base_headers;
1546 base_headers.AddHeaderFromString( 1563 base_headers.AddHeaderFromString(
1547 "Cookie: name=value; name2=value2; name3=value3"); 1564 "Cookie: name=value; name2=value2; name3=value3");
1548 net::CapturingBoundNetLog capturing_net_log; 1565 net::CapturingBoundNetLog capturing_net_log;
1549 net::BoundNetLog net_log = capturing_net_log.bound(); 1566 net::BoundNetLog net_log = capturing_net_log.bound();
1550 std::set<std::string> conflicting_extensions; 1567 std::set<ExtensionWarning> warning_set;
1551 std::string header_value; 1568 std::string header_value;
1552 EventResponseDeltas deltas; 1569 EventResponseDeltas deltas;
1553 1570
1554 linked_ptr<RequestCookieModification> add_cookie = 1571 linked_ptr<RequestCookieModification> add_cookie =
1555 make_linked_ptr(new RequestCookieModification); 1572 make_linked_ptr(new RequestCookieModification);
1556 add_cookie->type = helpers::ADD; 1573 add_cookie->type = helpers::ADD;
1557 add_cookie->modification.reset(new helpers::RequestCookie); 1574 add_cookie->modification.reset(new helpers::RequestCookie);
1558 add_cookie->modification->name.reset(new std::string("name4")); 1575 add_cookie->modification->name.reset(new std::string("name4"));
1559 add_cookie->modification->value.reset(new std::string("\"value 4\"")); 1576 add_cookie->modification->value.reset(new std::string("\"value 4\""));
1560 1577
(...skipping 24 matching lines...) Expand all
1585 1602
1586 for (size_t i = 0; i < arraysize(operations); ++i) { 1603 for (size_t i = 0; i < arraysize(operations); ++i) {
1587 linked_ptr<EventResponseDelta> delta( 1604 linked_ptr<EventResponseDelta> delta(
1588 new EventResponseDelta("extid0", base::Time::FromInternalValue(i * 5))); 1605 new EventResponseDelta("extid0", base::Time::FromInternalValue(i * 5)));
1589 delta->request_cookie_modifications.push_back(operations[i]); 1606 delta->request_cookie_modifications.push_back(operations[i]);
1590 deltas.push_back(delta); 1607 deltas.push_back(delta);
1591 } 1608 }
1592 deltas.sort(&InDecreasingExtensionInstallationTimeOrder); 1609 deltas.sort(&InDecreasingExtensionInstallationTimeOrder);
1593 net::HttpRequestHeaders headers1; 1610 net::HttpRequestHeaders headers1;
1594 headers1.MergeFrom(base_headers); 1611 headers1.MergeFrom(base_headers);
1595 MergeOnBeforeSendHeadersResponses( 1612 warning_set.clear();
1596 deltas, &headers1, &conflicting_extensions, &net_log); 1613 MergeOnBeforeSendHeadersResponses(deltas, &headers1, &warning_set, &net_log);
1597 EXPECT_TRUE(headers1.HasHeader("Cookie")); 1614 EXPECT_TRUE(headers1.HasHeader("Cookie"));
1598 ASSERT_TRUE(headers1.GetHeader("Cookie", &header_value)); 1615 ASSERT_TRUE(headers1.GetHeader("Cookie", &header_value));
1599 EXPECT_EQ("name=new value; name2=new value; name4=\"value 4\"", header_value); 1616 EXPECT_EQ("name=new value; name2=new value; name4=\"value 4\"", header_value);
1600 EXPECT_EQ(0u, conflicting_extensions.size()); 1617 EXPECT_EQ(0u, warning_set.size());
1601 EXPECT_EQ(0u, capturing_net_log.GetSize()); 1618 EXPECT_EQ(0u, capturing_net_log.GetSize());
1602 } 1619 }
1603 1620
1604 TEST(ExtensionWebRequestHelpersTest, 1621 TEST(ExtensionWebRequestHelpersTest,
1605 TestMergeCookiesInOnHeadersReceivedResponses) { 1622 TestMergeCookiesInOnHeadersReceivedResponses) {
1606 net::CapturingBoundNetLog capturing_net_log; 1623 net::CapturingBoundNetLog capturing_net_log;
1607 net::BoundNetLog net_log = capturing_net_log.bound(); 1624 net::BoundNetLog net_log = capturing_net_log.bound();
1608 std::set<std::string> conflicting_extensions; 1625 std::set<ExtensionWarning> warning_set;
1609 std::string header_value; 1626 std::string header_value;
1610 EventResponseDeltas deltas; 1627 EventResponseDeltas deltas;
1611 1628
1612 char base_headers_string[] = 1629 char base_headers_string[] =
1613 "HTTP/1.0 200 OK\r\n" 1630 "HTTP/1.0 200 OK\r\n"
1614 "Foo: Bar\r\n" 1631 "Foo: Bar\r\n"
1615 "Set-Cookie: name=value; DOMAIN=google.com; Secure\r\n" 1632 "Set-Cookie: name=value; DOMAIN=google.com; Secure\r\n"
1616 "Set-Cookie: name2=value2\r\n" 1633 "Set-Cookie: name2=value2\r\n"
1617 "Set-Cookie: name3=value3\r\n" 1634 "Set-Cookie: name3=value3\r\n"
1618 "\r\n"; 1635 "\r\n";
1619 scoped_refptr<net::HttpResponseHeaders> base_headers( 1636 scoped_refptr<net::HttpResponseHeaders> base_headers(
1620 new net::HttpResponseHeaders( 1637 new net::HttpResponseHeaders(
1621 net::HttpUtil::AssembleRawHeaders( 1638 net::HttpUtil::AssembleRawHeaders(
1622 base_headers_string, sizeof(base_headers_string)))); 1639 base_headers_string, sizeof(base_headers_string))));
1623 1640
1624 // Check that we can handle if not touching the response headers. 1641 // Check that we can handle if not touching the response headers.
1625 linked_ptr<EventResponseDelta> d0( 1642 linked_ptr<EventResponseDelta> d0(
1626 new EventResponseDelta("extid0", base::Time::FromInternalValue(3000))); 1643 new EventResponseDelta("extid0", base::Time::FromInternalValue(3000)));
1627 deltas.push_back(d0); 1644 deltas.push_back(d0);
1628 scoped_refptr<net::HttpResponseHeaders> new_headers0; 1645 scoped_refptr<net::HttpResponseHeaders> new_headers0;
1629 MergeCookiesInOnHeadersReceivedResponses( 1646 MergeCookiesInOnHeadersReceivedResponses(
1630 deltas, base_headers.get(), &new_headers0, &conflicting_extensions, 1647 deltas, base_headers.get(), &new_headers0, &warning_set, &net_log);
1631 &net_log);
1632 EXPECT_FALSE(new_headers0.get()); 1648 EXPECT_FALSE(new_headers0.get());
1633 EXPECT_EQ(0u, conflicting_extensions.size()); 1649 EXPECT_EQ(0u, warning_set.size());
1634 EXPECT_EQ(0u, capturing_net_log.GetSize()); 1650 EXPECT_EQ(0u, capturing_net_log.GetSize());
1635 1651
1636 linked_ptr<ResponseCookieModification> add_cookie = 1652 linked_ptr<ResponseCookieModification> add_cookie =
1637 make_linked_ptr(new ResponseCookieModification); 1653 make_linked_ptr(new ResponseCookieModification);
1638 add_cookie->type = helpers::ADD; 1654 add_cookie->type = helpers::ADD;
1639 add_cookie->modification.reset(new helpers::ResponseCookie); 1655 add_cookie->modification.reset(new helpers::ResponseCookie);
1640 add_cookie->modification->name.reset(new std::string("name4")); 1656 add_cookie->modification->name.reset(new std::string("name4"));
1641 add_cookie->modification->value.reset(new std::string("\"value4\"")); 1657 add_cookie->modification->value.reset(new std::string("\"value4\""));
1642 1658
1643 linked_ptr<ResponseCookieModification> edit_cookie = 1659 linked_ptr<ResponseCookieModification> edit_cookie =
(...skipping 27 matching lines...) Expand all
1671 new EventResponseDelta("extid0", base::Time::FromInternalValue(i * 5))); 1687 new EventResponseDelta("extid0", base::Time::FromInternalValue(i * 5)));
1672 delta->response_cookie_modifications.push_back(operations[i]); 1688 delta->response_cookie_modifications.push_back(operations[i]);
1673 deltas.push_back(delta); 1689 deltas.push_back(delta);
1674 } 1690 }
1675 deltas.sort(&InDecreasingExtensionInstallationTimeOrder); 1691 deltas.sort(&InDecreasingExtensionInstallationTimeOrder);
1676 scoped_refptr<net::HttpResponseHeaders> headers1( 1692 scoped_refptr<net::HttpResponseHeaders> headers1(
1677 new net::HttpResponseHeaders( 1693 new net::HttpResponseHeaders(
1678 net::HttpUtil::AssembleRawHeaders( 1694 net::HttpUtil::AssembleRawHeaders(
1679 base_headers_string, sizeof(base_headers_string)))); 1695 base_headers_string, sizeof(base_headers_string))));
1680 scoped_refptr<net::HttpResponseHeaders> new_headers1; 1696 scoped_refptr<net::HttpResponseHeaders> new_headers1;
1697 warning_set.clear();
1681 MergeCookiesInOnHeadersReceivedResponses( 1698 MergeCookiesInOnHeadersReceivedResponses(
1682 deltas, headers1.get(), &new_headers1, &conflicting_extensions, &net_log); 1699 deltas, headers1.get(), &new_headers1, &warning_set, &net_log);
1683 1700
1684 EXPECT_TRUE(new_headers1->HasHeader("Foo")); 1701 EXPECT_TRUE(new_headers1->HasHeader("Foo"));
1685 void* iter = NULL; 1702 void* iter = NULL;
1686 std::string cookie_string; 1703 std::string cookie_string;
1687 std::set<std::string> expected_cookies; 1704 std::set<std::string> expected_cookies;
1688 expected_cookies.insert("name=value; domain=google.com; secure"); 1705 expected_cookies.insert("name=value; domain=google.com; secure");
1689 expected_cookies.insert("name2=value2; secure"); 1706 expected_cookies.insert("name2=value2; secure");
1690 expected_cookies.insert("name4=\"value4\"; secure"); 1707 expected_cookies.insert("name4=\"value4\"; secure");
1691 std::set<std::string> actual_cookies; 1708 std::set<std::string> actual_cookies;
1692 while (new_headers1->EnumerateHeader(&iter, "Set-Cookie", &cookie_string)) 1709 while (new_headers1->EnumerateHeader(&iter, "Set-Cookie", &cookie_string))
1693 actual_cookies.insert(cookie_string); 1710 actual_cookies.insert(cookie_string);
1694 EXPECT_EQ(expected_cookies, actual_cookies); 1711 EXPECT_EQ(expected_cookies, actual_cookies);
1695 EXPECT_EQ(0u, conflicting_extensions.size()); 1712 EXPECT_EQ(0u, warning_set.size());
1696 EXPECT_EQ(0u, capturing_net_log.GetSize()); 1713 EXPECT_EQ(0u, capturing_net_log.GetSize());
1697 } 1714 }
1698 1715
1699 TEST(ExtensionWebRequestHelpersTest, TestMergeOnHeadersReceivedResponses) { 1716 TEST(ExtensionWebRequestHelpersTest, TestMergeOnHeadersReceivedResponses) {
1700 net::CapturingBoundNetLog capturing_net_log; 1717 net::CapturingBoundNetLog capturing_net_log;
1701 net::BoundNetLog net_log = capturing_net_log.bound(); 1718 net::BoundNetLog net_log = capturing_net_log.bound();
1702 std::set<std::string> conflicting_extensions; 1719 std::set<ExtensionWarning> warning_set;
1703 std::string header_value; 1720 std::string header_value;
1704 EventResponseDeltas deltas; 1721 EventResponseDeltas deltas;
1705 1722
1706 char base_headers_string[] = 1723 char base_headers_string[] =
1707 "HTTP/1.0 200 OK\r\n" 1724 "HTTP/1.0 200 OK\r\n"
1708 "Key1: Value1\r\n" 1725 "Key1: Value1\r\n"
1709 "Key2: Value2, Foo\r\n" 1726 "Key2: Value2, Foo\r\n"
1710 "\r\n"; 1727 "\r\n";
1711 scoped_refptr<net::HttpResponseHeaders> base_headers( 1728 scoped_refptr<net::HttpResponseHeaders> base_headers(
1712 new net::HttpResponseHeaders( 1729 new net::HttpResponseHeaders(
1713 net::HttpUtil::AssembleRawHeaders( 1730 net::HttpUtil::AssembleRawHeaders(
1714 base_headers_string, sizeof(base_headers_string)))); 1731 base_headers_string, sizeof(base_headers_string))));
1715 1732
1716 // Check that we can handle if not touching the response headers. 1733 // Check that we can handle if not touching the response headers.
1717 linked_ptr<EventResponseDelta> d0( 1734 linked_ptr<EventResponseDelta> d0(
1718 new EventResponseDelta("extid0", base::Time::FromInternalValue(3000))); 1735 new EventResponseDelta("extid0", base::Time::FromInternalValue(3000)));
1719 deltas.push_back(d0); 1736 deltas.push_back(d0);
1720 scoped_refptr<net::HttpResponseHeaders> new_headers0; 1737 scoped_refptr<net::HttpResponseHeaders> new_headers0;
1721 MergeOnHeadersReceivedResponses( 1738 MergeOnHeadersReceivedResponses(deltas, base_headers.get(), &new_headers0,
1722 deltas, base_headers.get(), &new_headers0, &conflicting_extensions, 1739 &warning_set, &net_log);
1723 &net_log);
1724 EXPECT_FALSE(new_headers0.get()); 1740 EXPECT_FALSE(new_headers0.get());
1725 EXPECT_EQ(0u, conflicting_extensions.size()); 1741 EXPECT_EQ(0u, warning_set.size());
1726 EXPECT_EQ(0u, capturing_net_log.GetSize()); 1742 EXPECT_EQ(0u, capturing_net_log.GetSize());
1727 1743
1728 linked_ptr<EventResponseDelta> d1( 1744 linked_ptr<EventResponseDelta> d1(
1729 new EventResponseDelta("extid1", base::Time::FromInternalValue(2000))); 1745 new EventResponseDelta("extid1", base::Time::FromInternalValue(2000)));
1730 d1->deleted_response_headers.push_back(ResponseHeader("KEY1", "Value1")); 1746 d1->deleted_response_headers.push_back(ResponseHeader("KEY1", "Value1"));
1731 d1->deleted_response_headers.push_back(ResponseHeader("KEY2", "Value2, Foo")); 1747 d1->deleted_response_headers.push_back(ResponseHeader("KEY2", "Value2, Foo"));
1732 d1->added_response_headers.push_back(ResponseHeader("Key2", "Value3")); 1748 d1->added_response_headers.push_back(ResponseHeader("Key2", "Value3"));
1733 deltas.push_back(d1); 1749 deltas.push_back(d1);
1734 deltas.sort(&InDecreasingExtensionInstallationTimeOrder); 1750 deltas.sort(&InDecreasingExtensionInstallationTimeOrder);
1735 conflicting_extensions.clear(); 1751 warning_set.clear();
1736 capturing_net_log.Clear(); 1752 capturing_net_log.Clear();
1737 scoped_refptr<net::HttpResponseHeaders> new_headers1; 1753 scoped_refptr<net::HttpResponseHeaders> new_headers1;
1738 MergeOnHeadersReceivedResponses( 1754 MergeOnHeadersReceivedResponses(
1739 deltas, base_headers.get(), &new_headers1, &conflicting_extensions, 1755 deltas, base_headers.get(), &new_headers1, &warning_set, &net_log);
1740 &net_log);
1741 ASSERT_TRUE(new_headers1.get()); 1756 ASSERT_TRUE(new_headers1.get());
1742 std::multimap<std::string, std::string> expected1; 1757 std::multimap<std::string, std::string> expected1;
1743 expected1.insert(std::pair<std::string, std::string>("Key2", "Value3")); 1758 expected1.insert(std::pair<std::string, std::string>("Key2", "Value3"));
1744 void* iter = NULL; 1759 void* iter = NULL;
1745 std::string name; 1760 std::string name;
1746 std::string value; 1761 std::string value;
1747 std::multimap<std::string, std::string> actual1; 1762 std::multimap<std::string, std::string> actual1;
1748 while (new_headers1->EnumerateHeaderLines(&iter, &name, &value)) { 1763 while (new_headers1->EnumerateHeaderLines(&iter, &name, &value)) {
1749 actual1.insert(std::pair<std::string, std::string>(name, value)); 1764 actual1.insert(std::pair<std::string, std::string>(name, value));
1750 } 1765 }
1751 EXPECT_EQ(expected1, actual1); 1766 EXPECT_EQ(expected1, actual1);
1752 EXPECT_EQ(0u, conflicting_extensions.size()); 1767 EXPECT_EQ(0u, warning_set.size());
1753 EXPECT_EQ(1u, capturing_net_log.GetSize()); 1768 EXPECT_EQ(1u, capturing_net_log.GetSize());
1754 1769
1755 // Check that we replace response headers only once. 1770 // Check that we replace response headers only once.
1756 linked_ptr<EventResponseDelta> d2( 1771 linked_ptr<EventResponseDelta> d2(
1757 new EventResponseDelta("extid2", base::Time::FromInternalValue(1500))); 1772 new EventResponseDelta("extid2", base::Time::FromInternalValue(1500)));
1758 // Note that we use a different capitalization of KeY2. This should not 1773 // Note that we use a different capitalization of KeY2. This should not
1759 // matter. 1774 // matter.
1760 d2->deleted_response_headers.push_back(ResponseHeader("KeY2", "Value2, Foo")); 1775 d2->deleted_response_headers.push_back(ResponseHeader("KeY2", "Value2, Foo"));
1761 d2->added_response_headers.push_back(ResponseHeader("Key2", "Value4")); 1776 d2->added_response_headers.push_back(ResponseHeader("Key2", "Value4"));
1762 deltas.push_back(d2); 1777 deltas.push_back(d2);
1763 deltas.sort(&InDecreasingExtensionInstallationTimeOrder); 1778 deltas.sort(&InDecreasingExtensionInstallationTimeOrder);
1764 conflicting_extensions.clear(); 1779 warning_set.clear();
1765 capturing_net_log.Clear(); 1780 capturing_net_log.Clear();
1766 scoped_refptr<net::HttpResponseHeaders> new_headers2; 1781 scoped_refptr<net::HttpResponseHeaders> new_headers2;
1767 MergeOnHeadersReceivedResponses( 1782 MergeOnHeadersReceivedResponses(
1768 deltas, base_headers.get(), &new_headers2, &conflicting_extensions, 1783 deltas, base_headers.get(), &new_headers2, &warning_set, &net_log);
1769 &net_log);
1770 ASSERT_TRUE(new_headers2.get()); 1784 ASSERT_TRUE(new_headers2.get());
1771 iter = NULL; 1785 iter = NULL;
1772 std::multimap<std::string, std::string> actual2; 1786 std::multimap<std::string, std::string> actual2;
1773 while (new_headers2->EnumerateHeaderLines(&iter, &name, &value)) { 1787 while (new_headers2->EnumerateHeaderLines(&iter, &name, &value)) {
1774 actual2.insert(std::pair<std::string, std::string>(name, value)); 1788 actual2.insert(std::pair<std::string, std::string>(name, value));
1775 } 1789 }
1776 EXPECT_EQ(expected1, actual2); 1790 EXPECT_EQ(expected1, actual2);
1777 EXPECT_EQ(1u, conflicting_extensions.size()); 1791 EXPECT_EQ(1u, warning_set.size());
1778 EXPECT_TRUE(ContainsKey(conflicting_extensions, "extid2")); 1792 EXPECT_TRUE(HasWarning(warning_set, "extid2"));
1779 EXPECT_EQ(2u, capturing_net_log.GetSize()); 1793 EXPECT_EQ(2u, capturing_net_log.GetSize());
1780 } 1794 }
1781 1795
1782 // Check that we do not delete too much 1796 // Check that we do not delete too much
1783 TEST(ExtensionWebRequestHelpersTest, 1797 TEST(ExtensionWebRequestHelpersTest,
1784 TestMergeOnHeadersReceivedResponsesDeletion) { 1798 TestMergeOnHeadersReceivedResponsesDeletion) {
1785 net::CapturingBoundNetLog capturing_net_log; 1799 net::CapturingBoundNetLog capturing_net_log;
1786 net::BoundNetLog net_log = capturing_net_log.bound(); 1800 net::BoundNetLog net_log = capturing_net_log.bound();
1787 std::set<std::string> conflicting_extensions; 1801 std::set<ExtensionWarning> warning_set;
1788 std::string header_value; 1802 std::string header_value;
1789 EventResponseDeltas deltas; 1803 EventResponseDeltas deltas;
1790 1804
1791 char base_headers_string[] = 1805 char base_headers_string[] =
1792 "HTTP/1.0 200 OK\r\n" 1806 "HTTP/1.0 200 OK\r\n"
1793 "Key1: Value1\r\n" 1807 "Key1: Value1\r\n"
1794 "Key1: Value2\r\n" 1808 "Key1: Value2\r\n"
1795 "Key1: Value3\r\n" 1809 "Key1: Value3\r\n"
1796 "Key2: Value4\r\n" 1810 "Key2: Value4\r\n"
1797 "\r\n"; 1811 "\r\n";
1798 scoped_refptr<net::HttpResponseHeaders> base_headers( 1812 scoped_refptr<net::HttpResponseHeaders> base_headers(
1799 new net::HttpResponseHeaders( 1813 new net::HttpResponseHeaders(
1800 net::HttpUtil::AssembleRawHeaders( 1814 net::HttpUtil::AssembleRawHeaders(
1801 base_headers_string, sizeof(base_headers_string)))); 1815 base_headers_string, sizeof(base_headers_string))));
1802 1816
1803 linked_ptr<EventResponseDelta> d1( 1817 linked_ptr<EventResponseDelta> d1(
1804 new EventResponseDelta("extid1", base::Time::FromInternalValue(2000))); 1818 new EventResponseDelta("extid1", base::Time::FromInternalValue(2000)));
1805 d1->deleted_response_headers.push_back(ResponseHeader("KEY1", "Value2")); 1819 d1->deleted_response_headers.push_back(ResponseHeader("KEY1", "Value2"));
1806 deltas.push_back(d1); 1820 deltas.push_back(d1);
1807 scoped_refptr<net::HttpResponseHeaders> new_headers1; 1821 scoped_refptr<net::HttpResponseHeaders> new_headers1;
1808 MergeOnHeadersReceivedResponses( 1822 MergeOnHeadersReceivedResponses(
1809 deltas, base_headers.get(), &new_headers1, &conflicting_extensions, 1823 deltas, base_headers.get(), &new_headers1, &warning_set, &net_log);
1810 &net_log);
1811 ASSERT_TRUE(new_headers1.get()); 1824 ASSERT_TRUE(new_headers1.get());
1812 std::multimap<std::string, std::string> expected1; 1825 std::multimap<std::string, std::string> expected1;
1813 expected1.insert(std::pair<std::string, std::string>("Key1", "Value1")); 1826 expected1.insert(std::pair<std::string, std::string>("Key1", "Value1"));
1814 expected1.insert(std::pair<std::string, std::string>("Key1", "Value3")); 1827 expected1.insert(std::pair<std::string, std::string>("Key1", "Value3"));
1815 expected1.insert(std::pair<std::string, std::string>("Key2", "Value4")); 1828 expected1.insert(std::pair<std::string, std::string>("Key2", "Value4"));
1816 void* iter = NULL; 1829 void* iter = NULL;
1817 std::string name; 1830 std::string name;
1818 std::string value; 1831 std::string value;
1819 std::multimap<std::string, std::string> actual1; 1832 std::multimap<std::string, std::string> actual1;
1820 while (new_headers1->EnumerateHeaderLines(&iter, &name, &value)) { 1833 while (new_headers1->EnumerateHeaderLines(&iter, &name, &value)) {
1821 actual1.insert(std::pair<std::string, std::string>(name, value)); 1834 actual1.insert(std::pair<std::string, std::string>(name, value));
1822 } 1835 }
1823 EXPECT_EQ(expected1, actual1); 1836 EXPECT_EQ(expected1, actual1);
1824 EXPECT_EQ(0u, conflicting_extensions.size()); 1837 EXPECT_EQ(0u, warning_set.size());
1825 EXPECT_EQ(1u, capturing_net_log.GetSize()); 1838 EXPECT_EQ(1u, capturing_net_log.GetSize());
1826 } 1839 }
1827 1840
1828 TEST(ExtensionWebRequestHelpersTest, TestMergeOnAuthRequiredResponses) { 1841 TEST(ExtensionWebRequestHelpersTest, TestMergeOnAuthRequiredResponses) {
1829 net::CapturingBoundNetLog capturing_net_log; 1842 net::CapturingBoundNetLog capturing_net_log;
1830 net::BoundNetLog net_log = capturing_net_log.bound(); 1843 net::BoundNetLog net_log = capturing_net_log.bound();
1831 std::set<std::string> conflicting_extensions; 1844 std::set<ExtensionWarning> warning_set;
1832 EventResponseDeltas deltas; 1845 EventResponseDeltas deltas;
1833 string16 username = ASCIIToUTF16("foo"); 1846 string16 username = ASCIIToUTF16("foo");
1834 string16 password = ASCIIToUTF16("bar"); 1847 string16 password = ASCIIToUTF16("bar");
1835 string16 password2 = ASCIIToUTF16("baz"); 1848 string16 password2 = ASCIIToUTF16("baz");
1836 1849
1837 // Check that we can handle if not returning credentials. 1850 // Check that we can handle if not returning credentials.
1838 linked_ptr<EventResponseDelta> d0( 1851 linked_ptr<EventResponseDelta> d0(
1839 new EventResponseDelta("extid0", base::Time::FromInternalValue(3000))); 1852 new EventResponseDelta("extid0", base::Time::FromInternalValue(3000)));
1840 deltas.push_back(d0); 1853 deltas.push_back(d0);
1841 net::AuthCredentials auth0; 1854 net::AuthCredentials auth0;
1842 bool credentials_set = MergeOnAuthRequiredResponses( 1855 bool credentials_set = MergeOnAuthRequiredResponses(
1843 deltas, &auth0, &conflicting_extensions, &net_log); 1856 deltas, &auth0, &warning_set, &net_log);
1844 EXPECT_FALSE(credentials_set); 1857 EXPECT_FALSE(credentials_set);
1845 EXPECT_TRUE(auth0.Empty()); 1858 EXPECT_TRUE(auth0.Empty());
1846 EXPECT_EQ(0u, conflicting_extensions.size()); 1859 EXPECT_EQ(0u, warning_set.size());
1847 EXPECT_EQ(0u, capturing_net_log.GetSize()); 1860 EXPECT_EQ(0u, capturing_net_log.GetSize());
1848 1861
1849 // Check that we can set AuthCredentials. 1862 // Check that we can set AuthCredentials.
1850 linked_ptr<EventResponseDelta> d1( 1863 linked_ptr<EventResponseDelta> d1(
1851 new EventResponseDelta("extid1", base::Time::FromInternalValue(2000))); 1864 new EventResponseDelta("extid1", base::Time::FromInternalValue(2000)));
1852 d1->auth_credentials.reset(new net::AuthCredentials(username, password)); 1865 d1->auth_credentials.reset(new net::AuthCredentials(username, password));
1853 deltas.push_back(d1); 1866 deltas.push_back(d1);
1854 deltas.sort(&InDecreasingExtensionInstallationTimeOrder); 1867 deltas.sort(&InDecreasingExtensionInstallationTimeOrder);
1855 conflicting_extensions.clear(); 1868 warning_set.clear();
1856 capturing_net_log.Clear(); 1869 capturing_net_log.Clear();
1857 net::AuthCredentials auth1; 1870 net::AuthCredentials auth1;
1858 credentials_set = MergeOnAuthRequiredResponses( 1871 credentials_set = MergeOnAuthRequiredResponses(
1859 deltas, &auth1, &conflicting_extensions, &net_log); 1872 deltas, &auth1, &warning_set, &net_log);
1860 EXPECT_TRUE(credentials_set); 1873 EXPECT_TRUE(credentials_set);
1861 EXPECT_FALSE(auth1.Empty()); 1874 EXPECT_FALSE(auth1.Empty());
1862 EXPECT_EQ(username, auth1.username()); 1875 EXPECT_EQ(username, auth1.username());
1863 EXPECT_EQ(password, auth1.password()); 1876 EXPECT_EQ(password, auth1.password());
1864 EXPECT_EQ(0u, conflicting_extensions.size()); 1877 EXPECT_EQ(0u, warning_set.size());
1865 EXPECT_EQ(1u, capturing_net_log.GetSize()); 1878 EXPECT_EQ(1u, capturing_net_log.GetSize());
1866 1879
1867 // Check that we set AuthCredentials only once. 1880 // Check that we set AuthCredentials only once.
1868 linked_ptr<EventResponseDelta> d2( 1881 linked_ptr<EventResponseDelta> d2(
1869 new EventResponseDelta("extid2", base::Time::FromInternalValue(1500))); 1882 new EventResponseDelta("extid2", base::Time::FromInternalValue(1500)));
1870 d2->auth_credentials.reset(new net::AuthCredentials(username, password2)); 1883 d2->auth_credentials.reset(new net::AuthCredentials(username, password2));
1871 deltas.push_back(d2); 1884 deltas.push_back(d2);
1872 deltas.sort(&InDecreasingExtensionInstallationTimeOrder); 1885 deltas.sort(&InDecreasingExtensionInstallationTimeOrder);
1873 conflicting_extensions.clear(); 1886 warning_set.clear();
1874 capturing_net_log.Clear(); 1887 capturing_net_log.Clear();
1875 net::AuthCredentials auth2; 1888 net::AuthCredentials auth2;
1876 credentials_set = MergeOnAuthRequiredResponses( 1889 credentials_set = MergeOnAuthRequiredResponses(
1877 deltas, &auth2, &conflicting_extensions, &net_log); 1890 deltas, &auth2, &warning_set, &net_log);
1878 EXPECT_TRUE(credentials_set); 1891 EXPECT_TRUE(credentials_set);
1879 EXPECT_FALSE(auth2.Empty()); 1892 EXPECT_FALSE(auth2.Empty());
1880 EXPECT_EQ(username, auth1.username()); 1893 EXPECT_EQ(username, auth1.username());
1881 EXPECT_EQ(password, auth1.password()); 1894 EXPECT_EQ(password, auth1.password());
1882 EXPECT_EQ(1u, conflicting_extensions.size()); 1895 EXPECT_EQ(1u, warning_set.size());
1883 EXPECT_TRUE(ContainsKey(conflicting_extensions, "extid2")); 1896 EXPECT_TRUE(HasWarning(warning_set, "extid2"));
1884 EXPECT_EQ(2u, capturing_net_log.GetSize()); 1897 EXPECT_EQ(2u, capturing_net_log.GetSize());
1885 1898
1886 // Check that we can set identical AuthCredentials twice without causing 1899 // Check that we can set identical AuthCredentials twice without causing
1887 // a conflict. 1900 // a conflict.
1888 linked_ptr<EventResponseDelta> d3( 1901 linked_ptr<EventResponseDelta> d3(
1889 new EventResponseDelta("extid3", base::Time::FromInternalValue(1000))); 1902 new EventResponseDelta("extid3", base::Time::FromInternalValue(1000)));
1890 d3->auth_credentials.reset(new net::AuthCredentials(username, password)); 1903 d3->auth_credentials.reset(new net::AuthCredentials(username, password));
1891 deltas.push_back(d3); 1904 deltas.push_back(d3);
1892 deltas.sort(&InDecreasingExtensionInstallationTimeOrder); 1905 deltas.sort(&InDecreasingExtensionInstallationTimeOrder);
1893 conflicting_extensions.clear(); 1906 warning_set.clear();
1894 capturing_net_log.Clear(); 1907 capturing_net_log.Clear();
1895 net::AuthCredentials auth3; 1908 net::AuthCredentials auth3;
1896 credentials_set = MergeOnAuthRequiredResponses( 1909 credentials_set = MergeOnAuthRequiredResponses(
1897 deltas, &auth3, &conflicting_extensions, &net_log); 1910 deltas, &auth3, &warning_set, &net_log);
1898 EXPECT_TRUE(credentials_set); 1911 EXPECT_TRUE(credentials_set);
1899 EXPECT_FALSE(auth3.Empty()); 1912 EXPECT_FALSE(auth3.Empty());
1900 EXPECT_EQ(username, auth1.username()); 1913 EXPECT_EQ(username, auth1.username());
1901 EXPECT_EQ(password, auth1.password()); 1914 EXPECT_EQ(password, auth1.password());
1902 EXPECT_EQ(1u, conflicting_extensions.size()); 1915 EXPECT_EQ(1u, warning_set.size());
1903 EXPECT_TRUE(ContainsKey(conflicting_extensions, "extid2")); 1916 EXPECT_TRUE(HasWarning(warning_set, "extid2"));
1904 EXPECT_EQ(3u, capturing_net_log.GetSize()); 1917 EXPECT_EQ(3u, capturing_net_log.GetSize());
1905 } 1918 }
1919
1920 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698