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

Side by Side Diff: chrome/browser/extensions/default_apps.cc

Issue 6040005: More cleanup of DefaultApps code (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: remove unnecessary change, add comments Created 9 years, 11 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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/extensions/default_apps.h" 5 #include "chrome/browser/extensions/default_apps.h"
6 6
7 #include "base/command_line.h" 7 #include "base/command_line.h"
8 #include "base/metrics/histogram.h" 8 #include "base/metrics/histogram.h"
9 #include "chrome/browser/prefs/pref_service.h" 9 #include "chrome/browser/prefs/pref_service.h"
10 #include "chrome/common/chrome_switches.h" 10 #include "chrome/common/chrome_switches.h"
11 #include "chrome/common/pref_names.h" 11 #include "chrome/common/pref_names.h"
12 12
13 const int DefaultApps::kAppsPromoCounterMax = 10; 13 const int DefaultApps::kAppsPromoCounterMax = 10;
14 14
15 // static 15 // static
16 void DefaultApps::RegisterUserPrefs(PrefService* prefs) { 16 void DefaultApps::RegisterUserPrefs(PrefService* prefs) {
17 prefs->RegisterBooleanPref(prefs::kDefaultAppsInstalled, false); 17 prefs->RegisterBooleanPref(prefs::kDefaultAppsInstalled, false);
18 prefs->RegisterIntegerPref(prefs::kAppsPromoCounter, 0); 18 prefs->RegisterIntegerPref(prefs::kAppsPromoCounter, 0);
19 } 19 }
20 20
21 DefaultApps::DefaultApps(PrefService* prefs) 21 DefaultApps::DefaultApps(PrefService* prefs,
22 : prefs_(prefs) { 22 const std::string& application_locale)
23 #if !defined(OS_CHROMEOS) 23 : prefs_(prefs), application_locale_(application_locale) {
24 // Poppit, Entanglement 24 // Poppit, Entanglement
25 ids_.insert("mcbkbpnkkkipelfledbfocopglifcfmi"); 25 ids_.insert("mcbkbpnkkkipelfledbfocopglifcfmi");
26 ids_.insert("aciahcmjmecflokailenpkdchphgkefd"); 26 ids_.insert("aciahcmjmecflokailenpkdchphgkefd");
27 #endif // OS_CHROMEOS
28 } 27 }
29 28
30 DefaultApps::~DefaultApps() {} 29 DefaultApps::~DefaultApps() {}
31 30
32 const ExtensionIdSet* DefaultApps::GetAppsToInstall() const { 31 const ExtensionIdSet& DefaultApps::default_apps() const {
33 if (GetDefaultAppsInstalled()) 32 return ids_;
34 return NULL;
35 else
36 return &ids_;
37 } 33 }
38 34
39 const ExtensionIdSet* DefaultApps::GetDefaultApps() const { 35 bool DefaultApps::DefaultAppSupported() {
40 return &ids_; 36 // On Chrome OS the default apps are installed via a different mechanism.
37 #if defined(OS_CHROMEOS)
38 return false;
39 #else
40 return DefaultAppsSupportedForLanguage();
41 #endif
41 } 42 }
42 43
43 void DefaultApps::DidInstallApp(const ExtensionIdSet& installed_ids) { 44 bool DefaultApps::DefaultAppsSupportedForLanguage() {
44 // If all the default apps have been installed, stop trying to install them. 45 return application_locale_ == "en-US";
45 // Note that we use std::includes here instead of == because apps might have
46 // been manually installed while the the default apps were installing and we
47 // wouldn't want to keep trying to install them in that case.
48 if (!GetDefaultAppsInstalled() &&
49 std::includes(installed_ids.begin(), installed_ids.end(),
50 ids_.begin(), ids_.end())) {
51 SetDefaultAppsInstalled(true);
52 }
53 } 46 }
54 47
55 bool DefaultApps::CheckShouldShowPromo(const ExtensionIdSet& installed_ids) { 48 bool DefaultApps::ShouldInstallDefaultApps(
56 #if defined(OS_CHROMEOS) 49 const ExtensionIdSet& installed_ids) {
57 // Don't show the promo at all on Chrome OS. 50 if (!DefaultAppSupported())
58 return false; 51 return false;
52
53 if (GetDefaultAppsInstalled())
54 return false;
55
56 // If there are any non-default apps installed, we should never try to install
57 // the default apps again, even if the non-default apps are later removed.
58 if (NonDefaultAppIsInstalled(installed_ids)) {
59 SetDefaultAppsInstalled(true);
60 return false;
61 }
62
63 return true;
64 }
65
66 bool DefaultApps::ShouldShowAppLauncher(const ExtensionIdSet& installed_ids) {
67 // On Chrome OS the default apps are installed via a separate mechanism that
68 // is always enabled. Therefore we always show the launcher.
69 #if defined(OS_CHROME)
70 return true;
71 #else
72 // The app store only supports en-us at the moment, so we don't show the apps
73 // section by default for users in other locales. But we do show it if a user
74 // from a non-supported locale somehow installs an app (eg by navigating
75 // directly to the store).
76 if (!DefaultAppsSupportedForLanguage())
77 return !installed_ids.empty();
78
79 // For supported locales, we need to wait for all the default apps to be
80 // installed before showing the apps section. We also show it if any
81 // non-default app is installed (eg because the user installed the app in a
82 // previous version of Chrome).
83 if (GetDefaultAppsInstalled() || NonDefaultAppIsInstalled(installed_ids))
84 return true;
85 else
86 return false;
59 #endif 87 #endif
88 }
89
90 bool DefaultApps::ShouldShowPromo(const ExtensionIdSet& installed_ids) {
60 if (CommandLine::ForCurrentProcess()->HasSwitch( 91 if (CommandLine::ForCurrentProcess()->HasSwitch(
61 switches::kForceAppsPromoVisible)) { 92 switches::kForceAppsPromoVisible)) {
62 return true; 93 return true;
63 } 94 }
64 95
96 if (!DefaultAppSupported())
97 return false;
98
65 if (GetDefaultAppsInstalled() && GetPromoCounter() < kAppsPromoCounterMax) { 99 if (GetDefaultAppsInstalled() && GetPromoCounter() < kAppsPromoCounterMax) {
66 // If we have the exact set of default apps, show the promo. If we don't 100 // If we have the exact set of default apps, show the promo. If we don't
67 // have the exact set of default apps, this means that the user manually 101 // have the exact set of default apps, this means that the user manually
68 // installed one. The promo doesn't make sense if it shows apps the user 102 // installed or uninstalled one. The promo doesn't make sense if it shows
69 // manually installed, so expire it immediately in that situation. 103 // apps the user manually installed, so expire it immediately in that
104 // situation.
70 if (installed_ids == ids_) 105 if (installed_ids == ids_)
71 return true; 106 return true;
72 else 107 else
73 SetPromoHidden(); 108 SetPromoHidden();
74 } 109 }
75 110
76 return false; 111 return false;
77 } 112 }
78 113
114 void DefaultApps::DidInstallApp(const ExtensionIdSet& installed_ids) {
115 // If all the default apps have been installed, stop trying to install them.
116 // Note that we use std::includes here instead of == because apps might have
117 // been manually installed while the the default apps were installing and we
118 // wouldn't want to keep trying to install them in that case.
119 if (!GetDefaultAppsInstalled() &&
120 std::includes(installed_ids.begin(), installed_ids.end(),
121 ids_.begin(), ids_.end())) {
122 SetDefaultAppsInstalled(true);
123 }
124 }
125
79 void DefaultApps::DidShowPromo() { 126 void DefaultApps::DidShowPromo() {
80 if (!GetDefaultAppsInstalled()) { 127 if (!GetDefaultAppsInstalled()) {
81 NOTREACHED() << "Should not show promo until default apps are installed."; 128 NOTREACHED() << "Should not show promo until default apps are installed.";
82 return; 129 return;
83 } 130 }
84 131
85 int promo_counter = GetPromoCounter(); 132 int promo_counter = GetPromoCounter();
86 if (promo_counter == kAppsPromoCounterMax) { 133 if (promo_counter == kAppsPromoCounterMax) {
87 NOTREACHED() << "Promo has already been shown the maximum number of times."; 134 NOTREACHED() << "Promo has already been shown the maximum number of times.";
88 return; 135 return;
89 } 136 }
90 137
91 if (promo_counter < kAppsPromoCounterMax) { 138 if (promo_counter < kAppsPromoCounterMax) {
92 if (promo_counter + 1 == kAppsPromoCounterMax) 139 if (promo_counter + 1 == kAppsPromoCounterMax)
93 UMA_HISTOGRAM_ENUMERATION(extension_misc::kAppsPromoHistogram, 140 UMA_HISTOGRAM_ENUMERATION(extension_misc::kAppsPromoHistogram,
94 extension_misc::PROMO_EXPIRE, 141 extension_misc::PROMO_EXPIRE,
95 extension_misc::PROMO_BUCKET_BOUNDARY); 142 extension_misc::PROMO_BUCKET_BOUNDARY);
96 SetPromoCounter(++promo_counter); 143 SetPromoCounter(++promo_counter);
97 } else { 144 } else {
98 SetPromoHidden(); 145 SetPromoHidden();
99 } 146 }
100 } 147 }
101 148
149 bool DefaultApps::NonDefaultAppIsInstalled(
150 const ExtensionIdSet& installed_ids) const {
151 for (ExtensionIdSet::const_iterator iter = installed_ids.begin();
152 iter != installed_ids.end(); ++iter) {
153 if (ids_.find(*iter) == ids_.end())
154 return true;
155 }
156
157 return false;
158 }
159
102 void DefaultApps::SetPromoHidden() { 160 void DefaultApps::SetPromoHidden() {
103 SetPromoCounter(kAppsPromoCounterMax); 161 SetPromoCounter(kAppsPromoCounterMax);
104 } 162 }
105 163
106 int DefaultApps::GetPromoCounter() const { 164 int DefaultApps::GetPromoCounter() const {
107 return prefs_->GetInteger(prefs::kAppsPromoCounter); 165 return prefs_->GetInteger(prefs::kAppsPromoCounter);
108 } 166 }
109 167
110 void DefaultApps::SetPromoCounter(int val) { 168 void DefaultApps::SetPromoCounter(int val) {
111 prefs_->SetInteger(prefs::kAppsPromoCounter, val); 169 prefs_->SetInteger(prefs::kAppsPromoCounter, val);
112 prefs_->ScheduleSavePersistentPrefs(); 170 prefs_->ScheduleSavePersistentPrefs();
113 } 171 }
114 172
115 bool DefaultApps::GetDefaultAppsInstalled() const { 173 bool DefaultApps::GetDefaultAppsInstalled() const {
116 return prefs_->GetBoolean(prefs::kDefaultAppsInstalled); 174 return prefs_->GetBoolean(prefs::kDefaultAppsInstalled);
117 } 175 }
118 176
119 void DefaultApps::SetDefaultAppsInstalled(bool val) { 177 void DefaultApps::SetDefaultAppsInstalled(bool val) {
120 prefs_->SetBoolean(prefs::kDefaultAppsInstalled, val); 178 prefs_->SetBoolean(prefs::kDefaultAppsInstalled, val);
121 prefs_->ScheduleSavePersistentPrefs(); 179 prefs_->ScheduleSavePersistentPrefs();
122 } 180 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698