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

Unified Diff: components/data_usage/core/data_use_aggregator.cc

Issue 1421983002: Include tab IDs when reporting data use accounting. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@data_use_scoped_vector
Patch Set: Moved tab ID determination logic into data_usage codebase. Created 5 years, 1 month 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: components/data_usage/core/data_use_aggregator.cc
diff --git a/components/data_usage/core/data_use_aggregator.cc b/components/data_usage/core/data_use_aggregator.cc
index 792510b56b31b0a245f41f236e137db250d8a347..091a9008c5175897b814245bd6fa86bf20bdd6d8 100644
--- a/components/data_usage/core/data_use_aggregator.cc
+++ b/components/data_usage/core/data_use_aggregator.cc
@@ -5,11 +5,13 @@
#include "components/data_usage/core/data_use_aggregator.h"
#include "base/bind.h"
+#include "base/callback.h"
#include "base/memory/scoped_ptr.h"
#include "base/message_loop/message_loop.h"
#include "base/single_thread_task_runner.h"
#include "base/stl_util.h"
#include "components/data_usage/core/data_use.h"
+#include "components/data_usage/core/data_use_annotator.h"
#include "net/base/load_timing_info.h"
#include "net/base/network_change_notifier.h"
#include "net/url_request/url_request.h"
@@ -20,8 +22,9 @@
namespace data_usage {
-DataUseAggregator::DataUseAggregator()
- : connection_type_(net::NetworkChangeNotifier::GetConnectionType()),
+DataUseAggregator::DataUseAggregator(scoped_ptr<DataUseAnnotator> annotator)
+ : annotator_(annotator.Pass()),
+ connection_type_(net::NetworkChangeNotifier::GetConnectionType()),
off_the_record_tx_bytes_since_last_flush_(0),
off_the_record_rx_bytes_since_last_flush_(0),
is_flush_pending_(false),
@@ -46,39 +49,27 @@ void DataUseAggregator::RemoveObserver(Observer* observer) {
observer_list_.RemoveObserver(observer);
}
-void DataUseAggregator::ReportDataUse(const net::URLRequest& request,
- int32_t tab_id,
+void DataUseAggregator::ReportDataUse(net::URLRequest* request,
int64_t tx_bytes,
int64_t rx_bytes) {
DCHECK(thread_checker_.CalledOnValidThread());
+
net::LoadTimingInfo load_timing_info;
- request.GetLoadTimingInfo(&load_timing_info);
+ request->GetLoadTimingInfo(&load_timing_info);
scoped_ptr<DataUse> data_use(
- new DataUse(request.url(), load_timing_info.request_start,
- request.first_party_for_cookies(), tab_id, connection_type_,
- mcc_mnc_, tx_bytes, rx_bytes));
+ new DataUse(request->url(), load_timing_info.request_start,
+ request->first_party_for_cookies(), -1 /* tab_id */,
+ connection_type_, mcc_mnc_, tx_bytes, rx_bytes));
- // As an optimization, attempt to combine the newly reported data use with the
- // most recent buffered data use, if the annotations on the data use are the
- // same.
- if (!buffered_data_use_.empty() &&
- buffered_data_use_.back()->CanCombineWith(*data_use)) {
- buffered_data_use_.back()->tx_bytes += tx_bytes;
- buffered_data_use_.back()->rx_bytes += rx_bytes;
- } else {
- buffered_data_use_.push_back(data_use.Pass());
+ if (!annotator_) {
+ AppendDataUse(data_use.Pass());
+ return;
}
- if (!is_flush_pending_) {
- // Post a flush operation to happen in the future, so that the
- // DataUseAggregator has a chance to batch together some data use before
- // notifying observers.
- base::MessageLoop::current()->task_runner()->PostTask(
- FROM_HERE,
- base::Bind(&DataUseAggregator::FlushBufferedDataUse, GetWeakPtr()));
- is_flush_pending_ = true;
- }
+ annotator_->Annotate(
+ request, data_use.Pass(),
+ base::Bind(&DataUseAggregator::AppendDataUse, GetWeakPtr()));
}
void DataUseAggregator::ReportOffTheRecordDataUse(int64_t tx_bytes,
@@ -89,6 +80,7 @@ void DataUseAggregator::ReportOffTheRecordDataUse(int64_t tx_bytes,
}
base::WeakPtr<DataUseAggregator> DataUseAggregator::GetWeakPtr() {
+ DCHECK(thread_checker_.CalledOnValidThread());
return weak_ptr_factory_.GetWeakPtr();
}
@@ -107,6 +99,32 @@ void DataUseAggregator::SetMccMncForTests(const std::string& mcc_mnc) {
mcc_mnc_ = mcc_mnc;
}
+void DataUseAggregator::AppendDataUse(scoped_ptr<DataUse> data_use) {
+ DCHECK(thread_checker_.CalledOnValidThread());
+ DCHECK(data_use);
+
+ // As an optimization, attempt to combine the newly reported data use with the
+ // most recent buffered data use, if the annotations on the data use are the
+ // same.
+ if (!buffered_data_use_.empty() &&
+ buffered_data_use_.back()->CanCombineWith(*data_use)) {
+ buffered_data_use_.back()->tx_bytes += data_use->tx_bytes;
+ buffered_data_use_.back()->rx_bytes += data_use->rx_bytes;
+ } else {
+ buffered_data_use_.push_back(data_use.Pass());
+ }
+
+ if (!is_flush_pending_) {
+ // Post a flush operation to happen in the future, so that the
+ // DataUseAggregator has a chance to batch together some data use before
+ // notifying observers.
+ base::MessageLoop::current()->task_runner()->PostTask(
+ FROM_HERE,
+ base::Bind(&DataUseAggregator::FlushBufferedDataUse, GetWeakPtr()));
+ is_flush_pending_ = true;
+ }
+}
+
void DataUseAggregator::FlushBufferedDataUse() {
DCHECK(thread_checker_.CalledOnValidThread());

Powered by Google App Engine
This is Rietveld 408576698