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

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: Block uploads in uploader, not dispatcher 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" 9 #include "base/message_loop/message_loop.h"
10 #include "base/single_thread_task_runner.h" 10 #include "base/single_thread_task_runner.h"
11 #include "base/task_runner.h" 11 #include "base/task_runner.h"
12 #include "base/threading/thread_checker.h" 12 #include "base/threading/thread_checker.h"
13 #include "base/time/time.h" 13 #include "base/time/time.h"
14 #include "components/domain_reliability/baked_in_configs.h" 14 #include "components/domain_reliability/baked_in_configs.h"
15 #include "net/base/load_flags.h" 15 #include "net/base/load_flags.h"
16 #include "net/http/http_response_headers.h" 16 #include "net/http/http_response_headers.h"
17 #include "net/url_request/url_request.h" 17 #include "net/url_request/url_request.h"
18 #include "net/url_request/url_request_context.h" 18 #include "net/url_request/url_request_context.h"
19 #include "net/url_request/url_request_context_getter.h" 19 #include "net/url_request/url_request_context_getter.h"
20 20
21 namespace domain_reliability { 21 namespace domain_reliability {
22 22
23 DomainReliabilityMonitor::DomainReliabilityMonitor( 23 DomainReliabilityMonitor::DomainReliabilityMonitor(
24 const std::string& upload_reporter_string) 24 const std::string& upload_reporter_string)
25 : time_(new ActualTime()), 25 : time_(new ActualTime()),
26 upload_reporter_string_(upload_reporter_string), 26 upload_reporter_string_(upload_reporter_string),
27 scheduler_params_( 27 scheduler_params_(
28 DomainReliabilityScheduler::Params::GetFromFieldTrialsOrDefaults()), 28 DomainReliabilityScheduler::Params::GetFromFieldTrialsOrDefaults()),
29 dispatcher_(time_.get()), 29 dispatcher_(time_.get()),
30 reporting_pref_initialized_(false),
30 weak_factory_(this) {} 31 weak_factory_(this) {}
31 32
32 DomainReliabilityMonitor::DomainReliabilityMonitor( 33 DomainReliabilityMonitor::DomainReliabilityMonitor(
33 const std::string& upload_reporter_string, 34 const std::string& upload_reporter_string,
34 scoped_ptr<MockableTime> time) 35 scoped_ptr<MockableTime> time)
35 : time_(time.Pass()), 36 : time_(time.Pass()),
36 upload_reporter_string_(upload_reporter_string), 37 upload_reporter_string_(upload_reporter_string),
37 scheduler_params_( 38 scheduler_params_(
38 DomainReliabilityScheduler::Params::GetFromFieldTrialsOrDefaults()), 39 DomainReliabilityScheduler::Params::GetFromFieldTrialsOrDefaults()),
39 dispatcher_(time_.get()), 40 dispatcher_(time_.get()),
41 reporting_pref_initialized_(false),
40 weak_factory_(this) {} 42 weak_factory_(this) {}
41 43
42 DomainReliabilityMonitor::~DomainReliabilityMonitor() { 44 DomainReliabilityMonitor::~DomainReliabilityMonitor() {
43 ClearContexts(); 45 ClearContexts();
44 } 46 }
45 47
46 void DomainReliabilityMonitor::Init( 48 void DomainReliabilityMonitor::InitReportingPref(
davidben 2014/08/20 21:49:02 Is this called anywhere outside of test code yet?
Deprecated (see juliatuttle) 2014/08/21 18:35:28 It is now!
49 PrefService* local_state_pref_service,
50 const char* reporting_pref_name,
51 const scoped_refptr<base::SingleThreadTaskRunner>&
52 network_message_loop_proxy) {
53 DCHECK(!reporting_pref_initialized_);
54
55 reporting_pref_.Init(
56 reporting_pref_name,
57 local_state_pref_service,
58 base::Bind(&DomainReliabilityMonitor::OnReportingPrefChanged,
59 base::Unretained(this)));
60 reporting_pref_.MoveToThread(network_message_loop_proxy);
61
62 reporting_pref_initialized_ = true;
63
64 OnReportingPrefChanged();
davidben 2014/08/20 21:49:03 Doesn't this require that |uploader_| be initializ
Deprecated (see juliatuttle) 2014/08/21 18:35:28 Well-spotted.
65 }
66
67 void DomainReliabilityMonitor::InitURLRequestContext(
47 net::URLRequestContext* url_request_context, 68 net::URLRequestContext* url_request_context,
48 const scoped_refptr<base::SingleThreadTaskRunner>& task_runner) { 69 const scoped_refptr<base::SingleThreadTaskRunner>& task_runner) {
70 DCHECK(reporting_pref_initialized_);
49 DCHECK(!thread_checker_); 71 DCHECK(!thread_checker_);
50 72
51 scoped_refptr<net::URLRequestContextGetter> url_request_context_getter = 73 scoped_refptr<net::URLRequestContextGetter> url_request_context_getter =
52 new net::TrivialURLRequestContextGetter(url_request_context, 74 new net::TrivialURLRequestContextGetter(url_request_context,
53 task_runner); 75 task_runner);
54 Init(url_request_context_getter); 76 InitURLRequestContext(url_request_context_getter);
55 } 77 }
56 78
57 void DomainReliabilityMonitor::Init( 79 void DomainReliabilityMonitor::InitURLRequestContext(
58 scoped_refptr<net::URLRequestContextGetter> url_request_context_getter) { 80 scoped_refptr<net::URLRequestContextGetter> url_request_context_getter) {
81 DCHECK(reporting_pref_initialized_);
59 DCHECK(!thread_checker_); 82 DCHECK(!thread_checker_);
60 83
61 DCHECK(url_request_context_getter->GetNetworkTaskRunner()-> 84 DCHECK(url_request_context_getter->GetNetworkTaskRunner()->
62 RunsTasksOnCurrentThread()); 85 RunsTasksOnCurrentThread());
63 86
64 uploader_ = DomainReliabilityUploader::Create(url_request_context_getter); 87 uploader_ = DomainReliabilityUploader::Create(url_request_context_getter);
65 thread_checker_.reset(new base::ThreadChecker()); 88 thread_checker_.reset(new base::ThreadChecker());
66 } 89 }
67 90
68 void DomainReliabilityMonitor::AddBakedInConfigs() { 91 void DomainReliabilityMonitor::AddBakedInConfigs() {
(...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after
230 beacon.server_ip.clear(); 253 beacon.server_ip.clear();
231 beacon.protocol = GetDomainReliabilityProtocol( 254 beacon.protocol = GetDomainReliabilityProtocol(
232 request.response_info.connection_info, 255 request.response_info.connection_info,
233 request.response_info.ssl_info.is_valid()); 256 request.response_info.ssl_info.is_valid());
234 beacon.http_response_code = response_code; 257 beacon.http_response_code = response_code;
235 beacon.start_time = request.load_timing_info.request_start; 258 beacon.start_time = request.load_timing_info.request_start;
236 beacon.elapsed = time_->NowTicks() - beacon.start_time; 259 beacon.elapsed = time_->NowTicks() - beacon.start_time;
237 context->OnBeacon(request.url, beacon); 260 context->OnBeacon(request.url, beacon);
238 } 261 }
239 262
263 void DomainReliabilityMonitor::OnReportingPrefChanged() {
264 // When metrics reporting is disabled, discard Domain Reliability uploads.
265 uploader_->set_discard_uploads(!*reporting_pref_);
266 }
267
240 // TODO(ttuttle): Keep a separate wildcard_contexts_ map to avoid having to 268 // TODO(ttuttle): Keep a separate wildcard_contexts_ map to avoid having to
241 // prepend '*.' to domains. 269 // prepend '*.' to domains.
242 DomainReliabilityContext* DomainReliabilityMonitor::GetContextForHost( 270 DomainReliabilityContext* DomainReliabilityMonitor::GetContextForHost(
243 const std::string& host) const { 271 const std::string& host) const {
244 ContextMap::const_iterator context_it; 272 ContextMap::const_iterator context_it;
245 273
246 context_it = contexts_.find(host); 274 context_it = contexts_.find(host);
247 if (context_it != contexts_.end()) 275 if (context_it != contexts_.end())
248 return context_it->second; 276 return context_it->second;
249 277
(...skipping 15 matching lines...) Expand all
265 293
266 return NULL; 294 return NULL;
267 } 295 }
268 296
269 base::WeakPtr<DomainReliabilityMonitor> 297 base::WeakPtr<DomainReliabilityMonitor>
270 DomainReliabilityMonitor::MakeWeakPtr() { 298 DomainReliabilityMonitor::MakeWeakPtr() {
271 return weak_factory_.GetWeakPtr(); 299 return weak_factory_.GetWeakPtr();
272 } 300 }
273 301
274 } // namespace domain_reliability 302 } // namespace domain_reliability
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698