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

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

Issue 320633002: Add an extension override bubble and warning box for proxy extensions. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 6 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) 2014 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2014 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/settings_api_bubble_controller.h" 5 #include "chrome/browser/extensions/settings_api_bubble_controller.h"
6 6
7 #include "base/metrics/histogram.h" 7 #include "base/metrics/histogram.h"
8 #include "chrome/browser/extensions/extension_service.h" 8 #include "chrome/browser/extensions/extension_service.h"
9 #include "chrome/browser/extensions/extension_toolbar_model.h"
9 #include "chrome/browser/extensions/settings_api_helpers.h" 10 #include "chrome/browser/extensions/settings_api_helpers.h"
10 #include "chrome/browser/profiles/profile.h" 11 #include "chrome/browser/profiles/profile.h"
11 #include "chrome/browser/ui/startup/startup_browser_creator.h" 12 #include "chrome/browser/ui/startup/startup_browser_creator.h"
12 #include "chrome/common/extensions/manifest_handlers/settings_overrides_handler. h" 13 #include "chrome/common/extensions/manifest_handlers/settings_overrides_handler. h"
13 #include "chrome/common/url_constants.h" 14 #include "chrome/common/url_constants.h"
14 #include "extensions/browser/extension_prefs.h" 15 #include "extensions/browser/extension_prefs.h"
15 #include "extensions/browser/extension_registry.h" 16 #include "extensions/browser/extension_registry.h"
16 #include "extensions/browser/extension_system.h" 17 #include "extensions/browser/extension_system.h"
17 #include "grit/chromium_strings.h" 18 #include "grit/chromium_strings.h"
18 #include "grit/generated_resources.h" 19 #include "grit/generated_resources.h"
19 #include "ui/base/l10n/l10n_util.h" 20 #include "ui/base/l10n/l10n_util.h"
20 21
21 using extensions::ExtensionMessageBubbleController; 22 namespace extensions {
22 using extensions::SettingsApiBubbleController;
23 using extensions::SettingsOverrides;
24 23
25 namespace { 24 namespace {
26 25
27 //////////////////////////////////////////////////////////////////////////////// 26 ////////////////////////////////////////////////////////////////////////////////
28 // SettingsApiBubbleDelegate 27 // SettingsApiBubbleDelegate
29 28
30 class SettingsApiBubbleDelegate 29 class SettingsApiBubbleDelegate
31 : public extensions::ExtensionMessageBubbleController::Delegate { 30 : public ExtensionMessageBubbleController::Delegate {
32 public: 31 public:
33 explicit SettingsApiBubbleDelegate(ExtensionService* service, 32 explicit SettingsApiBubbleDelegate(ExtensionService* service,
34 Profile* profile, 33 Profile* profile,
35 extensions::SettingsApiOverrideType type); 34 SettingsApiOverrideType type);
36 virtual ~SettingsApiBubbleDelegate(); 35 virtual ~SettingsApiBubbleDelegate();
37 36
38 // ExtensionMessageBubbleController::Delegate methods. 37 // ExtensionMessageBubbleController::Delegate methods.
39 virtual bool ShouldIncludeExtension(const std::string& extension_id) OVERRIDE; 38 virtual bool ShouldIncludeExtension(const std::string& extension_id) OVERRIDE;
40 virtual void AcknowledgeExtension( 39 virtual void AcknowledgeExtension(
41 const std::string& extension_id, 40 const std::string& extension_id,
42 extensions::ExtensionMessageBubbleController::BubbleAction user_action) 41 ExtensionMessageBubbleController::BubbleAction user_action) OVERRIDE;
43 OVERRIDE; 42 virtual void PerformAction(const ExtensionIdList& list) OVERRIDE;
44 virtual void PerformAction(const extensions::ExtensionIdList& list) OVERRIDE; 43 virtual void OnClose() OVERRIDE;
45 virtual base::string16 GetTitle() const OVERRIDE; 44 virtual base::string16 GetTitle() const OVERRIDE;
46 virtual base::string16 GetMessageBody() const OVERRIDE; 45 virtual base::string16 GetMessageBody(
46 bool anchored_to_browser_action) const OVERRIDE;
47 virtual base::string16 GetOverflowText( 47 virtual base::string16 GetOverflowText(
48 const base::string16& overflow_count) const OVERRIDE; 48 const base::string16& overflow_count) const OVERRIDE;
49 virtual base::string16 GetLearnMoreLabel() const OVERRIDE; 49 virtual base::string16 GetLearnMoreLabel() const OVERRIDE;
50 virtual GURL GetLearnMoreUrl() const OVERRIDE; 50 virtual GURL GetLearnMoreUrl() const OVERRIDE;
51 virtual base::string16 GetActionButtonLabel() const OVERRIDE; 51 virtual base::string16 GetActionButtonLabel() const OVERRIDE;
52 virtual base::string16 GetDismissButtonLabel() const OVERRIDE; 52 virtual base::string16 GetDismissButtonLabel() const OVERRIDE;
53 virtual bool ShouldShowExtensionList() const OVERRIDE; 53 virtual bool ShouldShowExtensionList() const OVERRIDE;
54 virtual void LogExtensionCount(size_t count) OVERRIDE; 54 virtual void LogExtensionCount(size_t count) OVERRIDE;
55 virtual void LogAction( 55 virtual void LogAction(
56 extensions::ExtensionMessageBubbleController::BubbleAction action) 56 ExtensionMessageBubbleController::BubbleAction action) OVERRIDE;
57 OVERRIDE;
58 57
59 private: 58 private:
60 // Our extension service. Weak, not owned by us. 59 // Our extension service. Weak, not owned by us.
61 ExtensionService* service_; 60 ExtensionService* service_;
62 61
63 // A weak pointer to the profile we are associated with. Not owned by us. 62 // A weak pointer to the profile we are associated with. Not owned by us.
64 Profile* profile_; 63 Profile* profile_;
65 64
66 // The type of settings override this bubble will report on. This can be, for 65 // The type of settings override this bubble will report on. This can be, for
67 // example, a bubble to notify the user that the search engine has been 66 // example, a bubble to notify the user that the search engine has been
68 // changed by an extension (or homepage/startup pages/etc). 67 // changed by an extension (or homepage/startup pages/etc).
69 extensions::SettingsApiOverrideType type_; 68 SettingsApiOverrideType type_;
70 69
71 // The ID of the extension we are showing the bubble for. 70 // The ID of the extension we are showing the bubble for.
72 std::string extension_id_; 71 std::string extension_id_;
73 72
74 DISALLOW_COPY_AND_ASSIGN(SettingsApiBubbleDelegate); 73 DISALLOW_COPY_AND_ASSIGN(SettingsApiBubbleDelegate);
75 }; 74 };
76 75
77 SettingsApiBubbleDelegate::SettingsApiBubbleDelegate( 76 SettingsApiBubbleDelegate::SettingsApiBubbleDelegate(
78 ExtensionService* service, 77 ExtensionService* service,
79 Profile* profile, 78 Profile* profile,
80 extensions::SettingsApiOverrideType type) 79 SettingsApiOverrideType type)
81 : service_(service), profile_(profile), type_(type) {} 80 : service_(service), profile_(profile), type_(type) {}
82 81
83 SettingsApiBubbleDelegate::~SettingsApiBubbleDelegate() {} 82 SettingsApiBubbleDelegate::~SettingsApiBubbleDelegate() {}
84 83
85 bool SettingsApiBubbleDelegate::ShouldIncludeExtension( 84 bool SettingsApiBubbleDelegate::ShouldIncludeExtension(
86 const std::string& extension_id) { 85 const std::string& extension_id) {
87 using extensions::ExtensionRegistry;
88 ExtensionRegistry* registry = ExtensionRegistry::Get(profile_); 86 ExtensionRegistry* registry = ExtensionRegistry::Get(profile_);
89 const extensions::Extension* extension = 87 const Extension* extension =
90 registry->GetExtensionById(extension_id, ExtensionRegistry::ENABLED); 88 registry->GetExtensionById(extension_id, ExtensionRegistry::ENABLED);
91 if (!extension) 89 if (!extension)
92 return false; // The extension provided is no longer enabled. 90 return false; // The extension provided is no longer enabled.
93 91
94 extensions::ExtensionPrefs* prefs = extensions::ExtensionPrefs::Get(profile_); 92 ExtensionPrefs* prefs = ExtensionPrefs::Get(profile_);
95 if (prefs->HasSettingsApiBubbleBeenAcknowledged(extension_id)) 93 if (prefs->HasSettingsApiBubbleBeenAcknowledged(extension_id))
96 return false; 94 return false;
97 95
98 const extensions::Extension* override = NULL; 96 const Extension* override = NULL;
99 switch (type_) { 97 switch (type_) {
100 case extensions::BUBBLE_TYPE_HOME_PAGE: 98 case BUBBLE_TYPE_HOME_PAGE:
101 override = extensions::OverridesHomepage(profile_, NULL); 99 override = GetExtensionOverridingHomepage(profile_, NULL);
102 break; 100 break;
103 case extensions::BUBBLE_TYPE_STARTUP_PAGES: 101 case BUBBLE_TYPE_STARTUP_PAGES:
104 override = extensions::OverridesStartupPages(profile_, NULL); 102 override = GetExtensionOverridingStartupPages(profile_, NULL);
105 break; 103 break;
106 case extensions::BUBBLE_TYPE_SEARCH_ENGINE: 104 case BUBBLE_TYPE_SEARCH_ENGINE:
107 override = extensions::OverridesSearchEngine(profile_, NULL); 105 override = GetExtensionOverridingSearchEngine(profile_, NULL);
108 break; 106 break;
109 } 107 }
110 108
111 if (!override || override->id() != extension->id()) 109 if (!override || override->id() != extension->id())
112 return false; 110 return false;
113 111
114 extension_id_ = extension_id; 112 extension_id_ = extension_id;
115 return true; 113 return true;
116 } 114 }
117 115
118 void SettingsApiBubbleDelegate::AcknowledgeExtension( 116 void SettingsApiBubbleDelegate::AcknowledgeExtension(
119 const std::string& extension_id, 117 const std::string& extension_id,
120 ExtensionMessageBubbleController::BubbleAction user_action) { 118 ExtensionMessageBubbleController::BubbleAction user_action) {
121 if (user_action != ExtensionMessageBubbleController::ACTION_EXECUTE) { 119 if (user_action != ExtensionMessageBubbleController::ACTION_EXECUTE) {
122 extensions::ExtensionPrefs* prefs = 120 ExtensionPrefs* prefs = ExtensionPrefs::Get(profile_);
123 extensions::ExtensionPrefs::Get(profile_);
124 prefs->SetSettingsApiBubbleBeenAcknowledged(extension_id, true); 121 prefs->SetSettingsApiBubbleBeenAcknowledged(extension_id, true);
125 } 122 }
126 } 123 }
127 124
128 void SettingsApiBubbleDelegate::PerformAction( 125 void SettingsApiBubbleDelegate::PerformAction(const ExtensionIdList& list) {
129 const extensions::ExtensionIdList& list) {
130 for (size_t i = 0; i < list.size(); ++i) { 126 for (size_t i = 0; i < list.size(); ++i) {
131 service_->DisableExtension(list[i], 127 service_->DisableExtension(list[i], Extension::DISABLE_USER_ACTION);
132 extensions::Extension::DISABLE_USER_ACTION);
133 } 128 }
134 } 129 }
135 130
131 void SettingsApiBubbleDelegate::OnClose() {
132 ExtensionToolbarModel* toolbar_model = ExtensionToolbarModel::Get(profile_);
133 if (toolbar_model)
134 toolbar_model->StopHighlighting();
135 }
136
136 base::string16 SettingsApiBubbleDelegate::GetTitle() const { 137 base::string16 SettingsApiBubbleDelegate::GetTitle() const {
137 switch (type_) { 138 switch (type_) {
138 case extensions::BUBBLE_TYPE_HOME_PAGE: 139 case BUBBLE_TYPE_HOME_PAGE:
139 return l10n_util::GetStringUTF16( 140 return l10n_util::GetStringUTF16(
140 IDS_EXTENSIONS_SETTINGS_API_TITLE_HOME_PAGE_BUBBLE); 141 IDS_EXTENSIONS_SETTINGS_API_TITLE_HOME_PAGE_BUBBLE);
141 case extensions::BUBBLE_TYPE_STARTUP_PAGES: 142 case BUBBLE_TYPE_STARTUP_PAGES:
142 return l10n_util::GetStringUTF16( 143 return l10n_util::GetStringUTF16(
143 IDS_EXTENSIONS_SETTINGS_API_TITLE_STARTUP_PAGES_BUBBLE); 144 IDS_EXTENSIONS_SETTINGS_API_TITLE_STARTUP_PAGES_BUBBLE);
144 case extensions::BUBBLE_TYPE_SEARCH_ENGINE: 145 case BUBBLE_TYPE_SEARCH_ENGINE:
145 return l10n_util::GetStringUTF16( 146 return l10n_util::GetStringUTF16(
146 IDS_EXTENSIONS_SETTINGS_API_TITLE_SEARCH_ENGINE_BUBBLE); 147 IDS_EXTENSIONS_SETTINGS_API_TITLE_SEARCH_ENGINE_BUBBLE);
147 } 148 }
148 NOTREACHED(); 149 NOTREACHED();
149 return base::string16(); 150 return base::string16();
150 } 151 }
151 152
152 base::string16 SettingsApiBubbleDelegate::GetMessageBody() const { 153 base::string16 SettingsApiBubbleDelegate::GetMessageBody(
153 using extensions::ExtensionRegistry; 154 bool anchored_to_browser_action) const {
154 ExtensionRegistry* registry = ExtensionRegistry::Get(profile_); 155 ExtensionRegistry* registry = ExtensionRegistry::Get(profile_);
155 const extensions::Extension* extension = 156 const Extension* extension =
156 registry->GetExtensionById(extension_id_, ExtensionRegistry::ENABLED); 157 registry->GetExtensionById(extension_id_, ExtensionRegistry::ENABLED);
157 const SettingsOverrides* settings = 158 const SettingsOverrides* settings =
158 extension ? SettingsOverrides::Get(extension) : NULL; 159 extension ? SettingsOverrides::Get(extension) : NULL;
159 if (!extension || !settings) { 160 if (!extension || !settings) {
160 NOTREACHED(); 161 NOTREACHED();
161 return base::string16(); 162 return base::string16();
162 } 163 }
163 164
164 bool home_change = settings->homepage != NULL; 165 bool home_change = settings->homepage != NULL;
165 bool startup_change = !settings->startup_pages.empty(); 166 bool startup_change = !settings->startup_pages.empty();
166 bool search_change = settings->search_engine != NULL; 167 bool search_change = settings->search_engine != NULL;
167 168
168 base::string16 body; 169 base::string16 body;
169 switch (type_) { 170 switch (type_) {
170 case extensions::BUBBLE_TYPE_HOME_PAGE: 171 case BUBBLE_TYPE_HOME_PAGE:
171 body = l10n_util::GetStringUTF16( 172 body = l10n_util::GetStringUTF16(
172 IDS_EXTENSIONS_SETTINGS_API_FIRST_LINE_HOME_PAGE); 173 IDS_EXTENSIONS_SETTINGS_API_FIRST_LINE_HOME_PAGE);
173 if (startup_change && search_change) { 174 if (startup_change && search_change) {
174 body += l10n_util::GetStringUTF16( 175 body += l10n_util::GetStringUTF16(
175 IDS_EXTENSIONS_SETTINGS_API_SECOND_LINE_START_AND_SEARCH); 176 IDS_EXTENSIONS_SETTINGS_API_SECOND_LINE_START_AND_SEARCH);
176 } else if (startup_change) { 177 } else if (startup_change) {
177 body += l10n_util::GetStringUTF16( 178 body += l10n_util::GetStringUTF16(
178 IDS_EXTENSIONS_SETTINGS_API_SECOND_LINE_START_PAGES); 179 IDS_EXTENSIONS_SETTINGS_API_SECOND_LINE_START_PAGES);
179 } else if (search_change) { 180 } else if (search_change) {
180 body += l10n_util::GetStringUTF16( 181 body += l10n_util::GetStringUTF16(
181 IDS_EXTENSIONS_SETTINGS_API_SECOND_LINE_SEARCH_ENGINE); 182 IDS_EXTENSIONS_SETTINGS_API_SECOND_LINE_SEARCH_ENGINE);
182 } 183 }
183 break; 184 break;
184 case extensions::BUBBLE_TYPE_STARTUP_PAGES: 185 case BUBBLE_TYPE_STARTUP_PAGES:
185 body = l10n_util::GetStringUTF16( 186 body = l10n_util::GetStringUTF16(
186 IDS_EXTENSIONS_SETTINGS_API_FIRST_LINE_START_PAGES); 187 IDS_EXTENSIONS_SETTINGS_API_FIRST_LINE_START_PAGES);
187 if (home_change && search_change) { 188 if (home_change && search_change) {
188 body += l10n_util::GetStringUTF16( 189 body += l10n_util::GetStringUTF16(
189 IDS_EXTENSIONS_SETTINGS_API_SECOND_LINE_HOME_AND_SEARCH); 190 IDS_EXTENSIONS_SETTINGS_API_SECOND_LINE_HOME_AND_SEARCH);
190 } else if (home_change) { 191 } else if (home_change) {
191 body += l10n_util::GetStringUTF16( 192 body += l10n_util::GetStringUTF16(
192 IDS_EXTENSIONS_SETTINGS_API_SECOND_LINE_HOME_PAGE); 193 IDS_EXTENSIONS_SETTINGS_API_SECOND_LINE_HOME_PAGE);
193 } else if (search_change) { 194 } else if (search_change) {
194 body += l10n_util::GetStringUTF16( 195 body += l10n_util::GetStringUTF16(
195 IDS_EXTENSIONS_SETTINGS_API_SECOND_LINE_SEARCH_ENGINE); 196 IDS_EXTENSIONS_SETTINGS_API_SECOND_LINE_SEARCH_ENGINE);
196 } 197 }
197 break; 198 break;
198 case extensions::BUBBLE_TYPE_SEARCH_ENGINE: 199 case BUBBLE_TYPE_SEARCH_ENGINE:
199 body = l10n_util::GetStringUTF16( 200 body = l10n_util::GetStringUTF16(
200 IDS_EXTENSIONS_SETTINGS_API_FIRST_LINE_SEARCH_ENGINE); 201 IDS_EXTENSIONS_SETTINGS_API_FIRST_LINE_SEARCH_ENGINE);
201 if (startup_change && home_change) { 202 if (startup_change && home_change) {
202 body += l10n_util::GetStringUTF16( 203 body += l10n_util::GetStringUTF16(
203 IDS_EXTENSIONS_SETTINGS_API_SECOND_LINE_START_AND_HOME); 204 IDS_EXTENSIONS_SETTINGS_API_SECOND_LINE_START_AND_HOME);
204 } else if (startup_change) { 205 } else if (startup_change) {
205 body += l10n_util::GetStringUTF16( 206 body += l10n_util::GetStringUTF16(
206 IDS_EXTENSIONS_SETTINGS_API_SECOND_LINE_START_PAGES); 207 IDS_EXTENSIONS_SETTINGS_API_SECOND_LINE_START_PAGES);
207 } else if (home_change) { 208 } else if (home_change) {
208 body += l10n_util::GetStringUTF16( 209 body += l10n_util::GetStringUTF16(
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
242 bool SettingsApiBubbleDelegate::ShouldShowExtensionList() const { 243 bool SettingsApiBubbleDelegate::ShouldShowExtensionList() const {
243 return false; 244 return false;
244 } 245 }
245 246
246 void SettingsApiBubbleDelegate::LogExtensionCount(size_t count) { 247 void SettingsApiBubbleDelegate::LogExtensionCount(size_t count) {
247 } 248 }
248 249
249 void SettingsApiBubbleDelegate::LogAction( 250 void SettingsApiBubbleDelegate::LogAction(
250 ExtensionMessageBubbleController::BubbleAction action) { 251 ExtensionMessageBubbleController::BubbleAction action) {
251 switch (type_) { 252 switch (type_) {
252 case extensions::BUBBLE_TYPE_HOME_PAGE: 253 case BUBBLE_TYPE_HOME_PAGE:
253 UMA_HISTOGRAM_ENUMERATION( 254 UMA_HISTOGRAM_ENUMERATION(
254 "ExtensionOverrideBubble.SettingsApiUserSelectionHomePage", 255 "ExtensionOverrideBubble.SettingsApiUserSelectionHomePage",
255 action, 256 action,
256 ExtensionMessageBubbleController::ACTION_BOUNDARY); 257 ExtensionMessageBubbleController::ACTION_BOUNDARY);
257 break; 258 break;
258 case extensions::BUBBLE_TYPE_STARTUP_PAGES: 259 case BUBBLE_TYPE_STARTUP_PAGES:
259 UMA_HISTOGRAM_ENUMERATION( 260 UMA_HISTOGRAM_ENUMERATION(
260 "ExtensionOverrideBubble.SettingsApiUserSelectionStartupPage", 261 "ExtensionOverrideBubble.SettingsApiUserSelectionStartupPage",
261 action, 262 action,
262 ExtensionMessageBubbleController::ACTION_BOUNDARY); 263 ExtensionMessageBubbleController::ACTION_BOUNDARY);
263 break; 264 break;
264 case extensions::BUBBLE_TYPE_SEARCH_ENGINE: 265 case BUBBLE_TYPE_SEARCH_ENGINE:
265 UMA_HISTOGRAM_ENUMERATION( 266 UMA_HISTOGRAM_ENUMERATION(
266 "ExtensionOverrideBubble.SettingsApiUserSelectionSearchEngine", 267 "ExtensionOverrideBubble.SettingsApiUserSelectionSearchEngine",
267 action, 268 action,
268 ExtensionMessageBubbleController::ACTION_BOUNDARY); 269 ExtensionMessageBubbleController::ACTION_BOUNDARY);
269 break; 270 break;
270 } 271 }
271 } 272 }
272 273
273 } // namespace 274 } // namespace
274 275
275 namespace extensions {
276
277 //////////////////////////////////////////////////////////////////////////////// 276 ////////////////////////////////////////////////////////////////////////////////
278 // SettingsApiBubbleController 277 // SettingsApiBubbleController
279 278
280 SettingsApiBubbleController::SettingsApiBubbleController( 279 SettingsApiBubbleController::SettingsApiBubbleController(
281 Profile* profile, 280 Profile* profile,
282 SettingsApiOverrideType type) 281 SettingsApiOverrideType type)
283 : ExtensionMessageBubbleController( 282 : ExtensionMessageBubbleController(
284 new SettingsApiBubbleDelegate( 283 new SettingsApiBubbleDelegate(
285 ExtensionSystem::Get(profile)->extension_service(), 284 ExtensionSystem::Get(profile)->extension_service(),
286 profile, 285 profile,
287 type), 286 type),
288 profile), 287 profile),
289 profile_(profile), 288 profile_(profile),
290 type_(type) {} 289 type_(type) {}
291 290
292 SettingsApiBubbleController::~SettingsApiBubbleController() {} 291 SettingsApiBubbleController::~SettingsApiBubbleController() {}
293 292
294 bool SettingsApiBubbleController::ShouldShow(const std::string& extension_id) { 293 bool SettingsApiBubbleController::ShouldShow(const std::string& extension_id) {
295 extensions::ExtensionPrefs* prefs = extensions::ExtensionPrefs::Get(profile_); 294 ExtensionPrefs* prefs = ExtensionPrefs::Get(profile_);
296 if (prefs->HasSettingsApiBubbleBeenAcknowledged(extension_id)) 295 if (prefs->HasSettingsApiBubbleBeenAcknowledged(extension_id))
297 return false; 296 return false;
298 297
299 if (!delegate()->ShouldIncludeExtension(extension_id)) 298 if (!delegate()->ShouldIncludeExtension(extension_id))
300 return false; 299 return false;
301 300
302 // If the browser is showing the 'Chrome crashed' infobar, it won't be showing 301 // If the browser is showing the 'Chrome crashed' infobar, it won't be showing
303 // the startup pages, so there's no point in showing the bubble now. 302 // the startup pages, so there's no point in showing the bubble now.
304 if (type_ == BUBBLE_TYPE_STARTUP_PAGES) 303 if (type_ == BUBBLE_TYPE_STARTUP_PAGES)
305 return profile_->GetLastSessionExitType() != Profile::EXIT_CRASHED; 304 return profile_->GetLastSessionExitType() != Profile::EXIT_CRASHED;
306 305
307 return true; 306 return true;
308 } 307 }
309 308
310 bool SettingsApiBubbleController::CloseOnDeactivate() { 309 bool SettingsApiBubbleController::CloseOnDeactivate() {
311 // Startup bubbles tend to get lost in the focus storm that happens on 310 // Startup bubbles tend to get lost in the focus storm that happens on
312 // startup. Other types should dismiss on focus loss. 311 // startup. Other types should dismiss on focus loss.
313 return type_ != BUBBLE_TYPE_STARTUP_PAGES; 312 return type_ != BUBBLE_TYPE_STARTUP_PAGES;
314 } 313 }
315 314
316 } // namespace extensions 315 } // namespace extensions
OLDNEW
« no previous file with comments | « chrome/browser/extensions/proxy_overridden_bubble_controller.cc ('k') | chrome/browser/extensions/settings_api_helpers.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698