Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(291)

Side by Side Diff: chrome/browser/page_load_metrics/metrics_web_contents_observer.cc

Issue 2350473002: [page_load_metrics] Add support for chrome:// urls and add extensions observer (Closed)
Patch Set: fix about:blank check Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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/page_load_metrics/metrics_web_contents_observer.h" 5 #include "chrome/browser/page_load_metrics/metrics_web_contents_observer.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <ostream> 8 #include <ostream>
9 #include <string> 9 #include <string>
10 #include <utility> 10 #include <utility>
(...skipping 285 matching lines...) Expand 10 before | Expand all | Expand 10 after
296 started_in_foreground_(in_foreground), 296 started_in_foreground_(in_foreground),
297 page_transition_(navigation_handle->GetPageTransition()), 297 page_transition_(navigation_handle->GetPageTransition()),
298 num_cache_requests_(0), 298 num_cache_requests_(0),
299 num_network_requests_(0), 299 num_network_requests_(0),
300 user_gesture_(IsNavigationUserInitiated(navigation_handle)), 300 user_gesture_(IsNavigationUserInitiated(navigation_handle)),
301 aborted_chain_size_(aborted_chain_size), 301 aborted_chain_size_(aborted_chain_size),
302 aborted_chain_size_same_url_(aborted_chain_size_same_url), 302 aborted_chain_size_same_url_(aborted_chain_size_same_url),
303 embedder_interface_(embedder_interface) { 303 embedder_interface_(embedder_interface) {
304 DCHECK(!navigation_handle->HasCommitted()); 304 DCHECK(!navigation_handle->HasCommitted());
305 embedder_interface_->RegisterObservers(this); 305 embedder_interface_->RegisterObservers(this);
306
307 FilterObservers(navigation_handle);
306 for (const auto& observer : observers_) { 308 for (const auto& observer : observers_) {
307 observer->OnStart(navigation_handle, currently_committed_url, 309 observer->OnStart(navigation_handle, currently_committed_url,
308 started_in_foreground_); 310 started_in_foreground_);
309 } 311 }
310 } 312 }
311 313
312 PageLoadTracker::~PageLoadTracker() { 314 PageLoadTracker::~PageLoadTracker() {
313 if (app_entered_background_) { 315 if (app_entered_background_) {
314 RecordAppBackgroundPageLoadCompleted(true); 316 RecordAppBackgroundPageLoadCompleted(true);
315 } 317 }
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
387 aborted_chain_size_); 389 aborted_chain_size_);
388 return; 390 return;
389 default: 391 default:
390 NOTREACHED() 392 NOTREACHED()
391 << "LogAbortChainHistograms received unexpected ui::PageTransition: " 393 << "LogAbortChainHistograms received unexpected ui::PageTransition: "
392 << committed_transition; 394 << committed_transition;
393 return; 395 return;
394 } 396 }
395 } 397 }
396 398
399 void PageLoadTracker::FilterObservers(
400 content::NavigationHandle* navigation_handle) {
401 auto it = observers_.begin();
402 while (it != observers_.end()) {
403 if ((*it)->ShouldTrackLoad(navigation_handle) == IGNORE) {
404 it = observers_.erase(it);
405 } else {
406 ++it;
407 }
408 }
409 }
410
397 void PageLoadTracker::WebContentsHidden() { 411 void PageLoadTracker::WebContentsHidden() {
398 // Only log the first time we background in a given page load. 412 // Only log the first time we background in a given page load.
399 if (background_time_.is_null()) { 413 if (background_time_.is_null()) {
400 // Make sure we either started in the foreground and haven't been 414 // Make sure we either started in the foreground and haven't been
401 // foregrounded yet, or started in the background and have already been 415 // foregrounded yet, or started in the background and have already been
402 // foregrounded. 416 // foregrounded.
403 DCHECK_EQ(started_in_foreground_, foreground_time_.is_null()); 417 DCHECK_EQ(started_in_foreground_, foreground_time_.is_null());
404 background_time_ = base::TimeTicks::Now(); 418 background_time_ = base::TimeTicks::Now();
405 ClampBrowserTimestampIfInterProcessTimeTickSkew(&background_time_); 419 ClampBrowserTimestampIfInterProcessTimeTickSkew(&background_time_);
406 } 420 }
(...skipping 19 matching lines...) Expand all
426 440
427 void PageLoadTracker::Commit(content::NavigationHandle* navigation_handle) { 441 void PageLoadTracker::Commit(content::NavigationHandle* navigation_handle) {
428 // TODO(bmcquade): To improve accuracy, consider adding commit time to 442 // TODO(bmcquade): To improve accuracy, consider adding commit time to
429 // NavigationHandle. Taking a timestamp here should be close enough for now. 443 // NavigationHandle. Taking a timestamp here should be close enough for now.
430 commit_time_ = base::TimeTicks::Now(); 444 commit_time_ = base::TimeTicks::Now();
431 ClampBrowserTimestampIfInterProcessTimeTickSkew(&commit_time_); 445 ClampBrowserTimestampIfInterProcessTimeTickSkew(&commit_time_);
432 url_ = navigation_handle->GetURL(); 446 url_ = navigation_handle->GetURL();
433 // Some transitions (like CLIENT_REDIRECT) are only known at commit time. 447 // Some transitions (like CLIENT_REDIRECT) are only known at commit time.
434 page_transition_ = navigation_handle->GetPageTransition(); 448 page_transition_ = navigation_handle->GetPageTransition();
435 user_gesture_ = navigation_handle->HasUserGesture(); 449 user_gesture_ = navigation_handle->HasUserGesture();
450
451 FilterObservers(navigation_handle);
436 for (const auto& observer : observers_) { 452 for (const auto& observer : observers_) {
437 observer->OnCommit(navigation_handle); 453 observer->OnCommit(navigation_handle);
438 } 454 }
439 LogAbortChainHistograms(navigation_handle); 455 LogAbortChainHistograms(navigation_handle);
440 } 456 }
441 457
442 void PageLoadTracker::FailedProvisionalLoad( 458 void PageLoadTracker::FailedProvisionalLoad(
443 content::NavigationHandle* navigation_handle) { 459 content::NavigationHandle* navigation_handle) {
444 DCHECK(!failed_provisional_load_info_); 460 DCHECK(!failed_provisional_load_info_);
445 failed_provisional_load_info_.reset(new FailedProvisionalLoadInfo( 461 failed_provisional_load_info_.reset(new FailedProvisionalLoadInfo(
(...skipping 596 matching lines...) Expand 10 before | Expand all | Expand 10 after
1042 // While timings arriving for the wrong frame are expected, we do not expect 1058 // While timings arriving for the wrong frame are expected, we do not expect
1043 // any of the errors below. Thus, we track occurrences of all errors below, 1059 // any of the errors below. Thus, we track occurrences of all errors below,
1044 // rather than returning early after encountering an error. 1060 // rather than returning early after encountering an error.
1045 1061
1046 bool error = false; 1062 bool error = false;
1047 if (!committed_load_) { 1063 if (!committed_load_) {
1048 RecordInternalError(ERR_IPC_WITH_NO_RELEVANT_LOAD); 1064 RecordInternalError(ERR_IPC_WITH_NO_RELEVANT_LOAD);
1049 error = true; 1065 error = true;
1050 } 1066 }
1051 1067
1052 if (!web_contents()->GetLastCommittedURL().SchemeIsHTTPOrHTTPS()) {
1053 RecordInternalError(ERR_IPC_FROM_BAD_URL_SCHEME);
1054 error = true;
1055 }
1056
1057 if (error) 1068 if (error)
1058 return; 1069 return;
1059 1070
1060 if (!committed_load_->UpdateTiming(timing, metadata)) { 1071 if (!committed_load_->UpdateTiming(timing, metadata)) {
1061 // If the page load tracker cannot update its timing, something is wrong 1072 // If the page load tracker cannot update its timing, something is wrong
1062 // with the IPC (it's from another load, or it's invalid in some other way). 1073 // with the IPC (it's from another load, or it's invalid in some other way).
1063 // We expect this to be a rare occurrence. 1074 // We expect this to be a rare occurrence.
1064 RecordInternalError(ERR_BAD_TIMING_IPC); 1075 RecordInternalError(ERR_BAD_TIMING_IPC);
1065 } 1076 }
1066 } 1077 }
1067 1078
1068 bool MetricsWebContentsObserver::ShouldTrackNavigation( 1079 bool MetricsWebContentsObserver::ShouldTrackNavigation(
1069 content::NavigationHandle* navigation_handle) const { 1080 content::NavigationHandle* navigation_handle) const {
1070 DCHECK(navigation_handle->IsInMainFrame()); 1081 DCHECK(navigation_handle->IsInMainFrame());
1071 DCHECK(!navigation_handle->HasCommitted() || 1082 DCHECK(!navigation_handle->HasCommitted() ||
1072 !navigation_handle->IsSamePage()); 1083 !navigation_handle->IsSamePage());
1073 1084
1074 return BrowserPageTrackDecider(embedder_interface_.get(), web_contents(), 1085 return BrowserPageTrackDecider(embedder_interface_.get(), web_contents(),
1075 navigation_handle).ShouldTrack(); 1086 navigation_handle).ShouldTrack();
1076 } 1087 }
1077 1088
1078 } // namespace page_load_metrics 1089 } // namespace page_load_metrics
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698