1// Copyright 2013 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "chrome/browser/ui/app_list/app_list_util.h"
6
7#include "base/metrics/field_trial.h"
8#include "base/prefs/pref_registry_simple.h"
9#include "base/prefs/pref_service.h"
10#include "chrome/browser/browser_process.h"
11#include "chrome/browser/ui/host_desktop.h"
12#include "chrome/common/pref_names.h"
13
14namespace {
15
16#if defined(ENABLE_APP_LIST)
17// The field trial group name that enables showing the promo.
18const char kShowLauncherPromoOnceGroupName[] = "ShowPromoUntilDismissed";
19
20// The field trial group name that resets the pref to show the app launcher
21// promo on every session startup.
22const char kResetShowLauncherPromoPrefGroupName[] = "ResetShowPromoPref";
23
24// The name of the field trial that controls showing the app launcher promo.
25const char kLauncherPromoTrialName[] = "ShowAppLauncherPromo";
26#endif  // defined(ENABLE_APP_LIST)
27
28}  // namespace
29
30void SetupShowAppLauncherPromoFieldTrial(PrefService* local_state) {
31#if defined(ENABLE_APP_LIST)
32  if (base::FieldTrialList::FindFullName(kLauncherPromoTrialName) ==
33      kResetShowLauncherPromoPrefGroupName) {
34    local_state->SetBoolean(prefs::kShowAppLauncherPromo, true);
35  }
36#endif
37}
38
39bool IsAppLauncherEnabled() {
40#if !defined(ENABLE_APP_LIST)
41  return false;
42
43#elif defined(OS_CHROMEOS)
44  return true;
45
46#else  // defined(ENABLE_APP_LIST) && !defined(OS_CHROMEOS)
47  if (chrome::GetActiveDesktop() == chrome::HOST_DESKTOP_TYPE_ASH)
48    return true;
49
50  PrefService* prefs = g_browser_process->local_state();
51  // In some tests, the prefs aren't initialised.
52  return prefs && prefs->GetBoolean(prefs::kAppLauncherHasBeenEnabled);
53#endif
54}
55
56bool ShouldShowAppLauncherPromo() {
57#if !defined(ENABLE_APP_LIST)
58  return false;
59#else
60  PrefService* local_state = g_browser_process->local_state();
61  // In some tests, the prefs aren't initialised.
62  if (!local_state)
63    return false;
64  std::string app_launcher_promo_group_name =
65      base::FieldTrialList::FindFullName(kLauncherPromoTrialName);
66  return !IsAppLauncherEnabled() &&
67      local_state->GetBoolean(prefs::kShowAppLauncherPromo) &&
68      (app_launcher_promo_group_name == kShowLauncherPromoOnceGroupName ||
69       app_launcher_promo_group_name == kResetShowLauncherPromoPrefGroupName);
70#endif
71}  // namespace apps
72