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

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

Issue 945923002: Fix memory leak and crash when parsing baked-in configs in domain reliability monitor. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 10 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
« no previous file with comments | « components/domain_reliability/monitor.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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/profiler/scoped_tracker.h" 9 #include "base/profiler/scoped_tracker.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/time/time.h" 12 #include "base/time/time.h"
13 #include "components/domain_reliability/baked_in_configs.h" 13 #include "components/domain_reliability/baked_in_configs.h"
14 #include "net/base/load_flags.h" 14 #include "net/base/load_flags.h"
15 #include "net/http/http_response_headers.h" 15 #include "net/http/http_response_headers.h"
16 #include "net/url_request/url_request.h" 16 #include "net/url_request/url_request.h"
17 #include "net/url_request/url_request_context.h" 17 #include "net/url_request/url_request_context.h"
18 #include "net/url_request/url_request_context_getter.h" 18 #include "net/url_request/url_request_context_getter.h"
19 19
20 namespace domain_reliability { 20 namespace domain_reliability {
21 21
22 DomainReliabilityMonitor::DomainReliabilityMonitor( 22 DomainReliabilityMonitor::DomainReliabilityMonitor(
23 const std::string& upload_reporter_string, 23 const std::string& upload_reporter_string,
24 scoped_refptr<base::SingleThreadTaskRunner> pref_thread, 24 const scoped_refptr<base::SingleThreadTaskRunner>& pref_thread,
25 scoped_refptr<base::SingleThreadTaskRunner> network_thread) 25 const scoped_refptr<base::SingleThreadTaskRunner>& network_thread)
26 : time_(new ActualTime()), 26 : time_(new ActualTime()),
27 upload_reporter_string_(upload_reporter_string), 27 upload_reporter_string_(upload_reporter_string),
28 scheduler_params_( 28 scheduler_params_(
29 DomainReliabilityScheduler::Params::GetFromFieldTrialsOrDefaults()), 29 DomainReliabilityScheduler::Params::GetFromFieldTrialsOrDefaults()),
30 dispatcher_(time_.get()), 30 dispatcher_(time_.get()),
31 pref_task_runner_(pref_thread), 31 pref_task_runner_(pref_thread),
32 network_task_runner_(network_thread), 32 network_task_runner_(network_thread),
33 moved_to_network_thread_(false), 33 moved_to_network_thread_(false),
34 discard_uploads_set_(false), 34 discard_uploads_set_(false),
35 weak_factory_(this) { 35 weak_factory_(this) {
36 DCHECK(OnPrefThread()); 36 DCHECK(OnPrefThread());
37 net::NetworkChangeNotifier::AddNetworkChangeObserver(this); 37 net::NetworkChangeNotifier::AddNetworkChangeObserver(this);
38 } 38 }
39 39
40 DomainReliabilityMonitor::DomainReliabilityMonitor( 40 DomainReliabilityMonitor::DomainReliabilityMonitor(
41 const std::string& upload_reporter_string, 41 const std::string& upload_reporter_string,
42 scoped_refptr<base::SingleThreadTaskRunner> pref_thread, 42 const scoped_refptr<base::SingleThreadTaskRunner>& pref_thread,
43 scoped_refptr<base::SingleThreadTaskRunner> network_thread, 43 const scoped_refptr<base::SingleThreadTaskRunner>& network_thread,
44 scoped_ptr<MockableTime> time) 44 scoped_ptr<MockableTime> time)
45 : time_(time.Pass()), 45 : time_(time.Pass()),
46 upload_reporter_string_(upload_reporter_string), 46 upload_reporter_string_(upload_reporter_string),
47 scheduler_params_( 47 scheduler_params_(
48 DomainReliabilityScheduler::Params::GetFromFieldTrialsOrDefaults()), 48 DomainReliabilityScheduler::Params::GetFromFieldTrialsOrDefaults()),
49 dispatcher_(time_.get()), 49 dispatcher_(time_.get()),
50 pref_task_runner_(pref_thread), 50 pref_task_runner_(pref_thread),
51 network_task_runner_(network_thread), 51 network_task_runner_(network_thread),
52 moved_to_network_thread_(false), 52 moved_to_network_thread_(false),
53 discard_uploads_set_(false), 53 discard_uploads_set_(false),
(...skipping 29 matching lines...) Expand all
83 DCHECK(OnNetworkThread()); 83 DCHECK(OnNetworkThread());
84 DCHECK(moved_to_network_thread_); 84 DCHECK(moved_to_network_thread_);
85 85
86 scoped_refptr<net::URLRequestContextGetter> url_request_context_getter = 86 scoped_refptr<net::URLRequestContextGetter> url_request_context_getter =
87 new net::TrivialURLRequestContextGetter(url_request_context, 87 new net::TrivialURLRequestContextGetter(url_request_context,
88 network_task_runner_); 88 network_task_runner_);
89 InitURLRequestContext(url_request_context_getter); 89 InitURLRequestContext(url_request_context_getter);
90 } 90 }
91 91
92 void DomainReliabilityMonitor::InitURLRequestContext( 92 void DomainReliabilityMonitor::InitURLRequestContext(
93 scoped_refptr<net::URLRequestContextGetter> url_request_context_getter) { 93 const scoped_refptr<net::URLRequestContextGetter>&
94 url_request_context_getter) {
94 DCHECK(OnNetworkThread()); 95 DCHECK(OnNetworkThread());
95 DCHECK(moved_to_network_thread_); 96 DCHECK(moved_to_network_thread_);
96 97
97 // Make sure the URLRequestContext actually lives on what was declared to be 98 // Make sure the URLRequestContext actually lives on what was declared to be
98 // the network thread. 99 // the network thread.
99 DCHECK(url_request_context_getter->GetNetworkTaskRunner()-> 100 DCHECK(url_request_context_getter->GetNetworkTaskRunner()->
100 RunsTasksOnCurrentThread()); 101 RunsTasksOnCurrentThread());
101 102
102 uploader_ = DomainReliabilityUploader::Create(time_.get(), 103 uploader_ = DomainReliabilityUploader::Create(time_.get(),
103 url_request_context_getter); 104 url_request_context_getter);
104 } 105 }
105 106
106 void DomainReliabilityMonitor::AddBakedInConfigs() { 107 void DomainReliabilityMonitor::AddBakedInConfigs() {
107 // TODO(vadimt): Remove ScopedTracker below once crbug.com/436671 is fixed. 108 // TODO(vadimt): Remove ScopedTracker below once crbug.com/436671 is fixed.
108 tracked_objects::ScopedTracker tracking_profile( 109 tracked_objects::ScopedTracker tracking_profile(
109 FROM_HERE_WITH_EXPLICIT_FUNCTION( 110 FROM_HERE_WITH_EXPLICIT_FUNCTION(
110 "436671 DomainReliabilityMonitor::AddBakedInConfigs")); 111 "436671 DomainReliabilityMonitor::AddBakedInConfigs"));
111 112
112 DCHECK(OnNetworkThread()); 113 DCHECK(OnNetworkThread());
113 DCHECK(moved_to_network_thread_); 114 DCHECK(moved_to_network_thread_);
114 115
115 base::Time now = base::Time::Now(); 116 base::Time now = base::Time::Now();
116 for (size_t i = 0; kBakedInJsonConfigs[i]; ++i) { 117 for (size_t i = 0; kBakedInJsonConfigs[i]; ++i) {
117 std::string json(kBakedInJsonConfigs[i]); 118 base::StringPiece json(kBakedInJsonConfigs[i]);
118 scoped_ptr<const DomainReliabilityConfig> config = 119 scoped_ptr<const DomainReliabilityConfig> config =
119 DomainReliabilityConfig::FromJSON(json); 120 DomainReliabilityConfig::FromJSON(json);
120 if (config && config->IsExpired(now)) { 121 if (!config) {
122 continue;
123 } else if (config->IsExpired(now)) {
121 LOG(WARNING) << "Baked-in Domain Reliability config for " 124 LOG(WARNING) << "Baked-in Domain Reliability config for "
122 << config->domain << " is expired."; 125 << config->domain << " is expired.";
123 continue; 126 continue;
124 } 127 }
125 AddContext(config.Pass()); 128 AddContext(config.Pass());
126 } 129 }
127 } 130 }
128 131
129 void DomainReliabilityMonitor::SetDiscardUploads(bool discard_uploads) { 132 void DomainReliabilityMonitor::SetDiscardUploads(bool discard_uploads) {
130 DCHECK(OnNetworkThread()); 133 DCHECK(OnNetworkThread());
(...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after
345 348
346 return NULL; 349 return NULL;
347 } 350 }
348 351
349 base::WeakPtr<DomainReliabilityMonitor> 352 base::WeakPtr<DomainReliabilityMonitor>
350 DomainReliabilityMonitor::MakeWeakPtr() { 353 DomainReliabilityMonitor::MakeWeakPtr() {
351 return weak_factory_.GetWeakPtr(); 354 return weak_factory_.GetWeakPtr();
352 } 355 }
353 356
354 } // namespace domain_reliability 357 } // namespace domain_reliability
OLDNEW
« no previous file with comments | « components/domain_reliability/monitor.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698