Commit 55ffa569 authored by rajendrant's avatar rajendrant Committed by Commit bot

Make ExternalDataUseReporter independent of other data use classes

Removes DataUseTabModel and ExternalDataUseObserverBridge dependency on
ExternalDataUseReporter by passing necessary callbacks.

BUG=570884

Review-Url: https://codereview.chromium.org/2165123002
Cr-Commit-Position: refs/heads/master@{#406926}
parent f6c6259f
...@@ -222,7 +222,7 @@ void DataUseTabModel::OnTrackingLabelRemoved(const std::string& label) { ...@@ -222,7 +222,7 @@ void DataUseTabModel::OnTrackingLabelRemoved(const std::string& label) {
bool DataUseTabModel::GetTrackingInfoForTabAtTime( bool DataUseTabModel::GetTrackingInfoForTabAtTime(
SessionID::id_type tab_id, SessionID::id_type tab_id,
base::TimeTicks timestamp, const base::TimeTicks timestamp,
TrackingInfo* output_tracking_info) const { TrackingInfo* output_tracking_info) const {
DCHECK(thread_checker_.CalledOnValidThread()); DCHECK(thread_checker_.CalledOnValidThread());
......
...@@ -63,10 +63,16 @@ ExternalDataUseObserver::ExternalDataUseObserver( ...@@ -63,10 +63,16 @@ ExternalDataUseObserver::ExternalDataUseObserver(
base::Bind( base::Bind(
&ExternalDataUseObserverBridge::ShouldRegisterAsDataUseObserver, &ExternalDataUseObserverBridge::ShouldRegisterAsDataUseObserver,
base::Unretained(external_data_use_observer_bridge_)))), base::Unretained(external_data_use_observer_bridge_)))),
external_data_use_reporter_( // It is okay to use base::Unretained for the callbacks, since
new ExternalDataUseReporter(kExternalDataUseObserverFieldTrial, // |external_data_use_observer_bridge_| and |data_use_tab_model_| are
data_use_tab_model_, // owned by |this|, and are destroyed on UI thread after |this| and
external_data_use_observer_bridge_)), // |external_data_use_reporter_| are destroyed.
external_data_use_reporter_(new ExternalDataUseReporter(
kExternalDataUseObserverFieldTrial,
base::Bind(&DataUseTabModel::GetTrackingInfoForTabAtTime,
base::Unretained(data_use_tab_model_)),
base::Bind(&ExternalDataUseObserverBridge::ReportDataUse,
base::Unretained(external_data_use_observer_bridge_)))),
io_task_runner_(io_task_runner), io_task_runner_(io_task_runner),
ui_task_runner_(ui_task_runner), ui_task_runner_(ui_task_runner),
last_matching_rules_fetch_time_(base::TimeTicks::Now()), last_matching_rules_fetch_time_(base::TimeTicks::Now()),
......
...@@ -135,8 +135,8 @@ void ExternalDataUseObserverBridge::ReportDataUse( ...@@ -135,8 +135,8 @@ void ExternalDataUseObserverBridge::ReportDataUse(
const std::string& tag, const std::string& tag,
net::NetworkChangeNotifier::ConnectionType connection_type, net::NetworkChangeNotifier::ConnectionType connection_type,
const std::string& mcc_mnc, const std::string& mcc_mnc,
const base::Time& start_time, base::Time start_time,
const base::Time& end_time, base::Time end_time,
int64_t bytes_downloaded, int64_t bytes_downloaded,
int64_t bytes_uploaded) const { int64_t bytes_uploaded) const {
DCHECK(thread_checker_.CalledOnValidThread()); DCHECK(thread_checker_.CalledOnValidThread());
......
...@@ -75,8 +75,8 @@ class ExternalDataUseObserverBridge { ...@@ -75,8 +75,8 @@ class ExternalDataUseObserverBridge {
const std::string& tag, const std::string& tag,
net::NetworkChangeNotifier::ConnectionType connection_type, net::NetworkChangeNotifier::ConnectionType connection_type,
const std::string& mcc_mnc, const std::string& mcc_mnc,
const base::Time& start_time, base::Time start_time,
const base::Time& end_time, base::Time end_time,
int64_t bytes_downloaded, int64_t bytes_downloaded,
int64_t bytes_uploaded) const; int64_t bytes_uploaded) const;
......
...@@ -10,8 +10,6 @@ ...@@ -10,8 +10,6 @@
#include "base/metrics/histogram_base.h" #include "base/metrics/histogram_base.h"
#include "base/metrics/histogram_macros.h" #include "base/metrics/histogram_macros.h"
#include "base/strings/string_number_conversions.h" #include "base/strings/string_number_conversions.h"
#include "chrome/browser/android/data_usage/data_use_tab_model.h"
#include "chrome/browser/android/data_usage/external_data_use_observer_bridge.h"
#include "components/data_usage/core/data_use.h" #include "components/data_usage/core/data_use.h"
#include "components/variations/variations_associated_data.h" #include "components/variations/variations_associated_data.h"
...@@ -100,10 +98,10 @@ const size_t ExternalDataUseReporter::kMaxBufferSize = 100; ...@@ -100,10 +98,10 @@ const size_t ExternalDataUseReporter::kMaxBufferSize = 100;
ExternalDataUseReporter::ExternalDataUseReporter( ExternalDataUseReporter::ExternalDataUseReporter(
const char* field_trial, const char* field_trial,
DataUseTabModel* data_use_tab_model, const GetTrackingInfoCallback& get_tracking_info_callback,
ExternalDataUseObserverBridge* external_data_use_observer_bridge) const ReportDataUseCallback& report_data_use_callback)
: external_data_use_observer_bridge_(external_data_use_observer_bridge), : get_tracking_info_callback_(get_tracking_info_callback),
data_use_tab_model_(data_use_tab_model), report_data_use_callback_(report_data_use_callback),
last_data_report_submitted_ticks_(base::TimeTicks()), last_data_report_submitted_ticks_(base::TimeTicks()),
pending_report_bytes_(0), pending_report_bytes_(0),
previous_report_time_(base::Time::Now()), previous_report_time_(base::Time::Now()),
...@@ -111,6 +109,8 @@ ExternalDataUseReporter::ExternalDataUseReporter( ...@@ -111,6 +109,8 @@ ExternalDataUseReporter::ExternalDataUseReporter(
data_use_report_min_bytes_(GetMinBytes(field_trial)), data_use_report_min_bytes_(GetMinBytes(field_trial)),
data_report_submit_timeout_(base::TimeDelta::FromMilliseconds( data_report_submit_timeout_(base::TimeDelta::FromMilliseconds(
GetDataReportSubmitTimeoutMsec(field_trial))) { GetDataReportSubmitTimeoutMsec(field_trial))) {
DCHECK(get_tracking_info_callback_);
DCHECK(report_data_use_callback_);
DCHECK(last_data_report_submitted_ticks_.is_null()); DCHECK(last_data_report_submitted_ticks_.is_null());
// Detach from current thread since rest of ExternalDataUseReporter lives on // Detach from current thread since rest of ExternalDataUseReporter lives on
// the UI thread and the current thread may not be UI thread.. // the UI thread and the current thread may not be UI thread..
...@@ -140,7 +140,7 @@ void ExternalDataUseReporter::OnDataUse( ...@@ -140,7 +140,7 @@ void ExternalDataUseReporter::OnDataUse(
DataUseTabModel::TrackingInfo tracking_info; DataUseTabModel::TrackingInfo tracking_info;
for (const auto& data_use : *data_use_list) { for (const auto& data_use : *data_use_list) {
if (!data_use_tab_model_->GetTrackingInfoForTabAtTime( if (!get_tracking_info_callback_.Run(
data_use.tab_id, data_use.request_start, &tracking_info)) { data_use.tab_id, data_use.request_start, &tracking_info)) {
continue; continue;
} }
...@@ -278,9 +278,9 @@ void ExternalDataUseReporter::SubmitBufferedDataUseReport(bool immediate) { ...@@ -278,9 +278,9 @@ void ExternalDataUseReporter::SubmitBufferedDataUseReport(bool immediate) {
buffered_data_reports_.erase(it); buffered_data_reports_.erase(it);
total_bytes_buffered_ -= (report.bytes_downloaded + report.bytes_uploaded); total_bytes_buffered_ -= (report.bytes_downloaded + report.bytes_uploaded);
external_data_use_observer_bridge_->ReportDataUse( report_data_use_callback_.Run(key.label, key.tag, key.connection_type,
key.label, key.tag, key.connection_type, key.mcc_mnc, report.start_time, key.mcc_mnc, report.start_time, report.end_time,
report.end_time, report.bytes_downloaded, report.bytes_uploaded); report.bytes_downloaded, report.bytes_uploaded);
} }
ExternalDataUseReporter::DataUseReportKey::DataUseReportKey( ExternalDataUseReporter::DataUseReportKey::DataUseReportKey(
......
...@@ -12,11 +12,13 @@ ...@@ -12,11 +12,13 @@
#include <memory> #include <memory>
#include <string> #include <string>
#include "base/callback.h"
#include "base/containers/hash_tables.h" #include "base/containers/hash_tables.h"
#include "base/gtest_prod_util.h" #include "base/gtest_prod_util.h"
#include "base/macros.h" #include "base/macros.h"
#include "base/threading/thread_checker.h" #include "base/threading/thread_checker.h"
#include "base/time/time.h" #include "base/time/time.h"
#include "chrome/browser/android/data_usage/data_use_tab_model.h"
#include "net/base/network_change_notifier.h" #include "net/base/network_change_notifier.h"
#if defined(OS_ANDROID) #if defined(OS_ANDROID)
...@@ -31,9 +33,6 @@ namespace chrome { ...@@ -31,9 +33,6 @@ namespace chrome {
namespace android { namespace android {
class DataUseTabModel;
class ExternalDataUseObserverBridge;
// This class receives data use observations from ExternalDataUseObserver, // This class receives data use observations from ExternalDataUseObserver,
// labels the data use using DataUseTabModel, and buffers the data use report. // labels the data use using DataUseTabModel, and buffers the data use report.
// The buffered reports are submitted to the platform when a minimum number of // The buffered reports are submitted to the platform when a minimum number of
...@@ -42,6 +41,21 @@ class ExternalDataUseObserverBridge; ...@@ -42,6 +41,21 @@ class ExternalDataUseObserverBridge;
// must only be accessed on UI thread. // must only be accessed on UI thread.
class ExternalDataUseReporter { class ExternalDataUseReporter {
public: public:
typedef base::Callback<bool(SessionID::id_type,
const base::TimeTicks,
DataUseTabModel::TrackingInfo*)>
GetTrackingInfoCallback;
typedef base::Callback<void(const std::string&,
const std::string&,
net::NetworkChangeNotifier::ConnectionType,
const std::string&,
const base::Time,
const base::Time,
int64_t,
int64_t)>
ReportDataUseCallback;
// Result of data usage report submission. This enum must remain synchronized // Result of data usage report submission. This enum must remain synchronized
// with the enum of the same name in metrics/histograms/histograms.xml. // with the enum of the same name in metrics/histograms/histograms.xml.
enum DataUsageReportSubmissionResult { enum DataUsageReportSubmissionResult {
...@@ -62,8 +76,9 @@ class ExternalDataUseReporter { ...@@ -62,8 +76,9 @@ class ExternalDataUseReporter {
// paramenters from. // paramenters from.
ExternalDataUseReporter( ExternalDataUseReporter(
const char* field_trial, const char* field_trial,
DataUseTabModel* data_use_tab_model, const GetTrackingInfoCallback& get_tracking_info_callback,
ExternalDataUseObserverBridge* external_data_use_observer_bridge); const ReportDataUseCallback& report_data_use_callback);
virtual ~ExternalDataUseReporter(); virtual ~ExternalDataUseReporter();
void InitOnUIThread(); void InitOnUIThread();
...@@ -191,12 +206,11 @@ class ExternalDataUseReporter { ...@@ -191,12 +206,11 @@ class ExternalDataUseReporter {
void OnApplicationStateChange(base::android::ApplicationState new_state); void OnApplicationStateChange(base::android::ApplicationState new_state);
#endif #endif
// Pointer to the ExternalDataUseObserverBridge in UI thread. Not owned by // Callback to be run to get the tracking info for a tab at a particular time.
// |this|. const GetTrackingInfoCallback get_tracking_info_callback_;
ExternalDataUseObserverBridge* external_data_use_observer_bridge_;
// Pointer to the DataUseTabModel in UI thread, Not owned by |this|. // Callback to be run to report the data usage to the underlying platform.
DataUseTabModel* data_use_tab_model_; const ReportDataUseCallback report_data_use_callback_;
#if defined(OS_ANDROID) #if defined(OS_ANDROID)
// Listens to when Chromium gets backgrounded and submits buffered data use // Listens to when Chromium gets backgrounded and submits buffered data use
......
...@@ -142,7 +142,7 @@ class ExternalDataUseReporterTest : public testing::Test { ...@@ -142,7 +142,7 @@ class ExternalDataUseReporterTest : public testing::Test {
} }
DataUseTabModel* data_use_tab_model() const { DataUseTabModel* data_use_tab_model() const {
return external_data_use_reporter()->data_use_tab_model_; return external_data_use_observer()->GetDataUseTabModel();
} }
const ExternalDataUseReporter::DataUseReports& buffered_data_reports() const { const ExternalDataUseReporter::DataUseReports& buffered_data_reports() const {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment