Chromium Code Reviews

Unified Diff: chrome/browser/instant/instant_controller.cc

Issue 5023001: Handful of related instant changes: (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix linux build Created 10 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View side-by-side diff with in-line comments
« no previous file with comments | « chrome/browser/instant/instant_controller.h ('k') | chrome/browser/instant/instant_opt_in.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/instant/instant_controller.cc
diff --git a/chrome/browser/instant/instant_controller.cc b/chrome/browser/instant/instant_controller.cc
index 151308c538ab07c28988c54d03ed55faabfb22a7..eb10fb00374978bab25567c288232ada7c7edadb 100644
--- a/chrome/browser/instant/instant_controller.cc
+++ b/chrome/browser/instant/instant_controller.cc
@@ -5,10 +5,13 @@
#include "chrome/browser/instant/instant_controller.h"
#include "base/command_line.h"
+#include "base/metrics/histogram.h"
+#include "base/rand_util.h"
#include "chrome/browser/autocomplete/autocomplete_match.h"
#include "chrome/browser/instant/instant_delegate.h"
#include "chrome/browser/instant/instant_loader.h"
#include "chrome/browser/instant/instant_loader_manager.h"
+#include "chrome/browser/instant/promo_counter.h"
#include "chrome/browser/platform_util.h"
#include "chrome/browser/prefs/pref_service.h"
#include "chrome/browser/profile.h"
@@ -24,10 +27,61 @@
// Number of ms to delay between loading urls.
static const int kUpdateDelayMS = 200;
+static InstantController::Type GetType(Profile* profile) {
+ return InstantController::IsEnabled(profile,
+ InstantController::PREDICTIVE_TYPE) ?
+ InstantController::PREDICTIVE_TYPE : InstantController::VERBATIM_TYPE;
+}
+
+InstantController::InstantController(Profile* profile,
+ InstantDelegate* delegate)
+ : delegate_(delegate),
+ tab_contents_(NULL),
+ is_active_(false),
+ commit_on_mouse_up_(false),
+ last_transition_type_(PageTransition::LINK),
+ type_(GetType(profile)) {
+ PrefService* service = profile->GetPrefs();
+ if (service) {
+ // kInstantWasEnabledOnce was added after instant, set it now to make sure
+ // it is correctly set.
+ service->SetBoolean(prefs::kInstantEnabledOnce, true);
+ }
+}
+
+InstantController::~InstantController() {
+}
+
// static
void InstantController::RegisterUserPrefs(PrefService* prefs) {
prefs->RegisterBooleanPref(prefs::kInstantConfirmDialogShown, false);
prefs->RegisterBooleanPref(prefs::kInstantEnabled, false);
+ prefs->RegisterBooleanPref(prefs::kInstantEnabledOnce, false);
+ prefs->RegisterInt64Pref(prefs::kInstantEnabledTime, false);
+ prefs->RegisterIntegerPref(prefs::kInstantType, 0);
+ PromoCounter::RegisterUserPrefs(prefs, prefs::kInstantPromo);
+}
+
+// static
+void InstantController::RecordMetrics(Profile* profile) {
+ if (!IsEnabled(profile))
+ return;
+
+ PrefService* service = profile->GetPrefs();
+ if (service) {
+ int64 enable_time = service->GetInt64(prefs::kInstantEnabledTime);
+ if (!enable_time) {
+ service->SetInt64(prefs::kInstantEnabledTime,
+ base::Time::Now().ToInternalValue());
+ } else {
+ base::TimeDelta delta =
+ base::Time::Now() - base::Time::FromInternalValue(enable_time);
+ std::string name = IsEnabled(profile, PREDICTIVE_TYPE) ?
+ "Instant.EnabledTime.Predictive" : "Instant.EnabledTime.Verbatim";
+ // Histogram from 1 hour to 30 days.
+ UMA_HISTOGRAM_CUSTOM_COUNTS(name, delta.InHours(), 1, 30 * 24, 50);
+ }
+ }
}
// static
@@ -38,34 +92,70 @@ bool InstantController::IsEnabled(Profile* profile) {
// static
bool InstantController::IsEnabled(Profile* profile, Type type) {
+ // CommandLine takes precedence.
CommandLine* cl = CommandLine::ForCurrentProcess();
- if (type == PREDICTIVE_TYPE) {
- return (cl->HasSwitch(switches::kEnablePredictiveInstant) ||
- (profile->GetPrefs() &&
- profile->GetPrefs()->GetBoolean(prefs::kInstantEnabled)));
+ if (type == PREDICTIVE_TYPE &&
+ cl->HasSwitch(switches::kEnablePredictiveInstant)) {
+ return true;
+ }
+ if (type == VERBATIM_TYPE &&
+ cl->HasSwitch(switches::kEnableVerbatimInstant)) {
+ return true;
}
- return cl->HasSwitch(switches::kEnableVerbatimInstant);
-}
-static InstantController::Type GetType(Profile* profile) {
- return InstantController::IsEnabled(profile,
- InstantController::PREDICTIVE_TYPE) ?
- InstantController::PREDICTIVE_TYPE : InstantController::VERBATIM_TYPE;
+ // Then prefs.
+ PrefService* prefs = profile->GetPrefs();
+ if (!prefs->GetBoolean(prefs::kInstantEnabled))
+ return false;
+
+ Type pref_type = prefs->GetInteger(prefs::kInstantType) ==
+ static_cast<int>(PREDICTIVE_TYPE) ? PREDICTIVE_TYPE : VERBATIM_TYPE;
+ return pref_type == type;
}
-InstantController::InstantController(Profile* profile,
- InstantDelegate* delegate)
- : delegate_(delegate),
- tab_contents_(NULL),
- is_active_(false),
- commit_on_mouse_up_(false),
- last_transition_type_(PageTransition::LINK),
- type_(GetType(profile)) {
+// static
+void InstantController::Enable(Profile* profile) {
+ PromoCounter* promo_counter = profile->GetInstantPromoCounter();
+ if (promo_counter)
+ promo_counter->Hide();
+
+ PrefService* service = profile->GetPrefs();
+ if (!service)
+ return;
+
+ service->SetBoolean(prefs::kInstantEnabled, true);
+ service->SetBoolean(prefs::kInstantConfirmDialogShown, true);
+ service->SetInt64(prefs::kInstantEnabledTime,
+ base::Time::Now().ToInternalValue());
+ service->SetBoolean(prefs::kInstantEnabledOnce, true);
+ // Randomly pick a type. We're doing this to get feedback as to which variant
+ // folks prefer.
+ service->SetInteger(prefs::kInstantType,
+ base::RandInt(static_cast<int>(PREDICTIVE_TYPE),
+ static_cast<int>(LAST_TYPE)));
}
-InstantController::~InstantController() {
+// static
+void InstantController::Disable(Profile* profile) {
+ PrefService* service = profile->GetPrefs();
+ if (!service)
+ return;
+
+ service->SetBoolean(prefs::kInstantEnabled, false);
+
+ int64 enable_time = service->GetInt64(prefs::kInstantEnabledTime);
+ if (!enable_time)
+ return;
+
+ base::TimeDelta delta =
+ base::Time::Now() - base::Time::FromInternalValue(enable_time);
+ std::string name = IsEnabled(profile, PREDICTIVE_TYPE) ?
+ "Instant.TimeToDisable.Predictive" : "Instant.TimeToDisable.Verbatim";
+ // histogram from 1 minute to 10 days.
+ UMA_HISTOGRAM_CUSTOM_COUNTS(name, delta.InMinutes(), 1, 60 * 24 * 10, 50);
}
+
void InstantController::Update(TabContents* tab_contents,
const AutocompleteMatch& match,
const string16& user_text,
« no previous file with comments | « chrome/browser/instant/instant_controller.h ('k') | chrome/browser/instant/instant_opt_in.h » ('j') | no next file with comments »

Powered by Google App Engine