| Index: chrome/browser/ui/webui/sync_promo_trial.cc
|
| ===================================================================
|
| --- chrome/browser/ui/webui/sync_promo_trial.cc (revision 0)
|
| +++ chrome/browser/ui/webui/sync_promo_trial.cc (revision 0)
|
| @@ -0,0 +1,100 @@
|
| +// Copyright (c) 2011 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include "chrome/browser/ui/webui/sync_promo_trial.h"
|
| +
|
| +#include "base/metrics/field_trial.h"
|
| +#include "chrome/browser/metrics/metrics_service.h"
|
| +#include "chrome/browser/prefs/pref_service.h"
|
| +#include "grit/generated_resources.h"
|
| +
|
| +namespace sync_promo_trial {
|
| +
|
| +// Field trial IDs of the control and experiment groups. Though they are not
|
| +// literally "const", they are set only once, in Activate() below. See the .h
|
| +// file for what these groups represent.
|
| +int g_sync_promo_experiment_a = 0;
|
| +int g_sync_promo_experiment_b = 0;
|
| +int g_sync_promo_experiment_c = 0;
|
| +int g_sync_promo_experiment_d = 0;
|
| +
|
| +const char kSyncPromoMsgTrialName[] = "SyncPromoMsg";
|
| +
|
| +void Activate() {
|
| + // The end date (February 21, 2012) is approximately 2 weeks into M17 stable.
|
| + scoped_refptr<base::FieldTrial> trial(
|
| + new base::FieldTrial(kSyncPromoMsgTrialName, 1000, "MsgA", 2012, 2, 21));
|
| + g_sync_promo_experiment_a = base::FieldTrial::kDefaultGroupNumber;
|
| +
|
| + // Try to give the user a consistent experience, if possible.
|
| + if (base::FieldTrialList::IsOneTimeRandomizationEnabled())
|
| + trial->UseOneTimeRandomization();
|
| +
|
| + // Each group has probability 0.5%, leaving the control with 98.5%.
|
| + g_sync_promo_experiment_b = trial->AppendGroup("MsgB", 50);
|
| + g_sync_promo_experiment_c = trial->AppendGroup("MsgC", 50);
|
| + g_sync_promo_experiment_d = trial->AppendGroup("MsgD", 50);
|
| +}
|
| +
|
| +bool IsExperimentActive() {
|
| + return base::FieldTrialList::FindValue(kSyncPromoMsgTrialName) !=
|
| + base::FieldTrial::kNotFinalized;
|
| +}
|
| +
|
| +Group GetGroup() {
|
| + // Promo message A is also the default value, so display it if there is no
|
| + // active experiment.
|
| + if (!IsExperimentActive())
|
| + return PROMO_MSG_A;
|
| +
|
| + const int group = base::FieldTrialList::FindValue(kSyncPromoMsgTrialName);
|
| + if (group == g_sync_promo_experiment_a)
|
| + return PROMO_MSG_A;
|
| + else if (group == g_sync_promo_experiment_b)
|
| + return PROMO_MSG_B;
|
| + else if (group == g_sync_promo_experiment_c)
|
| + return PROMO_MSG_C;
|
| + else if (group == g_sync_promo_experiment_d)
|
| + return PROMO_MSG_D;
|
| +
|
| + NOTREACHED();
|
| + return PROMO_MSG_A;
|
| +}
|
| +
|
| +int GetMessageBodyResID() {
|
| + // Note that GetGroup and the switch will take care of the !IsExperimentActive
|
| + // case for us.
|
| + Group group = GetGroup();
|
| + switch (group) {
|
| + case PROMO_MSG_A:
|
| + return IDS_SYNC_PROMO_MESSAGE_BODY_A;
|
| + case PROMO_MSG_B:
|
| + return IDS_SYNC_PROMO_MESSAGE_BODY_B;
|
| + case PROMO_MSG_C:
|
| + return IDS_SYNC_PROMO_MESSAGE_BODY_C;
|
| + case PROMO_MSG_D:
|
| + return IDS_SYNC_PROMO_MESSAGE_BODY_D;
|
| + case PROMO_MSG_MAX:
|
| + break;
|
| + }
|
| +
|
| + NOTREACHED();
|
| + return IDS_SYNC_PROMO_MESSAGE_BODY_A;
|
| +}
|
| +
|
| +void RecordUserSawMessage() {
|
| + DCHECK(IsExperimentActive());
|
| + UMA_HISTOGRAM_ENUMERATION("SyncPromo.MessageDisplayed",
|
| + GetGroup(),
|
| + PROMO_MSG_MAX);
|
| +}
|
| +
|
| +void RecordUserSignedIn() {
|
| + DCHECK(IsExperimentActive());
|
| + UMA_HISTOGRAM_ENUMERATION("SyncPromo.MessageOnSignIn",
|
| + GetGroup(),
|
| + PROMO_MSG_MAX);
|
| +}
|
| +
|
| +} // namespace sync_promo_trial
|
|
|
| Property changes on: chrome/browser/ui/webui/sync_promo_trial.cc
|
| ___________________________________________________________________
|
| Added: svn:eol-style
|
| + LF
|
|
|
|
|