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

Side by Side Diff: components/network_time/network_time_tracker.cc

Issue 2448943004: Add experimental feature info to certificate reports (Closed)
Patch Set: battre comment Created 4 years, 1 month 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
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/network_time/network_time_tracker.h" 5 #include "components/network_time/network_time_tracker.h"
6 6
7 #include <stdint.h> 7 #include <stdint.h>
8 #include <string> 8 #include <string>
9 #include <utility> 9 #include <utility>
10 10
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after
150 if (data().length() + num_bytes > limit_) { 150 if (data().length() + num_bytes > limit_) {
151 return net::ERR_FILE_TOO_BIG; 151 return net::ERR_FILE_TOO_BIG;
152 } 152 }
153 return net::URLFetcherStringWriter::Write(buffer, num_bytes, callback); 153 return net::URLFetcherStringWriter::Write(buffer, num_bytes, callback);
154 } 154 }
155 155
156 private: 156 private:
157 size_t limit_; 157 size_t limit_;
158 }; 158 };
159 159
160 bool BackgroundQueriesEnabled() {
161 if (!base::FeatureList::IsEnabled(kNetworkTimeServiceQuerying)) {
162 return false;
163 }
164
165 const std::string param = variations::GetVariationParamValueByFeature(
166 kNetworkTimeServiceQuerying, kVariationsServiceFetchBehavior);
167 return param == "background-only" || param == "background-and-on-demand";
168 }
169
170 bool OnDemandQueriesEnabled() {
171 if (!base::FeatureList::IsEnabled(kNetworkTimeServiceQuerying)) {
172 return false;
173 }
174
175 const std::string param = variations::GetVariationParamValueByFeature(
176 kNetworkTimeServiceQuerying, kVariationsServiceFetchBehavior);
177 return param == "on-demand-only" || param == "background-and-on-demand";
178 }
179
180 base::TimeDelta CheckTimeInterval() { 160 base::TimeDelta CheckTimeInterval() {
181 int64_t seconds; 161 int64_t seconds;
182 const std::string param = variations::GetVariationParamValueByFeature( 162 const std::string param = variations::GetVariationParamValueByFeature(
183 kNetworkTimeServiceQuerying, kVariationsServiceCheckTimeIntervalSeconds); 163 kNetworkTimeServiceQuerying, kVariationsServiceCheckTimeIntervalSeconds);
184 if (!param.empty() && base::StringToInt64(param, &seconds) && seconds > 0) { 164 if (!param.empty() && base::StringToInt64(param, &seconds) && seconds > 0) {
185 return base::TimeDelta::FromSeconds(seconds); 165 return base::TimeDelta::FromSeconds(seconds);
186 } 166 }
187 return base::TimeDelta::FromSeconds(kCheckTimeIntervalSeconds); 167 return base::TimeDelta::FromSeconds(kCheckTimeIntervalSeconds);
188 } 168 }
189 169
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after
301 time_mapping.SetDouble(kPrefTime, time_at_last_measurement_.ToJsTime()); 281 time_mapping.SetDouble(kPrefTime, time_at_last_measurement_.ToJsTime());
302 time_mapping.SetDouble(kPrefTicks, static_cast<double>( 282 time_mapping.SetDouble(kPrefTicks, static_cast<double>(
303 ticks_at_last_measurement_.ToInternalValue())); 283 ticks_at_last_measurement_.ToInternalValue()));
304 time_mapping.SetDouble(kPrefUncertainty, static_cast<double>( 284 time_mapping.SetDouble(kPrefUncertainty, static_cast<double>(
305 network_time_uncertainty_.ToInternalValue())); 285 network_time_uncertainty_.ToInternalValue()));
306 time_mapping.SetDouble(kPrefNetworkTime, 286 time_mapping.SetDouble(kPrefNetworkTime,
307 network_time_at_last_measurement_.ToJsTime()); 287 network_time_at_last_measurement_.ToJsTime());
308 pref_service_->Set(prefs::kNetworkTimeMapping, time_mapping); 288 pref_service_->Set(prefs::kNetworkTimeMapping, time_mapping);
309 } 289 }
310 290
291 bool NetworkTimeTracker::AreTimeFetchesEnabled() const {
292 return base::FeatureList::IsEnabled(kNetworkTimeServiceQuerying);
293 }
294
295 NetworkTimeTracker::FetchBehavior NetworkTimeTracker::GetFetchBehavior() const {
296 const std::string param = variations::GetVariationParamValueByFeature(
297 kNetworkTimeServiceQuerying, kVariationsServiceFetchBehavior);
298 if (param == "background-only") {
299 return FETCHES_IN_BACKGROUND_ONLY;
300 } else if (param == "on-demand-only") {
301 return FETCHES_ON_DEMAND_ONLY;
302 } else if (param == "background-and-on-demand") {
303 return FETCHES_IN_BACKGROUND_AND_ON_DEMAND;
304 }
305 return FETCH_BEHAVIOR_UNKNOWN;
306 }
307
311 void NetworkTimeTracker::SetTimeServerURLForTesting(const GURL& url) { 308 void NetworkTimeTracker::SetTimeServerURLForTesting(const GURL& url) {
312 server_url_ = url; 309 server_url_ = url;
313 } 310 }
314 311
315 GURL NetworkTimeTracker::GetTimeServerURLForTesting() const { 312 GURL NetworkTimeTracker::GetTimeServerURLForTesting() const {
316 return server_url_; 313 return server_url_;
317 } 314 }
318 315
319 void NetworkTimeTracker::SetMaxResponseSizeForTesting(size_t limit) { 316 void NetworkTimeTracker::SetMaxResponseSizeForTesting(size_t limit) {
320 max_response_size_ = limit; 317 max_response_size_ = limit;
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
405 } 402 }
406 *network_time = network_time_at_last_measurement_ + tick_delta; 403 *network_time = network_time_at_last_measurement_ + tick_delta;
407 if (uncertainty) { 404 if (uncertainty) {
408 *uncertainty = network_time_uncertainty_ + divergence; 405 *uncertainty = network_time_uncertainty_ + divergence;
409 } 406 }
410 return NETWORK_TIME_AVAILABLE; 407 return NETWORK_TIME_AVAILABLE;
411 } 408 }
412 409
413 bool NetworkTimeTracker::StartTimeFetch(const base::Closure& closure) { 410 bool NetworkTimeTracker::StartTimeFetch(const base::Closure& closure) {
414 DCHECK(thread_checker_.CalledOnValidThread()); 411 DCHECK(thread_checker_.CalledOnValidThread());
415 if (!OnDemandQueriesEnabled()) { 412 FetchBehavior behavior = GetFetchBehavior();
413 if (behavior != FETCHES_ON_DEMAND_ONLY &&
414 behavior != FETCHES_IN_BACKGROUND_AND_ON_DEMAND) {
416 return false; 415 return false;
417 } 416 }
418 417
419 // Enqueue the callback before calling CheckTime(), so that if 418 // Enqueue the callback before calling CheckTime(), so that if
420 // CheckTime() completes synchronously, the callback gets called. 419 // CheckTime() completes synchronously, the callback gets called.
421 fetch_completion_callbacks_.push_back(closure); 420 fetch_completion_callbacks_.push_back(closure);
422 421
423 // If a time query is already in progress, do not start another one. 422 // If a time query is already in progress, do not start another one.
424 if (time_fetcher_) { 423 if (time_fetcher_) {
425 return true; 424 return true;
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after
565 // callback. 564 // callback.
566 std::vector<base::Closure> callbacks = fetch_completion_callbacks_; 565 std::vector<base::Closure> callbacks = fetch_completion_callbacks_;
567 fetch_completion_callbacks_.clear(); 566 fetch_completion_callbacks_.clear();
568 for (const auto& callback : callbacks) { 567 for (const auto& callback : callbacks) {
569 callback.Run(); 568 callback.Run();
570 } 569 }
571 } 570 }
572 571
573 void NetworkTimeTracker::QueueCheckTime(base::TimeDelta delay) { 572 void NetworkTimeTracker::QueueCheckTime(base::TimeDelta delay) {
574 // Check if the user is opted in to background time fetches. 573 // Check if the user is opted in to background time fetches.
575 if (BackgroundQueriesEnabled()) { 574 FetchBehavior behavior = GetFetchBehavior();
575 if (behavior == FETCHES_IN_BACKGROUND_ONLY ||
576 behavior == FETCHES_IN_BACKGROUND_AND_ON_DEMAND) {
576 timer_.Start(FROM_HERE, delay, this, &NetworkTimeTracker::CheckTime); 577 timer_.Start(FROM_HERE, delay, this, &NetworkTimeTracker::CheckTime);
577 } 578 }
578 } 579 }
579 580
580 bool NetworkTimeTracker::ShouldIssueTimeQuery() { 581 bool NetworkTimeTracker::ShouldIssueTimeQuery() {
581 // Do not query the time service if not enabled via Variations Service. 582 // Do not query the time service if not enabled via Variations Service.
582 if (!base::FeatureList::IsEnabled(kNetworkTimeServiceQuerying)) { 583 if (!AreTimeFetchesEnabled()) {
583 return false; 584 return false;
584 } 585 }
585 586
586 // If GetNetworkTime() does not return NETWORK_TIME_AVAILABLE, 587 // If GetNetworkTime() does not return NETWORK_TIME_AVAILABLE,
587 // synchronization has been lost and a query is needed. 588 // synchronization has been lost and a query is needed.
588 base::Time network_time; 589 base::Time network_time;
589 if (GetNetworkTime(&network_time, nullptr) != NETWORK_TIME_AVAILABLE) { 590 if (GetNetworkTime(&network_time, nullptr) != NETWORK_TIME_AVAILABLE) {
590 return true; 591 return true;
591 } 592 }
592 593
593 // Otherwise, make the decision at random. 594 // Otherwise, make the decision at random.
594 return base::RandDouble() < RandomQueryProbability(); 595 return base::RandDouble() < RandomQueryProbability();
595 } 596 }
596 597
597 } // namespace network_time 598 } // namespace network_time
OLDNEW
« no previous file with comments | « components/network_time/network_time_tracker.h ('k') | components/network_time/network_time_tracker_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698