| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include <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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 |
| OLD | NEW |