Chromium Code Reviews| Index: chrome/browser/android/data_usage/data_use_tab_model.cc |
| diff --git a/chrome/browser/android/data_usage/data_use_tab_model.cc b/chrome/browser/android/data_usage/data_use_tab_model.cc |
| index c4d8e36e39e2716ec47af99ce4fe3453efac5227..8a2222da55c3ec71e4f0b778b111151758af52ab 100644 |
| --- a/chrome/browser/android/data_usage/data_use_tab_model.cc |
| +++ b/chrome/browser/android/data_usage/data_use_tab_model.cc |
| @@ -7,6 +7,7 @@ |
| #include "base/time/time.h" |
| #include "chrome/browser/android/data_usage/external_data_use_observer.h" |
| #include "chrome/browser/android/data_usage/tab_data_use_entry.h" |
| +#include "content/public/browser/browser_thread.h" |
|
sclittle
2015/11/20 22:50:54
Remove this include, since you're not actually usi
tbansal1
2015/11/23 17:52:22
Done.
|
| namespace { |
| @@ -33,7 +34,7 @@ DataUseTabModel::DataUseTabModel( |
| const ExternalDataUseObserver* data_use_observer, |
| scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner) |
| : data_use_observer_(data_use_observer), |
| - observer_list_(new base::ObserverListThreadSafe<TabDataUseObserver>), |
| + ui_task_runner_(ui_task_runner), |
| weak_factory_(this) {} |
| DataUseTabModel::~DataUseTabModel() { |
| @@ -55,6 +56,7 @@ void DataUseTabModel::OnNavigationEvent(int32_t tab_id, |
| // TODO(rajendrant): implementation to use package. |
| switch (transition) { |
| case TRANSITION_OMNIBOX_SEARCH: |
| + case TRANSITION_OMNIBOX_NAVIGATION: |
| case TRANSITION_FROM_EXTERNAL_APP: { |
| // Enter events. |
| std::string label; |
| @@ -69,7 +71,6 @@ void DataUseTabModel::OnNavigationEvent(int32_t tab_id, |
| } |
| case TRANSITION_FROM_NAVSUGGEST: |
| - case TRANSITION_OMNIBOX_NAVIGATION: |
| case TRANSITION_BOOKMARK: |
| case TRANSITION_HISTORY_ITEM: |
| case TRANSITION_TO_EXTERNAL_APP: |
| @@ -117,22 +118,34 @@ bool DataUseTabModel::GetLabelForDataUse(const data_usage::DataUse& data_use, |
| return false; // Tab session not found. |
| } |
| -void DataUseTabModel::AddObserver(TabDataUseObserver* observer) { |
| - observer_list_->AddObserver(observer); |
| +void DataUseTabModel::AddObserver( |
| + const TabDataUseObserver* observer, |
| + const base::WeakPtr<TabDataUseObserver>& weak_ptr_observer) { |
| + DCHECK(thread_checker_.CalledOnValidThread()); |
| + observers_.insert(ObserverMap::value_type(observer, weak_ptr_observer)); |
| } |
| -void DataUseTabModel::RemoveObserver(TabDataUseObserver* observer) { |
| - observer_list_->RemoveObserver(observer); |
| +void DataUseTabModel::RemoveObserver(const TabDataUseObserver* observer) { |
| + DCHECK(thread_checker_.CalledOnValidThread()); |
| + observers_.erase(observer); |
| } |
| void DataUseTabModel::NotifyObserversOfTrackingStarting(int32_t tab_id) { |
| - observer_list_->Notify(FROM_HERE, &TabDataUseObserver::NotifyTrackingStarting, |
| - tab_id); |
| + DCHECK(thread_checker_.CalledOnValidThread()); |
| + for (const auto& it : observers_) { |
| + ui_task_runner_->PostTask( |
| + FROM_HERE, base::Bind(&TabDataUseObserver::NotifyTrackingStarting, |
| + it.second, tab_id)); |
| + } |
| } |
| void DataUseTabModel::NotifyObserversOfTrackingEnding(int32_t tab_id) { |
| - observer_list_->Notify(FROM_HERE, &TabDataUseObserver::NotifyTrackingEnding, |
| - tab_id); |
| + DCHECK(thread_checker_.CalledOnValidThread()); |
| + for (const auto& it : observers_) { |
| + ui_task_runner_->PostTask( |
| + FROM_HERE, base::Bind(&TabDataUseObserver::NotifyTrackingEnding, |
| + it.second, tab_id)); |
| + } |
| } |
| void DataUseTabModel::StartTrackingDataUse(int32_t tab_id, |