Index: components/domain_reliability/monitor.cc |
diff --git a/components/domain_reliability/monitor.cc b/components/domain_reliability/monitor.cc |
index bde4c63c6dfd1169b45a8d25b73384dec7268178..c25c4d7410963b1cbcd2b587a9f22cdb2df3ee54 100644 |
--- a/components/domain_reliability/monitor.cc |
+++ b/components/domain_reliability/monitor.cc |
@@ -6,7 +6,6 @@ |
#include "base/command_line.h" |
#include "base/logging.h" |
-#include "base/message_loop/message_loop.h" |
#include "base/single_thread_task_runner.h" |
#include "base/task_runner.h" |
#include "base/threading/thread_checker.h" |
@@ -27,6 +26,7 @@ DomainReliabilityMonitor::DomainReliabilityMonitor( |
scheduler_params_( |
DomainReliabilityScheduler::Params::GetFromFieldTrialsOrDefaults()), |
dispatcher_(time_.get()), |
+ reporting_pref_initialized_(false), |
weak_factory_(this) {} |
DomainReliabilityMonitor::DomainReliabilityMonitor( |
@@ -37,32 +37,54 @@ DomainReliabilityMonitor::DomainReliabilityMonitor( |
scheduler_params_( |
DomainReliabilityScheduler::Params::GetFromFieldTrialsOrDefaults()), |
dispatcher_(time_.get()), |
+ reporting_pref_initialized_(false), |
weak_factory_(this) {} |
DomainReliabilityMonitor::~DomainReliabilityMonitor() { |
+ DCHECK(!thread_checker_ || thread_checker_->CalledOnValidThread()); |
+ |
ClearContexts(); |
} |
-void DomainReliabilityMonitor::Init( |
+void DomainReliabilityMonitor::InitReportingPref( |
+ PrefService* local_state_pref_service, |
+ const char* reporting_pref_name, |
+ const scoped_refptr<base::SingleThreadTaskRunner>& |
+ network_task_runner) { |
+ DCHECK(!reporting_pref_initialized_); |
+ |
+ reporting_pref_.Init( |
+ reporting_pref_name, |
+ local_state_pref_service, |
+ base::Bind(&DomainReliabilityMonitor::OnReportingPrefChanged, |
+ base::Unretained(this))); |
+ reporting_pref_initialized_ = true; |
+ reporting_pref_.MoveToThread(network_task_runner); |
+} |
+ |
+void DomainReliabilityMonitor::InitURLRequestContext( |
net::URLRequestContext* url_request_context, |
const scoped_refptr<base::SingleThreadTaskRunner>& task_runner) { |
davidben
2014/08/22 19:00:40
I wonder if the thread_checker_ should be replaced
davidben
2014/08/22 19:02:10
Er, that got lost in rewording. By 'add DCHECK', I
|
+ DCHECK(reporting_pref_initialized_); |
DCHECK(!thread_checker_); |
scoped_refptr<net::URLRequestContextGetter> url_request_context_getter = |
new net::TrivialURLRequestContextGetter(url_request_context, |
task_runner); |
- Init(url_request_context_getter); |
+ InitURLRequestContext(url_request_context_getter); |
} |
-void DomainReliabilityMonitor::Init( |
+void DomainReliabilityMonitor::InitURLRequestContext( |
scoped_refptr<net::URLRequestContextGetter> url_request_context_getter) { |
+ DCHECK(reporting_pref_initialized_); |
DCHECK(!thread_checker_); |
DCHECK(url_request_context_getter->GetNetworkTaskRunner()-> |
RunsTasksOnCurrentThread()); |
- uploader_ = DomainReliabilityUploader::Create(url_request_context_getter); |
thread_checker_.reset(new base::ThreadChecker()); |
+ uploader_ = DomainReliabilityUploader::Create(url_request_context_getter); |
+ OnReportingPrefChanged(); |
} |
void DomainReliabilityMonitor::AddBakedInConfigs() { |
@@ -237,6 +259,15 @@ void DomainReliabilityMonitor::OnRequestLegComplete( |
context->OnBeacon(request.url, beacon); |
} |
+void DomainReliabilityMonitor::OnReportingPrefChanged() { |
davidben
2014/08/22 19:00:40
Probably want to add a check for uploader_ being N
Deprecated (see juliatuttle)
2014/08/23 00:10:29
Done.
|
+ // When metrics reporting is disabled, discard Domain Reliability uploads. |
+ uploader_->set_discard_uploads(!*reporting_pref_); |
+} |
+ |
+void DomainReliabilityMonitor::DestroyReportingPref() { |
+ reporting_pref_.Destroy(); |
+} |
+ |
// TODO(ttuttle): Keep a separate wildcard_contexts_ map to avoid having to |
// prepend '*.' to domains. |
DomainReliabilityContext* DomainReliabilityMonitor::GetContextForHost( |