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

Side by Side Diff: components/variations/service/variations_service.cc

Issue 1363243004: Allow embedders to share code to override UI strings. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 2 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
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/variations/service/variations_service.h" 5 #include "components/variations/service/variations_service.h"
6 6
7 #include "base/build_time.h" 7 #include "base/build_time.h"
8 #include "base/command_line.h" 8 #include "base/command_line.h"
9 #include "base/metrics/histogram.h" 9 #include "base/metrics/histogram.h"
10 #include "base/metrics/sparse_histogram.h" 10 #include "base/metrics/sparse_histogram.h"
(...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after
196 headers->EnumerateHeader(NULL, name, &value); 196 headers->EnumerateHeader(NULL, name, &value);
197 return value; 197 return value;
198 } 198 }
199 199
200 } // namespace 200 } // namespace
201 201
202 VariationsService::VariationsService( 202 VariationsService::VariationsService(
203 scoped_ptr<VariationsServiceClient> client, 203 scoped_ptr<VariationsServiceClient> client,
204 scoped_ptr<web_resource::ResourceRequestAllowedNotifier> notifier, 204 scoped_ptr<web_resource::ResourceRequestAllowedNotifier> notifier,
205 PrefService* local_state, 205 PrefService* local_state,
206 metrics::MetricsStateManager* state_manager) 206 metrics::MetricsStateManager* state_manager,
207 const UIStringOverrider& ui_string_overrider)
207 : client_(client.Pass()), 208 : client_(client.Pass()),
209 ui_string_overrider_(ui_string_overrider),
208 local_state_(local_state), 210 local_state_(local_state),
209 state_manager_(state_manager), 211 state_manager_(state_manager),
210 policy_pref_service_(local_state), 212 policy_pref_service_(local_state),
211 seed_store_(local_state), 213 seed_store_(local_state),
212 create_trials_from_seed_called_(false), 214 create_trials_from_seed_called_(false),
213 initial_request_completed_(false), 215 initial_request_completed_(false),
214 disable_deltas_for_next_request_(false), 216 disable_deltas_for_next_request_(false),
215 resource_request_allowed_notifier_(notifier.Pass()), 217 resource_request_allowed_notifier_(notifier.Pass()),
216 request_count_(0), 218 request_count_(0),
217 weak_ptr_factory_(this) { 219 weak_ptr_factory_(this) {
(...skipping 15 matching lines...) Expand all
233 const base::Version current_version(version_info::GetVersionNumber()); 235 const base::Version current_version(version_info::GetVersionNumber());
234 if (!current_version.IsValid()) 236 if (!current_version.IsValid())
235 return false; 237 return false;
236 238
237 variations::Study_Channel channel = 239 variations::Study_Channel channel =
238 GetChannelForVariations(client_->GetChannel()); 240 GetChannelForVariations(client_->GetChannel());
239 UMA_HISTOGRAM_SPARSE_SLOWLY("Variations.UserChannel", channel); 241 UMA_HISTOGRAM_SPARSE_SLOWLY("Variations.UserChannel", channel);
240 242
241 const std::string latest_country = 243 const std::string latest_country =
242 local_state_->GetString(prefs::kVariationsCountry); 244 local_state_->GetString(prefs::kVariationsCountry);
243 // Note that passing |client_| via base::Unretained below is safe because 245 // Note that passing |&ui_string_overrider_| via base::Unretained below is
244 // the callback is executed synchronously. 246 // safe because the callback is executed synchronously.
245 variations::VariationsSeedProcessor().CreateTrialsFromSeed( 247 variations::VariationsSeedProcessor().CreateTrialsFromSeed(
246 seed, client_->GetApplicationLocale(), 248 seed, client_->GetApplicationLocale(),
247 GetReferenceDateForExpiryChecks(local_state_), current_version, channel, 249 GetReferenceDateForExpiryChecks(local_state_), current_version, channel,
248 GetCurrentFormFactor(), GetHardwareClass(), latest_country, 250 GetCurrentFormFactor(), GetHardwareClass(), latest_country,
249 LoadPermanentConsistencyCountry(current_version, latest_country), 251 LoadPermanentConsistencyCountry(current_version, latest_country),
250 base::Bind(&VariationsServiceClient::OverrideUIString, 252 base::Bind(&UIStringOverrider::OverrideUIString,
251 base::Unretained(client_.get()))); 253 base::Unretained(&ui_string_overrider_)));
Alexei Svitkine (slow) 2015/09/24 21:51:23 Can this pass a ref to the object instead of a cal
blundell 2015/09/25 13:06:56 //components/variations can't depend on //ui/base,
Alexei Svitkine (slow) 2015/09/25 14:45:56 Gotcha. Maybe worth mentioning that in the comment
sdefresne 2015/09/28 08:57:32 Acknowledged and added a comment.
252 254
253 const base::Time now = base::Time::Now(); 255 const base::Time now = base::Time::Now();
254 256
255 // Log the "freshness" of the seed that was just used. The freshness is the 257 // Log the "freshness" of the seed that was just used. The freshness is the
256 // time between the last successful seed download and now. 258 // time between the last successful seed download and now.
257 const int64 last_fetch_time_internal = 259 const int64 last_fetch_time_internal =
258 local_state_->GetInt64(prefs::kVariationsLastFetchTime); 260 local_state_->GetInt64(prefs::kVariationsLastFetchTime);
259 if (last_fetch_time_internal) { 261 if (last_fetch_time_internal) {
260 const base::TimeDelta delta = 262 const base::TimeDelta delta =
261 now - base::Time::FromInternalValue(last_fetch_time_internal); 263 now - base::Time::FromInternalValue(last_fetch_time_internal);
(...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after
408 // it according to a value stored in the User Policy. 410 // it according to a value stored in the User Policy.
409 registry->RegisterStringPref(prefs::kVariationsRestrictParameter, 411 registry->RegisterStringPref(prefs::kVariationsRestrictParameter,
410 std::string()); 412 std::string());
411 } 413 }
412 414
413 // static 415 // static
414 scoped_ptr<VariationsService> VariationsService::Create( 416 scoped_ptr<VariationsService> VariationsService::Create(
415 scoped_ptr<VariationsServiceClient> client, 417 scoped_ptr<VariationsServiceClient> client,
416 PrefService* local_state, 418 PrefService* local_state,
417 metrics::MetricsStateManager* state_manager, 419 metrics::MetricsStateManager* state_manager,
418 const char* disable_network_switch) { 420 const char* disable_network_switch,
421 const UIStringOverrider& ui_string_overrider) {
419 scoped_ptr<VariationsService> result; 422 scoped_ptr<VariationsService> result;
420 #if !defined(GOOGLE_CHROME_BUILD) 423 #if !defined(GOOGLE_CHROME_BUILD)
421 // Unless the URL was provided, unsupported builds should return NULL to 424 // Unless the URL was provided, unsupported builds should return NULL to
422 // indicate that the service should not be used. 425 // indicate that the service should not be used.
423 if (!base::CommandLine::ForCurrentProcess()->HasSwitch( 426 if (!base::CommandLine::ForCurrentProcess()->HasSwitch(
424 switches::kVariationsServerURL)) { 427 switches::kVariationsServerURL)) {
425 DVLOG(1) << "Not creating VariationsService in unofficial build without --" 428 DVLOG(1) << "Not creating VariationsService in unofficial build without --"
426 << switches::kVariationsServerURL << " specified."; 429 << switches::kVariationsServerURL << " specified.";
427 return result.Pass(); 430 return result.Pass();
428 } 431 }
429 #endif 432 #endif
430 result.reset(new VariationsService( 433 result.reset(new VariationsService(
431 client.Pass(), 434 client.Pass(),
432 make_scoped_ptr(new web_resource::ResourceRequestAllowedNotifier( 435 make_scoped_ptr(new web_resource::ResourceRequestAllowedNotifier(
433 local_state, disable_network_switch)), 436 local_state, disable_network_switch)),
434 local_state, state_manager)); 437 local_state, state_manager, ui_string_overrider));
435 return result.Pass(); 438 return result.Pass();
436 } 439 }
437 440
438 // static 441 // static
439 scoped_ptr<VariationsService> VariationsService::CreateForTesting( 442 scoped_ptr<VariationsService> VariationsService::CreateForTesting(
440 scoped_ptr<VariationsServiceClient> client, 443 scoped_ptr<VariationsServiceClient> client,
441 PrefService* local_state) { 444 PrefService* local_state) {
442 return make_scoped_ptr(new VariationsService( 445 return make_scoped_ptr(new VariationsService(
443 client.Pass(), 446 client.Pass(),
444 make_scoped_ptr(new web_resource::ResourceRequestAllowedNotifier( 447 make_scoped_ptr(new web_resource::ResourceRequestAllowedNotifier(
445 local_state, nullptr)), 448 local_state, nullptr)),
446 local_state, nullptr)); 449 local_state, nullptr, UIStringOverrider()));
447 } 450 }
448 451
449 void VariationsService::DoActualFetch() { 452 void VariationsService::DoActualFetch() {
450 DCHECK(thread_checker_.CalledOnValidThread()); 453 DCHECK(thread_checker_.CalledOnValidThread());
451 DCHECK(!pending_seed_request_); 454 DCHECK(!pending_seed_request_);
452 455
453 pending_seed_request_ = net::URLFetcher::Create(0, variations_server_url_, 456 pending_seed_request_ = net::URLFetcher::Create(0, variations_server_url_,
454 net::URLFetcher::GET, this); 457 net::URLFetcher::GET, this);
455 data_use_measurement::DataUseUserData::AttachToFetcher( 458 data_use_measurement::DataUseUserData::AttachToFetcher(
456 pending_seed_request_.get(), 459 pending_seed_request_.get(),
(...skipping 298 matching lines...) Expand 10 before | Expand all | Expand 10 after
755 // Otherwise, update the pref with the current Chrome version and country. 758 // Otherwise, update the pref with the current Chrome version and country.
756 base::ListValue new_list_value; 759 base::ListValue new_list_value;
757 new_list_value.AppendString(version.GetString()); 760 new_list_value.AppendString(version.GetString());
758 new_list_value.AppendString(latest_country); 761 new_list_value.AppendString(latest_country);
759 local_state_->Set(prefs::kVariationsPermanentConsistencyCountry, 762 local_state_->Set(prefs::kVariationsPermanentConsistencyCountry,
760 new_list_value); 763 new_list_value);
761 return latest_country; 764 return latest_country;
762 } 765 }
763 766
764 } // namespace variations 767 } // namespace variations
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698