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, |