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

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: jkarlin feedback 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 ShouldDisableLocalPredictorBasedOnSyncAndConfiguration(Profile* profile) {
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 ShouldDisableLocalPredictorDueToPreferencesAndNetwork(Profile* profile) {
347 bool on_cellular =
348 net::NetworkChangeNotifier::IsConnectionCellular(
349 net::NetworkChangeNotifier::GetConnectionType());
350 // If the user is not on a cellular connection, but we require a cellular
351 // connection, we must temporarily disable our local predictions.
352 if (!on_cellular &&
353 GetLocalPredictorSpecValue(kLocalPredictorOnCellularOnly) ==
354 kEnabledGroup) {
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 return !chrome_browser_net::CanPrefetchAndPrerenderUI(profile->GetPrefs());
Zhen Wang 2014/09/24 16:33:58 Should we check CanPrefetchAndPrerenderUI() first?
tburkard 2014/09/25 14:21:37 Actually, the idea is that it should return false
369 }
370
341 bool IsLoggedInPredictorEnabled() { 371 bool IsLoggedInPredictorEnabled() {
342 return IsLocalPredictorEnabled(); 372 return IsLocalPredictorEnabled();
343 } 373 }
344 374
345 bool IsSideEffectFreeWhitelistEnabled() { 375 bool IsSideEffectFreeWhitelistEnabled() {
346 return IsLocalPredictorEnabled() && 376 return IsLocalPredictorEnabled() &&
347 GetLocalPredictorSpecValue(kSideEffectFreeWhitelistKeyName) != 377 GetLocalPredictorSpecValue(kSideEffectFreeWhitelistKeyName) !=
348 kDisabledGroup; 378 kDisabledGroup;
349 } 379 }
350 380
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after
483 return GetLocalPredictorSpecValue(kDisableSessionStorageNamespaceMerging) != 513 return GetLocalPredictorSpecValue(kDisableSessionStorageNamespaceMerging) !=
484 kDisabledGroup; 514 kDisabledGroup;
485 } 515 }
486 516
487 bool IsPrerenderCookieStoreEnabled() { 517 bool IsPrerenderCookieStoreEnabled() {
488 return GetLocalPredictorSpecValue(kPrerenderCookieStore) != kDisabledGroup && 518 return GetLocalPredictorSpecValue(kPrerenderCookieStore) != kDisabledGroup &&
489 FieldTrialList::FindFullName(kPrerenderCookieStore) != kDisabledGroup; 519 FieldTrialList::FindFullName(kPrerenderCookieStore) != kDisabledGroup;
490 } 520 }
491 521
492 } // namespace prerender 522 } // namespace prerender
OLDNEW
« no previous file with comments | « chrome/browser/prerender/prerender_field_trial.h ('k') | chrome/browser/prerender/prerender_local_predictor.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698