| Index: chrome/browser/data_use_measurement/chrome_data_use_ascriber_service.cc
|
| diff --git a/chrome/browser/data_use_measurement/chrome_data_use_ascriber_service.cc b/chrome/browser/data_use_measurement/chrome_data_use_ascriber_service.cc
|
| index 069e999c4b955e9b3728daf216be5a481e69262b..ebd021d6fff295eb1c2f30dd5a65d48df15ad9b8 100644
|
| --- a/chrome/browser/data_use_measurement/chrome_data_use_ascriber_service.cc
|
| +++ b/chrome/browser/data_use_measurement/chrome_data_use_ascriber_service.cc
|
| @@ -119,6 +119,11 @@
|
| if (!navigation_handle->IsInMainFrame())
|
| return;
|
|
|
| + if (!is_initialized_) {
|
| + pending_navigations_queue_.push_back(navigation_handle);
|
| + return;
|
| + }
|
| +
|
| if (!ascriber_)
|
| return;
|
|
|
| @@ -132,13 +137,21 @@
|
| navigation_handle));
|
| }
|
|
|
| -void ChromeDataUseAscriberService::ReadyToCommitNavigation(
|
| +void ChromeDataUseAscriberService::DidFinishNavigation(
|
| content::NavigationHandle* navigation_handle) {
|
| DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
|
|
|
| if (!navigation_handle->IsInMainFrame())
|
| return;
|
|
|
| + if (!is_initialized_) {
|
| + // While remove() is a O(n) operation, the pending queue is not expected
|
| + // to have a significant number of elements.
|
| + DCHECK_GE(50u, pending_navigations_queue_.size());
|
| + pending_navigations_queue_.remove(navigation_handle);
|
| + return;
|
| + }
|
| +
|
| if (!ascriber_)
|
| return;
|
|
|
| @@ -146,9 +159,8 @@
|
| content::BrowserThread::PostTask(
|
| content::BrowserThread::IO, FROM_HERE,
|
| base::Bind(
|
| - &ChromeDataUseAscriber::ReadyToCommitMainFrameNavigation,
|
| + &ChromeDataUseAscriber::DidFinishMainFrameNavigation,
|
| base::Unretained(ascriber_), navigation_handle->GetURL(),
|
| - navigation_handle->GetGlobalRequestID(),
|
| web_contents->GetRenderProcessHost()->GetID(),
|
| web_contents->GetMainFrame()->GetRoutingID(),
|
| !navigation_handle->HasCommitted() || navigation_handle->IsSamePage(),
|
| @@ -187,6 +199,11 @@
|
| RenderFrameCreated(it);
|
| }
|
| pending_frames_queue_.clear();
|
| +
|
| + for (auto& it : pending_navigations_queue_) {
|
| + DidStartNavigation(it);
|
| + }
|
| + pending_navigations_queue_.clear();
|
| }
|
|
|
| } // namespace data_use_measurement
|
|
|