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

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

Issue 1871713002: Convert //chrome/browser/extensions from scoped_ptr to std::unique_ptr (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 8 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
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 <stddef.h> 5 #include <stddef.h>
6 #include <stdint.h> 6 #include <stdint.h>
7 7
8 #include <map> 8 #include <map>
9 #include <memory>
9 #include <queue> 10 #include <queue>
10 #include <tuple> 11 #include <tuple>
11 12
12 #include "base/bind.h" 13 #include "base/bind.h"
13 #include "base/callback.h" 14 #include "base/callback.h"
14 #include "base/files/file_path.h" 15 #include "base/files/file_path.h"
15 #include "base/json/json_reader.h" 16 #include "base/json/json_reader.h"
16 #include "base/json/json_string_value_serializer.h" 17 #include "base/json/json_string_value_serializer.h"
17 #include "base/location.h" 18 #include "base/location.h"
18 #include "base/macros.h" 19 #include "base/macros.h"
19 #include "base/memory/scoped_ptr.h" 20 #include "base/memory/ptr_util.h"
20 #include "base/memory/weak_ptr.h" 21 #include "base/memory/weak_ptr.h"
21 #include "base/single_thread_task_runner.h" 22 #include "base/single_thread_task_runner.h"
22 #include "base/stl_util.h" 23 #include "base/stl_util.h"
23 #include "base/strings/string_piece.h" 24 #include "base/strings/string_piece.h"
24 #include "base/strings/string_split.h" 25 #include "base/strings/string_split.h"
25 #include "base/strings/stringprintf.h" 26 #include "base/strings/stringprintf.h"
26 #include "base/strings/utf_string_conversions.h" 27 #include "base/strings/utf_string_conversions.h"
27 #include "base/thread_task_runner_handle.h" 28 #include "base/thread_task_runner_handle.h"
28 #include "base/time/time.h" 29 #include "base/time/time.h"
29 #include "chrome/browser/content_settings/cookie_settings_factory.h" 30 #include "chrome/browser/content_settings/cookie_settings_factory.h"
(...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after
210 const std::vector<char>& bytes_2); 211 const std::vector<char>& bytes_2);
211 212
212 content::TestBrowserThreadBundle thread_bundle_; 213 content::TestBrowserThreadBundle thread_bundle_;
213 TestingProfile profile_; 214 TestingProfile profile_;
214 TestingProfileManager profile_manager_; 215 TestingProfileManager profile_manager_;
215 net::TestDelegate delegate_; 216 net::TestDelegate delegate_;
216 BooleanPrefMember enable_referrers_; 217 BooleanPrefMember enable_referrers_;
217 TestIPCSender ipc_sender_; 218 TestIPCSender ipc_sender_;
218 scoped_refptr<EventRouterForwarder> event_router_; 219 scoped_refptr<EventRouterForwarder> event_router_;
219 scoped_refptr<InfoMap> extension_info_map_; 220 scoped_refptr<InfoMap> extension_info_map_;
220 scoped_ptr<ChromeNetworkDelegate> network_delegate_; 221 std::unique_ptr<ChromeNetworkDelegate> network_delegate_;
221 scoped_ptr<net::TestURLRequestContext> context_; 222 std::unique_ptr<net::TestURLRequestContext> context_;
222 }; 223 };
223 224
224 // Tests that we handle disagreements among extensions about responses to 225 // Tests that we handle disagreements among extensions about responses to
225 // blocking events (redirection) by choosing the response from the 226 // blocking events (redirection) by choosing the response from the
226 // most-recently-installed extension. 227 // most-recently-installed extension.
227 TEST_F(ExtensionWebRequestTest, BlockingEventPrecedenceRedirect) { 228 TEST_F(ExtensionWebRequestTest, BlockingEventPrecedenceRedirect) {
228 std::string extension1_id("1"); 229 std::string extension1_id("1");
229 std::string extension2_id("2"); 230 std::string extension2_id("2");
230 ExtensionWebRequestEventRouter::RequestFilter filter; 231 ExtensionWebRequestEventRouter::RequestFilter filter;
231 const std::string kEventName(web_request::OnBeforeRequest::kEventName); 232 const std::string kEventName(web_request::OnBeforeRequest::kEventName);
232 base::WeakPtrFactory<TestIPCSender> ipc_sender_factory(&ipc_sender_); 233 base::WeakPtrFactory<TestIPCSender> ipc_sender_factory(&ipc_sender_);
233 ExtensionWebRequestEventRouter::GetInstance()->AddEventListener( 234 ExtensionWebRequestEventRouter::GetInstance()->AddEventListener(
234 &profile_, extension1_id, extension1_id, events::FOR_TEST, kEventName, 235 &profile_, extension1_id, extension1_id, events::FOR_TEST, kEventName,
235 kEventName + "/1", filter, ExtraInfoSpec::BLOCKING, 0, 0, 236 kEventName + "/1", filter, ExtraInfoSpec::BLOCKING, 0, 0,
236 ipc_sender_factory.GetWeakPtr()); 237 ipc_sender_factory.GetWeakPtr());
237 ExtensionWebRequestEventRouter::GetInstance()->AddEventListener( 238 ExtensionWebRequestEventRouter::GetInstance()->AddEventListener(
238 &profile_, extension2_id, extension2_id, events::FOR_TEST, kEventName, 239 &profile_, extension2_id, extension2_id, events::FOR_TEST, kEventName,
239 kEventName + "/2", filter, ExtraInfoSpec::BLOCKING, 0, 0, 240 kEventName + "/2", filter, ExtraInfoSpec::BLOCKING, 0, 0,
240 ipc_sender_factory.GetWeakPtr()); 241 ipc_sender_factory.GetWeakPtr());
241 242
242 net::URLRequestJobFactoryImpl job_factory; 243 net::URLRequestJobFactoryImpl job_factory;
243 job_factory.SetProtocolHandler( 244 job_factory.SetProtocolHandler(
244 url::kAboutScheme, 245 url::kAboutScheme,
245 make_scoped_ptr(new about_handler::AboutProtocolHandler())); 246 base::WrapUnique(new about_handler::AboutProtocolHandler()));
246 context_->set_job_factory(&job_factory); 247 context_->set_job_factory(&job_factory);
247 248
248 GURL redirect_url("about:redirected"); 249 GURL redirect_url("about:redirected");
249 GURL not_chosen_redirect_url("about:not_chosen"); 250 GURL not_chosen_redirect_url("about:not_chosen");
250 251
251 scoped_ptr<net::URLRequest> request(context_->CreateRequest( 252 std::unique_ptr<net::URLRequest> request(context_->CreateRequest(
252 GURL("about:blank"), net::DEFAULT_PRIORITY, &delegate_)); 253 GURL("about:blank"), net::DEFAULT_PRIORITY, &delegate_));
253 { 254 {
254 // onBeforeRequest will be dispatched twice initially. The second response - 255 // onBeforeRequest will be dispatched twice initially. The second response -
255 // the redirect - should win, since it has a later |install_time|. The 256 // the redirect - should win, since it has a later |install_time|. The
256 // redirect will dispatch another pair of onBeforeRequest. There, the first 257 // redirect will dispatch another pair of onBeforeRequest. There, the first
257 // response should win (later |install_time|). 258 // response should win (later |install_time|).
258 ExtensionWebRequestEventRouter::EventResponse* response = NULL; 259 ExtensionWebRequestEventRouter::EventResponse* response = NULL;
259 260
260 // Extension1 response. Arrives first, but ignored due to install_time. 261 // Extension1 response. Arrives first, but ignored due to install_time.
261 response = new ExtensionWebRequestEventRouter::EventResponse( 262 response = new ExtensionWebRequestEventRouter::EventResponse(
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
296 297
297 EXPECT_TRUE(!request->is_pending()); 298 EXPECT_TRUE(!request->is_pending());
298 EXPECT_EQ(net::URLRequestStatus::SUCCESS, request->status().status()); 299 EXPECT_EQ(net::URLRequestStatus::SUCCESS, request->status().status());
299 EXPECT_EQ(0, request->status().error()); 300 EXPECT_EQ(0, request->status().error());
300 EXPECT_EQ(redirect_url, request->url()); 301 EXPECT_EQ(redirect_url, request->url());
301 EXPECT_EQ(2U, request->url_chain().size()); 302 EXPECT_EQ(2U, request->url_chain().size());
302 EXPECT_EQ(0U, ipc_sender_.GetNumTasks()); 303 EXPECT_EQ(0U, ipc_sender_.GetNumTasks());
303 } 304 }
304 305
305 // Now test the same thing but the extensions answer in reverse order. 306 // Now test the same thing but the extensions answer in reverse order.
306 scoped_ptr<net::URLRequest> request2(context_->CreateRequest( 307 std::unique_ptr<net::URLRequest> request2(context_->CreateRequest(
307 GURL("about:blank"), net::DEFAULT_PRIORITY, &delegate_)); 308 GURL("about:blank"), net::DEFAULT_PRIORITY, &delegate_));
308 { 309 {
309 ExtensionWebRequestEventRouter::EventResponse* response = NULL; 310 ExtensionWebRequestEventRouter::EventResponse* response = NULL;
310 311
311 // Extension2 response. Arrives first, and chosen because of install_time. 312 // Extension2 response. Arrives first, and chosen because of install_time.
312 response = new ExtensionWebRequestEventRouter::EventResponse( 313 response = new ExtensionWebRequestEventRouter::EventResponse(
313 extension2_id, base::Time::FromDoubleT(2)); 314 extension2_id, base::Time::FromDoubleT(2));
314 response->new_url = redirect_url; 315 response->new_url = redirect_url;
315 ipc_sender_.PushTask( 316 ipc_sender_.PushTask(
316 base::Bind(&EventHandledOnIOThread, 317 base::Bind(&EventHandledOnIOThread,
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
370 ExtensionWebRequestEventRouter::GetInstance()->AddEventListener( 371 ExtensionWebRequestEventRouter::GetInstance()->AddEventListener(
371 &profile_, extension1_id, extension1_id, events::FOR_TEST, kEventName, 372 &profile_, extension1_id, extension1_id, events::FOR_TEST, kEventName,
372 kEventName + "/1", filter, ExtraInfoSpec::BLOCKING, 0, 0, 373 kEventName + "/1", filter, ExtraInfoSpec::BLOCKING, 0, 0,
373 ipc_sender_factory.GetWeakPtr()); 374 ipc_sender_factory.GetWeakPtr());
374 ExtensionWebRequestEventRouter::GetInstance()->AddEventListener( 375 ExtensionWebRequestEventRouter::GetInstance()->AddEventListener(
375 &profile_, extension2_id, extension2_id, events::FOR_TEST, kEventName, 376 &profile_, extension2_id, extension2_id, events::FOR_TEST, kEventName,
376 kEventName + "/2", filter, ExtraInfoSpec::BLOCKING, 0, 0, 377 kEventName + "/2", filter, ExtraInfoSpec::BLOCKING, 0, 0,
377 ipc_sender_factory.GetWeakPtr()); 378 ipc_sender_factory.GetWeakPtr());
378 379
379 GURL request_url("about:blank"); 380 GURL request_url("about:blank");
380 scoped_ptr<net::URLRequest> request(context_->CreateRequest( 381 std::unique_ptr<net::URLRequest> request(
381 request_url, net::DEFAULT_PRIORITY, &delegate_)); 382 context_->CreateRequest(request_url, net::DEFAULT_PRIORITY, &delegate_));
382 383
383 // onBeforeRequest will be dispatched twice. The second response - 384 // onBeforeRequest will be dispatched twice. The second response -
384 // the redirect - would win, since it has a later |install_time|, but 385 // the redirect - would win, since it has a later |install_time|, but
385 // the first response takes precedence because cancel >> redirect. 386 // the first response takes precedence because cancel >> redirect.
386 GURL redirect_url("about:redirected"); 387 GURL redirect_url("about:redirected");
387 ExtensionWebRequestEventRouter::EventResponse* response = NULL; 388 ExtensionWebRequestEventRouter::EventResponse* response = NULL;
388 389
389 // Extension1 response. Arrives first, would be ignored in principle due to 390 // Extension1 response. Arrives first, would be ignored in principle due to
390 // install_time but "cancel" always wins. 391 // install_time but "cancel" always wins.
391 response = new ExtensionWebRequestEventRouter::EventResponse( 392 response = new ExtensionWebRequestEventRouter::EventResponse(
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
438 base::WeakPtrFactory<TestIPCSender> ipc_sender_factory(&ipc_sender_); 439 base::WeakPtrFactory<TestIPCSender> ipc_sender_factory(&ipc_sender_);
439 ExtensionWebRequestEventRouter::GetInstance()->AddEventListener( 440 ExtensionWebRequestEventRouter::GetInstance()->AddEventListener(
440 &profile_, extension_id, extension_id, events::FOR_TEST, kEventName, 441 &profile_, extension_id, extension_id, events::FOR_TEST, kEventName,
441 kEventName + "/1", filter, ExtraInfoSpec::BLOCKING, 0, 0, 442 kEventName + "/1", filter, ExtraInfoSpec::BLOCKING, 0, 0,
442 ipc_sender_factory.GetWeakPtr()); 443 ipc_sender_factory.GetWeakPtr());
443 ExtensionWebRequestEventRouter::GetInstance()->AddEventListener( 444 ExtensionWebRequestEventRouter::GetInstance()->AddEventListener(
444 &profile_, extension_id, extension_id, events::FOR_TEST, kEventName2, 445 &profile_, extension_id, extension_id, events::FOR_TEST, kEventName2,
445 kEventName2 + "/1", filter, 0, 0, 0, ipc_sender_factory.GetWeakPtr()); 446 kEventName2 + "/1", filter, 0, 0, 0, ipc_sender_factory.GetWeakPtr());
446 447
447 GURL request_url("about:blank"); 448 GURL request_url("about:blank");
448 scoped_ptr<net::URLRequest> request(context_->CreateRequest( 449 std::unique_ptr<net::URLRequest> request(
449 request_url, net::DEFAULT_PRIORITY, &delegate_)); 450 context_->CreateRequest(request_url, net::DEFAULT_PRIORITY, &delegate_));
450 451
451 ExtensionWebRequestEventRouter::EventResponse* response = NULL; 452 ExtensionWebRequestEventRouter::EventResponse* response = NULL;
452 453
453 // Extension response for the OnBeforeRequest handler. This should not be 454 // Extension response for the OnBeforeRequest handler. This should not be
454 // processed because request is canceled before the handler responds. 455 // processed because request is canceled before the handler responds.
455 response = new ExtensionWebRequestEventRouter::EventResponse( 456 response = new ExtensionWebRequestEventRouter::EventResponse(
456 extension_id, base::Time::FromDoubleT(1)); 457 extension_id, base::Time::FromDoubleT(1));
457 GURL redirect_url("about:redirected"); 458 GURL redirect_url("about:redirected");
458 response->new_url = redirect_url; 459 response->new_url = redirect_url;
459 ipc_sender_.PushTask( 460 ipc_sender_.PushTask(
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
501 502
502 } // namespace 503 } // namespace
503 504
504 void ExtensionWebRequestTest::FireURLRequestWithData( 505 void ExtensionWebRequestTest::FireURLRequestWithData(
505 const std::string& method, 506 const std::string& method,
506 const char* content_type, 507 const char* content_type,
507 const std::vector<char>& bytes_1, 508 const std::vector<char>& bytes_1,
508 const std::vector<char>& bytes_2) { 509 const std::vector<char>& bytes_2) {
509 // The request URL can be arbitrary but must have an HTTP or HTTPS scheme. 510 // The request URL can be arbitrary but must have an HTTP or HTTPS scheme.
510 GURL request_url("http://www.example.com"); 511 GURL request_url("http://www.example.com");
511 scoped_ptr<net::URLRequest> request(context_->CreateRequest( 512 std::unique_ptr<net::URLRequest> request(
512 request_url, net::DEFAULT_PRIORITY, &delegate_)); 513 context_->CreateRequest(request_url, net::DEFAULT_PRIORITY, &delegate_));
513 request->set_method(method); 514 request->set_method(method);
514 if (content_type != NULL) { 515 if (content_type != NULL) {
515 request->SetExtraRequestHeaderByName(net::HttpRequestHeaders::kContentType, 516 request->SetExtraRequestHeaderByName(net::HttpRequestHeaders::kContentType,
516 content_type, 517 content_type,
517 true /* overwrite */); 518 true /* overwrite */);
518 } 519 }
519 std::vector<scoped_ptr<net::UploadElementReader>> element_readers; 520 std::vector<std::unique_ptr<net::UploadElementReader>> element_readers;
520 element_readers.push_back(make_scoped_ptr( 521 element_readers.push_back(base::WrapUnique(
521 new net::UploadBytesElementReader(&(bytes_1[0]), bytes_1.size()))); 522 new net::UploadBytesElementReader(&(bytes_1[0]), bytes_1.size())));
522 element_readers.push_back(make_scoped_ptr(new net::UploadFileElementReader( 523 element_readers.push_back(base::WrapUnique(new net::UploadFileElementReader(
523 base::ThreadTaskRunnerHandle::Get().get(), base::FilePath(), 0, 0, 524 base::ThreadTaskRunnerHandle::Get().get(), base::FilePath(), 0, 0,
524 base::Time()))); 525 base::Time())));
525 element_readers.push_back(make_scoped_ptr( 526 element_readers.push_back(base::WrapUnique(
526 new net::UploadBytesElementReader(&(bytes_2[0]), bytes_2.size()))); 527 new net::UploadBytesElementReader(&(bytes_2[0]), bytes_2.size())));
527 request->set_upload(make_scoped_ptr( 528 request->set_upload(base::WrapUnique(
528 new net::ElementsUploadDataStream(std::move(element_readers), 0))); 529 new net::ElementsUploadDataStream(std::move(element_readers), 0)));
529 ipc_sender_.PushTask(base::Bind(&base::DoNothing)); 530 ipc_sender_.PushTask(base::Bind(&base::DoNothing));
530 request->Start(); 531 request->Start();
531 } 532 }
532 533
533 TEST_F(ExtensionWebRequestTest, AccessRequestBodyData) { 534 TEST_F(ExtensionWebRequestTest, AccessRequestBodyData) {
534 // We verify that URLRequest body is accessible to OnBeforeRequest listeners. 535 // We verify that URLRequest body is accessible to OnBeforeRequest listeners.
535 // These testing steps are repeated twice in a row: 536 // These testing steps are repeated twice in a row:
536 // 1. Register an extension requesting "requestBody" in ExtraInfoSpec and 537 // 1. Register an extension requesting "requestBody" in ExtraInfoSpec and
537 // file a POST URLRequest with a multipart-encoded form. See it getting 538 // file a POST URLRequest with a multipart-encoded form. See it getting
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
578 const std::string kErrorPath(kBodyPath + "." + keys::kRequestBodyErrorKey); 579 const std::string kErrorPath(kBodyPath + "." + keys::kRequestBodyErrorKey);
579 const std::string* const kPath[] = { 580 const std::string* const kPath[] = {
580 &kFormDataPath, 581 &kFormDataPath,
581 &kBodyPath, 582 &kBodyPath,
582 &kRawPath, 583 &kRawPath,
583 &kRawPath 584 &kRawPath
584 }; 585 };
585 // Contents of formData. 586 // Contents of formData.
586 const char kFormData[] = 587 const char kFormData[] =
587 "{\"A\":[\"test text\"],\"B\":[\"\"],\"C\":[\"test password\"]}"; 588 "{\"A\":[\"test text\"],\"B\":[\"\"],\"C\":[\"test password\"]}";
588 scoped_ptr<const base::Value> form_data = base::JSONReader::Read(kFormData); 589 std::unique_ptr<const base::Value> form_data =
590 base::JSONReader::Read(kFormData);
589 ASSERT_TRUE(form_data.get() != NULL); 591 ASSERT_TRUE(form_data.get() != NULL);
590 ASSERT_TRUE(form_data->GetType() == base::Value::TYPE_DICTIONARY); 592 ASSERT_TRUE(form_data->GetType() == base::Value::TYPE_DICTIONARY);
591 // Contents of raw. 593 // Contents of raw.
592 base::ListValue raw; 594 base::ListValue raw;
593 extensions::subtle::AppendKeyValuePair( 595 extensions::subtle::AppendKeyValuePair(
594 keys::kRequestBodyRawBytesKey, 596 keys::kRequestBodyRawBytesKey,
595 BinaryValue::CreateWithCopiedBuffer(kPlainBlock1, kPlainBlock1Length), 597 BinaryValue::CreateWithCopiedBuffer(kPlainBlock1, kPlainBlock1Length),
596 &raw); 598 &raw);
597 extensions::subtle::AppendKeyValuePair( 599 extensions::subtle::AppendKeyValuePair(
598 keys::kRequestBodyRawFileKey, 600 keys::kRequestBodyRawFileKey,
(...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after
795 // Subscribe to OnBeforeRequest with requestBody requirement. 797 // Subscribe to OnBeforeRequest with requestBody requirement.
796 ExtensionWebRequestEventRouter::GetInstance()->AddEventListener( 798 ExtensionWebRequestEventRouter::GetInstance()->AddEventListener(
797 &profile_, extension_id, extension_id, events::FOR_TEST, kEventName, 799 &profile_, extension_id, extension_id, events::FOR_TEST, kEventName,
798 kEventName + "/1", filter, extra_info_spec, 0, 0, 800 kEventName + "/1", filter, extra_info_spec, 0, 0,
799 ipc_sender_factory.GetWeakPtr()); 801 ipc_sender_factory.GetWeakPtr());
800 802
801 // The request URL can be arbitrary but must have an HTTP or HTTPS scheme. 803 // The request URL can be arbitrary but must have an HTTP or HTTPS scheme.
802 const GURL request_url("http://www.example.com"); 804 const GURL request_url("http://www.example.com");
803 805
804 for (size_t i = 0; i < arraysize(kMethods); ++i) { 806 for (size_t i = 0; i < arraysize(kMethods); ++i) {
805 scoped_ptr<net::URLRequest> request(context_->CreateRequest( 807 std::unique_ptr<net::URLRequest> request(context_->CreateRequest(
806 request_url, net::DEFAULT_PRIORITY, &delegate_)); 808 request_url, net::DEFAULT_PRIORITY, &delegate_));
807 request->set_method(kMethods[i]); 809 request->set_method(kMethods[i]);
808 ipc_sender_.PushTask(base::Bind(&base::DoNothing)); 810 ipc_sender_.PushTask(base::Bind(&base::DoNothing));
809 request->Start(); 811 request->Start();
810 } 812 }
811 813
812 // We inspect the result in the message list of |ipc_sender_| later. 814 // We inspect the result in the message list of |ipc_sender_| later.
813 base::MessageLoop::current()->RunUntilIdle(); 815 base::MessageLoop::current()->RunUntilIdle();
814 816
815 ExtensionWebRequestEventRouter::GetInstance()->RemoveEventListener( 817 ExtensionWebRequestEventRouter::GetInstance()->RemoveEventListener(
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
884 } 886 }
885 887
886 content::TestBrowserThreadBundle thread_bundle_; 888 content::TestBrowserThreadBundle thread_bundle_;
887 TestingProfile profile_; 889 TestingProfile profile_;
888 TestingProfileManager profile_manager_; 890 TestingProfileManager profile_manager_;
889 net::TestDelegate delegate_; 891 net::TestDelegate delegate_;
890 BooleanPrefMember enable_referrers_; 892 BooleanPrefMember enable_referrers_;
891 TestIPCSender ipc_sender_; 893 TestIPCSender ipc_sender_;
892 scoped_refptr<EventRouterForwarder> event_router_; 894 scoped_refptr<EventRouterForwarder> event_router_;
893 scoped_refptr<InfoMap> extension_info_map_; 895 scoped_refptr<InfoMap> extension_info_map_;
894 scoped_ptr<ChromeNetworkDelegate> network_delegate_; 896 std::unique_ptr<ChromeNetworkDelegate> network_delegate_;
895 scoped_ptr<net::MockHostResolver> host_resolver_; 897 std::unique_ptr<net::MockHostResolver> host_resolver_;
896 scoped_ptr<net::TestURLRequestContext> context_; 898 std::unique_ptr<net::TestURLRequestContext> context_;
897 }; 899 };
898 900
899 TEST_P(ExtensionWebRequestHeaderModificationTest, TestModifications) { 901 TEST_P(ExtensionWebRequestHeaderModificationTest, TestModifications) {
900 std::string extension1_id("1"); 902 std::string extension1_id("1");
901 std::string extension2_id("2"); 903 std::string extension2_id("2");
902 std::string extension3_id("3"); 904 std::string extension3_id("3");
903 ExtensionWebRequestEventRouter::RequestFilter filter; 905 ExtensionWebRequestEventRouter::RequestFilter filter;
904 const std::string kEventName(keys::kOnBeforeSendHeadersEvent); 906 const std::string kEventName(keys::kOnBeforeSendHeadersEvent);
905 base::WeakPtrFactory<TestIPCSender> ipc_sender_factory(&ipc_sender_); 907 base::WeakPtrFactory<TestIPCSender> ipc_sender_factory(&ipc_sender_);
906 908
907 // Install two extensions that can modify headers. Extension 2 has 909 // Install two extensions that can modify headers. Extension 2 has
908 // higher precedence than extension 1. 910 // higher precedence than extension 1.
909 ExtensionWebRequestEventRouter::GetInstance()->AddEventListener( 911 ExtensionWebRequestEventRouter::GetInstance()->AddEventListener(
910 &profile_, extension1_id, extension1_id, events::FOR_TEST, kEventName, 912 &profile_, extension1_id, extension1_id, events::FOR_TEST, kEventName,
911 kEventName + "/1", filter, ExtraInfoSpec::BLOCKING, 0, 0, 913 kEventName + "/1", filter, ExtraInfoSpec::BLOCKING, 0, 0,
912 ipc_sender_factory.GetWeakPtr()); 914 ipc_sender_factory.GetWeakPtr());
913 ExtensionWebRequestEventRouter::GetInstance()->AddEventListener( 915 ExtensionWebRequestEventRouter::GetInstance()->AddEventListener(
914 &profile_, extension2_id, extension2_id, events::FOR_TEST, kEventName, 916 &profile_, extension2_id, extension2_id, events::FOR_TEST, kEventName,
915 kEventName + "/2", filter, ExtraInfoSpec::BLOCKING, 0, 0, 917 kEventName + "/2", filter, ExtraInfoSpec::BLOCKING, 0, 0,
916 ipc_sender_factory.GetWeakPtr()); 918 ipc_sender_factory.GetWeakPtr());
917 919
918 // Install one extension that observes the final headers. 920 // Install one extension that observes the final headers.
919 ExtensionWebRequestEventRouter::GetInstance()->AddEventListener( 921 ExtensionWebRequestEventRouter::GetInstance()->AddEventListener(
920 &profile_, extension3_id, extension3_id, events::FOR_TEST, 922 &profile_, extension3_id, extension3_id, events::FOR_TEST,
921 keys::kOnSendHeadersEvent, std::string(keys::kOnSendHeadersEvent) + "/3", 923 keys::kOnSendHeadersEvent, std::string(keys::kOnSendHeadersEvent) + "/3",
922 filter, ExtraInfoSpec::REQUEST_HEADERS, 0, 0, 924 filter, ExtraInfoSpec::REQUEST_HEADERS, 0, 0,
923 ipc_sender_factory.GetWeakPtr()); 925 ipc_sender_factory.GetWeakPtr());
924 926
925 GURL request_url("http://doesnotexist/does_not_exist.html"); 927 GURL request_url("http://doesnotexist/does_not_exist.html");
926 scoped_ptr<net::URLRequest> request(context_->CreateRequest( 928 std::unique_ptr<net::URLRequest> request(
927 request_url, net::DEFAULT_PRIORITY, &delegate_)); 929 context_->CreateRequest(request_url, net::DEFAULT_PRIORITY, &delegate_));
928 930
929 // Initialize headers available before extensions are notified of the 931 // Initialize headers available before extensions are notified of the
930 // onBeforeSendHeaders event. 932 // onBeforeSendHeaders event.
931 HeaderModificationTest test = GetParam(); 933 HeaderModificationTest test = GetParam();
932 net::HttpRequestHeaders before_headers; 934 net::HttpRequestHeaders before_headers;
933 for (int i = 0; i < test.before_size; ++i) 935 for (int i = 0; i < test.before_size; ++i)
934 before_headers.SetHeader(test.before[i].name, test.before[i].value); 936 before_headers.SetHeader(test.before[i].name, test.before[i].value);
935 request->SetExtraRequestHeaders(before_headers); 937 request->SetExtraRequestHeaders(before_headers);
936 938
937 // Gather the modifications to the headers for the respective extensions. 939 // Gather the modifications to the headers for the respective extensions.
(...skipping 322 matching lines...) Expand 10 before | Expand all | Expand 10 after
1260 base::ListValue list_value; 1262 base::ListValue list_value;
1261 list_value.Append(new base::FundamentalValue('1')); 1263 list_value.Append(new base::FundamentalValue('1'));
1262 list_value.Append(new base::FundamentalValue('2')); 1264 list_value.Append(new base::FundamentalValue('2'));
1263 list_value.Append(new base::FundamentalValue('3')); 1265 list_value.Append(new base::FundamentalValue('3'));
1264 list_value.Append(new base::FundamentalValue(0xFE)); 1266 list_value.Append(new base::FundamentalValue(0xFE));
1265 list_value.Append(new base::FundamentalValue(0xD1)); 1267 list_value.Append(new base::FundamentalValue(0xD1));
1266 1268
1267 unsigned char char_value[] = {'1', '2', '3', 0xFE, 0xD1}; 1269 unsigned char char_value[] = {'1', '2', '3', 0xFE, 0xD1};
1268 std::string string_value(reinterpret_cast<char *>(char_value), 5); 1270 std::string string_value(reinterpret_cast<char *>(char_value), 5);
1269 1271
1270 scoped_ptr<base::ListValue> converted_list(StringToCharList(string_value)); 1272 std::unique_ptr<base::ListValue> converted_list(
1273 StringToCharList(string_value));
1271 EXPECT_TRUE(list_value.Equals(converted_list.get())); 1274 EXPECT_TRUE(list_value.Equals(converted_list.get()));
1272 1275
1273 std::string converted_string; 1276 std::string converted_string;
1274 EXPECT_TRUE(CharListToString(&list_value, &converted_string)); 1277 EXPECT_TRUE(CharListToString(&list_value, &converted_string));
1275 EXPECT_EQ(string_value, converted_string); 1278 EXPECT_EQ(string_value, converted_string);
1276 } 1279 }
1277 1280
1278 TEST(ExtensionWebRequestHelpersTest, TestCalculateOnBeforeRequestDelta) { 1281 TEST(ExtensionWebRequestHelpersTest, TestCalculateOnBeforeRequestDelta) {
1279 const bool cancel = true; 1282 const bool cancel = true;
1280 const GURL localhost("http://localhost"); 1283 const GURL localhost("http://localhost");
1281 scoped_ptr<EventResponseDelta> delta( 1284 std::unique_ptr<EventResponseDelta> delta(CalculateOnBeforeRequestDelta(
1282 CalculateOnBeforeRequestDelta("extid", base::Time::Now(), 1285 "extid", base::Time::Now(), cancel, localhost));
1283 cancel, localhost));
1284 ASSERT_TRUE(delta.get()); 1286 ASSERT_TRUE(delta.get());
1285 EXPECT_TRUE(delta->cancel); 1287 EXPECT_TRUE(delta->cancel);
1286 EXPECT_EQ(localhost, delta->new_url); 1288 EXPECT_EQ(localhost, delta->new_url);
1287 } 1289 }
1288 1290
1289 TEST(ExtensionWebRequestHelpersTest, TestCalculateOnBeforeSendHeadersDelta) { 1291 TEST(ExtensionWebRequestHelpersTest, TestCalculateOnBeforeSendHeadersDelta) {
1290 const bool cancel = true; 1292 const bool cancel = true;
1291 std::string value; 1293 std::string value;
1292 net::HttpRequestHeaders old_headers; 1294 net::HttpRequestHeaders old_headers;
1293 old_headers.AddHeadersFromString("key1: value1\r\n" 1295 old_headers.AddHeadersFromString("key1: value1\r\n"
1294 "key2: value2\r\n"); 1296 "key2: value2\r\n");
1295 1297
1296 // Test adding a header. 1298 // Test adding a header.
1297 net::HttpRequestHeaders new_headers_added; 1299 net::HttpRequestHeaders new_headers_added;
1298 new_headers_added.AddHeadersFromString("key1: value1\r\n" 1300 new_headers_added.AddHeadersFromString("key1: value1\r\n"
1299 "key3: value3\r\n" 1301 "key3: value3\r\n"
1300 "key2: value2\r\n"); 1302 "key2: value2\r\n");
1301 scoped_ptr<EventResponseDelta> delta_added( 1303 std::unique_ptr<EventResponseDelta> delta_added(
1302 CalculateOnBeforeSendHeadersDelta("extid", base::Time::Now(), cancel, 1304 CalculateOnBeforeSendHeadersDelta("extid", base::Time::Now(), cancel,
1303 &old_headers, &new_headers_added)); 1305 &old_headers, &new_headers_added));
1304 ASSERT_TRUE(delta_added.get()); 1306 ASSERT_TRUE(delta_added.get());
1305 EXPECT_TRUE(delta_added->cancel); 1307 EXPECT_TRUE(delta_added->cancel);
1306 ASSERT_TRUE(delta_added->modified_request_headers.GetHeader("key3", &value)); 1308 ASSERT_TRUE(delta_added->modified_request_headers.GetHeader("key3", &value));
1307 EXPECT_EQ("value3", value); 1309 EXPECT_EQ("value3", value);
1308 1310
1309 // Test deleting a header. 1311 // Test deleting a header.
1310 net::HttpRequestHeaders new_headers_deleted; 1312 net::HttpRequestHeaders new_headers_deleted;
1311 new_headers_deleted.AddHeadersFromString("key1: value1\r\n"); 1313 new_headers_deleted.AddHeadersFromString("key1: value1\r\n");
1312 scoped_ptr<EventResponseDelta> delta_deleted( 1314 std::unique_ptr<EventResponseDelta> delta_deleted(
1313 CalculateOnBeforeSendHeadersDelta("extid", base::Time::Now(), cancel, 1315 CalculateOnBeforeSendHeadersDelta("extid", base::Time::Now(), cancel,
1314 &old_headers, &new_headers_deleted)); 1316 &old_headers, &new_headers_deleted));
1315 ASSERT_TRUE(delta_deleted.get()); 1317 ASSERT_TRUE(delta_deleted.get());
1316 ASSERT_EQ(1u, delta_deleted->deleted_request_headers.size()); 1318 ASSERT_EQ(1u, delta_deleted->deleted_request_headers.size());
1317 ASSERT_EQ("key2", delta_deleted->deleted_request_headers.front()); 1319 ASSERT_EQ("key2", delta_deleted->deleted_request_headers.front());
1318 1320
1319 // Test modifying a header. 1321 // Test modifying a header.
1320 net::HttpRequestHeaders new_headers_modified; 1322 net::HttpRequestHeaders new_headers_modified;
1321 new_headers_modified.AddHeadersFromString("key1: value1\r\n" 1323 new_headers_modified.AddHeadersFromString("key1: value1\r\n"
1322 "key2: value3\r\n"); 1324 "key2: value3\r\n");
1323 scoped_ptr<EventResponseDelta> delta_modified( 1325 std::unique_ptr<EventResponseDelta> delta_modified(
1324 CalculateOnBeforeSendHeadersDelta("extid", base::Time::Now(), cancel, 1326 CalculateOnBeforeSendHeadersDelta("extid", base::Time::Now(), cancel,
1325 &old_headers, &new_headers_modified)); 1327 &old_headers, &new_headers_modified));
1326 ASSERT_TRUE(delta_modified.get()); 1328 ASSERT_TRUE(delta_modified.get());
1327 EXPECT_TRUE(delta_modified->deleted_request_headers.empty()); 1329 EXPECT_TRUE(delta_modified->deleted_request_headers.empty());
1328 ASSERT_TRUE( 1330 ASSERT_TRUE(
1329 delta_modified->modified_request_headers.GetHeader("key2", &value)); 1331 delta_modified->modified_request_headers.GetHeader("key2", &value));
1330 EXPECT_EQ("value3", value); 1332 EXPECT_EQ("value3", value);
1331 1333
1332 // Test modifying a header if extension author just appended a new (key, 1334 // Test modifying a header if extension author just appended a new (key,
1333 // value) pair with a key that existed before. This is incorrect 1335 // value) pair with a key that existed before. This is incorrect
1334 // usage of the API that shall be handled gracefully. 1336 // usage of the API that shall be handled gracefully.
1335 net::HttpRequestHeaders new_headers_modified2; 1337 net::HttpRequestHeaders new_headers_modified2;
1336 new_headers_modified2.AddHeadersFromString("key1: value1\r\n" 1338 new_headers_modified2.AddHeadersFromString("key1: value1\r\n"
1337 "key2: value2\r\n" 1339 "key2: value2\r\n"
1338 "key2: value3\r\n"); 1340 "key2: value3\r\n");
1339 scoped_ptr<EventResponseDelta> delta_modified2( 1341 std::unique_ptr<EventResponseDelta> delta_modified2(
1340 CalculateOnBeforeSendHeadersDelta("extid", base::Time::Now(), cancel, 1342 CalculateOnBeforeSendHeadersDelta("extid", base::Time::Now(), cancel,
1341 &old_headers, &new_headers_modified)); 1343 &old_headers, &new_headers_modified));
1342 ASSERT_TRUE(delta_modified2.get()); 1344 ASSERT_TRUE(delta_modified2.get());
1343 EXPECT_TRUE(delta_modified2->deleted_request_headers.empty()); 1345 EXPECT_TRUE(delta_modified2->deleted_request_headers.empty());
1344 ASSERT_TRUE( 1346 ASSERT_TRUE(
1345 delta_modified2->modified_request_headers.GetHeader("key2", &value)); 1347 delta_modified2->modified_request_headers.GetHeader("key2", &value));
1346 EXPECT_EQ("value3", value); 1348 EXPECT_EQ("value3", value);
1347 } 1349 }
1348 1350
1349 TEST(ExtensionWebRequestHelpersTest, TestCalculateOnHeadersReceivedDelta) { 1351 TEST(ExtensionWebRequestHelpersTest, TestCalculateOnHeadersReceivedDelta) {
1350 const bool cancel = true; 1352 const bool cancel = true;
1351 char base_headers_string[] = 1353 char base_headers_string[] =
1352 "HTTP/1.0 200 OK\r\n" 1354 "HTTP/1.0 200 OK\r\n"
1353 "Key1: Value1\r\n" 1355 "Key1: Value1\r\n"
1354 "Key2: Value2, Bar\r\n" 1356 "Key2: Value2, Bar\r\n"
1355 "Key3: Value3\r\n" 1357 "Key3: Value3\r\n"
1356 "Key5: Value5, end5\r\n" 1358 "Key5: Value5, end5\r\n"
1357 "\r\n"; 1359 "\r\n";
1358 scoped_refptr<net::HttpResponseHeaders> base_headers( 1360 scoped_refptr<net::HttpResponseHeaders> base_headers(
1359 new net::HttpResponseHeaders( 1361 new net::HttpResponseHeaders(
1360 net::HttpUtil::AssembleRawHeaders( 1362 net::HttpUtil::AssembleRawHeaders(
1361 base_headers_string, sizeof(base_headers_string)))); 1363 base_headers_string, sizeof(base_headers_string))));
1362 1364
1363 ResponseHeaders new_headers; 1365 ResponseHeaders new_headers;
1364 new_headers.push_back(ResponseHeader("kEy1", "Value1")); // Unchanged 1366 new_headers.push_back(ResponseHeader("kEy1", "Value1")); // Unchanged
1365 new_headers.push_back(ResponseHeader("Key2", "Value1")); // Modified 1367 new_headers.push_back(ResponseHeader("Key2", "Value1")); // Modified
1366 // Key3 is deleted 1368 // Key3 is deleted
1367 new_headers.push_back(ResponseHeader("Key4", "Value4")); // Added 1369 new_headers.push_back(ResponseHeader("Key4", "Value4")); // Added
1368 new_headers.push_back(ResponseHeader("Key5", "Value5, end5")); // Unchanged 1370 new_headers.push_back(ResponseHeader("Key5", "Value5, end5")); // Unchanged
1369 GURL effective_new_url; 1371 GURL effective_new_url;
1370 1372
1371 scoped_ptr<EventResponseDelta> delta( 1373 std::unique_ptr<EventResponseDelta> delta(CalculateOnHeadersReceivedDelta(
1372 CalculateOnHeadersReceivedDelta("extid", 1374 "extid", base::Time::Now(), cancel, effective_new_url, base_headers.get(),
1373 base::Time::Now(), 1375 &new_headers));
1374 cancel,
1375 effective_new_url,
1376 base_headers.get(),
1377 &new_headers));
1378 ASSERT_TRUE(delta.get()); 1376 ASSERT_TRUE(delta.get());
1379 EXPECT_TRUE(delta->cancel); 1377 EXPECT_TRUE(delta->cancel);
1380 EXPECT_EQ(2u, delta->added_response_headers.size()); 1378 EXPECT_EQ(2u, delta->added_response_headers.size());
1381 EXPECT_TRUE(Contains(delta->added_response_headers, 1379 EXPECT_TRUE(Contains(delta->added_response_headers,
1382 ResponseHeader("Key2", "Value1"))); 1380 ResponseHeader("Key2", "Value1")));
1383 EXPECT_TRUE(Contains(delta->added_response_headers, 1381 EXPECT_TRUE(Contains(delta->added_response_headers,
1384 ResponseHeader("Key4", "Value4"))); 1382 ResponseHeader("Key4", "Value4")));
1385 EXPECT_EQ(2u, delta->deleted_response_headers.size()); 1383 EXPECT_EQ(2u, delta->deleted_response_headers.size());
1386 EXPECT_TRUE(Contains(delta->deleted_response_headers, 1384 EXPECT_TRUE(Contains(delta->deleted_response_headers,
1387 ResponseHeader("Key2", "Value2, Bar"))); 1385 ResponseHeader("Key2", "Value2, Bar")));
1388 EXPECT_TRUE(Contains(delta->deleted_response_headers, 1386 EXPECT_TRUE(Contains(delta->deleted_response_headers,
1389 ResponseHeader("Key3", "Value3"))); 1387 ResponseHeader("Key3", "Value3")));
1390 } 1388 }
1391 1389
1392 TEST(ExtensionWebRequestHelpersTest, TestCalculateOnAuthRequiredDelta) { 1390 TEST(ExtensionWebRequestHelpersTest, TestCalculateOnAuthRequiredDelta) {
1393 const bool cancel = true; 1391 const bool cancel = true;
1394 1392
1395 base::string16 username = base::ASCIIToUTF16("foo"); 1393 base::string16 username = base::ASCIIToUTF16("foo");
1396 base::string16 password = base::ASCIIToUTF16("bar"); 1394 base::string16 password = base::ASCIIToUTF16("bar");
1397 scoped_ptr<net::AuthCredentials> credentials( 1395 std::unique_ptr<net::AuthCredentials> credentials(
1398 new net::AuthCredentials(username, password)); 1396 new net::AuthCredentials(username, password));
1399 1397
1400 scoped_ptr<EventResponseDelta> delta( 1398 std::unique_ptr<EventResponseDelta> delta(CalculateOnAuthRequiredDelta(
1401 CalculateOnAuthRequiredDelta("extid", base::Time::Now(), cancel, 1399 "extid", base::Time::Now(), cancel, &credentials));
1402 &credentials));
1403 ASSERT_TRUE(delta.get()); 1400 ASSERT_TRUE(delta.get());
1404 EXPECT_TRUE(delta->cancel); 1401 EXPECT_TRUE(delta->cancel);
1405 ASSERT_TRUE(delta->auth_credentials.get()); 1402 ASSERT_TRUE(delta->auth_credentials.get());
1406 EXPECT_EQ(username, delta->auth_credentials->username()); 1403 EXPECT_EQ(username, delta->auth_credentials->username());
1407 EXPECT_EQ(password, delta->auth_credentials->password()); 1404 EXPECT_EQ(password, delta->auth_credentials->password());
1408 } 1405 }
1409 1406
1410 TEST(ExtensionWebRequestHelpersTest, TestMergeCancelOfResponses) { 1407 TEST(ExtensionWebRequestHelpersTest, TestMergeCancelOfResponses) {
1411 EventResponseDeltas deltas; 1408 EventResponseDeltas deltas;
1412 net::BoundTestNetLog capturing_net_log; 1409 net::BoundTestNetLog capturing_net_log;
(...skipping 902 matching lines...) Expand 10 before | Expand all | Expand 10 after
2315 EXPECT_TRUE(credentials_set); 2312 EXPECT_TRUE(credentials_set);
2316 EXPECT_FALSE(auth3.Empty()); 2313 EXPECT_FALSE(auth3.Empty());
2317 EXPECT_EQ(username, auth1.username()); 2314 EXPECT_EQ(username, auth1.username());
2318 EXPECT_EQ(password, auth1.password()); 2315 EXPECT_EQ(password, auth1.password());
2319 EXPECT_EQ(1u, warning_set.size()); 2316 EXPECT_EQ(1u, warning_set.size());
2320 EXPECT_TRUE(HasWarning(warning_set, "extid2")); 2317 EXPECT_TRUE(HasWarning(warning_set, "extid2"));
2321 EXPECT_EQ(3u, capturing_net_log.GetSize()); 2318 EXPECT_EQ(3u, capturing_net_log.GetSize());
2322 } 2319 }
2323 2320
2324 } // namespace extensions 2321 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698