| 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/loader/chrome_resource_dispatcher_host_delegate.h" | 5 #include "chrome/browser/loader/chrome_resource_dispatcher_host_delegate.h" |
| 6 | 6 |
| 7 #include <stdint.h> | 7 #include <stdint.h> |
| 8 #include <string> | 8 #include <string> |
| 9 #include <utility> | 9 #include <utility> |
| 10 #include <vector> | 10 #include <vector> |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 43 #include "chrome/browser/ui/login/login_handler.h" | 43 #include "chrome/browser/ui/login/login_handler.h" |
| 44 #include "chrome/common/chrome_switches.h" | 44 #include "chrome/common/chrome_switches.h" |
| 45 #include "chrome/common/features.h" | 45 #include "chrome/common/features.h" |
| 46 #include "chrome/common/url_constants.h" | 46 #include "chrome/common/url_constants.h" |
| 47 #include "components/content_settings/core/browser/host_content_settings_map.h" | 47 #include "components/content_settings/core/browser/host_content_settings_map.h" |
| 48 #include "components/data_reduction_proxy/core/browser/data_reduction_proxy_conf
ig.h" | 48 #include "components/data_reduction_proxy/core/browser/data_reduction_proxy_conf
ig.h" |
| 49 #include "components/data_reduction_proxy/core/browser/data_reduction_proxy_data
.h" | 49 #include "components/data_reduction_proxy/core/browser/data_reduction_proxy_data
.h" |
| 50 #include "components/data_reduction_proxy/core/browser/data_reduction_proxy_io_d
ata.h" | 50 #include "components/data_reduction_proxy/core/browser/data_reduction_proxy_io_d
ata.h" |
| 51 #include "components/data_reduction_proxy/core/common/data_reduction_proxy_util.
h" | 51 #include "components/data_reduction_proxy/core/common/data_reduction_proxy_util.
h" |
| 52 #include "components/google/core/browser/google_util.h" | 52 #include "components/google/core/browser/google_util.h" |
| 53 #include "components/offline_pages/features/features.h" |
| 53 #include "components/policy/core/common/cloud/policy_header_io_helper.h" | 54 #include "components/policy/core/common/cloud/policy_header_io_helper.h" |
| 54 #include "components/previews/core/previews_experiments.h" | 55 #include "components/previews/core/previews_experiments.h" |
| 55 #include "components/previews/core/previews_io_data.h" | 56 #include "components/previews/core/previews_io_data.h" |
| 56 #include "components/rappor/public/rappor_utils.h" | 57 #include "components/rappor/public/rappor_utils.h" |
| 57 #include "components/rappor/rappor_service_impl.h" | 58 #include "components/rappor/rappor_service_impl.h" |
| 58 #include "components/search_engines/template_url_service.h" | 59 #include "components/search_engines/template_url_service.h" |
| 59 #include "components/variations/net/variations_http_headers.h" | 60 #include "components/variations/net/variations_http_headers.h" |
| 60 #include "content/public/browser/browser_thread.h" | 61 #include "content/public/browser/browser_thread.h" |
| 61 #include "content/public/browser/navigation_data.h" | 62 #include "content/public/browser/navigation_data.h" |
| 62 #include "content/public/browser/notification_service.h" | 63 #include "content/public/browser/notification_service.h" |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 95 #include "chrome/browser/renderer_host/chrome_navigation_ui_data.h" | 96 #include "chrome/browser/renderer_host/chrome_navigation_ui_data.h" |
| 96 #include "extensions/browser/extension_throttle_manager.h" | 97 #include "extensions/browser/extension_throttle_manager.h" |
| 97 #include "extensions/browser/guest_view/web_view/web_view_renderer_state.h" | 98 #include "extensions/browser/guest_view/web_view/web_view_renderer_state.h" |
| 98 #include "extensions/browser/info_map.h" | 99 #include "extensions/browser/info_map.h" |
| 99 #include "extensions/common/constants.h" | 100 #include "extensions/common/constants.h" |
| 100 #include "extensions/common/extension_urls.h" | 101 #include "extensions/common/extension_urls.h" |
| 101 #include "extensions/common/manifest_handlers/mime_types_handler.h" | 102 #include "extensions/common/manifest_handlers/mime_types_handler.h" |
| 102 #include "extensions/common/user_script.h" | 103 #include "extensions/common/user_script.h" |
| 103 #endif | 104 #endif |
| 104 | 105 |
| 106 #if BUILDFLAG(ENABLE_OFFLINE_PAGES) |
| 107 #include "chrome/browser/offline_pages/offliner_user_data.h" |
| 108 #include "chrome/browser/offline_pages/resource_loading_observer.h" |
| 109 #endif |
| 110 |
| 105 #if defined(OS_ANDROID) | 111 #if defined(OS_ANDROID) |
| 106 #include "chrome/browser/android/download/intercept_download_resource_throttle.h
" | 112 #include "chrome/browser/android/download/intercept_download_resource_throttle.h
" |
| 107 #include "chrome/browser/android/offline_pages/downloads/resource_throttle.h" | 113 #include "chrome/browser/android/offline_pages/downloads/resource_throttle.h" |
| 108 #include "chrome/browser/loader/data_reduction_proxy_resource_throttle_android.h
" | 114 #include "chrome/browser/loader/data_reduction_proxy_resource_throttle_android.h
" |
| 109 #include "chrome/browser/offline_pages/background_loader_offliner.h" | |
| 110 #include "components/navigation_interception/intercept_navigation_delegate.h" | 115 #include "components/navigation_interception/intercept_navigation_delegate.h" |
| 111 #endif | 116 #endif |
| 112 | 117 |
| 113 #if defined(OS_CHROMEOS) | 118 #if defined(OS_CHROMEOS) |
| 114 #include "chrome/browser/chromeos/login/signin/merge_session_resource_throttle.h
" | 119 #include "chrome/browser/chromeos/login/signin/merge_session_resource_throttle.h
" |
| 115 #include "chrome/browser/chromeos/login/signin/merge_session_throttling_utils.h" | 120 #include "chrome/browser/chromeos/login/signin/merge_session_throttling_utils.h" |
| 116 #endif | 121 #endif |
| 117 | 122 |
| 118 using content::BrowserThread; | 123 using content::BrowserThread; |
| 119 using content::RenderViewHost; | 124 using content::RenderViewHost; |
| (...skipping 222 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 342 if (net_error == net::OK) { | 347 if (net_error == net::OK) { |
| 343 UMA_HISTOGRAM_LONG_TIMES("Net.NTP.Local.RequestTime2.Success", | 348 UMA_HISTOGRAM_LONG_TIMES("Net.NTP.Local.RequestTime2.Success", |
| 344 request_loading_time); | 349 request_loading_time); |
| 345 } else if (net_error == net::ERR_ABORTED) { | 350 } else if (net_error == net::ERR_ABORTED) { |
| 346 UMA_HISTOGRAM_LONG_TIMES("Net.NTP.Local.RequestTime2.ErrAborted", | 351 UMA_HISTOGRAM_LONG_TIMES("Net.NTP.Local.RequestTime2.ErrAborted", |
| 347 request_loading_time); | 352 request_loading_time); |
| 348 } | 353 } |
| 349 } | 354 } |
| 350 } | 355 } |
| 351 | 356 |
| 357 #if BUILDFLAG(ENABLE_OFFLINE_PAGES) |
| 358 // Translate content::ResourceType to a type to use for Offliners. |
| 359 offline_pages::ResourceLoadingObserver::ResourceDataType |
| 360 ConvertResourceTypeToResourceDataType(content::ResourceType type) { |
| 361 switch (type) { |
| 362 case content::RESOURCE_TYPE_STYLESHEET: |
| 363 return offline_pages::ResourceLoadingObserver::ResourceDataType::TEXT_CSS; |
| 364 case content::RESOURCE_TYPE_IMAGE: |
| 365 return offline_pages::ResourceLoadingObserver::ResourceDataType::IMAGE; |
| 366 default: |
| 367 return offline_pages::ResourceLoadingObserver::ResourceDataType::OTHER; |
| 368 } |
| 369 } |
| 370 |
| 371 void NotifyUIThreadOfRequestStarted( |
| 372 const content::ResourceRequestInfo::WebContentsGetter& web_contents_getter, |
| 373 ResourceType resource_type) { |
| 374 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
| 375 content::WebContents* web_contents = web_contents_getter.Run(); |
| 376 if (!web_contents) |
| 377 return; |
| 378 |
| 379 // If we are producing an offline version of the page, track resource loading. |
| 380 offline_pages::ResourceLoadingObserver* resource_tracker = |
| 381 offline_pages::OfflinerUserData::ResourceLoadingObserverFromWebContents( |
| 382 web_contents); |
| 383 if (resource_tracker) { |
| 384 offline_pages::ResourceLoadingObserver::ResourceDataType data_type = |
| 385 ConvertResourceTypeToResourceDataType(resource_type); |
| 386 resource_tracker->ObserveResourceLoading(data_type, true /* STARTED */); |
| 387 } |
| 388 } |
| 389 #endif |
| 390 |
| 352 void NotifyUIThreadOfRequestComplete( | 391 void NotifyUIThreadOfRequestComplete( |
| 353 const content::ResourceRequestInfo::WebContentsGetter& web_contents_getter, | 392 const content::ResourceRequestInfo::WebContentsGetter& web_contents_getter, |
| 354 const content::ResourceRequestInfo::FrameTreeNodeIdGetter& | 393 const content::ResourceRequestInfo::FrameTreeNodeIdGetter& |
| 355 frame_tree_node_id_getter, | 394 frame_tree_node_id_getter, |
| 356 const GURL& url, | 395 const GURL& url, |
| 357 const net::HostPortPair& host_port_pair, | 396 const net::HostPortPair& host_port_pair, |
| 358 const content::GlobalRequestID& request_id, | 397 const content::GlobalRequestID& request_id, |
| 359 ResourceType resource_type, | 398 ResourceType resource_type, |
| 360 bool is_download, | 399 bool is_download, |
| 361 bool was_cached, | 400 bool was_cached, |
| 362 std::unique_ptr<data_reduction_proxy::DataReductionProxyData> | 401 std::unique_ptr<data_reduction_proxy::DataReductionProxyData> |
| 363 data_reduction_proxy_data, | 402 data_reduction_proxy_data, |
| 364 int net_error, | 403 int net_error, |
| 365 int64_t total_received_bytes, | 404 int64_t total_received_bytes, |
| 366 int64_t raw_body_bytes, | 405 int64_t raw_body_bytes, |
| 367 int64_t original_content_length, | 406 int64_t original_content_length, |
| 368 base::TimeTicks request_creation_time, | 407 base::TimeTicks request_creation_time, |
| 369 base::TimeDelta request_loading_time) { | 408 base::TimeDelta request_loading_time) { |
| 370 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); | 409 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
| 371 content::WebContents* web_contents = web_contents_getter.Run(); | 410 content::WebContents* web_contents = web_contents_getter.Run(); |
| 372 if (!web_contents) | 411 if (!web_contents) |
| 373 return; | 412 return; |
| 413 |
| 374 if (resource_type == content::RESOURCE_TYPE_MAIN_FRAME) { | 414 if (resource_type == content::RESOURCE_TYPE_MAIN_FRAME) { |
| 375 LogMainFrameMetricsOnUIThread(url, net_error, request_loading_time, | 415 LogMainFrameMetricsOnUIThread(url, net_error, request_loading_time, |
| 376 web_contents); | 416 web_contents); |
| 377 } | 417 } |
| 418 |
| 378 if (!was_cached) { | 419 if (!was_cached) { |
| 379 UpdatePrerenderNetworkBytesCallback(web_contents, total_received_bytes); | 420 UpdatePrerenderNetworkBytesCallback(web_contents, total_received_bytes); |
| 380 #if defined(OS_ANDROID) | 421 } |
| 381 offline_pages::BackgroundLoaderOffliner* background_loader = | |
| 382 offline_pages::BackgroundLoaderOffliner::FromWebContents(web_contents); | |
| 383 | 422 |
| 384 if (background_loader) | 423 #if BUILDFLAG(ENABLE_OFFLINE_PAGES) |
| 385 background_loader->OnNetworkBytesChanged(total_received_bytes); | 424 // If we are producing an offline version of the page, track resource loading. |
| 386 #endif // OS_ANDROID | 425 offline_pages::ResourceLoadingObserver* resource_tracker = |
| 426 offline_pages::OfflinerUserData::ResourceLoadingObserverFromWebContents( |
| 427 web_contents); |
| 428 if (resource_tracker) { |
| 429 offline_pages::ResourceLoadingObserver::ResourceDataType data_type = |
| 430 ConvertResourceTypeToResourceDataType(resource_type); |
| 431 resource_tracker->ObserveResourceLoading(data_type, false /* COMPLETED */); |
| 432 if (!was_cached) |
| 433 resource_tracker->OnNetworkBytesChanged(total_received_bytes); |
| 387 } | 434 } |
| 435 #endif // BUILDFLAG(ENABLE_OFFLINE_PAGES) |
| 436 |
| 388 if (!is_download) { | 437 if (!is_download) { |
| 389 page_load_metrics::MetricsWebContentsObserver* metrics_observer = | 438 page_load_metrics::MetricsWebContentsObserver* metrics_observer = |
| 390 page_load_metrics::MetricsWebContentsObserver::FromWebContents( | 439 page_load_metrics::MetricsWebContentsObserver::FromWebContents( |
| 391 web_contents); | 440 web_contents); |
| 392 if (metrics_observer) { | 441 if (metrics_observer) { |
| 393 metrics_observer->OnRequestComplete( | 442 metrics_observer->OnRequestComplete( |
| 394 url, host_port_pair, frame_tree_node_id_getter.Run(), request_id, | 443 url, host_port_pair, frame_tree_node_id_getter.Run(), request_id, |
| 395 resource_type, was_cached, std::move(data_reduction_proxy_data), | 444 resource_type, was_cached, std::move(data_reduction_proxy_data), |
| 396 raw_body_bytes, original_content_length, request_creation_time, | 445 raw_body_bytes, original_content_length, request_creation_time, |
| 397 net_error); | 446 net_error); |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 451 net::URLRequest* request, | 500 net::URLRequest* request, |
| 452 content::ResourceContext* resource_context, | 501 content::ResourceContext* resource_context, |
| 453 content::AppCacheService* appcache_service, | 502 content::AppCacheService* appcache_service, |
| 454 ResourceType resource_type, | 503 ResourceType resource_type, |
| 455 std::vector<std::unique_ptr<content::ResourceThrottle>>* throttles) { | 504 std::vector<std::unique_ptr<content::ResourceThrottle>>* throttles) { |
| 456 if (safe_browsing_.get()) | 505 if (safe_browsing_.get()) |
| 457 safe_browsing_->OnResourceRequest(request); | 506 safe_browsing_->OnResourceRequest(request); |
| 458 | 507 |
| 459 const ResourceRequestInfo* info = ResourceRequestInfo::ForRequest(request); | 508 const ResourceRequestInfo* info = ResourceRequestInfo::ForRequest(request); |
| 460 | 509 |
| 510 #if BUILDFLAG(ENABLE_OFFLINE_PAGES) |
| 511 // TODO(petewil): Unify the safe browsing request and the metrics observer |
| 512 // request if possible so we only have to cross to the main thread once. |
| 513 // http://crbug.com/712312. |
| 514 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, |
| 515 base::Bind(&NotifyUIThreadOfRequestStarted, |
| 516 info->GetWebContentsGetterForRequest(), |
| 517 info->GetResourceType())); |
| 518 #endif // BUILDFLAG(ENABLE_OFFLINE_PAGES) |
| 519 |
| 461 ProfileIOData* io_data = ProfileIOData::FromResourceContext( | 520 ProfileIOData* io_data = ProfileIOData::FromResourceContext( |
| 462 resource_context); | 521 resource_context); |
| 463 | 522 |
| 464 #if defined(OS_ANDROID) | 523 #if defined(OS_ANDROID) |
| 465 if (resource_type != content::RESOURCE_TYPE_MAIN_FRAME) | 524 if (resource_type != content::RESOURCE_TYPE_MAIN_FRAME) |
| 466 InterceptNavigationDelegate::UpdateUserGestureCarryoverInfo(request); | 525 InterceptNavigationDelegate::UpdateUserGestureCarryoverInfo(request); |
| 467 #endif | 526 #endif |
| 468 | 527 |
| 469 #if defined(OS_CHROMEOS) | 528 #if defined(OS_CHROMEOS) |
| 470 // Check if we need to add merge session throttle. This throttle will postpone | 529 // Check if we need to add merge session throttle. This throttle will postpone |
| (...skipping 496 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 967 &ChromeResourceDispatcherHostDelegate::OnAbortedFrameLoad, | 1026 &ChromeResourceDispatcherHostDelegate::OnAbortedFrameLoad, |
| 968 base::Unretained(this), url, request_loading_time)); | 1027 base::Unretained(this), url, request_loading_time)); |
| 969 return; | 1028 return; |
| 970 } | 1029 } |
| 971 | 1030 |
| 972 std::string metric_name = (request_loading_time.InMilliseconds() < 100 ? | 1031 std::string metric_name = (request_loading_time.InMilliseconds() < 100 ? |
| 973 "Net.ErrAborted.Fast" : "Net.ErrAborted.Slow"); | 1032 "Net.ErrAborted.Fast" : "Net.ErrAborted.Slow"); |
| 974 rappor::SampleDomainAndRegistryFromGURL( | 1033 rappor::SampleDomainAndRegistryFromGURL( |
| 975 g_browser_process->rappor_service(), metric_name, url); | 1034 g_browser_process->rappor_service(), metric_name, url); |
| 976 } | 1035 } |
| OLD | NEW |