Index: chrome/browser/page_load_metrics/metrics_web_contents_observer.cc |
diff --git a/chrome/browser/page_load_metrics/metrics_web_contents_observer.cc b/chrome/browser/page_load_metrics/metrics_web_contents_observer.cc |
index 96a71632343470ca0059f38857c9a1e8586a256c..402f1d0e6930dcfb4dae902e3d9fe6c3ed814589 100644 |
--- a/chrome/browser/page_load_metrics/metrics_web_contents_observer.cc |
+++ b/chrome/browser/page_load_metrics/metrics_web_contents_observer.cc |
@@ -303,6 +303,8 @@ PageLoadTracker::PageLoadTracker( |
embedder_interface_(embedder_interface) { |
DCHECK(!navigation_handle->HasCommitted()); |
embedder_interface_->RegisterObservers(this); |
+ |
+ FilterObservers(navigation_handle); |
for (const auto& observer : observers_) { |
observer->OnStart(navigation_handle, currently_committed_url, |
started_in_foreground_); |
@@ -394,6 +396,18 @@ void PageLoadTracker::LogAbortChainHistograms( |
} |
} |
+void PageLoadTracker::FilterObservers( |
+ content::NavigationHandle* navigation_handle) { |
+ auto it = observers_.begin(); |
+ while (it != observers_.end()) { |
+ if ((*it)->ShouldTrackLoad(navigation_handle) == IGNORE) { |
+ it = observers_.erase(it); |
+ } else { |
+ ++it; |
+ } |
+ } |
+} |
+ |
void PageLoadTracker::WebContentsHidden() { |
// Only log the first time we background in a given page load. |
if (background_time_.is_null()) { |
@@ -433,6 +447,8 @@ void PageLoadTracker::Commit(content::NavigationHandle* navigation_handle) { |
// Some transitions (like CLIENT_REDIRECT) are only known at commit time. |
page_transition_ = navigation_handle->GetPageTransition(); |
user_gesture_ = navigation_handle->HasUserGesture(); |
+ |
+ FilterObservers(navigation_handle); |
for (const auto& observer : observers_) { |
observer->OnCommit(navigation_handle); |
} |
@@ -1049,11 +1065,6 @@ void MetricsWebContentsObserver::OnTimingUpdated( |
error = true; |
} |
- if (!web_contents()->GetLastCommittedURL().SchemeIsHTTPOrHTTPS()) { |
- RecordInternalError(ERR_IPC_FROM_BAD_URL_SCHEME); |
- error = true; |
- } |
- |
if (error) |
return; |