OLD | NEW |
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 "components/page_load_metrics/browser/metrics_web_contents_observer.h" | 5 #include "components/page_load_metrics/browser/metrics_web_contents_observer.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <string> | 8 #include <string> |
9 #include <utility> | 9 #include <utility> |
10 | 10 |
(...skipping 235 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
246 navigation_start_(navigation_handle->NavigationStart()), | 246 navigation_start_(navigation_handle->NavigationStart()), |
247 url_(navigation_handle->GetURL()), | 247 url_(navigation_handle->GetURL()), |
248 abort_type_(ABORT_NONE), | 248 abort_type_(ABORT_NONE), |
249 started_in_foreground_(in_foreground), | 249 started_in_foreground_(in_foreground), |
250 aborted_chain_size_(aborted_chain_size), | 250 aborted_chain_size_(aborted_chain_size), |
251 aborted_chain_size_same_url_(aborted_chain_size_same_url), | 251 aborted_chain_size_same_url_(aborted_chain_size_same_url), |
252 embedder_interface_(embedder_interface) { | 252 embedder_interface_(embedder_interface) { |
253 DCHECK(!navigation_handle->HasCommitted()); | 253 DCHECK(!navigation_handle->HasCommitted()); |
254 embedder_interface_->RegisterObservers(this); | 254 embedder_interface_->RegisterObservers(this); |
255 for (const auto& observer : observers_) { | 255 for (const auto& observer : observers_) { |
256 observer->OnStart(navigation_handle, currently_committed_url); | 256 observer->OnStart(navigation_handle, currently_committed_url, |
| 257 started_in_foreground_); |
257 } | 258 } |
258 } | 259 } |
259 | 260 |
260 PageLoadTracker::~PageLoadTracker() { | 261 PageLoadTracker::~PageLoadTracker() { |
261 const PageLoadExtraInfo info = GetPageLoadMetricsInfo(); | 262 const PageLoadExtraInfo info = GetPageLoadMetricsInfo(); |
262 if (!info.time_to_commit.is_zero() && renderer_tracked() && | 263 if (!info.time_to_commit.is_zero() && renderer_tracked() && |
263 timing_.IsEmpty()) { | 264 timing_.IsEmpty()) { |
264 RecordInternalError(ERR_NO_IPCS_RECEIVED); | 265 RecordInternalError(ERR_NO_IPCS_RECEIVED); |
265 } | 266 } |
266 // Recall that trackers that are given ABORT_UNKNOWN_NAVIGATION have their | 267 // Recall that trackers that are given ABORT_UNKNOWN_NAVIGATION have their |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
321 | 322 |
322 void PageLoadTracker::WebContentsHidden() { | 323 void PageLoadTracker::WebContentsHidden() { |
323 // Only log the first time we background in a given page load. | 324 // Only log the first time we background in a given page load. |
324 if (background_time_.is_null()) { | 325 if (background_time_.is_null()) { |
325 // Make sure we either started in the foreground and haven't been | 326 // Make sure we either started in the foreground and haven't been |
326 // foregrounded yet, or started in the background and have already been | 327 // foregrounded yet, or started in the background and have already been |
327 // foregrounded. | 328 // foregrounded. |
328 DCHECK_EQ(started_in_foreground_, foreground_time_.is_null()); | 329 DCHECK_EQ(started_in_foreground_, foreground_time_.is_null()); |
329 background_time_ = base::TimeTicks::Now(); | 330 background_time_ = base::TimeTicks::Now(); |
330 } | 331 } |
| 332 |
| 333 for (const auto& observer : observers_) |
| 334 observer->OnHidden(); |
331 } | 335 } |
332 | 336 |
333 void PageLoadTracker::WebContentsShown() { | 337 void PageLoadTracker::WebContentsShown() { |
334 // Only log the first time we foreground in a given page load. | 338 // Only log the first time we foreground in a given page load. |
335 if (foreground_time_.is_null()) { | 339 if (foreground_time_.is_null()) { |
336 // Make sure we either started in the background and haven't been | 340 // Make sure we either started in the background and haven't been |
337 // backgrounded yet, or started in the foreground and have already been | 341 // backgrounded yet, or started in the foreground and have already been |
338 // backgrounded. | 342 // backgrounded. |
339 DCHECK_NE(started_in_foreground_, background_time_.is_null()); | 343 DCHECK_NE(started_in_foreground_, background_time_.is_null()); |
340 foreground_time_ = base::TimeTicks::Now(); | 344 foreground_time_ = base::TimeTicks::Now(); |
341 } | 345 } |
| 346 |
| 347 for (const auto& observer : observers_) |
| 348 observer->OnShown(); |
342 } | 349 } |
343 | 350 |
344 void PageLoadTracker::Commit(content::NavigationHandle* navigation_handle) { | 351 void PageLoadTracker::Commit(content::NavigationHandle* navigation_handle) { |
345 // TODO(bmcquade): To improve accuracy, consider adding commit time to | 352 // TODO(bmcquade): To improve accuracy, consider adding commit time to |
346 // NavigationHandle. Taking a timestamp here should be close enough for now. | 353 // NavigationHandle. Taking a timestamp here should be close enough for now. |
347 commit_time_ = base::TimeTicks::Now(); | 354 commit_time_ = base::TimeTicks::Now(); |
348 url_ = navigation_handle->GetURL(); | 355 url_ = navigation_handle->GetURL(); |
349 for (const auto& observer : observers_) { | 356 for (const auto& observer : observers_) { |
350 observer->OnCommit(navigation_handle); | 357 observer->OnCommit(navigation_handle); |
351 } | 358 } |
(...skipping 429 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
781 | 788 |
782 if (!committed_load_->UpdateTiming(timing, metadata)) { | 789 if (!committed_load_->UpdateTiming(timing, metadata)) { |
783 // If the page load tracker cannot update its timing, something is wrong | 790 // If the page load tracker cannot update its timing, something is wrong |
784 // with the IPC (it's from another load, or it's invalid in some other way). | 791 // with the IPC (it's from another load, or it's invalid in some other way). |
785 // We expect this to be a rare occurrence. | 792 // We expect this to be a rare occurrence. |
786 RecordInternalError(ERR_BAD_TIMING_IPC); | 793 RecordInternalError(ERR_BAD_TIMING_IPC); |
787 } | 794 } |
788 } | 795 } |
789 | 796 |
790 } // namespace page_load_metrics | 797 } // namespace page_load_metrics |
OLD | NEW |