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

Side by Side Diff: chrome/browser/background/background_contents_service.cc

Issue 160923002: Fixes a typo: use the default image if the extension doesn't have icon. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: re-upload Created 6 years, 10 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) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/background/background_contents_service.h" 5 #include "chrome/browser/background/background_contents_service.h"
6 6
7 #include "apps/app_load_service.h" 7 #include "apps/app_load_service.h"
8 #include "base/basictypes.h" 8 #include "base/basictypes.h"
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/command_line.h" 10 #include "base/command_line.h"
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after
133 } 133 }
134 134
135 // Closing the crash notification balloon for the app/extension here should 135 // Closing the crash notification balloon for the app/extension here should
136 // be OK, but it causes a crash on Mac, see: http://crbug.com/78167 136 // be OK, but it causes a crash on Mac, see: http://crbug.com/78167
137 ScheduleCloseBalloon(copied_extension_id); 137 ScheduleCloseBalloon(copied_extension_id);
138 } 138 }
139 139
140 virtual bool HasClickedListener() OVERRIDE { return true; } 140 virtual bool HasClickedListener() OVERRIDE { return true; }
141 141
142 virtual std::string id() const OVERRIDE { 142 virtual std::string id() const OVERRIDE {
143 return kNotificationPrefix + extension_id_; 143 return BackgroundContentsService::GetNotificationIdForExtension(
144 extension_id_);
144 } 145 }
145 146
146 virtual content::RenderViewHost* GetRenderViewHost() const OVERRIDE { 147 virtual content::RenderViewHost* GetRenderViewHost() const OVERRIDE {
147 return NULL; 148 return NULL;
148 } 149 }
149 150
150 private: 151 private:
151 virtual ~CrashNotificationDelegate() {} 152 virtual ~CrashNotificationDelegate() {}
152 153
153 Profile* profile_; 154 Profile* profile_;
154 bool is_hosted_app_; 155 bool is_hosted_app_;
155 bool is_platform_app_; 156 bool is_platform_app_;
156 std::string extension_id_; 157 std::string extension_id_;
157 158
158 DISALLOW_COPY_AND_ASSIGN(CrashNotificationDelegate); 159 DISALLOW_COPY_AND_ASSIGN(CrashNotificationDelegate);
159 }; 160 };
160 161
161 #if defined(ENABLE_NOTIFICATIONS) 162 #if defined(ENABLE_NOTIFICATIONS)
162 void NotificationImageReady( 163 void NotificationImageReady(
163 const std::string extension_name, 164 const std::string extension_name,
164 const base::string16 message, 165 const base::string16 message,
165 scoped_refptr<CrashNotificationDelegate> delegate, 166 scoped_refptr<CrashNotificationDelegate> delegate,
166 Profile* profile, 167 Profile* profile,
167 const gfx::Image& icon) { 168 const gfx::Image& icon) {
168 gfx::Image notification_icon(icon); 169 gfx::Image notification_icon(icon);
169 if (icon.IsEmpty()) { 170 if (notification_icon.IsEmpty()) {
Andrew T Wilson (Slow) 2014/02/17 17:12:32 Why is this changing to use notification_icon inst
Jun Mukai 2014/02/17 19:48:43 suggestion from the other reviewer. We created 'no
170 ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); 171 ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance();
171 notification_icon = rb.GetImageNamed(IDR_EXTENSION_DEFAULT_ICON); 172 notification_icon = rb.GetImageNamed(IDR_EXTENSION_DEFAULT_ICON);
172 } 173 }
173 174
174 // Origin URL must be different from the crashed extension to avoid the 175 // Origin URL must be different from the crashed extension to avoid the
175 // conflict. NotificationSystemObserver will cancel all notifications from 176 // conflict. NotificationSystemObserver will cancel all notifications from
176 // the same origin when NOTIFICATION_EXTENSION_UNLOADED. 177 // the same origin when NOTIFICATION_EXTENSION_UNLOADED.
177 // TODO(mukai, dewittj): remove this and switch to message center 178 // TODO(mukai, dewittj): remove this and switch to message center
178 // notifications. 179 // notifications.
179 DesktopNotificationService::AddIconNotification( 180 DesktopNotificationService::AddIconNotification(
180 GURL() /* empty origin */, 181 GURL() /* empty origin */,
181 base::string16(), 182 base::string16(),
182 message, 183 message,
183 icon, 184 notification_icon,
184 base::string16(), 185 base::string16(),
185 delegate.get(), 186 delegate.get(),
186 profile); 187 profile);
187 } 188 }
188 #endif 189 #endif
189 190
190 // Show a popup notification balloon with a crash message for a given app/
191 // extension.
192 void ShowBalloon(const Extension* extension, Profile* profile) {
193 #if defined(ENABLE_NOTIFICATIONS)
194 const base::string16 message = l10n_util::GetStringFUTF16(
195 extension->is_app() ? IDS_BACKGROUND_CRASHED_APP_BALLOON_MESSAGE :
196 IDS_BACKGROUND_CRASHED_EXTENSION_BALLOON_MESSAGE,
197 base::UTF8ToUTF16(extension->name()));
198 extension_misc::ExtensionIcons size(extension_misc::EXTENSION_ICON_MEDIUM);
199 extensions::ExtensionResource resource =
200 extensions::IconsInfo::GetIconResource(
201 extension, size, ExtensionIconSet::MATCH_SMALLER);
202 // We can't just load the image in the Observe method below because, despite
203 // what this method is called, it may call the callback synchronously.
204 // However, it's possible that the extension went away during the interim,
205 // so we'll bind all the pertinent data here.
206 extensions::ImageLoader::Get(profile)->LoadImageAsync(
207 extension,
208 resource,
209 gfx::Size(size, size),
210 base::Bind(
211 &NotificationImageReady,
212 extension->name(),
213 message,
214 make_scoped_refptr(new CrashNotificationDelegate(profile, extension)),
215 profile));
216 #endif
217 }
218
219 void ReloadExtension(const std::string& extension_id, Profile* profile) { 191 void ReloadExtension(const std::string& extension_id, Profile* profile) {
220 if (g_browser_process->IsShuttingDown() || 192 if (g_browser_process->IsShuttingDown() ||
221 !g_browser_process->profile_manager()->IsValidProfile(profile)) { 193 !g_browser_process->profile_manager()->IsValidProfile(profile)) {
222 return; 194 return;
223 } 195 }
224 extensions::ExtensionSystem* extension_system = 196 extensions::ExtensionSystem* extension_system =
225 extensions::ExtensionSystem::Get(profile); 197 extensions::ExtensionSystem::Get(profile);
226 if (!extension_system || !extension_system->extension_service()) 198 if (!extension_system || !extension_system->extension_service())
227 return; 199 return;
228 if (!extension_system->extension_service()-> 200 if (!extension_system->extension_service()->
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
273 DCHECK(contents_map_.empty()); 245 DCHECK(contents_map_.empty());
274 } 246 }
275 247
276 // static 248 // static
277 void BackgroundContentsService:: 249 void BackgroundContentsService::
278 SetRestartDelayForForceInstalledAppsAndExtensionsForTesting( 250 SetRestartDelayForForceInstalledAppsAndExtensionsForTesting(
279 int restart_delay_in_ms) { 251 int restart_delay_in_ms) {
280 restart_delay_in_ms_ = restart_delay_in_ms; 252 restart_delay_in_ms_ = restart_delay_in_ms;
281 } 253 }
282 254
255 // static
256 std::string BackgroundContentsService::GetNotificationIdForExtension(
257 const std::string& extension_id) {
258 return kNotificationPrefix + extension_id;
259 }
260
261 // static
262 void BackgroundContentsService::ShowBalloon(const Extension* extension,
263 Profile* profile) {
264 #if defined(ENABLE_NOTIFICATIONS)
265 const base::string16 message = l10n_util::GetStringFUTF16(
266 extension->is_app() ? IDS_BACKGROUND_CRASHED_APP_BALLOON_MESSAGE :
267 IDS_BACKGROUND_CRASHED_EXTENSION_BALLOON_MESSAGE,
268 base::UTF8ToUTF16(extension->name()));
269 extension_misc::ExtensionIcons size(extension_misc::EXTENSION_ICON_MEDIUM);
270 extensions::ExtensionResource resource =
271 extensions::IconsInfo::GetIconResource(
272 extension, size, ExtensionIconSet::MATCH_SMALLER);
273 // We can't just load the image in the Observe method below because, despite
274 // what this method is called, it may call the callback synchronously.
275 // However, it's possible that the extension went away during the interim,
276 // so we'll bind all the pertinent data here.
277 extensions::ImageLoader::Get(profile)->LoadImageAsync(
278 extension,
279 resource,
280 gfx::Size(size, size),
281 base::Bind(
282 &NotificationImageReady,
283 extension->name(),
284 message,
285 make_scoped_refptr(new CrashNotificationDelegate(profile, extension)),
286 profile));
287 #endif
288 }
289
283 std::vector<BackgroundContents*> 290 std::vector<BackgroundContents*>
284 BackgroundContentsService::GetBackgroundContents() const 291 BackgroundContentsService::GetBackgroundContents() const
285 { 292 {
286 std::vector<BackgroundContents*> contents; 293 std::vector<BackgroundContents*> contents;
287 for (BackgroundContentsMap::const_iterator it = contents_map_.begin(); 294 for (BackgroundContentsMap::const_iterator it = contents_map_.begin();
288 it != contents_map_.end(); ++it) 295 it != contents_map_.end(); ++it)
289 contents.push_back(it->second.contents); 296 contents.push_back(it->second.contents);
290 return contents; 297 return contents;
291 } 298 }
292 299
(...skipping 473 matching lines...) Expand 10 before | Expand all | Expand 10 after
766 bool user_gesture, 773 bool user_gesture,
767 bool* was_blocked) { 774 bool* was_blocked) {
768 Browser* browser = chrome::FindLastActiveWithProfile( 775 Browser* browser = chrome::FindLastActiveWithProfile(
769 Profile::FromBrowserContext(new_contents->GetBrowserContext()), 776 Profile::FromBrowserContext(new_contents->GetBrowserContext()),
770 chrome::GetActiveDesktop()); 777 chrome::GetActiveDesktop());
771 if (browser) { 778 if (browser) {
772 chrome::AddWebContents(browser, NULL, new_contents, disposition, 779 chrome::AddWebContents(browser, NULL, new_contents, disposition,
773 initial_pos, user_gesture, was_blocked); 780 initial_pos, user_gesture, was_blocked);
774 } 781 }
775 } 782 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698