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

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: Store ExtensionWarnings as values in set rather than pointers Created 8 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <map> 5 #include <map>
6 #include <queue> 6 #include <queue>
7 7
8 #include "base/bind.h" 8 #include "base/bind.h"
9 #include "base/callback.h" 9 #include "base/callback.h"
10 #include "base/file_util.h" 10 #include "base/file_util.h"
11 #include "base/json/json_string_value_serializer.h" 11 #include "base/json/json_string_value_serializer.h"
12 #include "base/memory/weak_ptr.h" 12 #include "base/memory/weak_ptr.h"
13 #include "base/message_loop.h" 13 #include "base/message_loop.h"
14 #include "base/path_service.h" 14 #include "base/path_service.h"
15 #include "base/stl_util.h" 15 #include "base/stl_util.h"
16 #include "base/utf_string_conversions.h" 16 #include "base/utf_string_conversions.h"
17 #include "chrome/browser/api/prefs/pref_member.h" 17 #include "chrome/browser/api/prefs/pref_member.h"
18 #include "chrome/browser/content_settings/cookie_settings.h" 18 #include "chrome/browser/content_settings/cookie_settings.h"
19 #include "chrome/browser/extensions/api/web_request/web_request_api.h" 19 #include "chrome/browser/extensions/api/web_request/web_request_api.h"
20 #include "chrome/browser/extensions/api/web_request/web_request_api_constants.h" 20 #include "chrome/browser/extensions/api/web_request/web_request_api_constants.h"
21 #include "chrome/browser/extensions/api/web_request/web_request_api_helpers.h" 21 #include "chrome/browser/extensions/api/web_request/web_request_api_helpers.h"
22 #include "chrome/browser/extensions/event_router_forwarder.h" 22 #include "chrome/browser/extensions/event_router_forwarder.h"
23 #include "chrome/browser/extensions/extension_warning_set.h"
23 #include "chrome/browser/net/chrome_network_delegate.h" 24 #include "chrome/browser/net/chrome_network_delegate.h"
24 #include "chrome/common/extensions/extension_messages.h" 25 #include "chrome/common/extensions/extension_messages.h"
25 #include "chrome/common/pref_names.h" 26 #include "chrome/common/pref_names.h"
26 #include "chrome/test/base/testing_browser_process.h" 27 #include "chrome/test/base/testing_browser_process.h"
27 #include "chrome/test/base/testing_pref_service.h" 28 #include "chrome/test/base/testing_pref_service.h"
28 #include "chrome/test/base/testing_profile.h" 29 #include "chrome/test/base/testing_profile.h"
29 #include "content/public/test/test_browser_thread.h" 30 #include "content/public/test/test_browser_thread.h"
30 #include "net/base/auth.h" 31 #include "net/base/auth.h"
31 #include "net/base/capturing_net_log.h" 32 #include "net/base/capturing_net_log.h"
32 #include "net/base/mock_host_resolver.h" 33 #include "net/base/mock_host_resolver.h"
(...skipping 14 matching lines...) Expand all
47 using helpers::EventResponseDeltas; 48 using helpers::EventResponseDeltas;
48 using helpers::InDecreasingExtensionInstallationTimeOrder; 49 using helpers::InDecreasingExtensionInstallationTimeOrder;
49 using helpers::MergeCancelOfResponses; 50 using helpers::MergeCancelOfResponses;
50 using helpers::MergeOnBeforeRequestResponses; 51 using helpers::MergeOnBeforeRequestResponses;
51 using helpers::RequestCookieModification; 52 using helpers::RequestCookieModification;
52 using helpers::ResponseCookieModification; 53 using helpers::ResponseCookieModification;
53 using helpers::ResponseHeader; 54 using helpers::ResponseHeader;
54 using helpers::ResponseHeaders; 55 using helpers::ResponseHeaders;
55 using helpers::StringToCharList; 56 using helpers::StringToCharList;
56 57
58 namespace extensions {
59
57 namespace { 60 namespace {
58 static void EventHandledOnIOThread( 61 static void EventHandledOnIOThread(
59 void* profile, 62 void* profile,
60 const std::string& extension_id, 63 const std::string& extension_id,
61 const std::string& event_name, 64 const std::string& event_name,
62 const std::string& sub_event_name, 65 const std::string& sub_event_name,
63 uint64 request_id, 66 uint64 request_id,
64 ExtensionWebRequestEventRouter::EventResponse* response) { 67 ExtensionWebRequestEventRouter::EventResponse* response) {
65 ExtensionWebRequestEventRouter::GetInstance()->OnEventHandled( 68 ExtensionWebRequestEventRouter::GetInstance()->OnEventHandled(
66 profile, extension_id, event_name, sub_event_name, request_id, 69 profile, extension_id, event_name, sub_event_name, request_id,
67 response); 70 response);
68 } 71 }
69 72
70 // Searches |key| in |collection| by iterating over its elements and returns 73 // Searches |key| in |collection| by iterating over its elements and returns
71 // true if found. 74 // true if found.
72 template <typename Collection, typename Key> 75 template <typename Collection, typename Key>
73 bool Contains(const Collection& collection, const Key& key) { 76 bool Contains(const Collection& collection, const Key& key) {
74 return std::find(collection.begin(), collection.end(), key) != 77 return std::find(collection.begin(), collection.end(), key) !=
75 collection.end(); 78 collection.end();
76 } 79 }
77 80
81 // Returns whether |warnings| contains an extension for |extension_id|.
82 bool HasWarning(const ExtensionWarningSet& warnings,
83 const std::string& extension_id) {
84 for (ExtensionWarningSet::const_iterator i = warnings.begin();
85 i != warnings.end(); ++i) {
86 if (i->extension_id() == extension_id)
87 return true;
88 }
89 return false;
90 }
91
78 } // namespace 92 } // namespace
79 93
80 // A mock event router that responds to events with a pre-arranged queue of 94 // A mock event router that responds to events with a pre-arranged queue of
81 // Tasks. 95 // Tasks.
82 class TestIPCSender : public IPC::Sender { 96 class TestIPCSender : public IPC::Sender {
83 public: 97 public:
84 typedef std::list<linked_ptr<IPC::Message> > SentMessages; 98 typedef std::list<linked_ptr<IPC::Message> > SentMessages;
85 99
86 // Adds a Task to the queue. We will fire these in order as events are 100 // Adds a Task to the queue. We will fire these in order as events are
87 // dispatched. 101 // dispatched.
(...skipping 29 matching lines...) Expand all
117 }; 131 };
118 132
119 class ExtensionWebRequestTest : public testing::Test { 133 class ExtensionWebRequestTest : public testing::Test {
120 public: 134 public:
121 ExtensionWebRequestTest() 135 ExtensionWebRequestTest()
122 : ui_thread_(content::BrowserThread::UI, &message_loop_), 136 : ui_thread_(content::BrowserThread::UI, &message_loop_),
123 io_thread_(content::BrowserThread::IO, &message_loop_) {} 137 io_thread_(content::BrowserThread::IO, &message_loop_) {}
124 138
125 protected: 139 protected:
126 virtual void SetUp() OVERRIDE { 140 virtual void SetUp() OVERRIDE {
127 event_router_ = new extensions::EventRouterForwarder(); 141 event_router_ = new EventRouterForwarder();
128 enable_referrers_.Init( 142 enable_referrers_.Init(
129 prefs::kEnableReferrers, profile_.GetTestingPrefService(), NULL); 143 prefs::kEnableReferrers, profile_.GetTestingPrefService(), NULL);
130 network_delegate_.reset(new ChromeNetworkDelegate( 144 network_delegate_.reset(new ChromeNetworkDelegate(
131 event_router_.get(), NULL, NULL, NULL, &profile_, 145 event_router_.get(), NULL, NULL, NULL, &profile_,
132 CookieSettings::Factory::GetForProfile(&profile_), &enable_referrers_, 146 CookieSettings::Factory::GetForProfile(&profile_), &enable_referrers_,
133 NULL)); 147 NULL));
134 context_.reset(new TestURLRequestContext(true)); 148 context_.reset(new TestURLRequestContext(true));
135 context_->set_network_delegate(network_delegate_.get()); 149 context_->set_network_delegate(network_delegate_.get());
136 context_->Init(); 150 context_->Init();
137 } 151 }
138 152
139 MessageLoopForIO message_loop_; 153 MessageLoopForIO message_loop_;
140 content::TestBrowserThread ui_thread_; 154 content::TestBrowserThread ui_thread_;
141 content::TestBrowserThread io_thread_; 155 content::TestBrowserThread io_thread_;
142 TestingProfile profile_; 156 TestingProfile profile_;
143 TestDelegate delegate_; 157 TestDelegate delegate_;
144 BooleanPrefMember enable_referrers_; 158 BooleanPrefMember enable_referrers_;
145 TestIPCSender ipc_sender_; 159 TestIPCSender ipc_sender_;
146 scoped_refptr<extensions::EventRouterForwarder> event_router_; 160 scoped_refptr<EventRouterForwarder> event_router_;
147 scoped_refptr<ExtensionInfoMap> extension_info_map_; 161 scoped_refptr<ExtensionInfoMap> extension_info_map_;
148 scoped_ptr<ChromeNetworkDelegate> network_delegate_; 162 scoped_ptr<ChromeNetworkDelegate> network_delegate_;
149 scoped_ptr<TestURLRequestContext> context_; 163 scoped_ptr<TestURLRequestContext> context_;
150 }; 164 };
151 165
152 // Tests that we handle disagreements among extensions about responses to 166 // Tests that we handle disagreements among extensions about responses to
153 // blocking events (redirection) by choosing the response from the 167 // blocking events (redirection) by choosing the response from the
154 // most-recently-installed extension. 168 // most-recently-installed extension.
155 TEST_F(ExtensionWebRequestTest, BlockingEventPrecedenceRedirect) { 169 TEST_F(ExtensionWebRequestTest, BlockingEventPrecedenceRedirect) {
156 std::string extension1_id("1"); 170 std::string extension1_id("1");
(...skipping 275 matching lines...) Expand 10 before | Expand all | Expand 10 after
432 446
433 class ExtensionWebRequestHeaderModificationTest : 447 class ExtensionWebRequestHeaderModificationTest :
434 public testing::TestWithParam<HeaderModificationTest> { 448 public testing::TestWithParam<HeaderModificationTest> {
435 public: 449 public:
436 ExtensionWebRequestHeaderModificationTest() 450 ExtensionWebRequestHeaderModificationTest()
437 : ui_thread_(content::BrowserThread::UI, &message_loop_), 451 : ui_thread_(content::BrowserThread::UI, &message_loop_),
438 io_thread_(content::BrowserThread::IO, &message_loop_) {} 452 io_thread_(content::BrowserThread::IO, &message_loop_) {}
439 453
440 protected: 454 protected:
441 virtual void SetUp() { 455 virtual void SetUp() {
442 event_router_ = new extensions::EventRouterForwarder(); 456 event_router_ = new EventRouterForwarder();
443 enable_referrers_.Init( 457 enable_referrers_.Init(
444 prefs::kEnableReferrers, profile_.GetTestingPrefService(), NULL); 458 prefs::kEnableReferrers, profile_.GetTestingPrefService(), NULL);
445 network_delegate_.reset(new ChromeNetworkDelegate( 459 network_delegate_.reset(new ChromeNetworkDelegate(
446 event_router_.get(), NULL, NULL, NULL, &profile_, 460 event_router_.get(), NULL, NULL, NULL, &profile_,
447 CookieSettings::Factory::GetForProfile(&profile_), &enable_referrers_, 461 CookieSettings::Factory::GetForProfile(&profile_), &enable_referrers_,
448 NULL)); 462 NULL));
449 context_.reset(new TestURLRequestContext(true)); 463 context_.reset(new TestURLRequestContext(true));
450 host_resolver_.reset(new net::MockHostResolver()); 464 host_resolver_.reset(new net::MockHostResolver());
451 host_resolver_->rules()->AddSimulatedFailure("doesnotexist"); 465 host_resolver_->rules()->AddSimulatedFailure("doesnotexist");
452 context_->set_host_resolver(host_resolver_.get()); 466 context_->set_host_resolver(host_resolver_.get());
453 context_->set_network_delegate(network_delegate_.get()); 467 context_->set_network_delegate(network_delegate_.get());
454 context_->Init(); 468 context_->Init();
455 } 469 }
456 470
457 MessageLoopForIO message_loop_; 471 MessageLoopForIO message_loop_;
458 content::TestBrowserThread ui_thread_; 472 content::TestBrowserThread ui_thread_;
459 content::TestBrowserThread io_thread_; 473 content::TestBrowserThread io_thread_;
460 TestingProfile profile_; 474 TestingProfile profile_;
461 TestDelegate delegate_; 475 TestDelegate delegate_;
462 BooleanPrefMember enable_referrers_; 476 BooleanPrefMember enable_referrers_;
463 TestIPCSender ipc_sender_; 477 TestIPCSender ipc_sender_;
464 scoped_refptr<extensions::EventRouterForwarder> event_router_; 478 scoped_refptr<EventRouterForwarder> event_router_;
465 scoped_refptr<ExtensionInfoMap> extension_info_map_; 479 scoped_refptr<ExtensionInfoMap> extension_info_map_;
466 scoped_ptr<ChromeNetworkDelegate> network_delegate_; 480 scoped_ptr<ChromeNetworkDelegate> network_delegate_;
467 scoped_ptr<net::MockHostResolver> host_resolver_; 481 scoped_ptr<net::MockHostResolver> host_resolver_;
468 scoped_ptr<TestURLRequestContext> context_; 482 scoped_ptr<TestURLRequestContext> context_;
469 }; 483 };
470 484
471 TEST_P(ExtensionWebRequestHeaderModificationTest, TestModifications) { 485 TEST_P(ExtensionWebRequestHeaderModificationTest, TestModifications) {
472 std::string extension1_id("1"); 486 std::string extension1_id("1");
473 std::string extension2_id("2"); 487 std::string extension2_id("2");
474 std::string extension3_id("3"); 488 std::string extension3_id("3");
(...skipping 471 matching lines...) Expand 10 before | Expand all | Expand 10 after
946 EXPECT_TRUE(delta->cancel); 960 EXPECT_TRUE(delta->cancel);
947 EXPECT_EQ(2u, delta->added_response_headers.size()); 961 EXPECT_EQ(2u, delta->added_response_headers.size());
948 EXPECT_TRUE(Contains(delta->added_response_headers, 962 EXPECT_TRUE(Contains(delta->added_response_headers,
949 ResponseHeader("Key2", "Value1"))); 963 ResponseHeader("Key2", "Value1")));
950 EXPECT_TRUE(Contains(delta->added_response_headers, 964 EXPECT_TRUE(Contains(delta->added_response_headers,
951 ResponseHeader("Key4", "Value4"))); 965 ResponseHeader("Key4", "Value4")));
952 EXPECT_EQ(2u, delta->deleted_response_headers.size()); 966 EXPECT_EQ(2u, delta->deleted_response_headers.size());
953 EXPECT_TRUE(Contains(delta->deleted_response_headers, 967 EXPECT_TRUE(Contains(delta->deleted_response_headers,
954 ResponseHeader("Key2", "Value2, Bar"))); 968 ResponseHeader("Key2", "Value2, Bar")));
955 EXPECT_TRUE(Contains(delta->deleted_response_headers, 969 EXPECT_TRUE(Contains(delta->deleted_response_headers,
956 ResponseHeader("Key3", "Value3"))); 970 ResponseHeader("Key3", "Value3")));
957 } 971 }
958 972
959 TEST(ExtensionWebRequestHelpersTest, TestCalculateOnAuthRequiredDelta) { 973 TEST(ExtensionWebRequestHelpersTest, TestCalculateOnAuthRequiredDelta) {
960 const bool cancel = true; 974 const bool cancel = true;
961 975
962 string16 username = ASCIIToUTF16("foo"); 976 string16 username = ASCIIToUTF16("foo");
963 string16 password = ASCIIToUTF16("bar"); 977 string16 password = ASCIIToUTF16("bar");
964 scoped_ptr<net::AuthCredentials> credentials( 978 scoped_ptr<net::AuthCredentials> credentials(
965 new net::AuthCredentials(username, password)); 979 new net::AuthCredentials(username, password));
966 980
(...skipping 30 matching lines...) Expand all
997 deltas.sort(&InDecreasingExtensionInstallationTimeOrder); 1011 deltas.sort(&InDecreasingExtensionInstallationTimeOrder);
998 MergeCancelOfResponses(deltas, &canceled, &net_log); 1012 MergeCancelOfResponses(deltas, &canceled, &net_log);
999 EXPECT_TRUE(canceled); 1013 EXPECT_TRUE(canceled);
1000 EXPECT_EQ(1u, capturing_net_log.GetSize()); 1014 EXPECT_EQ(1u, capturing_net_log.GetSize());
1001 } 1015 }
1002 1016
1003 TEST(ExtensionWebRequestHelpersTest, TestMergeOnBeforeRequestResponses) { 1017 TEST(ExtensionWebRequestHelpersTest, TestMergeOnBeforeRequestResponses) {
1004 EventResponseDeltas deltas; 1018 EventResponseDeltas deltas;
1005 net::CapturingBoundNetLog capturing_net_log; 1019 net::CapturingBoundNetLog capturing_net_log;
1006 net::BoundNetLog net_log = capturing_net_log.bound(); 1020 net::BoundNetLog net_log = capturing_net_log.bound();
1007 std::set<std::string> conflicting_extensions; 1021 ExtensionWarningSet warning_set;
1008 GURL effective_new_url; 1022 GURL effective_new_url;
1009 1023
1010 // No redirect 1024 // No redirect
1011 linked_ptr<EventResponseDelta> d0( 1025 linked_ptr<EventResponseDelta> d0(
1012 new EventResponseDelta("extid0", base::Time::FromInternalValue(0))); 1026 new EventResponseDelta("extid0", base::Time::FromInternalValue(0)));
1013 deltas.push_back(d0); 1027 deltas.push_back(d0);
1014 MergeOnBeforeRequestResponses( 1028 MergeOnBeforeRequestResponses(
1015 deltas, &effective_new_url, &conflicting_extensions, &net_log); 1029 deltas, &effective_new_url, &warning_set, &net_log);
1016 EXPECT_TRUE(effective_new_url.is_empty()); 1030 EXPECT_TRUE(effective_new_url.is_empty());
1017 1031
1018 // Single redirect. 1032 // Single redirect.
1019 GURL new_url_1("http://foo.com"); 1033 GURL new_url_1("http://foo.com");
1020 linked_ptr<EventResponseDelta> d1( 1034 linked_ptr<EventResponseDelta> d1(
1021 new EventResponseDelta("extid1", base::Time::FromInternalValue(1000))); 1035 new EventResponseDelta("extid1", base::Time::FromInternalValue(1000)));
1022 d1->new_url = GURL(new_url_1); 1036 d1->new_url = GURL(new_url_1);
1023 deltas.push_back(d1); 1037 deltas.push_back(d1);
1024 deltas.sort(&InDecreasingExtensionInstallationTimeOrder); 1038 deltas.sort(&InDecreasingExtensionInstallationTimeOrder);
1025 capturing_net_log.Clear(); 1039 capturing_net_log.Clear();
1026 MergeOnBeforeRequestResponses( 1040 MergeOnBeforeRequestResponses(
1027 deltas, &effective_new_url, &conflicting_extensions, &net_log); 1041 deltas, &effective_new_url, &warning_set, &net_log);
1028 EXPECT_EQ(new_url_1, effective_new_url); 1042 EXPECT_EQ(new_url_1, effective_new_url);
1029 EXPECT_TRUE(conflicting_extensions.empty()); 1043 EXPECT_TRUE(warning_set.empty());
1030 EXPECT_EQ(1u, capturing_net_log.GetSize()); 1044 EXPECT_EQ(1u, capturing_net_log.GetSize());
1031 1045
1032 // Ignored redirect (due to precedence). 1046 // Ignored redirect (due to precedence).
1033 GURL new_url_2("http://bar.com"); 1047 GURL new_url_2("http://bar.com");
1034 linked_ptr<EventResponseDelta> d2( 1048 linked_ptr<EventResponseDelta> d2(
1035 new EventResponseDelta("extid2", base::Time::FromInternalValue(500))); 1049 new EventResponseDelta("extid2", base::Time::FromInternalValue(500)));
1036 d2->new_url = GURL(new_url_2); 1050 d2->new_url = GURL(new_url_2);
1037 deltas.push_back(d2); 1051 deltas.push_back(d2);
1038 deltas.sort(&InDecreasingExtensionInstallationTimeOrder); 1052 deltas.sort(&InDecreasingExtensionInstallationTimeOrder);
1053 warning_set.clear();
1039 capturing_net_log.Clear(); 1054 capturing_net_log.Clear();
1040 MergeOnBeforeRequestResponses( 1055 MergeOnBeforeRequestResponses(
1041 deltas, &effective_new_url, &conflicting_extensions, &net_log); 1056 deltas, &effective_new_url, &warning_set, &net_log);
1042 EXPECT_EQ(new_url_1, effective_new_url); 1057 EXPECT_EQ(new_url_1, effective_new_url);
1043 EXPECT_EQ(1u, conflicting_extensions.size()); 1058 EXPECT_EQ(1u, warning_set.size());
1044 EXPECT_TRUE(ContainsKey(conflicting_extensions, "extid2")); 1059 EXPECT_TRUE(HasWarning(warning_set, "extid2"));
1045 EXPECT_EQ(2u, capturing_net_log.GetSize()); 1060 EXPECT_EQ(2u, capturing_net_log.GetSize());
1046 1061
1047 // Overriding redirect. 1062 // Overriding redirect.
1048 GURL new_url_3("http://baz.com"); 1063 GURL new_url_3("http://baz.com");
1049 linked_ptr<EventResponseDelta> d3( 1064 linked_ptr<EventResponseDelta> d3(
1050 new EventResponseDelta("extid3", base::Time::FromInternalValue(1500))); 1065 new EventResponseDelta("extid3", base::Time::FromInternalValue(1500)));
1051 d3->new_url = GURL(new_url_3); 1066 d3->new_url = GURL(new_url_3);
1052 deltas.push_back(d3); 1067 deltas.push_back(d3);
1053 deltas.sort(&InDecreasingExtensionInstallationTimeOrder); 1068 deltas.sort(&InDecreasingExtensionInstallationTimeOrder);
1054 conflicting_extensions.clear(); 1069 warning_set.clear();
1055 capturing_net_log.Clear(); 1070 capturing_net_log.Clear();
1056 MergeOnBeforeRequestResponses( 1071 MergeOnBeforeRequestResponses(
1057 deltas, &effective_new_url, &conflicting_extensions, &net_log); 1072 deltas, &effective_new_url, &warning_set, &net_log);
1058 EXPECT_EQ(new_url_3, effective_new_url); 1073 EXPECT_EQ(new_url_3, effective_new_url);
1059 EXPECT_EQ(2u, conflicting_extensions.size()); 1074 EXPECT_EQ(2u, warning_set.size());
1060 EXPECT_TRUE(ContainsKey(conflicting_extensions, "extid1")); 1075 EXPECT_TRUE(HasWarning(warning_set, "extid1"));
1061 EXPECT_TRUE(ContainsKey(conflicting_extensions, "extid2")); 1076 EXPECT_TRUE(HasWarning(warning_set, "extid2"));
1062 EXPECT_EQ(3u, capturing_net_log.GetSize()); 1077 EXPECT_EQ(3u, capturing_net_log.GetSize());
1063 1078
1064 // Check that identical redirects don't cause a conflict. 1079 // Check that identical redirects don't cause a conflict.
1065 linked_ptr<EventResponseDelta> d4( 1080 linked_ptr<EventResponseDelta> d4(
1066 new EventResponseDelta("extid4", base::Time::FromInternalValue(2000))); 1081 new EventResponseDelta("extid4", base::Time::FromInternalValue(2000)));
1067 d4->new_url = GURL(new_url_3); 1082 d4->new_url = GURL(new_url_3);
1068 deltas.push_back(d4); 1083 deltas.push_back(d4);
1069 deltas.sort(&InDecreasingExtensionInstallationTimeOrder); 1084 deltas.sort(&InDecreasingExtensionInstallationTimeOrder);
1070 conflicting_extensions.clear(); 1085 warning_set.clear();
1071 capturing_net_log.Clear(); 1086 capturing_net_log.Clear();
1072 MergeOnBeforeRequestResponses( 1087 MergeOnBeforeRequestResponses(
1073 deltas, &effective_new_url, &conflicting_extensions, &net_log); 1088 deltas, &effective_new_url, &warning_set, &net_log);
1074 EXPECT_EQ(new_url_3, effective_new_url); 1089 EXPECT_EQ(new_url_3, effective_new_url);
1075 EXPECT_EQ(2u, conflicting_extensions.size()); 1090 EXPECT_EQ(2u, warning_set.size());
1076 EXPECT_TRUE(ContainsKey(conflicting_extensions, "extid1")); 1091 EXPECT_TRUE(HasWarning(warning_set, "extid1"));
1077 EXPECT_TRUE(ContainsKey(conflicting_extensions, "extid2")); 1092 EXPECT_TRUE(HasWarning(warning_set, "extid2"));
1078 EXPECT_EQ(4u, capturing_net_log.GetSize()); 1093 EXPECT_EQ(4u, capturing_net_log.GetSize());
1079 } 1094 }
1080 1095
1081 // This tests that we can redirect to data:// urls, which is considered 1096 // This tests that we can redirect to data:// urls, which is considered
1082 // a kind of cancelling requests. 1097 // a kind of cancelling requests.
1083 TEST(ExtensionWebRequestHelpersTest, TestMergeOnBeforeRequestResponses2) { 1098 TEST(ExtensionWebRequestHelpersTest, TestMergeOnBeforeRequestResponses2) {
1084 EventResponseDeltas deltas; 1099 EventResponseDeltas deltas;
1085 net::CapturingBoundNetLog capturing_net_log; 1100 net::CapturingBoundNetLog capturing_net_log;
1086 net::BoundNetLog net_log = capturing_net_log.bound(); 1101 net::BoundNetLog net_log = capturing_net_log.bound();
1087 std::set<std::string> conflicting_extensions; 1102 ExtensionWarningSet warning_set;
1088 GURL effective_new_url; 1103 GURL effective_new_url;
1089 1104
1090 // Single redirect. 1105 // Single redirect.
1091 GURL new_url_0("http://foo.com"); 1106 GURL new_url_0("http://foo.com");
1092 linked_ptr<EventResponseDelta> d0( 1107 linked_ptr<EventResponseDelta> d0(
1093 new EventResponseDelta("extid0", base::Time::FromInternalValue(2000))); 1108 new EventResponseDelta("extid0", base::Time::FromInternalValue(2000)));
1094 d0->new_url = GURL(new_url_0); 1109 d0->new_url = GURL(new_url_0);
1095 deltas.push_back(d0); 1110 deltas.push_back(d0);
1096 MergeOnBeforeRequestResponses( 1111 MergeOnBeforeRequestResponses(
1097 deltas, &effective_new_url, &conflicting_extensions, &net_log); 1112 deltas, &effective_new_url, &warning_set, &net_log);
1098 EXPECT_EQ(new_url_0, effective_new_url); 1113 EXPECT_EQ(new_url_0, effective_new_url);
1099 1114
1100 // Cancel request by redirecting to a data:// URL. This shall override 1115 // Cancel request by redirecting to a data:// URL. This shall override
1101 // the other redirect but not cause any conflict warnings. 1116 // the other redirect but not cause any conflict warnings.
1102 GURL new_url_1("data://foo"); 1117 GURL new_url_1("data://foo");
1103 linked_ptr<EventResponseDelta> d1( 1118 linked_ptr<EventResponseDelta> d1(
1104 new EventResponseDelta("extid1", base::Time::FromInternalValue(1500))); 1119 new EventResponseDelta("extid1", base::Time::FromInternalValue(1500)));
1105 d1->new_url = GURL(new_url_1); 1120 d1->new_url = GURL(new_url_1);
1106 deltas.push_back(d1); 1121 deltas.push_back(d1);
1107 deltas.sort(&InDecreasingExtensionInstallationTimeOrder); 1122 deltas.sort(&InDecreasingExtensionInstallationTimeOrder);
1123 warning_set.clear();
1108 capturing_net_log.Clear(); 1124 capturing_net_log.Clear();
1109 MergeOnBeforeRequestResponses( 1125 MergeOnBeforeRequestResponses(
1110 deltas, &effective_new_url, &conflicting_extensions, &net_log); 1126 deltas, &effective_new_url, &warning_set, &net_log);
1111 EXPECT_EQ(new_url_1, effective_new_url); 1127 EXPECT_EQ(new_url_1, effective_new_url);
1112 EXPECT_TRUE(conflicting_extensions.empty()); 1128 EXPECT_TRUE(warning_set.empty());
1113 EXPECT_EQ(1u, capturing_net_log.GetSize()); 1129 EXPECT_EQ(1u, capturing_net_log.GetSize());
1114 1130
1115 // Cancel request by redirecting to the same data:// URL. This shall 1131 // Cancel request by redirecting to the same data:// URL. This shall
1116 // not create any conflicts as it is in line with d1. 1132 // not create any conflicts as it is in line with d1.
1117 GURL new_url_2("data://foo"); 1133 GURL new_url_2("data://foo");
1118 linked_ptr<EventResponseDelta> d2( 1134 linked_ptr<EventResponseDelta> d2(
1119 new EventResponseDelta("extid2", base::Time::FromInternalValue(1000))); 1135 new EventResponseDelta("extid2", base::Time::FromInternalValue(1000)));
1120 d2->new_url = GURL(new_url_2); 1136 d2->new_url = GURL(new_url_2);
1121 deltas.push_back(d2); 1137 deltas.push_back(d2);
1122 deltas.sort(&InDecreasingExtensionInstallationTimeOrder); 1138 deltas.sort(&InDecreasingExtensionInstallationTimeOrder);
1139 warning_set.clear();
1123 capturing_net_log.Clear(); 1140 capturing_net_log.Clear();
1124 MergeOnBeforeRequestResponses( 1141 MergeOnBeforeRequestResponses(
1125 deltas, &effective_new_url, &conflicting_extensions, &net_log); 1142 deltas, &effective_new_url, &warning_set, &net_log);
1126 EXPECT_EQ(new_url_1, effective_new_url); 1143 EXPECT_EQ(new_url_1, effective_new_url);
1127 EXPECT_TRUE(conflicting_extensions.empty()); 1144 EXPECT_TRUE(warning_set.empty());
1128 EXPECT_EQ(2u, capturing_net_log.GetSize()); 1145 EXPECT_EQ(2u, capturing_net_log.GetSize());
1129 1146
1130 // Cancel redirect by redirecting to a different data:// URL. This needs 1147 // Cancel redirect by redirecting to a different data:// URL. This needs
1131 // to create a conflict. 1148 // to create a conflict.
1132 GURL new_url_3("data://something_totally_different"); 1149 GURL new_url_3("data://something_totally_different");
1133 linked_ptr<EventResponseDelta> d3( 1150 linked_ptr<EventResponseDelta> d3(
1134 new EventResponseDelta("extid3", base::Time::FromInternalValue(500))); 1151 new EventResponseDelta("extid3", base::Time::FromInternalValue(500)));
1135 d3->new_url = GURL(new_url_3); 1152 d3->new_url = GURL(new_url_3);
1136 deltas.push_back(d3); 1153 deltas.push_back(d3);
1137 deltas.sort(&InDecreasingExtensionInstallationTimeOrder); 1154 deltas.sort(&InDecreasingExtensionInstallationTimeOrder);
1155 warning_set.clear();
1138 capturing_net_log.Clear(); 1156 capturing_net_log.Clear();
1139 MergeOnBeforeRequestResponses( 1157 MergeOnBeforeRequestResponses(
1140 deltas, &effective_new_url, &conflicting_extensions, &net_log); 1158 deltas, &effective_new_url, &warning_set, &net_log);
1141 EXPECT_EQ(new_url_1, effective_new_url); 1159 EXPECT_EQ(new_url_1, effective_new_url);
1142 EXPECT_EQ(1u, conflicting_extensions.size()); 1160 EXPECT_EQ(1u, warning_set.size());
1143 EXPECT_TRUE(ContainsKey(conflicting_extensions, "extid3")); 1161 EXPECT_TRUE(HasWarning(warning_set, "extid3"));
1144 EXPECT_EQ(3u, capturing_net_log.GetSize()); 1162 EXPECT_EQ(3u, capturing_net_log.GetSize());
1145 } 1163 }
1146 1164
1147 // This tests that we can redirect to about:blank, which is considered 1165 // This tests that we can redirect to about:blank, which is considered
1148 // a kind of cancelling requests. 1166 // a kind of cancelling requests.
1149 TEST(ExtensionWebRequestHelpersTest, TestMergeOnBeforeRequestResponses3) { 1167 TEST(ExtensionWebRequestHelpersTest, TestMergeOnBeforeRequestResponses3) {
1150 EventResponseDeltas deltas; 1168 EventResponseDeltas deltas;
1151 net::CapturingBoundNetLog capturing_net_log; 1169 net::CapturingBoundNetLog capturing_net_log;
1152 net::BoundNetLog net_log = capturing_net_log.bound(); 1170 net::BoundNetLog net_log = capturing_net_log.bound();
1153 std::set<std::string> conflicting_extensions; 1171 ExtensionWarningSet warning_set;
1154 GURL effective_new_url; 1172 GURL effective_new_url;
1155 1173
1156 // Single redirect. 1174 // Single redirect.
1157 GURL new_url_0("http://foo.com"); 1175 GURL new_url_0("http://foo.com");
1158 linked_ptr<EventResponseDelta> d0( 1176 linked_ptr<EventResponseDelta> d0(
1159 new EventResponseDelta("extid0", base::Time::FromInternalValue(2000))); 1177 new EventResponseDelta("extid0", base::Time::FromInternalValue(2000)));
1160 d0->new_url = GURL(new_url_0); 1178 d0->new_url = GURL(new_url_0);
1161 deltas.push_back(d0); 1179 deltas.push_back(d0);
1162 MergeOnBeforeRequestResponses( 1180 MergeOnBeforeRequestResponses(
1163 deltas, &effective_new_url, &conflicting_extensions, &net_log); 1181 deltas, &effective_new_url, &warning_set, &net_log);
1164 EXPECT_EQ(new_url_0, effective_new_url); 1182 EXPECT_EQ(new_url_0, effective_new_url);
1165 1183
1166 // Cancel request by redirecting to about:blank. This shall override 1184 // Cancel request by redirecting to about:blank. This shall override
1167 // the other redirect but not cause any conflict warnings. 1185 // the other redirect but not cause any conflict warnings.
1168 GURL new_url_1("about:blank"); 1186 GURL new_url_1("about:blank");
1169 linked_ptr<EventResponseDelta> d1( 1187 linked_ptr<EventResponseDelta> d1(
1170 new EventResponseDelta("extid1", base::Time::FromInternalValue(1500))); 1188 new EventResponseDelta("extid1", base::Time::FromInternalValue(1500)));
1171 d1->new_url = GURL(new_url_1); 1189 d1->new_url = GURL(new_url_1);
1172 deltas.push_back(d1); 1190 deltas.push_back(d1);
1173 deltas.sort(&InDecreasingExtensionInstallationTimeOrder); 1191 deltas.sort(&InDecreasingExtensionInstallationTimeOrder);
1192 warning_set.clear();
1174 capturing_net_log.Clear(); 1193 capturing_net_log.Clear();
1175 MergeOnBeforeRequestResponses( 1194 MergeOnBeforeRequestResponses(
1176 deltas, &effective_new_url, &conflicting_extensions, &net_log); 1195 deltas, &effective_new_url, &warning_set, &net_log);
1177 EXPECT_EQ(new_url_1, effective_new_url); 1196 EXPECT_EQ(new_url_1, effective_new_url);
1178 EXPECT_TRUE(conflicting_extensions.empty()); 1197 EXPECT_TRUE(warning_set.empty());
1179 EXPECT_EQ(1u, capturing_net_log.GetSize()); 1198 EXPECT_EQ(1u, capturing_net_log.GetSize());
1180 } 1199 }
1181 1200
1182 TEST(ExtensionWebRequestHelpersTest, TestMergeOnBeforeSendHeadersResponses) { 1201 TEST(ExtensionWebRequestHelpersTest, TestMergeOnBeforeSendHeadersResponses) {
1183 net::HttpRequestHeaders base_headers; 1202 net::HttpRequestHeaders base_headers;
1184 base_headers.AddHeaderFromString("key1: value 1"); 1203 base_headers.AddHeaderFromString("key1: value 1");
1185 base_headers.AddHeaderFromString("key2: value 2"); 1204 base_headers.AddHeaderFromString("key2: value 2");
1186 net::CapturingBoundNetLog capturing_net_log; 1205 net::CapturingBoundNetLog capturing_net_log;
1187 net::BoundNetLog net_log = capturing_net_log.bound(); 1206 net::BoundNetLog net_log = capturing_net_log.bound();
1188 std::set<std::string> conflicting_extensions; 1207 ExtensionWarningSet warning_set;
1189 std::string header_value; 1208 std::string header_value;
1190 EventResponseDeltas deltas; 1209 EventResponseDeltas deltas;
1191 1210
1192 // Check that we can handle not changing the headers. 1211 // Check that we can handle not changing the headers.
1193 linked_ptr<EventResponseDelta> d0( 1212 linked_ptr<EventResponseDelta> d0(
1194 new EventResponseDelta("extid0", base::Time::FromInternalValue(2500))); 1213 new EventResponseDelta("extid0", base::Time::FromInternalValue(2500)));
1195 deltas.push_back(d0); 1214 deltas.push_back(d0);
1196 net::HttpRequestHeaders headers0; 1215 net::HttpRequestHeaders headers0;
1197 headers0.MergeFrom(base_headers); 1216 headers0.MergeFrom(base_headers);
1198 MergeOnBeforeSendHeadersResponses( 1217 MergeOnBeforeSendHeadersResponses(deltas, &headers0, &warning_set, &net_log);
1199 deltas, &headers0, &conflicting_extensions, &net_log);
1200 ASSERT_TRUE(headers0.GetHeader("key1", &header_value)); 1218 ASSERT_TRUE(headers0.GetHeader("key1", &header_value));
1201 EXPECT_EQ("value 1", header_value); 1219 EXPECT_EQ("value 1", header_value);
1202 ASSERT_TRUE(headers0.GetHeader("key2", &header_value)); 1220 ASSERT_TRUE(headers0.GetHeader("key2", &header_value));
1203 EXPECT_EQ("value 2", header_value); 1221 EXPECT_EQ("value 2", header_value);
1204 EXPECT_EQ(0u, conflicting_extensions.size()); 1222 EXPECT_EQ(0u, warning_set.size());
1205 EXPECT_EQ(0u, capturing_net_log.GetSize()); 1223 EXPECT_EQ(0u, capturing_net_log.GetSize());
1206 1224
1207 // Delete, modify and add a header. 1225 // Delete, modify and add a header.
1208 linked_ptr<EventResponseDelta> d1( 1226 linked_ptr<EventResponseDelta> d1(
1209 new EventResponseDelta("extid1", base::Time::FromInternalValue(2000))); 1227 new EventResponseDelta("extid1", base::Time::FromInternalValue(2000)));
1210 d1->deleted_request_headers.push_back("key1"); 1228 d1->deleted_request_headers.push_back("key1");
1211 d1->modified_request_headers.AddHeaderFromString("key2: value 3"); 1229 d1->modified_request_headers.AddHeaderFromString("key2: value 3");
1212 d1->modified_request_headers.AddHeaderFromString("key3: value 3"); 1230 d1->modified_request_headers.AddHeaderFromString("key3: value 3");
1213 deltas.push_back(d1); 1231 deltas.push_back(d1);
1214 deltas.sort(&InDecreasingExtensionInstallationTimeOrder); 1232 deltas.sort(&InDecreasingExtensionInstallationTimeOrder);
1233 warning_set.clear();
1234 capturing_net_log.Clear();
1215 net::HttpRequestHeaders headers1; 1235 net::HttpRequestHeaders headers1;
1216 headers1.MergeFrom(base_headers); 1236 headers1.MergeFrom(base_headers);
1217 MergeOnBeforeSendHeadersResponses( 1237 MergeOnBeforeSendHeadersResponses(deltas, &headers1, &warning_set, &net_log);
1218 deltas, &headers1, &conflicting_extensions, &net_log);
1219 EXPECT_FALSE(headers1.HasHeader("key1")); 1238 EXPECT_FALSE(headers1.HasHeader("key1"));
1220 ASSERT_TRUE(headers1.GetHeader("key2", &header_value)); 1239 ASSERT_TRUE(headers1.GetHeader("key2", &header_value));
1221 EXPECT_EQ("value 3", header_value); 1240 EXPECT_EQ("value 3", header_value);
1222 ASSERT_TRUE(headers1.GetHeader("key3", &header_value)); 1241 ASSERT_TRUE(headers1.GetHeader("key3", &header_value));
1223 EXPECT_EQ("value 3", header_value); 1242 EXPECT_EQ("value 3", header_value);
1224 EXPECT_EQ(0u, conflicting_extensions.size()); 1243 EXPECT_EQ(0u, warning_set.size());
1225 EXPECT_EQ(1u, capturing_net_log.GetSize()); 1244 EXPECT_EQ(1u, capturing_net_log.GetSize());
1226 1245
1227 // Check that conflicts are atomic, i.e. if one header modification 1246 // Check that conflicts are atomic, i.e. if one header modification
1228 // collides all other conflicts of the same extension are declined as well. 1247 // collides all other conflicts of the same extension are declined as well.
1229 linked_ptr<EventResponseDelta> d2( 1248 linked_ptr<EventResponseDelta> d2(
1230 new EventResponseDelta("extid2", base::Time::FromInternalValue(1500))); 1249 new EventResponseDelta("extid2", base::Time::FromInternalValue(1500)));
1231 // This one conflicts: 1250 // This one conflicts:
1232 d2->modified_request_headers.AddHeaderFromString("key3: value 0"); 1251 d2->modified_request_headers.AddHeaderFromString("key3: value 0");
1233 d2->modified_request_headers.AddHeaderFromString("key4: value 4"); 1252 d2->modified_request_headers.AddHeaderFromString("key4: value 4");
1234 deltas.push_back(d2); 1253 deltas.push_back(d2);
1235 deltas.sort(&InDecreasingExtensionInstallationTimeOrder); 1254 deltas.sort(&InDecreasingExtensionInstallationTimeOrder);
1236 conflicting_extensions.clear(); 1255 warning_set.clear();
1237 capturing_net_log.Clear(); 1256 capturing_net_log.Clear();
1238 net::HttpRequestHeaders headers2; 1257 net::HttpRequestHeaders headers2;
1239 headers2.MergeFrom(base_headers); 1258 headers2.MergeFrom(base_headers);
1240 MergeOnBeforeSendHeadersResponses( 1259 MergeOnBeforeSendHeadersResponses(deltas, &headers2, &warning_set, &net_log);
1241 deltas, &headers2, &conflicting_extensions, &net_log);
1242 EXPECT_FALSE(headers2.HasHeader("key1")); 1260 EXPECT_FALSE(headers2.HasHeader("key1"));
1243 ASSERT_TRUE(headers2.GetHeader("key2", &header_value)); 1261 ASSERT_TRUE(headers2.GetHeader("key2", &header_value));
1244 EXPECT_EQ("value 3", header_value); 1262 EXPECT_EQ("value 3", header_value);
1245 ASSERT_TRUE(headers2.GetHeader("key3", &header_value)); 1263 ASSERT_TRUE(headers2.GetHeader("key3", &header_value));
1246 EXPECT_EQ("value 3", header_value); 1264 EXPECT_EQ("value 3", header_value);
1247 EXPECT_FALSE(headers2.HasHeader("key4")); 1265 EXPECT_FALSE(headers2.HasHeader("key4"));
1248 EXPECT_EQ(1u, conflicting_extensions.size()); 1266 EXPECT_EQ(1u, warning_set.size());
1249 EXPECT_TRUE(ContainsKey(conflicting_extensions, "extid2")); 1267 EXPECT_TRUE(HasWarning(warning_set, "extid2"));
1250 EXPECT_EQ(2u, capturing_net_log.GetSize()); 1268 EXPECT_EQ(2u, capturing_net_log.GetSize());
1251 1269
1252 // Check that identical modifications don't conflict and operations 1270 // Check that identical modifications don't conflict and operations
1253 // can be merged. 1271 // can be merged.
1254 linked_ptr<EventResponseDelta> d3( 1272 linked_ptr<EventResponseDelta> d3(
1255 new EventResponseDelta("extid3", base::Time::FromInternalValue(1000))); 1273 new EventResponseDelta("extid3", base::Time::FromInternalValue(1000)));
1256 d3->deleted_request_headers.push_back("key1"); 1274 d3->deleted_request_headers.push_back("key1");
1257 d3->modified_request_headers.AddHeaderFromString("key2: value 3"); 1275 d3->modified_request_headers.AddHeaderFromString("key2: value 3");
1258 d3->modified_request_headers.AddHeaderFromString("key5: value 5"); 1276 d3->modified_request_headers.AddHeaderFromString("key5: value 5");
1259 deltas.push_back(d3); 1277 deltas.push_back(d3);
1260 deltas.sort(&InDecreasingExtensionInstallationTimeOrder); 1278 deltas.sort(&InDecreasingExtensionInstallationTimeOrder);
1261 conflicting_extensions.clear(); 1279 warning_set.clear();
1262 capturing_net_log.Clear(); 1280 capturing_net_log.Clear();
1263 net::HttpRequestHeaders headers3; 1281 net::HttpRequestHeaders headers3;
1264 headers3.MergeFrom(base_headers); 1282 headers3.MergeFrom(base_headers);
1265 MergeOnBeforeSendHeadersResponses( 1283 MergeOnBeforeSendHeadersResponses(deltas, &headers3, &warning_set, &net_log);
1266 deltas, &headers3, &conflicting_extensions, &net_log);
1267 EXPECT_FALSE(headers3.HasHeader("key1")); 1284 EXPECT_FALSE(headers3.HasHeader("key1"));
1268 ASSERT_TRUE(headers3.GetHeader("key2", &header_value)); 1285 ASSERT_TRUE(headers3.GetHeader("key2", &header_value));
1269 EXPECT_EQ("value 3", header_value); 1286 EXPECT_EQ("value 3", header_value);
1270 ASSERT_TRUE(headers3.GetHeader("key3", &header_value)); 1287 ASSERT_TRUE(headers3.GetHeader("key3", &header_value));
1271 EXPECT_EQ("value 3", header_value); 1288 EXPECT_EQ("value 3", header_value);
1272 ASSERT_TRUE(headers3.GetHeader("key5", &header_value)); 1289 ASSERT_TRUE(headers3.GetHeader("key5", &header_value));
1273 EXPECT_EQ("value 5", header_value); 1290 EXPECT_EQ("value 5", header_value);
1274 EXPECT_EQ(1u, conflicting_extensions.size()); 1291 EXPECT_EQ(1u, warning_set.size());
1275 EXPECT_TRUE(ContainsKey(conflicting_extensions, "extid2")); 1292 EXPECT_TRUE(HasWarning(warning_set, "extid2"));
1276 EXPECT_EQ(3u, capturing_net_log.GetSize()); 1293 EXPECT_EQ(3u, capturing_net_log.GetSize());
1277 } 1294 }
1278 1295
1279 TEST(ExtensionWebRequestHelpersTest, 1296 TEST(ExtensionWebRequestHelpersTest,
1280 TestMergeOnBeforeSendHeadersResponses_Cookies) { 1297 TestMergeOnBeforeSendHeadersResponses_Cookies) {
1281 net::HttpRequestHeaders base_headers; 1298 net::HttpRequestHeaders base_headers;
1282 base_headers.AddHeaderFromString( 1299 base_headers.AddHeaderFromString(
1283 "Cookie: name=value; name2=value2; name3=value3"); 1300 "Cookie: name=value; name2=value2; name3=value3");
1284 net::CapturingBoundNetLog capturing_net_log; 1301 net::CapturingBoundNetLog capturing_net_log;
1285 net::BoundNetLog net_log = capturing_net_log.bound(); 1302 net::BoundNetLog net_log = capturing_net_log.bound();
1286 std::set<std::string> conflicting_extensions; 1303 ExtensionWarningSet warning_set;
1287 std::string header_value; 1304 std::string header_value;
1288 EventResponseDeltas deltas; 1305 EventResponseDeltas deltas;
1289 1306
1290 linked_ptr<RequestCookieModification> add_cookie = 1307 linked_ptr<RequestCookieModification> add_cookie =
1291 make_linked_ptr(new RequestCookieModification); 1308 make_linked_ptr(new RequestCookieModification);
1292 add_cookie->type = helpers::ADD; 1309 add_cookie->type = helpers::ADD;
1293 add_cookie->modification.reset(new helpers::RequestCookie); 1310 add_cookie->modification.reset(new helpers::RequestCookie);
1294 add_cookie->modification->name.reset(new std::string("name4")); 1311 add_cookie->modification->name.reset(new std::string("name4"));
1295 add_cookie->modification->value.reset(new std::string("\"value 4\"")); 1312 add_cookie->modification->value.reset(new std::string("\"value 4\""));
1296 1313
(...skipping 24 matching lines...) Expand all
1321 1338
1322 for (size_t i = 0; i < arraysize(operations); ++i) { 1339 for (size_t i = 0; i < arraysize(operations); ++i) {
1323 linked_ptr<EventResponseDelta> delta( 1340 linked_ptr<EventResponseDelta> delta(
1324 new EventResponseDelta("extid0", base::Time::FromInternalValue(i * 5))); 1341 new EventResponseDelta("extid0", base::Time::FromInternalValue(i * 5)));
1325 delta->request_cookie_modifications.push_back(operations[i]); 1342 delta->request_cookie_modifications.push_back(operations[i]);
1326 deltas.push_back(delta); 1343 deltas.push_back(delta);
1327 } 1344 }
1328 deltas.sort(&InDecreasingExtensionInstallationTimeOrder); 1345 deltas.sort(&InDecreasingExtensionInstallationTimeOrder);
1329 net::HttpRequestHeaders headers1; 1346 net::HttpRequestHeaders headers1;
1330 headers1.MergeFrom(base_headers); 1347 headers1.MergeFrom(base_headers);
1331 MergeOnBeforeSendHeadersResponses( 1348 warning_set.clear();
1332 deltas, &headers1, &conflicting_extensions, &net_log); 1349 MergeOnBeforeSendHeadersResponses(deltas, &headers1, &warning_set, &net_log);
1333 EXPECT_TRUE(headers1.HasHeader("Cookie")); 1350 EXPECT_TRUE(headers1.HasHeader("Cookie"));
1334 ASSERT_TRUE(headers1.GetHeader("Cookie", &header_value)); 1351 ASSERT_TRUE(headers1.GetHeader("Cookie", &header_value));
1335 EXPECT_EQ("name=new value; name2=new value; name4=\"value 4\"", header_value); 1352 EXPECT_EQ("name=new value; name2=new value; name4=\"value 4\"", header_value);
1336 EXPECT_EQ(0u, conflicting_extensions.size()); 1353 EXPECT_EQ(0u, warning_set.size());
1337 EXPECT_EQ(0u, capturing_net_log.GetSize()); 1354 EXPECT_EQ(0u, capturing_net_log.GetSize());
1338 } 1355 }
1339 1356
1340 TEST(ExtensionWebRequestHelpersTest, 1357 TEST(ExtensionWebRequestHelpersTest,
1341 TestMergeCookiesInOnHeadersReceivedResponses) { 1358 TestMergeCookiesInOnHeadersReceivedResponses) {
1342 net::CapturingBoundNetLog capturing_net_log; 1359 net::CapturingBoundNetLog capturing_net_log;
1343 net::BoundNetLog net_log = capturing_net_log.bound(); 1360 net::BoundNetLog net_log = capturing_net_log.bound();
1344 std::set<std::string> conflicting_extensions; 1361 ExtensionWarningSet warning_set;
1345 std::string header_value; 1362 std::string header_value;
1346 EventResponseDeltas deltas; 1363 EventResponseDeltas deltas;
1347 1364
1348 char base_headers_string[] = 1365 char base_headers_string[] =
1349 "HTTP/1.0 200 OK\r\n" 1366 "HTTP/1.0 200 OK\r\n"
1350 "Foo: Bar\r\n" 1367 "Foo: Bar\r\n"
1351 "Set-Cookie: name=value; DOMAIN=google.com; Secure\r\n" 1368 "Set-Cookie: name=value; DOMAIN=google.com; Secure\r\n"
1352 "Set-Cookie: name2=value2\r\n" 1369 "Set-Cookie: name2=value2\r\n"
1353 "Set-Cookie: name3=value3\r\n" 1370 "Set-Cookie: name3=value3\r\n"
1354 "\r\n"; 1371 "\r\n";
1355 scoped_refptr<net::HttpResponseHeaders> base_headers( 1372 scoped_refptr<net::HttpResponseHeaders> base_headers(
1356 new net::HttpResponseHeaders( 1373 new net::HttpResponseHeaders(
1357 net::HttpUtil::AssembleRawHeaders( 1374 net::HttpUtil::AssembleRawHeaders(
1358 base_headers_string, sizeof(base_headers_string)))); 1375 base_headers_string, sizeof(base_headers_string))));
1359 1376
1360 // Check that we can handle if not touching the response headers. 1377 // Check that we can handle if not touching the response headers.
1361 linked_ptr<EventResponseDelta> d0( 1378 linked_ptr<EventResponseDelta> d0(
1362 new EventResponseDelta("extid0", base::Time::FromInternalValue(3000))); 1379 new EventResponseDelta("extid0", base::Time::FromInternalValue(3000)));
1363 deltas.push_back(d0); 1380 deltas.push_back(d0);
1364 scoped_refptr<net::HttpResponseHeaders> new_headers0; 1381 scoped_refptr<net::HttpResponseHeaders> new_headers0;
1365 MergeCookiesInOnHeadersReceivedResponses( 1382 MergeCookiesInOnHeadersReceivedResponses(
1366 deltas, base_headers.get(), &new_headers0, &conflicting_extensions, 1383 deltas, base_headers.get(), &new_headers0, &warning_set, &net_log);
1367 &net_log);
1368 EXPECT_FALSE(new_headers0.get()); 1384 EXPECT_FALSE(new_headers0.get());
1369 EXPECT_EQ(0u, conflicting_extensions.size()); 1385 EXPECT_EQ(0u, warning_set.size());
1370 EXPECT_EQ(0u, capturing_net_log.GetSize()); 1386 EXPECT_EQ(0u, capturing_net_log.GetSize());
1371 1387
1372 linked_ptr<ResponseCookieModification> add_cookie = 1388 linked_ptr<ResponseCookieModification> add_cookie =
1373 make_linked_ptr(new ResponseCookieModification); 1389 make_linked_ptr(new ResponseCookieModification);
1374 add_cookie->type = helpers::ADD; 1390 add_cookie->type = helpers::ADD;
1375 add_cookie->modification.reset(new helpers::ResponseCookie); 1391 add_cookie->modification.reset(new helpers::ResponseCookie);
1376 add_cookie->modification->name.reset(new std::string("name4")); 1392 add_cookie->modification->name.reset(new std::string("name4"));
1377 add_cookie->modification->value.reset(new std::string("\"value4\"")); 1393 add_cookie->modification->value.reset(new std::string("\"value4\""));
1378 1394
1379 linked_ptr<ResponseCookieModification> edit_cookie = 1395 linked_ptr<ResponseCookieModification> edit_cookie =
(...skipping 27 matching lines...) Expand all
1407 new EventResponseDelta("extid0", base::Time::FromInternalValue(i * 5))); 1423 new EventResponseDelta("extid0", base::Time::FromInternalValue(i * 5)));
1408 delta->response_cookie_modifications.push_back(operations[i]); 1424 delta->response_cookie_modifications.push_back(operations[i]);
1409 deltas.push_back(delta); 1425 deltas.push_back(delta);
1410 } 1426 }
1411 deltas.sort(&InDecreasingExtensionInstallationTimeOrder); 1427 deltas.sort(&InDecreasingExtensionInstallationTimeOrder);
1412 scoped_refptr<net::HttpResponseHeaders> headers1( 1428 scoped_refptr<net::HttpResponseHeaders> headers1(
1413 new net::HttpResponseHeaders( 1429 new net::HttpResponseHeaders(
1414 net::HttpUtil::AssembleRawHeaders( 1430 net::HttpUtil::AssembleRawHeaders(
1415 base_headers_string, sizeof(base_headers_string)))); 1431 base_headers_string, sizeof(base_headers_string))));
1416 scoped_refptr<net::HttpResponseHeaders> new_headers1; 1432 scoped_refptr<net::HttpResponseHeaders> new_headers1;
1433 warning_set.clear();
1417 MergeCookiesInOnHeadersReceivedResponses( 1434 MergeCookiesInOnHeadersReceivedResponses(
1418 deltas, headers1.get(), &new_headers1, &conflicting_extensions, &net_log); 1435 deltas, headers1.get(), &new_headers1, &warning_set, &net_log);
1419 1436
1420 EXPECT_TRUE(new_headers1->HasHeader("Foo")); 1437 EXPECT_TRUE(new_headers1->HasHeader("Foo"));
1421 void* iter = NULL; 1438 void* iter = NULL;
1422 std::string cookie_string; 1439 std::string cookie_string;
1423 std::set<std::string> expected_cookies; 1440 std::set<std::string> expected_cookies;
1424 expected_cookies.insert("name=value; domain=google.com; secure"); 1441 expected_cookies.insert("name=value; domain=google.com; secure");
1425 expected_cookies.insert("name2=value2; secure"); 1442 expected_cookies.insert("name2=value2; secure");
1426 expected_cookies.insert("name4=\"value4\"; secure"); 1443 expected_cookies.insert("name4=\"value4\"; secure");
1427 std::set<std::string> actual_cookies; 1444 std::set<std::string> actual_cookies;
1428 while (new_headers1->EnumerateHeader(&iter, "Set-Cookie", &cookie_string)) 1445 while (new_headers1->EnumerateHeader(&iter, "Set-Cookie", &cookie_string))
1429 actual_cookies.insert(cookie_string); 1446 actual_cookies.insert(cookie_string);
1430 EXPECT_EQ(expected_cookies, actual_cookies); 1447 EXPECT_EQ(expected_cookies, actual_cookies);
1431 EXPECT_EQ(0u, conflicting_extensions.size()); 1448 EXPECT_EQ(0u, warning_set.size());
1432 EXPECT_EQ(0u, capturing_net_log.GetSize()); 1449 EXPECT_EQ(0u, capturing_net_log.GetSize());
1433 } 1450 }
1434 1451
1435 TEST(ExtensionWebRequestHelpersTest, TestMergeOnHeadersReceivedResponses) { 1452 TEST(ExtensionWebRequestHelpersTest, TestMergeOnHeadersReceivedResponses) {
1436 net::CapturingBoundNetLog capturing_net_log; 1453 net::CapturingBoundNetLog capturing_net_log;
1437 net::BoundNetLog net_log = capturing_net_log.bound(); 1454 net::BoundNetLog net_log = capturing_net_log.bound();
1438 std::set<std::string> conflicting_extensions; 1455 ExtensionWarningSet warning_set;
1439 std::string header_value; 1456 std::string header_value;
1440 EventResponseDeltas deltas; 1457 EventResponseDeltas deltas;
1441 1458
1442 char base_headers_string[] = 1459 char base_headers_string[] =
1443 "HTTP/1.0 200 OK\r\n" 1460 "HTTP/1.0 200 OK\r\n"
1444 "Key1: Value1\r\n" 1461 "Key1: Value1\r\n"
1445 "Key2: Value2, Foo\r\n" 1462 "Key2: Value2, Foo\r\n"
1446 "\r\n"; 1463 "\r\n";
1447 scoped_refptr<net::HttpResponseHeaders> base_headers( 1464 scoped_refptr<net::HttpResponseHeaders> base_headers(
1448 new net::HttpResponseHeaders( 1465 new net::HttpResponseHeaders(
1449 net::HttpUtil::AssembleRawHeaders( 1466 net::HttpUtil::AssembleRawHeaders(
1450 base_headers_string, sizeof(base_headers_string)))); 1467 base_headers_string, sizeof(base_headers_string))));
1451 1468
1452 // Check that we can handle if not touching the response headers. 1469 // Check that we can handle if not touching the response headers.
1453 linked_ptr<EventResponseDelta> d0( 1470 linked_ptr<EventResponseDelta> d0(
1454 new EventResponseDelta("extid0", base::Time::FromInternalValue(3000))); 1471 new EventResponseDelta("extid0", base::Time::FromInternalValue(3000)));
1455 deltas.push_back(d0); 1472 deltas.push_back(d0);
1456 scoped_refptr<net::HttpResponseHeaders> new_headers0; 1473 scoped_refptr<net::HttpResponseHeaders> new_headers0;
1457 MergeOnHeadersReceivedResponses( 1474 MergeOnHeadersReceivedResponses(deltas, base_headers.get(), &new_headers0,
1458 deltas, base_headers.get(), &new_headers0, &conflicting_extensions, 1475 &warning_set, &net_log);
1459 &net_log);
1460 EXPECT_FALSE(new_headers0.get()); 1476 EXPECT_FALSE(new_headers0.get());
1461 EXPECT_EQ(0u, conflicting_extensions.size()); 1477 EXPECT_EQ(0u, warning_set.size());
1462 EXPECT_EQ(0u, capturing_net_log.GetSize()); 1478 EXPECT_EQ(0u, capturing_net_log.GetSize());
1463 1479
1464 linked_ptr<EventResponseDelta> d1( 1480 linked_ptr<EventResponseDelta> d1(
1465 new EventResponseDelta("extid1", base::Time::FromInternalValue(2000))); 1481 new EventResponseDelta("extid1", base::Time::FromInternalValue(2000)));
1466 d1->deleted_response_headers.push_back(ResponseHeader("KEY1", "Value1")); 1482 d1->deleted_response_headers.push_back(ResponseHeader("KEY1", "Value1"));
1467 d1->deleted_response_headers.push_back(ResponseHeader("KEY2", "Value2, Foo")); 1483 d1->deleted_response_headers.push_back(ResponseHeader("KEY2", "Value2, Foo"));
1468 d1->added_response_headers.push_back(ResponseHeader("Key2", "Value3")); 1484 d1->added_response_headers.push_back(ResponseHeader("Key2", "Value3"));
1469 deltas.push_back(d1); 1485 deltas.push_back(d1);
1470 deltas.sort(&InDecreasingExtensionInstallationTimeOrder); 1486 deltas.sort(&InDecreasingExtensionInstallationTimeOrder);
1471 conflicting_extensions.clear(); 1487 warning_set.clear();
1472 capturing_net_log.Clear(); 1488 capturing_net_log.Clear();
1473 scoped_refptr<net::HttpResponseHeaders> new_headers1; 1489 scoped_refptr<net::HttpResponseHeaders> new_headers1;
1474 MergeOnHeadersReceivedResponses( 1490 MergeOnHeadersReceivedResponses(
1475 deltas, base_headers.get(), &new_headers1, &conflicting_extensions, 1491 deltas, base_headers.get(), &new_headers1, &warning_set, &net_log);
1476 &net_log);
1477 ASSERT_TRUE(new_headers1.get()); 1492 ASSERT_TRUE(new_headers1.get());
1478 std::multimap<std::string, std::string> expected1; 1493 std::multimap<std::string, std::string> expected1;
1479 expected1.insert(std::pair<std::string, std::string>("Key2", "Value3")); 1494 expected1.insert(std::pair<std::string, std::string>("Key2", "Value3"));
1480 void* iter = NULL; 1495 void* iter = NULL;
1481 std::string name; 1496 std::string name;
1482 std::string value; 1497 std::string value;
1483 std::multimap<std::string, std::string> actual1; 1498 std::multimap<std::string, std::string> actual1;
1484 while (new_headers1->EnumerateHeaderLines(&iter, &name, &value)) { 1499 while (new_headers1->EnumerateHeaderLines(&iter, &name, &value)) {
1485 actual1.insert(std::pair<std::string, std::string>(name, value)); 1500 actual1.insert(std::pair<std::string, std::string>(name, value));
1486 } 1501 }
1487 EXPECT_EQ(expected1, actual1); 1502 EXPECT_EQ(expected1, actual1);
1488 EXPECT_EQ(0u, conflicting_extensions.size()); 1503 EXPECT_EQ(0u, warning_set.size());
1489 EXPECT_EQ(1u, capturing_net_log.GetSize()); 1504 EXPECT_EQ(1u, capturing_net_log.GetSize());
1490 1505
1491 // Check that we replace response headers only once. 1506 // Check that we replace response headers only once.
1492 linked_ptr<EventResponseDelta> d2( 1507 linked_ptr<EventResponseDelta> d2(
1493 new EventResponseDelta("extid2", base::Time::FromInternalValue(1500))); 1508 new EventResponseDelta("extid2", base::Time::FromInternalValue(1500)));
1494 // Note that we use a different capitalization of KeY2. This should not 1509 // Note that we use a different capitalization of KeY2. This should not
1495 // matter. 1510 // matter.
1496 d2->deleted_response_headers.push_back(ResponseHeader("KeY2", "Value2, Foo")); 1511 d2->deleted_response_headers.push_back(ResponseHeader("KeY2", "Value2, Foo"));
1497 d2->added_response_headers.push_back(ResponseHeader("Key2", "Value4")); 1512 d2->added_response_headers.push_back(ResponseHeader("Key2", "Value4"));
1498 deltas.push_back(d2); 1513 deltas.push_back(d2);
1499 deltas.sort(&InDecreasingExtensionInstallationTimeOrder); 1514 deltas.sort(&InDecreasingExtensionInstallationTimeOrder);
1500 conflicting_extensions.clear(); 1515 warning_set.clear();
1501 capturing_net_log.Clear(); 1516 capturing_net_log.Clear();
1502 scoped_refptr<net::HttpResponseHeaders> new_headers2; 1517 scoped_refptr<net::HttpResponseHeaders> new_headers2;
1503 MergeOnHeadersReceivedResponses( 1518 MergeOnHeadersReceivedResponses(
1504 deltas, base_headers.get(), &new_headers2, &conflicting_extensions, 1519 deltas, base_headers.get(), &new_headers2, &warning_set, &net_log);
1505 &net_log);
1506 ASSERT_TRUE(new_headers2.get()); 1520 ASSERT_TRUE(new_headers2.get());
1507 iter = NULL; 1521 iter = NULL;
1508 std::multimap<std::string, std::string> actual2; 1522 std::multimap<std::string, std::string> actual2;
1509 while (new_headers2->EnumerateHeaderLines(&iter, &name, &value)) { 1523 while (new_headers2->EnumerateHeaderLines(&iter, &name, &value)) {
1510 actual2.insert(std::pair<std::string, std::string>(name, value)); 1524 actual2.insert(std::pair<std::string, std::string>(name, value));
1511 } 1525 }
1512 EXPECT_EQ(expected1, actual2); 1526 EXPECT_EQ(expected1, actual2);
1513 EXPECT_EQ(1u, conflicting_extensions.size()); 1527 EXPECT_EQ(1u, warning_set.size());
1514 EXPECT_TRUE(ContainsKey(conflicting_extensions, "extid2")); 1528 EXPECT_TRUE(HasWarning(warning_set, "extid2"));
1515 EXPECT_EQ(2u, capturing_net_log.GetSize()); 1529 EXPECT_EQ(2u, capturing_net_log.GetSize());
1516 } 1530 }
1517 1531
1518 // Check that we do not delete too much 1532 // Check that we do not delete too much
1519 TEST(ExtensionWebRequestHelpersTest, 1533 TEST(ExtensionWebRequestHelpersTest,
1520 TestMergeOnHeadersReceivedResponsesDeletion) { 1534 TestMergeOnHeadersReceivedResponsesDeletion) {
1521 net::CapturingBoundNetLog capturing_net_log; 1535 net::CapturingBoundNetLog capturing_net_log;
1522 net::BoundNetLog net_log = capturing_net_log.bound(); 1536 net::BoundNetLog net_log = capturing_net_log.bound();
1523 std::set<std::string> conflicting_extensions; 1537 ExtensionWarningSet warning_set;
1524 std::string header_value; 1538 std::string header_value;
1525 EventResponseDeltas deltas; 1539 EventResponseDeltas deltas;
1526 1540
1527 char base_headers_string[] = 1541 char base_headers_string[] =
1528 "HTTP/1.0 200 OK\r\n" 1542 "HTTP/1.0 200 OK\r\n"
1529 "Key1: Value1\r\n" 1543 "Key1: Value1\r\n"
1530 "Key1: Value2\r\n" 1544 "Key1: Value2\r\n"
1531 "Key1: Value3\r\n" 1545 "Key1: Value3\r\n"
1532 "Key2: Value4\r\n" 1546 "Key2: Value4\r\n"
1533 "\r\n"; 1547 "\r\n";
1534 scoped_refptr<net::HttpResponseHeaders> base_headers( 1548 scoped_refptr<net::HttpResponseHeaders> base_headers(
1535 new net::HttpResponseHeaders( 1549 new net::HttpResponseHeaders(
1536 net::HttpUtil::AssembleRawHeaders( 1550 net::HttpUtil::AssembleRawHeaders(
1537 base_headers_string, sizeof(base_headers_string)))); 1551 base_headers_string, sizeof(base_headers_string))));
1538 1552
1539 linked_ptr<EventResponseDelta> d1( 1553 linked_ptr<EventResponseDelta> d1(
1540 new EventResponseDelta("extid1", base::Time::FromInternalValue(2000))); 1554 new EventResponseDelta("extid1", base::Time::FromInternalValue(2000)));
1541 d1->deleted_response_headers.push_back(ResponseHeader("KEY1", "Value2")); 1555 d1->deleted_response_headers.push_back(ResponseHeader("KEY1", "Value2"));
1542 deltas.push_back(d1); 1556 deltas.push_back(d1);
1543 scoped_refptr<net::HttpResponseHeaders> new_headers1; 1557 scoped_refptr<net::HttpResponseHeaders> new_headers1;
1544 MergeOnHeadersReceivedResponses( 1558 MergeOnHeadersReceivedResponses(
1545 deltas, base_headers.get(), &new_headers1, &conflicting_extensions, 1559 deltas, base_headers.get(), &new_headers1, &warning_set, &net_log);
1546 &net_log);
1547 ASSERT_TRUE(new_headers1.get()); 1560 ASSERT_TRUE(new_headers1.get());
1548 std::multimap<std::string, std::string> expected1; 1561 std::multimap<std::string, std::string> expected1;
1549 expected1.insert(std::pair<std::string, std::string>("Key1", "Value1")); 1562 expected1.insert(std::pair<std::string, std::string>("Key1", "Value1"));
1550 expected1.insert(std::pair<std::string, std::string>("Key1", "Value3")); 1563 expected1.insert(std::pair<std::string, std::string>("Key1", "Value3"));
1551 expected1.insert(std::pair<std::string, std::string>("Key2", "Value4")); 1564 expected1.insert(std::pair<std::string, std::string>("Key2", "Value4"));
1552 void* iter = NULL; 1565 void* iter = NULL;
1553 std::string name; 1566 std::string name;
1554 std::string value; 1567 std::string value;
1555 std::multimap<std::string, std::string> actual1; 1568 std::multimap<std::string, std::string> actual1;
1556 while (new_headers1->EnumerateHeaderLines(&iter, &name, &value)) { 1569 while (new_headers1->EnumerateHeaderLines(&iter, &name, &value)) {
1557 actual1.insert(std::pair<std::string, std::string>(name, value)); 1570 actual1.insert(std::pair<std::string, std::string>(name, value));
1558 } 1571 }
1559 EXPECT_EQ(expected1, actual1); 1572 EXPECT_EQ(expected1, actual1);
1560 EXPECT_EQ(0u, conflicting_extensions.size()); 1573 EXPECT_EQ(0u, warning_set.size());
1561 EXPECT_EQ(1u, capturing_net_log.GetSize()); 1574 EXPECT_EQ(1u, capturing_net_log.GetSize());
1562 } 1575 }
1563 1576
1564 TEST(ExtensionWebRequestHelpersTest, TestMergeOnAuthRequiredResponses) { 1577 TEST(ExtensionWebRequestHelpersTest, TestMergeOnAuthRequiredResponses) {
1565 net::CapturingBoundNetLog capturing_net_log; 1578 net::CapturingBoundNetLog capturing_net_log;
1566 net::BoundNetLog net_log = capturing_net_log.bound(); 1579 net::BoundNetLog net_log = capturing_net_log.bound();
1567 std::set<std::string> conflicting_extensions; 1580 ExtensionWarningSet warning_set;
1568 EventResponseDeltas deltas; 1581 EventResponseDeltas deltas;
1569 string16 username = ASCIIToUTF16("foo"); 1582 string16 username = ASCIIToUTF16("foo");
1570 string16 password = ASCIIToUTF16("bar"); 1583 string16 password = ASCIIToUTF16("bar");
1571 string16 password2 = ASCIIToUTF16("baz"); 1584 string16 password2 = ASCIIToUTF16("baz");
1572 1585
1573 // Check that we can handle if not returning credentials. 1586 // Check that we can handle if not returning credentials.
1574 linked_ptr<EventResponseDelta> d0( 1587 linked_ptr<EventResponseDelta> d0(
1575 new EventResponseDelta("extid0", base::Time::FromInternalValue(3000))); 1588 new EventResponseDelta("extid0", base::Time::FromInternalValue(3000)));
1576 deltas.push_back(d0); 1589 deltas.push_back(d0);
1577 net::AuthCredentials auth0; 1590 net::AuthCredentials auth0;
1578 bool credentials_set = MergeOnAuthRequiredResponses( 1591 bool credentials_set = MergeOnAuthRequiredResponses(
1579 deltas, &auth0, &conflicting_extensions, &net_log); 1592 deltas, &auth0, &warning_set, &net_log);
1580 EXPECT_FALSE(credentials_set); 1593 EXPECT_FALSE(credentials_set);
1581 EXPECT_TRUE(auth0.Empty()); 1594 EXPECT_TRUE(auth0.Empty());
1582 EXPECT_EQ(0u, conflicting_extensions.size()); 1595 EXPECT_EQ(0u, warning_set.size());
1583 EXPECT_EQ(0u, capturing_net_log.GetSize()); 1596 EXPECT_EQ(0u, capturing_net_log.GetSize());
1584 1597
1585 // Check that we can set AuthCredentials. 1598 // Check that we can set AuthCredentials.
1586 linked_ptr<EventResponseDelta> d1( 1599 linked_ptr<EventResponseDelta> d1(
1587 new EventResponseDelta("extid1", base::Time::FromInternalValue(2000))); 1600 new EventResponseDelta("extid1", base::Time::FromInternalValue(2000)));
1588 d1->auth_credentials.reset(new net::AuthCredentials(username, password)); 1601 d1->auth_credentials.reset(new net::AuthCredentials(username, password));
1589 deltas.push_back(d1); 1602 deltas.push_back(d1);
1590 deltas.sort(&InDecreasingExtensionInstallationTimeOrder); 1603 deltas.sort(&InDecreasingExtensionInstallationTimeOrder);
1591 conflicting_extensions.clear(); 1604 warning_set.clear();
1592 capturing_net_log.Clear(); 1605 capturing_net_log.Clear();
1593 net::AuthCredentials auth1; 1606 net::AuthCredentials auth1;
1594 credentials_set = MergeOnAuthRequiredResponses( 1607 credentials_set = MergeOnAuthRequiredResponses(
1595 deltas, &auth1, &conflicting_extensions, &net_log); 1608 deltas, &auth1, &warning_set, &net_log);
1596 EXPECT_TRUE(credentials_set); 1609 EXPECT_TRUE(credentials_set);
1597 EXPECT_FALSE(auth1.Empty()); 1610 EXPECT_FALSE(auth1.Empty());
1598 EXPECT_EQ(username, auth1.username()); 1611 EXPECT_EQ(username, auth1.username());
1599 EXPECT_EQ(password, auth1.password()); 1612 EXPECT_EQ(password, auth1.password());
1600 EXPECT_EQ(0u, conflicting_extensions.size()); 1613 EXPECT_EQ(0u, warning_set.size());
1601 EXPECT_EQ(1u, capturing_net_log.GetSize()); 1614 EXPECT_EQ(1u, capturing_net_log.GetSize());
1602 1615
1603 // Check that we set AuthCredentials only once. 1616 // Check that we set AuthCredentials only once.
1604 linked_ptr<EventResponseDelta> d2( 1617 linked_ptr<EventResponseDelta> d2(
1605 new EventResponseDelta("extid2", base::Time::FromInternalValue(1500))); 1618 new EventResponseDelta("extid2", base::Time::FromInternalValue(1500)));
1606 d2->auth_credentials.reset(new net::AuthCredentials(username, password2)); 1619 d2->auth_credentials.reset(new net::AuthCredentials(username, password2));
1607 deltas.push_back(d2); 1620 deltas.push_back(d2);
1608 deltas.sort(&InDecreasingExtensionInstallationTimeOrder); 1621 deltas.sort(&InDecreasingExtensionInstallationTimeOrder);
1609 conflicting_extensions.clear(); 1622 warning_set.clear();
1610 capturing_net_log.Clear(); 1623 capturing_net_log.Clear();
1611 net::AuthCredentials auth2; 1624 net::AuthCredentials auth2;
1612 credentials_set = MergeOnAuthRequiredResponses( 1625 credentials_set = MergeOnAuthRequiredResponses(
1613 deltas, &auth2, &conflicting_extensions, &net_log); 1626 deltas, &auth2, &warning_set, &net_log);
1614 EXPECT_TRUE(credentials_set); 1627 EXPECT_TRUE(credentials_set);
1615 EXPECT_FALSE(auth2.Empty()); 1628 EXPECT_FALSE(auth2.Empty());
1616 EXPECT_EQ(username, auth1.username()); 1629 EXPECT_EQ(username, auth1.username());
1617 EXPECT_EQ(password, auth1.password()); 1630 EXPECT_EQ(password, auth1.password());
1618 EXPECT_EQ(1u, conflicting_extensions.size()); 1631 EXPECT_EQ(1u, warning_set.size());
1619 EXPECT_TRUE(ContainsKey(conflicting_extensions, "extid2")); 1632 EXPECT_TRUE(HasWarning(warning_set, "extid2"));
1620 EXPECT_EQ(2u, capturing_net_log.GetSize()); 1633 EXPECT_EQ(2u, capturing_net_log.GetSize());
1621 1634
1622 // Check that we can set identical AuthCredentials twice without causing 1635 // Check that we can set identical AuthCredentials twice without causing
1623 // a conflict. 1636 // a conflict.
1624 linked_ptr<EventResponseDelta> d3( 1637 linked_ptr<EventResponseDelta> d3(
1625 new EventResponseDelta("extid3", base::Time::FromInternalValue(1000))); 1638 new EventResponseDelta("extid3", base::Time::FromInternalValue(1000)));
1626 d3->auth_credentials.reset(new net::AuthCredentials(username, password)); 1639 d3->auth_credentials.reset(new net::AuthCredentials(username, password));
1627 deltas.push_back(d3); 1640 deltas.push_back(d3);
1628 deltas.sort(&InDecreasingExtensionInstallationTimeOrder); 1641 deltas.sort(&InDecreasingExtensionInstallationTimeOrder);
1629 conflicting_extensions.clear(); 1642 warning_set.clear();
1630 capturing_net_log.Clear(); 1643 capturing_net_log.Clear();
1631 net::AuthCredentials auth3; 1644 net::AuthCredentials auth3;
1632 credentials_set = MergeOnAuthRequiredResponses( 1645 credentials_set = MergeOnAuthRequiredResponses(
1633 deltas, &auth3, &conflicting_extensions, &net_log); 1646 deltas, &auth3, &warning_set, &net_log);
1634 EXPECT_TRUE(credentials_set); 1647 EXPECT_TRUE(credentials_set);
1635 EXPECT_FALSE(auth3.Empty()); 1648 EXPECT_FALSE(auth3.Empty());
1636 EXPECT_EQ(username, auth1.username()); 1649 EXPECT_EQ(username, auth1.username());
1637 EXPECT_EQ(password, auth1.password()); 1650 EXPECT_EQ(password, auth1.password());
1638 EXPECT_EQ(1u, conflicting_extensions.size()); 1651 EXPECT_EQ(1u, warning_set.size());
1639 EXPECT_TRUE(ContainsKey(conflicting_extensions, "extid2")); 1652 EXPECT_TRUE(HasWarning(warning_set, "extid2"));
1640 EXPECT_EQ(3u, capturing_net_log.GetSize()); 1653 EXPECT_EQ(3u, capturing_net_log.GetSize());
1641 } 1654 }
1642 1655
1656 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698