| 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 "chrome/browser/net/chrome_network_delegate.h" | 5 #include "chrome/browser/net/chrome_network_delegate.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 #include <stdlib.h> | 8 #include <stdlib.h> |
| 9 | 9 |
| 10 #include <vector> | 10 #include <vector> |
| 11 | 11 |
| 12 #include "base/trace_event/trace_event.h" |
| 12 #include "base/base_paths.h" | 13 #include "base/base_paths.h" |
| 13 #include "base/command_line.h" | 14 #include "base/command_line.h" |
| 14 #include "base/debug/alias.h" | 15 #include "base/debug/alias.h" |
| 15 #include "base/debug/dump_without_crashing.h" | 16 #include "base/debug/dump_without_crashing.h" |
| 16 #include "base/debug/stack_trace.h" | 17 #include "base/debug/stack_trace.h" |
| 17 #include "base/logging.h" | 18 #include "base/logging.h" |
| 18 #include "base/macros.h" | 19 #include "base/macros.h" |
| 19 #include "base/metrics/field_trial.h" | 20 #include "base/metrics/field_trial.h" |
| 20 #include "base/metrics/histogram.h" | 21 #include "base/metrics/histogram.h" |
| 21 #include "base/metrics/sparse_histogram.h" | 22 #include "base/metrics/sparse_histogram.h" |
| (...skipping 348 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 370 | 371 |
| 371 // static | 372 // static |
| 372 void ChromeNetworkDelegate::AllowAccessToAllFiles() { | 373 void ChromeNetworkDelegate::AllowAccessToAllFiles() { |
| 373 g_allow_file_access_ = true; | 374 g_allow_file_access_ = true; |
| 374 } | 375 } |
| 375 | 376 |
| 376 int ChromeNetworkDelegate::OnBeforeURLRequest( | 377 int ChromeNetworkDelegate::OnBeforeURLRequest( |
| 377 net::URLRequest* request, | 378 net::URLRequest* request, |
| 378 const net::CompletionCallback& callback, | 379 const net::CompletionCallback& callback, |
| 379 GURL* new_url) { | 380 GURL* new_url) { |
| 381 TRACE_EVENT0("toplevel", "ChromeNetworkDelegate::OnBeforeURLRequest"); |
| 382 |
| 380 // TODO(mmenke): Remove ScopedTracker below once crbug.com/456327 is fixed. | 383 // TODO(mmenke): Remove ScopedTracker below once crbug.com/456327 is fixed. |
| 381 tracked_objects::ScopedTracker tracking_profile1( | 384 tracked_objects::ScopedTracker tracking_profile1( |
| 382 FROM_HERE_WITH_EXPLICIT_FUNCTION( | 385 FROM_HERE_WITH_EXPLICIT_FUNCTION( |
| 383 "456327 URLRequest::ChromeNetworkDelegate::OnBeforeURLRequest")); | 386 "456327 URLRequest::ChromeNetworkDelegate::OnBeforeURLRequest")); |
| 384 | 387 TRACE_EVENT0("toplevel", "ChromeNetworkDelegate::OnBeforeURLRequest::A"); |
| 385 #if defined(ENABLE_CONFIGURATION_POLICY) | 388 #if defined(ENABLE_CONFIGURATION_POLICY) |
| 386 // TODO(joaodasilva): This prevents extensions from seeing URLs that are | 389 // TODO(joaodasilva): This prevents extensions from seeing URLs that are |
| 387 // blocked. However, an extension might redirect the request to another URL, | 390 // blocked. However, an extension might redirect the request to another URL, |
| 388 // which is not blocked. | 391 // which is not blocked. |
| 389 | 392 |
| 390 const ResourceRequestInfo* info = ResourceRequestInfo::ForRequest(request); | 393 const ResourceRequestInfo* info = ResourceRequestInfo::ForRequest(request); |
| 391 int error = net::ERR_BLOCKED_BY_ADMINISTRATOR; | 394 int error = net::ERR_BLOCKED_BY_ADMINISTRATOR; |
| 392 if (info && content::IsResourceTypeFrame(info->GetResourceType()) && | 395 if (info && content::IsResourceTypeFrame(info->GetResourceType()) && |
| 393 url_blacklist_manager_ && | 396 url_blacklist_manager_ && |
| 394 url_blacklist_manager_->ShouldBlockRequestForFrame( | 397 url_blacklist_manager_->ShouldBlockRequestForFrame( |
| 395 request->url(), &error)) { | 398 request->url(), &error)) { |
| 396 // URL access blocked by policy. | 399 // URL access blocked by policy. |
| 397 request->net_log().AddEvent( | 400 request->net_log().AddEvent( |
| 398 net::NetLog::TYPE_CHROME_POLICY_ABORTED_REQUEST, | 401 net::NetLog::TYPE_CHROME_POLICY_ABORTED_REQUEST, |
| 399 net::NetLog::StringCallback("url", | 402 net::NetLog::StringCallback("url", |
| 400 &request->url().possibly_invalid_spec())); | 403 &request->url().possibly_invalid_spec())); |
| 401 return error; | 404 return error; |
| 402 } | 405 } |
| 403 #endif | 406 #endif |
| 404 | 407 TRACE_EVENT0("toplevel", "ChromeNetworkDelegate::OnBeforeURLRequest::A.1"); |
| 405 // TODO(mmenke): Remove ScopedTracker below once crbug.com/456327 is fixed. | 408 // TODO(mmenke): Remove ScopedTracker below once crbug.com/456327 is fixed. |
| 406 tracked_objects::ScopedTracker tracking_profile2( | 409 tracked_objects::ScopedTracker tracking_profile2( |
| 407 FROM_HERE_WITH_EXPLICIT_FUNCTION( | 410 FROM_HERE_WITH_EXPLICIT_FUNCTION( |
| 408 "456327 URLRequest::ChromeNetworkDelegate::OnBeforeURLRequest 2")); | 411 "456327 URLRequest::ChromeNetworkDelegate::OnBeforeURLRequest 2")); |
| 409 | 412 |
| 410 extensions_delegate_->ForwardStartRequestStatus(request); | 413 extensions_delegate_->ForwardStartRequestStatus(request); |
| 411 | 414 TRACE_EVENT0("toplevel", "ChromeNetworkDelegate::OnBeforeURLRequest::B"); |
| 412 if (!enable_referrers_->GetValue()) | 415 if (!enable_referrers_->GetValue()) |
| 413 request->SetReferrer(std::string()); | 416 request->SetReferrer(std::string()); |
| 414 if (enable_do_not_track_ && enable_do_not_track_->GetValue()) | 417 if (enable_do_not_track_ && enable_do_not_track_->GetValue()) |
| 415 request->SetExtraRequestHeaderByName(kDNTHeader, "1", true /* override */); | 418 request->SetExtraRequestHeaderByName(kDNTHeader, "1", true /* override */); |
| 416 | 419 |
| 417 // TODO(mmenke): Remove ScopedTracker below once crbug.com/456327 is fixed. | 420 // TODO(mmenke): Remove ScopedTracker below once crbug.com/456327 is fixed. |
| 418 tracked_objects::ScopedTracker tracking_profile3( | 421 tracked_objects::ScopedTracker tracking_profile3( |
| 419 FROM_HERE_WITH_EXPLICIT_FUNCTION( | 422 FROM_HERE_WITH_EXPLICIT_FUNCTION( |
| 420 "456327 URLRequest::ChromeNetworkDelegate::OnBeforeURLRequest 3")); | 423 "456327 URLRequest::ChromeNetworkDelegate::OnBeforeURLRequest 3")); |
| 421 | 424 |
| 422 bool force_safe_search = | 425 bool force_safe_search = |
| 423 (force_google_safe_search_ && force_google_safe_search_->GetValue()); | 426 (force_google_safe_search_ && force_google_safe_search_->GetValue()); |
| 424 | 427 |
| 425 net::CompletionCallback wrapped_callback = callback; | 428 net::CompletionCallback wrapped_callback = callback; |
| 426 if (force_safe_search) { | 429 if (force_safe_search) { |
| 427 wrapped_callback = base::Bind(&ForceGoogleSafeSearchCallbackWrapper, | 430 wrapped_callback = base::Bind(&ForceGoogleSafeSearchCallbackWrapper, |
| 428 callback, | 431 callback, |
| 429 base::Unretained(request), | 432 base::Unretained(request), |
| 430 base::Unretained(new_url)); | 433 base::Unretained(new_url)); |
| 431 } | 434 } |
| 432 | 435 TRACE_EVENT0("toplevel", "ChromeNetworkDelegate::OnBeforeURLRequest::C"); |
| 433 int rv = extensions_delegate_->OnBeforeURLRequest( | 436 int rv = extensions_delegate_->OnBeforeURLRequest( |
| 434 request, wrapped_callback, new_url); | 437 request, wrapped_callback, new_url); |
| 435 | 438 TRACE_EVENT0("toplevel", "ChromeNetworkDelegate::OnBeforeURLRequest::C.1"); |
| 436 // TODO(mmenke): Remove ScopedTracker below once crbug.com/456327 is fixed. | 439 // TODO(mmenke): Remove ScopedTracker below once crbug.com/456327 is fixed. |
| 437 tracked_objects::ScopedTracker tracking_profile4( | 440 tracked_objects::ScopedTracker tracking_profile4( |
| 438 FROM_HERE_WITH_EXPLICIT_FUNCTION( | 441 FROM_HERE_WITH_EXPLICIT_FUNCTION( |
| 439 "456327 URLRequest::ChromeNetworkDelegate::OnBeforeURLRequest 4")); | 442 "456327 URLRequest::ChromeNetworkDelegate::OnBeforeURLRequest 4")); |
| 440 | 443 |
| 441 if (force_safe_search && rv == net::OK && new_url->is_empty()) | 444 if (force_safe_search && rv == net::OK && new_url->is_empty()) |
| 442 safe_search_util::ForceGoogleSafeSearch(request, new_url); | 445 safe_search_util::ForceGoogleSafeSearch(request, new_url); |
| 443 | 446 TRACE_EVENT0("toplevel", "ChromeNetworkDelegate::OnBeforeURLRequest::C.2"); |
| 444 // TODO(mmenke): Remove ScopedTracker below once crbug.com/456327 is fixed. | 447 // TODO(mmenke): Remove ScopedTracker below once crbug.com/456327 is fixed. |
| 445 tracked_objects::ScopedTracker tracking_profile5( | 448 tracked_objects::ScopedTracker tracking_profile5( |
| 446 FROM_HERE_WITH_EXPLICIT_FUNCTION( | 449 FROM_HERE_WITH_EXPLICIT_FUNCTION( |
| 447 "456327 URLRequest::ChromeNetworkDelegate::OnBeforeURLRequest 5")); | 450 "456327 URLRequest::ChromeNetworkDelegate::OnBeforeURLRequest 5")); |
| 448 | 451 |
| 449 if (connect_interceptor_) | 452 if (connect_interceptor_) |
| 450 connect_interceptor_->WitnessURLRequest(request); | 453 connect_interceptor_->WitnessURLRequest(request); |
| 451 | 454 TRACE_EVENT0("toplevel", "ChromeNetworkDelegate::OnBeforeURLRequest::C.3"); |
| 452 return rv; | 455 return rv; |
| 453 } | 456 } |
| 454 | 457 |
| 455 int ChromeNetworkDelegate::OnBeforeSendHeaders( | 458 int ChromeNetworkDelegate::OnBeforeSendHeaders( |
| 456 net::URLRequest* request, | 459 net::URLRequest* request, |
| 457 const net::CompletionCallback& callback, | 460 const net::CompletionCallback& callback, |
| 458 net::HttpRequestHeaders* headers) { | 461 net::HttpRequestHeaders* headers) { |
| 459 if (force_youtube_safety_mode_ && force_youtube_safety_mode_->GetValue()) | 462 if (force_youtube_safety_mode_ && force_youtube_safety_mode_->GetValue()) |
| 460 safe_search_util::ForceYouTubeSafetyMode(request, headers); | 463 safe_search_util::ForceYouTubeSafetyMode(request, headers); |
| 461 | 464 |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 508 ReportDataUsageStats(request, 0 /* tx_bytes */, bytes_received); | 511 ReportDataUsageStats(request, 0 /* tx_bytes */, bytes_received); |
| 509 } | 512 } |
| 510 | 513 |
| 511 void ChromeNetworkDelegate::OnNetworkBytesSent(net::URLRequest* request, | 514 void ChromeNetworkDelegate::OnNetworkBytesSent(net::URLRequest* request, |
| 512 int64_t bytes_sent) { | 515 int64_t bytes_sent) { |
| 513 ReportDataUsageStats(request, bytes_sent, 0 /* rx_bytes */); | 516 ReportDataUsageStats(request, bytes_sent, 0 /* rx_bytes */); |
| 514 } | 517 } |
| 515 | 518 |
| 516 void ChromeNetworkDelegate::OnCompleted(net::URLRequest* request, | 519 void ChromeNetworkDelegate::OnCompleted(net::URLRequest* request, |
| 517 bool started) { | 520 bool started) { |
| 521 TRACE_EVENT0("toplevel", "ChromeNetworkDelegate::OnCompleted"); |
| 518 // TODO(amohammadkhan): Verify that there is no double recording in data use | 522 // TODO(amohammadkhan): Verify that there is no double recording in data use |
| 519 // of redirected requests. | 523 // of redirected requests. |
| 520 data_use_measurement_.ReportDataUseUMA(request); | 524 data_use_measurement_.ReportDataUseUMA(request); |
| 521 RecordNetworkErrorHistograms(request); | 525 RecordNetworkErrorHistograms(request); |
| 522 if (started) { | 526 if (started) { |
| 523 // Only call in for requests that were started, to obey the precondition | 527 // Only call in for requests that were started, to obey the precondition |
| 524 // that RecordCacheStateStats can only be called on requests for which | 528 // that RecordCacheStateStats can only be called on requests for which |
| 525 // OnResponseStarted was called. | 529 // OnResponseStarted was called. |
| 526 RecordCacheStateStats(request); | 530 RecordCacheStateStats(request); |
| 527 } | 531 } |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 572 const net::AuthChallengeInfo& auth_info, | 576 const net::AuthChallengeInfo& auth_info, |
| 573 const AuthCallback& callback, | 577 const AuthCallback& callback, |
| 574 net::AuthCredentials* credentials) { | 578 net::AuthCredentials* credentials) { |
| 575 return extensions_delegate_->OnAuthRequired( | 579 return extensions_delegate_->OnAuthRequired( |
| 576 request, auth_info, callback, credentials); | 580 request, auth_info, callback, credentials); |
| 577 } | 581 } |
| 578 | 582 |
| 579 bool ChromeNetworkDelegate::OnCanGetCookies( | 583 bool ChromeNetworkDelegate::OnCanGetCookies( |
| 580 const net::URLRequest& request, | 584 const net::URLRequest& request, |
| 581 const net::CookieList& cookie_list) { | 585 const net::CookieList& cookie_list) { |
| 586 TRACE_EVENT0("toplevel", "ChromeNetworkDelegate::OnCanGetCookies"); |
| 582 // NULL during tests, or when we're running in the system context. | 587 // NULL during tests, or when we're running in the system context. |
| 583 if (!cookie_settings_.get()) | 588 if (!cookie_settings_.get()) |
| 584 return true; | 589 return true; |
| 585 | 590 |
| 586 bool allow = cookie_settings_->IsReadingCookieAllowed( | 591 bool allow = cookie_settings_->IsReadingCookieAllowed( |
| 587 request.url(), request.first_party_for_cookies()); | 592 request.url(), request.first_party_for_cookies()); |
| 588 | 593 |
| 589 int render_process_id = -1; | 594 int render_process_id = -1; |
| 590 int render_frame_id = -1; | 595 int render_frame_id = -1; |
| 591 if (content::ResourceRequestInfo::GetRenderFrameForRequest( | 596 if (content::ResourceRequestInfo::GetRenderFrameForRequest( |
| (...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 748 if (!data_use_aggregator_) | 753 if (!data_use_aggregator_) |
| 749 return; | 754 return; |
| 750 | 755 |
| 751 if (is_data_usage_off_the_record_) { | 756 if (is_data_usage_off_the_record_) { |
| 752 data_use_aggregator_->ReportOffTheRecordDataUse(tx_bytes, rx_bytes); | 757 data_use_aggregator_->ReportOffTheRecordDataUse(tx_bytes, rx_bytes); |
| 753 return; | 758 return; |
| 754 } | 759 } |
| 755 | 760 |
| 756 data_use_aggregator_->ReportDataUse(request, tx_bytes, rx_bytes); | 761 data_use_aggregator_->ReportDataUse(request, tx_bytes, rx_bytes); |
| 757 } | 762 } |
| OLD | NEW |