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

Side by Side Diff: components/domain_reliability/monitor.cc

Issue 491753003: Domain Reliability: Don't upload when metrics reporting is off. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix pref handling Created 6 years, 4 months 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "components/domain_reliability/monitor.h" 5 #include "components/domain_reliability/monitor.h"
6 6
7 #include "base/command_line.h" 7 #include "base/command_line.h"
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "base/message_loop/message_loop.h"
10 #include "base/single_thread_task_runner.h" 9 #include "base/single_thread_task_runner.h"
11 #include "base/task_runner.h" 10 #include "base/task_runner.h"
12 #include "base/threading/thread_checker.h" 11 #include "base/threading/thread_checker.h"
13 #include "base/time/time.h" 12 #include "base/time/time.h"
14 #include "components/domain_reliability/baked_in_configs.h" 13 #include "components/domain_reliability/baked_in_configs.h"
15 #include "net/base/load_flags.h" 14 #include "net/base/load_flags.h"
16 #include "net/http/http_response_headers.h" 15 #include "net/http/http_response_headers.h"
17 #include "net/url_request/url_request.h" 16 #include "net/url_request/url_request.h"
18 #include "net/url_request/url_request_context.h" 17 #include "net/url_request/url_request_context.h"
19 #include "net/url_request/url_request_context_getter.h" 18 #include "net/url_request/url_request_context_getter.h"
20 19
21 namespace domain_reliability { 20 namespace domain_reliability {
22 21
23 DomainReliabilityMonitor::DomainReliabilityMonitor( 22 DomainReliabilityMonitor::DomainReliabilityMonitor(
24 const std::string& upload_reporter_string) 23 const std::string& upload_reporter_string)
25 : time_(new ActualTime()), 24 : time_(new ActualTime()),
26 upload_reporter_string_(upload_reporter_string), 25 upload_reporter_string_(upload_reporter_string),
27 scheduler_params_( 26 scheduler_params_(
28 DomainReliabilityScheduler::Params::GetFromFieldTrialsOrDefaults()), 27 DomainReliabilityScheduler::Params::GetFromFieldTrialsOrDefaults()),
29 dispatcher_(time_.get()), 28 dispatcher_(time_.get()),
29 reporting_pref_initialized_(false),
30 weak_factory_(this) {} 30 weak_factory_(this) {}
31 31
32 DomainReliabilityMonitor::DomainReliabilityMonitor( 32 DomainReliabilityMonitor::DomainReliabilityMonitor(
33 const std::string& upload_reporter_string, 33 const std::string& upload_reporter_string,
34 scoped_ptr<MockableTime> time) 34 scoped_ptr<MockableTime> time)
35 : time_(time.Pass()), 35 : time_(time.Pass()),
36 upload_reporter_string_(upload_reporter_string), 36 upload_reporter_string_(upload_reporter_string),
37 scheduler_params_( 37 scheduler_params_(
38 DomainReliabilityScheduler::Params::GetFromFieldTrialsOrDefaults()), 38 DomainReliabilityScheduler::Params::GetFromFieldTrialsOrDefaults()),
39 dispatcher_(time_.get()), 39 dispatcher_(time_.get()),
40 reporting_pref_initialized_(false),
40 weak_factory_(this) {} 41 weak_factory_(this) {}
41 42
42 DomainReliabilityMonitor::~DomainReliabilityMonitor() { 43 DomainReliabilityMonitor::~DomainReliabilityMonitor() {
44 DCHECK(!thread_checker_ || thread_checker_->CalledOnValidThread());
45
43 ClearContexts(); 46 ClearContexts();
44 } 47 }
45 48
46 void DomainReliabilityMonitor::Init( 49 void DomainReliabilityMonitor::InitReportingPref(
50 PrefService* local_state_pref_service,
51 const char* reporting_pref_name,
52 const scoped_refptr<base::SingleThreadTaskRunner>&
53 network_task_runner) {
54 DCHECK(!reporting_pref_initialized_);
55
56 reporting_pref_.Init(
57 reporting_pref_name,
58 local_state_pref_service,
59 base::Bind(&DomainReliabilityMonitor::OnReportingPrefChanged,
60 base::Unretained(this)));
61 reporting_pref_initialized_ = true;
62 reporting_pref_.MoveToThread(network_task_runner);
63 }
64
65 void DomainReliabilityMonitor::InitURLRequestContext(
47 net::URLRequestContext* url_request_context, 66 net::URLRequestContext* url_request_context,
48 const scoped_refptr<base::SingleThreadTaskRunner>& task_runner) { 67 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
68 DCHECK(reporting_pref_initialized_);
49 DCHECK(!thread_checker_); 69 DCHECK(!thread_checker_);
50 70
51 scoped_refptr<net::URLRequestContextGetter> url_request_context_getter = 71 scoped_refptr<net::URLRequestContextGetter> url_request_context_getter =
52 new net::TrivialURLRequestContextGetter(url_request_context, 72 new net::TrivialURLRequestContextGetter(url_request_context,
53 task_runner); 73 task_runner);
54 Init(url_request_context_getter); 74 InitURLRequestContext(url_request_context_getter);
55 } 75 }
56 76
57 void DomainReliabilityMonitor::Init( 77 void DomainReliabilityMonitor::InitURLRequestContext(
58 scoped_refptr<net::URLRequestContextGetter> url_request_context_getter) { 78 scoped_refptr<net::URLRequestContextGetter> url_request_context_getter) {
79 DCHECK(reporting_pref_initialized_);
59 DCHECK(!thread_checker_); 80 DCHECK(!thread_checker_);
60 81
61 DCHECK(url_request_context_getter->GetNetworkTaskRunner()-> 82 DCHECK(url_request_context_getter->GetNetworkTaskRunner()->
62 RunsTasksOnCurrentThread()); 83 RunsTasksOnCurrentThread());
63 84
85 thread_checker_.reset(new base::ThreadChecker());
64 uploader_ = DomainReliabilityUploader::Create(url_request_context_getter); 86 uploader_ = DomainReliabilityUploader::Create(url_request_context_getter);
65 thread_checker_.reset(new base::ThreadChecker()); 87 OnReportingPrefChanged();
66 } 88 }
67 89
68 void DomainReliabilityMonitor::AddBakedInConfigs() { 90 void DomainReliabilityMonitor::AddBakedInConfigs() {
69 DCHECK(thread_checker_ && thread_checker_->CalledOnValidThread()); 91 DCHECK(thread_checker_ && thread_checker_->CalledOnValidThread());
70 base::Time now = base::Time::Now(); 92 base::Time now = base::Time::Now();
71 for (size_t i = 0; kBakedInJsonConfigs[i]; ++i) { 93 for (size_t i = 0; kBakedInJsonConfigs[i]; ++i) {
72 std::string json(kBakedInJsonConfigs[i]); 94 std::string json(kBakedInJsonConfigs[i]);
73 scoped_ptr<const DomainReliabilityConfig> config = 95 scoped_ptr<const DomainReliabilityConfig> config =
74 DomainReliabilityConfig::FromJSON(json); 96 DomainReliabilityConfig::FromJSON(json);
75 if (config && config->IsExpired(now)) { 97 if (config && config->IsExpired(now)) {
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after
230 beacon.server_ip.clear(); 252 beacon.server_ip.clear();
231 beacon.protocol = GetDomainReliabilityProtocol( 253 beacon.protocol = GetDomainReliabilityProtocol(
232 request.response_info.connection_info, 254 request.response_info.connection_info,
233 request.response_info.ssl_info.is_valid()); 255 request.response_info.ssl_info.is_valid());
234 beacon.http_response_code = response_code; 256 beacon.http_response_code = response_code;
235 beacon.start_time = request.load_timing_info.request_start; 257 beacon.start_time = request.load_timing_info.request_start;
236 beacon.elapsed = time_->NowTicks() - beacon.start_time; 258 beacon.elapsed = time_->NowTicks() - beacon.start_time;
237 context->OnBeacon(request.url, beacon); 259 context->OnBeacon(request.url, beacon);
238 } 260 }
239 261
262 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.
263 // When metrics reporting is disabled, discard Domain Reliability uploads.
264 uploader_->set_discard_uploads(!*reporting_pref_);
265 }
266
267 void DomainReliabilityMonitor::DestroyReportingPref() {
268 reporting_pref_.Destroy();
269 }
270
240 // TODO(ttuttle): Keep a separate wildcard_contexts_ map to avoid having to 271 // TODO(ttuttle): Keep a separate wildcard_contexts_ map to avoid having to
241 // prepend '*.' to domains. 272 // prepend '*.' to domains.
242 DomainReliabilityContext* DomainReliabilityMonitor::GetContextForHost( 273 DomainReliabilityContext* DomainReliabilityMonitor::GetContextForHost(
243 const std::string& host) const { 274 const std::string& host) const {
244 ContextMap::const_iterator context_it; 275 ContextMap::const_iterator context_it;
245 276
246 context_it = contexts_.find(host); 277 context_it = contexts_.find(host);
247 if (context_it != contexts_.end()) 278 if (context_it != contexts_.end())
248 return context_it->second; 279 return context_it->second;
249 280
(...skipping 15 matching lines...) Expand all
265 296
266 return NULL; 297 return NULL;
267 } 298 }
268 299
269 base::WeakPtr<DomainReliabilityMonitor> 300 base::WeakPtr<DomainReliabilityMonitor>
270 DomainReliabilityMonitor::MakeWeakPtr() { 301 DomainReliabilityMonitor::MakeWeakPtr() {
271 return weak_factory_.GetWeakPtr(); 302 return weak_factory_.GetWeakPtr();
272 } 303 }
273 304
274 } // namespace domain_reliability 305 } // namespace domain_reliability
OLDNEW
« no previous file with comments | « components/domain_reliability/monitor.h ('k') | components/domain_reliability/monitor_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698