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 const content::GlobalRequestID& request_id, | |
Charlie Harrison
2017/06/21 18:06:01
nit: Remove request_id
Pete Williamson
2017/06/21 22:31:45
Done.
| |
374 ResourceType resource_type, | |
375 bool is_download, | |
Charlie Harrison
2017/06/21 18:06:01
nit: remove is_download
Pete Williamson
2017/06/21 22:31:45
Done.
| |
376 base::TimeTicks request_creation_time) { | |
Charlie Harrison
2017/06/21 18:06:01
nit: remove request_creation_time
Pete Williamson
2017/06/21 22:31:45
Done.
| |
377 content::WebContents* web_contents = web_contents_getter.Run(); | |
Charlie Harrison
2017/06/21 18:06:01
DCHECK_CURRENTLY_ON(BrowserTHread::UI)
Pete Williamson
2017/06/21 22:31:45
Done.
| |
378 if (!web_contents) | |
379 return; | |
380 | |
381 // If we are producing an offline version of the page, track resource loading. | |
382 offline_pages::ResourceLoadingObserver* resource_tracker = | |
383 offline_pages::OfflinerUserData::ResourceLoadingObserverFromWebContents( | |
384 web_contents); | |
385 if (resource_tracker) { | |
386 offline_pages::ResourceLoadingObserver::ResourceDataType data_type = | |
387 ConvertResourceTypeToResourceDataType(resource_type); | |
388 resource_tracker->ObserveResourceLoading(data_type, true /* STARTED */); | |
389 } | |
390 } | |
391 #endif | |
392 | |
352 void NotifyUIThreadOfRequestComplete( | 393 void NotifyUIThreadOfRequestComplete( |
353 const content::ResourceRequestInfo::WebContentsGetter& web_contents_getter, | 394 const content::ResourceRequestInfo::WebContentsGetter& web_contents_getter, |
354 const content::ResourceRequestInfo::FrameTreeNodeIdGetter& | 395 const content::ResourceRequestInfo::FrameTreeNodeIdGetter& |
355 frame_tree_node_id_getter, | 396 frame_tree_node_id_getter, |
356 const GURL& url, | 397 const GURL& url, |
357 const net::HostPortPair& host_port_pair, | 398 const net::HostPortPair& host_port_pair, |
358 const content::GlobalRequestID& request_id, | 399 const content::GlobalRequestID& request_id, |
359 ResourceType resource_type, | 400 ResourceType resource_type, |
360 bool is_download, | 401 bool is_download, |
361 bool was_cached, | 402 bool was_cached, |
362 std::unique_ptr<data_reduction_proxy::DataReductionProxyData> | 403 std::unique_ptr<data_reduction_proxy::DataReductionProxyData> |
363 data_reduction_proxy_data, | 404 data_reduction_proxy_data, |
364 int net_error, | 405 int net_error, |
365 int64_t total_received_bytes, | 406 int64_t total_received_bytes, |
366 int64_t raw_body_bytes, | 407 int64_t raw_body_bytes, |
367 int64_t original_content_length, | 408 int64_t original_content_length, |
368 base::TimeTicks request_creation_time, | 409 base::TimeTicks request_creation_time, |
369 base::TimeDelta request_loading_time) { | 410 base::TimeDelta request_loading_time) { |
370 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); | 411 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
371 content::WebContents* web_contents = web_contents_getter.Run(); | 412 content::WebContents* web_contents = web_contents_getter.Run(); |
372 if (!web_contents) | 413 if (!web_contents) |
373 return; | 414 return; |
415 | |
374 if (resource_type == content::RESOURCE_TYPE_MAIN_FRAME) { | 416 if (resource_type == content::RESOURCE_TYPE_MAIN_FRAME) { |
375 LogMainFrameMetricsOnUIThread(url, net_error, request_loading_time, | 417 LogMainFrameMetricsOnUIThread(url, net_error, request_loading_time, |
376 web_contents); | 418 web_contents); |
377 } | 419 } |
420 | |
378 if (!was_cached) { | 421 if (!was_cached) { |
379 UpdatePrerenderNetworkBytesCallback(web_contents, total_received_bytes); | 422 UpdatePrerenderNetworkBytesCallback(web_contents, total_received_bytes); |
380 #if defined(OS_ANDROID) | 423 } |
381 offline_pages::BackgroundLoaderOffliner* background_loader = | |
382 offline_pages::BackgroundLoaderOffliner::FromWebContents(web_contents); | |
383 | 424 |
384 if (background_loader) | 425 #if BUILDFLAG(ENABLE_OFFLINE_PAGES) |
385 background_loader->OnNetworkBytesChanged(total_received_bytes); | 426 // If we are producing an offline version of the page, track resource loading. |
386 #endif // OS_ANDROID | 427 offline_pages::ResourceLoadingObserver* resource_tracker = |
428 offline_pages::OfflinerUserData::ResourceLoadingObserverFromWebContents( | |
429 web_contents); | |
430 if (resource_tracker) { | |
431 offline_pages::ResourceLoadingObserver::ResourceDataType data_type = | |
432 ConvertResourceTypeToResourceDataType(resource_type); | |
433 resource_tracker->ObserveResourceLoading(data_type, false /* COMPLETED */); | |
434 if (!was_cached) | |
435 resource_tracker->OnNetworkBytesChanged(total_received_bytes); | |
387 } | 436 } |
437 #endif // BUILDFLAG(ENABLE_OFFLINE_PAGES) | |
438 | |
388 if (!is_download) { | 439 if (!is_download) { |
389 page_load_metrics::MetricsWebContentsObserver* metrics_observer = | 440 page_load_metrics::MetricsWebContentsObserver* metrics_observer = |
390 page_load_metrics::MetricsWebContentsObserver::FromWebContents( | 441 page_load_metrics::MetricsWebContentsObserver::FromWebContents( |
391 web_contents); | 442 web_contents); |
392 if (metrics_observer) { | 443 if (metrics_observer) { |
393 metrics_observer->OnRequestComplete( | 444 metrics_observer->OnRequestComplete( |
394 url, host_port_pair, frame_tree_node_id_getter.Run(), request_id, | 445 url, host_port_pair, frame_tree_node_id_getter.Run(), request_id, |
395 resource_type, was_cached, std::move(data_reduction_proxy_data), | 446 resource_type, was_cached, std::move(data_reduction_proxy_data), |
396 raw_body_bytes, original_content_length, request_creation_time, | 447 raw_body_bytes, original_content_length, request_creation_time, |
397 net_error); | 448 net_error); |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
451 net::URLRequest* request, | 502 net::URLRequest* request, |
452 content::ResourceContext* resource_context, | 503 content::ResourceContext* resource_context, |
453 content::AppCacheService* appcache_service, | 504 content::AppCacheService* appcache_service, |
454 ResourceType resource_type, | 505 ResourceType resource_type, |
455 std::vector<std::unique_ptr<content::ResourceThrottle>>* throttles) { | 506 std::vector<std::unique_ptr<content::ResourceThrottle>>* throttles) { |
456 if (safe_browsing_.get()) | 507 if (safe_browsing_.get()) |
457 safe_browsing_->OnResourceRequest(request); | 508 safe_browsing_->OnResourceRequest(request); |
458 | 509 |
459 const ResourceRequestInfo* info = ResourceRequestInfo::ForRequest(request); | 510 const ResourceRequestInfo* info = ResourceRequestInfo::ForRequest(request); |
460 | 511 |
512 #if BUILDFLAG(ENABLE_OFFLINE_PAGES) | |
513 // TODO(petewil): Unify the safe browsing request and the metrics observer | |
514 // request if possible so we only have to cross to the main thread once. | |
515 // http://crbug.com/712312. | |
516 BrowserThread::PostTask( | |
517 BrowserThread::UI, FROM_HERE, | |
518 base::Bind(&NotifyUIThreadOfRequestStarted, | |
519 info->GetWebContentsGetterForRequest(), | |
520 info->GetGlobalRequestID(), info->GetResourceType(), | |
521 info->IsDownload(), request->creation_time())); | |
522 #endif // BUILDFLAG(ENABLE_OFFLINE_PAGES) | |
523 | |
461 ProfileIOData* io_data = ProfileIOData::FromResourceContext( | 524 ProfileIOData* io_data = ProfileIOData::FromResourceContext( |
462 resource_context); | 525 resource_context); |
463 | 526 |
464 #if defined(OS_ANDROID) | 527 #if defined(OS_ANDROID) |
465 if (resource_type != content::RESOURCE_TYPE_MAIN_FRAME) | 528 if (resource_type != content::RESOURCE_TYPE_MAIN_FRAME) |
466 InterceptNavigationDelegate::UpdateUserGestureCarryoverInfo(request); | 529 InterceptNavigationDelegate::UpdateUserGestureCarryoverInfo(request); |
467 #endif | 530 #endif |
468 | 531 |
469 #if defined(OS_CHROMEOS) | 532 #if defined(OS_CHROMEOS) |
470 // Check if we need to add merge session throttle. This throttle will postpone | 533 // 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, | 1030 &ChromeResourceDispatcherHostDelegate::OnAbortedFrameLoad, |
968 base::Unretained(this), url, request_loading_time)); | 1031 base::Unretained(this), url, request_loading_time)); |
969 return; | 1032 return; |
970 } | 1033 } |
971 | 1034 |
972 std::string metric_name = (request_loading_time.InMilliseconds() < 100 ? | 1035 std::string metric_name = (request_loading_time.InMilliseconds() < 100 ? |
973 "Net.ErrAborted.Fast" : "Net.ErrAborted.Slow"); | 1036 "Net.ErrAborted.Fast" : "Net.ErrAborted.Slow"); |
974 rappor::SampleDomainAndRegistryFromGURL( | 1037 rappor::SampleDomainAndRegistryFromGURL( |
975 g_browser_process->rappor_service(), metric_name, url); | 1038 g_browser_process->rappor_service(), metric_name, url); |
976 } | 1039 } |
OLD | NEW |