| Index: chrome/browser/android/data_usage/external_data_use_observer.cc
|
| diff --git a/chrome/browser/android/data_usage/external_data_use_observer.cc b/chrome/browser/android/data_usage/external_data_use_observer.cc
|
| index a1dba79a73f3b54b3b09cc35fe3d352f6c4ec5ab..210b5dbea24b3e61446864e5ce07ffe221299674 100644
|
| --- a/chrome/browser/android/data_usage/external_data_use_observer.cc
|
| +++ b/chrome/browser/android/data_usage/external_data_use_observer.cc
|
| @@ -133,13 +133,13 @@ ExternalDataUseObserver::ExternalDataUseObserver(
|
| const scoped_refptr<base::SingleThreadTaskRunner>& io_task_runner,
|
| const scoped_refptr<base::SingleThreadTaskRunner>& ui_task_runner)
|
| : data_use_aggregator_(data_use_aggregator),
|
| + external_data_use_observer_bridge_(new ExternalDataUseObserverBridge()),
|
| data_use_tab_model_(new DataUseTabModel()),
|
| last_data_report_submitted_ticks_(base::TimeTicks()),
|
| pending_report_bytes_(0),
|
| ui_task_runner_(ui_task_runner),
|
| previous_report_time_(base::Time::Now()),
|
| last_matching_rules_fetch_time_(base::TimeTicks::Now()),
|
| - external_data_use_observer_bridge_(new ExternalDataUseObserverBridge()),
|
| total_bytes_buffered_(0),
|
| fetch_matching_rules_duration_(
|
| base::TimeDelta::FromSeconds(GetFetchMatchingRulesDurationSeconds())),
|
| @@ -162,12 +162,11 @@ ExternalDataUseObserver::ExternalDataUseObserver(
|
| ui_task_runner_->PostTask(FROM_HERE,
|
| base::Bind(&DataUseTabModel::InitOnUIThread,
|
| base::Unretained(data_use_tab_model_),
|
| - io_task_runner, GetWeakPtr()));
|
| + external_data_use_observer_bridge_));
|
|
|
| - // Initialize the ExternalDataUseObserverBridge object. Initialization will
|
| - // also trigger the fetching of matching rules. It is okay to use
|
| - // base::Unretained here since |external_data_use_observer_bridge_| is
|
| - // owned by |this|, and is destroyed on UI thread when |this| is destroyed.
|
| + // Initialize the ExternalDataUseObserverBridge object. It is okay to use
|
| + // base::Unretained here since |external_data_use_observer_bridge_| is owned
|
| + // by |this|, and is destroyed on UI thread when |this| is destroyed.
|
| ui_task_runner_->PostTask(
|
| FROM_HERE,
|
| base::Bind(&ExternalDataUseObserverBridge::Init,
|
| @@ -181,17 +180,18 @@ ExternalDataUseObserver::~ExternalDataUseObserver() {
|
| if (registered_as_data_use_observer_)
|
| data_use_aggregator_->RemoveObserver(this);
|
|
|
| + // Delete |data_use_tab_model_| on the UI thread. |data_use_tab_model_| should
|
| + // be deleted before |external_data_use_observer_bridge_|.
|
| + if (!ui_task_runner_->DeleteSoon(FROM_HERE, data_use_tab_model_)) {
|
| + NOTIMPLEMENTED() << " DataUseTabModel was not deleted successfully";
|
| + }
|
| +
|
| // Delete |external_data_use_observer_bridge_| on the UI thread.
|
| if (!ui_task_runner_->DeleteSoon(FROM_HERE,
|
| external_data_use_observer_bridge_)) {
|
| NOTIMPLEMENTED()
|
| << " ExternalDataUseObserverBridge was not deleted successfully";
|
| }
|
| -
|
| - // Delete |data_use_tab_model_| on the UI thread.
|
| - if (!ui_task_runner_->DeleteSoon(FROM_HERE, data_use_tab_model_)) {
|
| - NOTIMPLEMENTED() << " DataUseTabModel was not deleted successfully";
|
| - }
|
| }
|
|
|
| void ExternalDataUseObserver::OnReportDataUseDone(bool success) {
|
|
|