| Index: chrome/browser/page_load_metrics/page_load_tracker.cc
|
| diff --git a/chrome/browser/page_load_metrics/page_load_tracker.cc b/chrome/browser/page_load_metrics/page_load_tracker.cc
|
| index b3c4f643525cce773c7e57ba7ffc3cd6b75a8ec9..742c8413c16e19c558bad22b74a928241151fcff 100644
|
| --- a/chrome/browser/page_load_metrics/page_load_tracker.cc
|
| +++ b/chrome/browser/page_load_metrics/page_load_tracker.cc
|
| @@ -12,10 +12,12 @@
|
| #include "base/logging.h"
|
| #include "base/memory/ptr_util.h"
|
| #include "base/metrics/histogram_macros.h"
|
| +#include "chrome/browser/browser_process.h"
|
| #include "chrome/browser/page_load_metrics/page_load_metrics_embedder_interface.h"
|
| #include "chrome/browser/page_load_metrics/page_load_metrics_util.h"
|
| #include "chrome/browser/prerender/prerender_contents.h"
|
| #include "chrome/common/page_load_metrics/page_load_timing.h"
|
| +#include "components/ukm/public/ukm_recorder.h"
|
| #include "content/public/browser/navigation_details.h"
|
| #include "content/public/browser/navigation_handle.h"
|
| #include "content/public/browser/render_frame_host.h"
|
| @@ -175,7 +177,8 @@ PageLoadTracker::PageLoadTracker(
|
| aborted_chain_size_(aborted_chain_size),
|
| aborted_chain_size_same_url_(aborted_chain_size_same_url),
|
| embedder_interface_(embedder_interface),
|
| - metrics_update_dispatcher_(this, navigation_handle, embedder_interface) {
|
| + metrics_update_dispatcher_(this, navigation_handle, embedder_interface),
|
| + source_id_(ukm::UkmRecorder::GetNewSourceID()) {
|
| DCHECK(!navigation_handle->HasCommitted());
|
| embedder_interface_->RegisterObservers(this);
|
| INVOKE_AND_PRUNE_OBSERVERS(observers_, OnStart, navigation_handle,
|
| @@ -326,11 +329,17 @@ void PageLoadTracker::Commit(content::NavigationHandle* navigation_handle) {
|
| page_transition_ = navigation_handle->GetPageTransition();
|
| user_initiated_info_.user_gesture = navigation_handle->HasUserGesture();
|
|
|
| - INVOKE_AND_PRUNE_OBSERVERS(
|
| - observers_, ShouldObserveMimeType,
|
| - navigation_handle->GetWebContents()->GetContentsMimeType());
|
| + const std::string& mime_type =
|
| + navigation_handle->GetWebContents()->GetContentsMimeType();
|
| + INVOKE_AND_PRUNE_OBSERVERS(observers_, ShouldObserveMimeType, mime_type);
|
|
|
| - INVOKE_AND_PRUNE_OBSERVERS(observers_, OnCommit, navigation_handle);
|
| + // Only record page load UKM data for standard web page mime types, such as
|
| + // HTML and XHTML.
|
| + if (PageLoadMetricsObserver::IsStandardWebPageMimeType(mime_type))
|
| + RecordUkmSourceInfo();
|
| +
|
| + INVOKE_AND_PRUNE_OBSERVERS(observers_, OnCommit, navigation_handle,
|
| + source_id_);
|
| LogAbortChainHistograms(navigation_handle);
|
| }
|
|
|
| @@ -355,6 +364,16 @@ void PageLoadTracker::FailedProvisionalLoad(
|
| failed_provisional_load_info_.reset(new FailedProvisionalLoadInfo(
|
| failed_load_time - navigation_handle->NavigationStart(),
|
| navigation_handle->GetNetErrorCode()));
|
| + RecordUkmSourceInfo();
|
| +}
|
| +
|
| +void PageLoadTracker::RecordUkmSourceInfo() {
|
| + ukm::UkmRecorder* ukm_recorder = g_browser_process->ukm_recorder();
|
| + if (!ukm_recorder)
|
| + return;
|
| +
|
| + ukm_recorder->UpdateSourceURL(source_id_, start_url_);
|
| + ukm_recorder->UpdateSourceURL(source_id_, url_);
|
| }
|
|
|
| void PageLoadTracker::Redirect(content::NavigationHandle* navigation_handle) {
|
| @@ -481,7 +500,7 @@ PageLoadExtraInfo PageLoadTracker::ComputePageLoadExtraInfo() const {
|
| started_in_foreground_, user_initiated_info_, url(), start_url_,
|
| did_commit_, page_end_reason_, page_end_user_initiated_info_,
|
| page_end_time, metrics_update_dispatcher_.main_frame_metadata(),
|
| - metrics_update_dispatcher_.subframe_metadata());
|
| + metrics_update_dispatcher_.subframe_metadata(), source_id_);
|
| }
|
|
|
| bool PageLoadTracker::HasMatchingNavigationRequestID(
|
|
|