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

Side by Side Diff: chrome/browser/prerender/prerender_field_trial.cc

Issue 591313005: Provide a way to specify in Finch trials to disable prerender local (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 3 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 "chrome/browser/prerender/prerender_field_trial.h" 5 #include "chrome/browser/prerender/prerender_field_trial.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/metrics/field_trial.h" 9 #include "base/metrics/field_trial.h"
10 #include "base/metrics/histogram.h" 10 #include "base/metrics/histogram.h"
11 #include "base/prefs/pref_service.h" 11 #include "base/prefs/pref_service.h"
12 #include "base/strings/string_number_conversions.h" 12 #include "base/strings/string_number_conversions.h"
13 #include "base/strings/string_split.h" 13 #include "base/strings/string_split.h"
14 #include "chrome/browser/net/prediction_options.h"
14 #include "chrome/browser/predictors/autocomplete_action_predictor.h" 15 #include "chrome/browser/predictors/autocomplete_action_predictor.h"
15 #include "chrome/browser/prerender/prerender_manager.h" 16 #include "chrome/browser/prerender/prerender_manager.h"
16 #include "chrome/browser/profiles/profile.h" 17 #include "chrome/browser/profiles/profile.h"
17 #include "chrome/browser/sync/profile_sync_service.h" 18 #include "chrome/browser/sync/profile_sync_service.h"
18 #include "chrome/browser/sync/profile_sync_service_factory.h" 19 #include "chrome/browser/sync/profile_sync_service_factory.h"
19 #include "chrome/common/chrome_switches.h" 20 #include "chrome/common/chrome_switches.h"
20 #include "chrome/common/chrome_version_info.h" 21 #include "chrome/common/chrome_version_info.h"
22 #include "chrome/common/pref_names.h"
21 #include "components/metrics/metrics_service.h" 23 #include "components/metrics/metrics_service.h"
22 #include "components/variations/variations_associated_data.h" 24 #include "components/variations/variations_associated_data.h"
23 25
24 using base::FieldTrial; 26 using base::FieldTrial;
25 using base::FieldTrialList; 27 using base::FieldTrialList;
26 using base::StringToInt; 28 using base::StringToInt;
27 using std::string; 29 using std::string;
28 using std::vector; 30 using std::vector;
29 31
30 namespace prerender { 32 namespace prerender {
31 33
32 namespace { 34 namespace {
33 35
34 const char kOmniboxTrialName[] = "PrerenderFromOmnibox"; 36 const char kOmniboxTrialName[] = "PrerenderFromOmnibox";
35 int g_omnibox_trial_default_group_number = kint32min; 37 int g_omnibox_trial_default_group_number = kint32min;
36 38
37 const char kDisabledGroup[] = "Disabled"; 39 const char kDisabledGroup[] = "Disabled";
38 const char kEnabledGroup[] = "Enabled"; 40 const char kEnabledGroup[] = "Enabled";
39 41
40 const char kLocalPredictorSpecTrialName[] = "PrerenderLocalPredictorSpec"; 42 const char kLocalPredictorSpecTrialName[] = "PrerenderLocalPredictorSpec";
41 const char kLocalPredictorKeyName[] = "LocalPredictor"; 43 const char kLocalPredictorKeyName[] = "LocalPredictor";
42 const char kLocalPredictorUnencryptedSyncOnlyKeyName[] = 44 const char kLocalPredictorUnencryptedSyncOnlyKeyName[] =
43 "LocalPredictorUnencryptedSyncOnly"; 45 "LocalPredictorUnencryptedSyncOnly";
46 const char kLocalPredictorNetworkPredictionEnabledOnly[] =
47 "LocalPredictorNetworkPredictionEnabledOnly";
48 const char kLocalPredictorOnCellularOnly[] = "LocalPredictorOnCellularOnly";
44 const char kSideEffectFreeWhitelistKeyName[] = "SideEffectFreeWhitelist"; 49 const char kSideEffectFreeWhitelistKeyName[] = "SideEffectFreeWhitelist";
45 const char kPrerenderLaunchKeyName[] = "PrerenderLaunch"; 50 const char kPrerenderLaunchKeyName[] = "PrerenderLaunch";
46 const char kPrerenderAlwaysControlKeyName[] = "PrerenderAlwaysControl"; 51 const char kPrerenderAlwaysControlKeyName[] = "PrerenderAlwaysControl";
47 const char kPrerenderPrefetchKeyName[] = "PrerenderPrefetch"; 52 const char kPrerenderPrefetchKeyName[] = "PrerenderPrefetch";
48 const char kPrerenderQueryPrerenderServiceKeyName[] = 53 const char kPrerenderQueryPrerenderServiceKeyName[] =
49 "PrerenderQueryPrerenderService"; 54 "PrerenderQueryPrerenderService";
50 const char kPrerenderQueryPrerenderServiceCurrentURLKeyName[] = 55 const char kPrerenderQueryPrerenderServiceCurrentURLKeyName[] =
51 "PrerenderQueryPrerenderServiceCurrentURL"; 56 "PrerenderQueryPrerenderServiceCurrentURL";
52 const char kPrerenderQueryPrerenderServiceCandidateURLsKeyName[] = 57 const char kPrerenderQueryPrerenderServiceCandidateURLsKeyName[] =
53 "PrerenderQueryPrerenderServiceCandidateURLs"; 58 "PrerenderQueryPrerenderServiceCandidateURLs";
(...skipping 270 matching lines...) Expand 10 before | Expand all | Expand 10 after
324 bool IsLocalPredictorEnabled() { 329 bool IsLocalPredictorEnabled() {
325 #if defined(OS_ANDROID) || defined(OS_IOS) 330 #if defined(OS_ANDROID) || defined(OS_IOS)
326 return false; 331 return false;
327 #endif 332 #endif
328 return 333 return
329 !CommandLine::ForCurrentProcess()->HasSwitch( 334 !CommandLine::ForCurrentProcess()->HasSwitch(
330 switches::kDisablePrerenderLocalPredictor) && 335 switches::kDisablePrerenderLocalPredictor) &&
331 GetLocalPredictorSpecValue(kLocalPredictorKeyName) == kEnabledGroup; 336 GetLocalPredictorSpecValue(kLocalPredictorKeyName) == kEnabledGroup;
332 } 337 }
333 338
334 bool DisableLocalPredictorBasedOnSyncAndConfiguration(Profile* profile) { 339 bool DisableLocalPredictorBasedOnSyncAndConfiguration(Profile* profile) {
jkarlin 2014/09/23 14:54:03 This should also be "ShouldDisableLocalPredictor..
tburkard 2014/09/24 15:15:34 Done.
335 return 340 return
336 GetLocalPredictorSpecValue(kLocalPredictorUnencryptedSyncOnlyKeyName) == 341 GetLocalPredictorSpecValue(kLocalPredictorUnencryptedSyncOnlyKeyName) ==
337 kEnabledGroup && 342 kEnabledGroup &&
338 !IsUnencryptedSyncEnabled(profile); 343 !IsUnencryptedSyncEnabled(profile);
339 } 344 }
340 345
346 bool TemporarilyDisableLocalPredictorBasedOnPreferencesAndNetwork(
347 Profile* profile) {
348 bool on_cellular =
349 net::NetworkChangeNotifier::IsConnectionCellular(
350 net::NetworkChangeNotifier::GetConnectionType());
351 // If the user is not on a cellular connection, but we require a cellular
352 // connection, we must temporarily disable our local predictions.
353 if (GetLocalPredictorSpecValue(kLocalPredictorOnCellularOnly) ==
354 kEnabledGroup && !on_cellular) {
jkarlin 2014/09/23 14:54:03 Put !on_cellular first in the conditional since it
tburkard 2014/09/24 15:15:34 Done.
355 return true;
356 }
357
358 // If we don't care whether or not network prediction will actually be
359 // exercised, we do not need to temporarily disable our predictions.
360 if (GetLocalPredictorSpecValue(kLocalPredictorNetworkPredictionEnabledOnly) !=
361 kEnabledGroup) {
362 return false;
363 }
364
365 // We should temporarily disable iff the predictive network action would
366 // not be exercised.
367
368 int network_prediction_preference =
jkarlin 2014/09/23 14:54:03 Can you replace lines 368 and below with: return
tburkard 2014/09/24 15:15:34 Done.
369 profile->GetPrefs()->GetInteger(prefs::kNetworkPredictionOptions);
370
371 // If the user has network predictions never selected, we must disable
372 // predictions.
373 if (network_prediction_preference ==
374 chrome_browser_net::NETWORK_PREDICTION_NEVER) {
375 return true;
376 }
377
378 // If the user has network predictions enabled on wifi only, but we are
379 // on cellular, any predictive actions would not be exercised, so we
380 // must disable predictions.
381 if (network_prediction_preference ==
382 chrome_browser_net::NETWORK_PREDICTION_WIFI_ONLY && on_cellular) {
383 return true;
384 }
385
386 // In all other cases, network predictions will be exercised, so it is ok
387 // to proceed.
388
389 return false;
390 }
391
341 bool IsLoggedInPredictorEnabled() { 392 bool IsLoggedInPredictorEnabled() {
342 return IsLocalPredictorEnabled(); 393 return IsLocalPredictorEnabled();
343 } 394 }
344 395
345 bool IsSideEffectFreeWhitelistEnabled() { 396 bool IsSideEffectFreeWhitelistEnabled() {
346 return IsLocalPredictorEnabled() && 397 return IsLocalPredictorEnabled() &&
347 GetLocalPredictorSpecValue(kSideEffectFreeWhitelistKeyName) != 398 GetLocalPredictorSpecValue(kSideEffectFreeWhitelistKeyName) !=
348 kDisabledGroup; 399 kDisabledGroup;
349 } 400 }
350 401
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after
483 return GetLocalPredictorSpecValue(kDisableSessionStorageNamespaceMerging) != 534 return GetLocalPredictorSpecValue(kDisableSessionStorageNamespaceMerging) !=
484 kDisabledGroup; 535 kDisabledGroup;
485 } 536 }
486 537
487 bool IsPrerenderCookieStoreEnabled() { 538 bool IsPrerenderCookieStoreEnabled() {
488 return GetLocalPredictorSpecValue(kPrerenderCookieStore) != kDisabledGroup && 539 return GetLocalPredictorSpecValue(kPrerenderCookieStore) != kDisabledGroup &&
489 FieldTrialList::FindFullName(kPrerenderCookieStore) != kDisabledGroup; 540 FieldTrialList::FindFullName(kPrerenderCookieStore) != kDisabledGroup;
490 } 541 }
491 542
492 } // namespace prerender 543 } // namespace prerender
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698