Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3192)

Unified Diff: chrome/browser/android/data_usage/data_use_tab_model.cc

Issue 1443683002: Notify DataUseTabModel of navigations and tab closures (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Remove unnecessary thread checks in the factory class Created 5 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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 dea0659f0209f14ca52b02af348c47aa2ac497f3..49900a9b096ff2818bcd9cc1f4d1c3ef8cca7982 100644
--- a/chrome/browser/android/data_usage/data_use_tab_model.cc
+++ b/chrome/browser/android/data_usage/data_use_tab_model.cc
@@ -5,11 +5,13 @@
#include "chrome/browser/android/data_usage/data_use_tab_model.h"
#include "base/metrics/histogram_macros.h"
+#include "base/single_thread_task_runner.h"
#include "base/strings/string_number_conversions.h"
#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 "components/data_usage/core/data_use.h"
#include "components/variations/variations_associated_data.h"
+#include "url/gurl.h"
namespace {
@@ -25,7 +27,7 @@ const char kUMAUnexpiredTabEntryRemovalDurationMinutesHistogram[] =
"DataUse.TabModel.UnexpiredTabEntryRemovalDuration";
// Returns true if |tab_id| is a valid tab ID.
-bool IsValidTabID(int32_t tab_id) {
+bool IsValidTabID(SessionID::id_type tab_id) {
return tab_id >= 0;
}
@@ -53,9 +55,11 @@ 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>),
max_tab_entries_(GetMaxTabEntries()),
- weak_factory_(this) {}
+ ui_task_runner_(ui_task_runner),
+ weak_factory_(this) {
+ DCHECK(ui_task_runner_);
+}
DataUseTabModel::~DataUseTabModel() {
DCHECK(thread_checker_.CalledOnValidThread());
@@ -66,7 +70,7 @@ base::WeakPtr<DataUseTabModel> DataUseTabModel::GetWeakPtr() {
return weak_factory_.GetWeakPtr();
}
-void DataUseTabModel::OnNavigationEvent(int32_t tab_id,
+void DataUseTabModel::OnNavigationEvent(SessionID::id_type tab_id,
TransitionType transition,
const GURL& url,
const std::string& package) {
@@ -75,6 +79,7 @@ void DataUseTabModel::OnNavigationEvent(int32_t tab_id,
switch (transition) {
case TRANSITION_OMNIBOX_SEARCH:
+ case TRANSITION_OMNIBOX_NAVIGATION:
case TRANSITION_FROM_EXTERNAL_APP: {
// Enter events.
bool start_tracking = false;
@@ -103,11 +108,8 @@ void DataUseTabModel::OnNavigationEvent(int32_t tab_id,
break;
}
- case TRANSITION_FROM_NAVSUGGEST:
- case TRANSITION_OMNIBOX_NAVIGATION:
case TRANSITION_BOOKMARK:
case TRANSITION_HISTORY_ITEM:
- case TRANSITION_TO_EXTERNAL_APP:
// Exit events.
EndTrackingDataUse(tab_id);
break;
@@ -118,7 +120,7 @@ void DataUseTabModel::OnNavigationEvent(int32_t tab_id,
}
}
-void DataUseTabModel::OnTabCloseEvent(int32_t tab_id) {
+void DataUseTabModel::OnTabCloseEvent(SessionID::id_type tab_id) {
DCHECK(thread_checker_.CalledOnValidThread());
DCHECK(IsValidTabID(tab_id));
@@ -159,29 +161,38 @@ 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::RemoveObserver(TabDataUseObserver* observer) {
- observer_list_->RemoveObserver(observer);
+void DataUseTabModel::AddObserver(base::WeakPtr<TabDataUseObserver> observer) {
+ DCHECK(thread_checker_.CalledOnValidThread());
+ observers_.push_back(observer);
}
base::TimeTicks DataUseTabModel::Now() const {
return base::TimeTicks::Now();
}
-void DataUseTabModel::NotifyObserversOfTrackingStarting(int32_t tab_id) {
- observer_list_->Notify(FROM_HERE, &TabDataUseObserver::NotifyTrackingStarting,
- tab_id);
+void DataUseTabModel::NotifyObserversOfTrackingStarting(
+ SessionID::id_type tab_id) {
+ DCHECK(thread_checker_.CalledOnValidThread());
+ DCHECK(ui_task_runner_);
+ for (const auto& observer : observers_) {
+ ui_task_runner_->PostTask(
+ FROM_HERE, base::Bind(&TabDataUseObserver::NotifyTrackingStarting,
+ observer, tab_id));
+ }
}
-void DataUseTabModel::NotifyObserversOfTrackingEnding(int32_t tab_id) {
- observer_list_->Notify(FROM_HERE, &TabDataUseObserver::NotifyTrackingEnding,
- tab_id);
+void DataUseTabModel::NotifyObserversOfTrackingEnding(
+ SessionID::id_type tab_id) {
+ DCHECK(thread_checker_.CalledOnValidThread());
+ DCHECK(ui_task_runner_);
+ for (const auto& observer : observers_) {
+ ui_task_runner_->PostTask(
+ FROM_HERE, base::Bind(&TabDataUseObserver::NotifyTrackingEnding,
+ observer, tab_id));
+ }
}
-void DataUseTabModel::StartTrackingDataUse(int32_t tab_id,
+void DataUseTabModel::StartTrackingDataUse(SessionID::id_type tab_id,
const std::string& label) {
// TODO(rajendrant): Explore ability to handle changes in label for current
// session.
@@ -202,7 +213,7 @@ void DataUseTabModel::StartTrackingDataUse(int32_t tab_id,
CompactTabEntries(); // Keep total number of tab entries within limit.
}
-void DataUseTabModel::EndTrackingDataUse(int32_t tab_id) {
+void DataUseTabModel::EndTrackingDataUse(SessionID::id_type tab_id) {
TabEntryMap::iterator tab_entry_iterator = active_tabs_.find(tab_id);
if (tab_entry_iterator != active_tabs_.end() &&
tab_entry_iterator->second.EndTracking()) {

Powered by Google App Engine
This is Rietveld 408576698