| OLD | NEW |
| 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 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 51 #include "extensions/common/manifest_handlers/background_info.h" | 51 #include "extensions/common/manifest_handlers/background_info.h" |
| 52 #include "extensions/common/manifest_handlers/icons_handler.h" | 52 #include "extensions/common/manifest_handlers/icons_handler.h" |
| 53 #include "extensions/grit/extensions_browser_resources.h" | 53 #include "extensions/grit/extensions_browser_resources.h" |
| 54 #include "ipc/ipc_message.h" | 54 #include "ipc/ipc_message.h" |
| 55 #include "ui/base/l10n/l10n_util.h" | 55 #include "ui/base/l10n/l10n_util.h" |
| 56 #include "ui/base/resource/resource_bundle.h" | 56 #include "ui/base/resource/resource_bundle.h" |
| 57 #include "ui/gfx/image/image.h" | 57 #include "ui/gfx/image/image.h" |
| 58 | 58 |
| 59 #if defined(ENABLE_NOTIFICATIONS) | 59 #if defined(ENABLE_NOTIFICATIONS) |
| 60 #include "ui/message_center/message_center.h" | 60 #include "ui/message_center/message_center.h" |
| 61 #include "ui/message_center/notification_types.h" |
| 62 #include "ui/message_center/notifier_settings.h" |
| 61 #endif | 63 #endif |
| 62 | 64 |
| 63 using content::SiteInstance; | 65 using content::SiteInstance; |
| 64 using content::WebContents; | 66 using content::WebContents; |
| 65 using extensions::BackgroundInfo; | 67 using extensions::BackgroundInfo; |
| 66 using extensions::Extension; | 68 using extensions::Extension; |
| 67 using extensions::UnloadedExtensionInfo; | 69 using extensions::UnloadedExtensionInfo; |
| 68 | 70 |
| 69 namespace { | 71 namespace { |
| 70 | 72 |
| 71 const char kNotificationPrefix[] = "app.background.crashed."; | 73 const char kNotificationPrefix[] = "app.background.crashed."; |
| 74 const char kNotifierId[] = "app.background.crashed"; |
| 72 bool g_disable_close_balloon_for_testing = false; | 75 bool g_disable_close_balloon_for_testing = false; |
| 73 | 76 |
| 74 void CloseBalloon(const std::string& balloon_id, ProfileID profile_id) { | 77 void CloseBalloon(const std::string& balloon_id, ProfileID profile_id) { |
| 75 NotificationUIManager* notification_ui_manager = | 78 NotificationUIManager* notification_ui_manager = |
| 76 g_browser_process->notification_ui_manager(); | 79 g_browser_process->notification_ui_manager(); |
| 77 bool cancelled = notification_ui_manager->CancelById(balloon_id, profile_id); | 80 bool cancelled = notification_ui_manager->CancelById(balloon_id, profile_id); |
| 78 if (cancelled) { | 81 if (cancelled) { |
| 79 #if defined(ENABLE_NOTIFICATIONS) | 82 #if defined(ENABLE_NOTIFICATIONS) |
| 80 // TODO(dewittj): Add this functionality to the notification UI manager's | 83 // TODO(dewittj): Add this functionality to the notification UI manager's |
| 81 // API. | 84 // API. |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 163 const gfx::Image& icon) { | 166 const gfx::Image& icon) { |
| 164 gfx::Image notification_icon(icon); | 167 gfx::Image notification_icon(icon); |
| 165 if (notification_icon.IsEmpty()) { | 168 if (notification_icon.IsEmpty()) { |
| 166 ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); | 169 ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); |
| 167 notification_icon = rb.GetImageNamed(IDR_EXTENSION_DEFAULT_ICON); | 170 notification_icon = rb.GetImageNamed(IDR_EXTENSION_DEFAULT_ICON); |
| 168 } | 171 } |
| 169 | 172 |
| 170 // Origin URL must be different from the crashed extension to avoid the | 173 // Origin URL must be different from the crashed extension to avoid the |
| 171 // conflict. NotificationSystemObserver will cancel all notifications from | 174 // conflict. NotificationSystemObserver will cancel all notifications from |
| 172 // the same origin when NOTIFICATION_EXTENSION_UNLOADED_DEPRECATED. | 175 // the same origin when NOTIFICATION_EXTENSION_UNLOADED_DEPRECATED. |
| 173 Notification notification(GURL("chrome://extension-crash"), | 176 Notification notification(message_center::NOTIFICATION_TYPE_SIMPLE, |
| 174 base::string16(), | 177 base::string16(), |
| 175 message, | 178 message, |
| 176 notification_icon, | 179 notification_icon, |
| 180 message_center::NotifierId( |
| 181 message_center::NotifierId::SYSTEM_COMPONENT, |
| 182 kNotifierId), |
| 177 base::string16(), | 183 base::string16(), |
| 184 GURL("chrome://extension-crash"), |
| 178 delegate->id(), | 185 delegate->id(), |
| 186 message_center::RichNotificationData(), |
| 179 delegate.get()); | 187 delegate.get()); |
| 180 | 188 |
| 181 g_browser_process->notification_ui_manager()->Add(notification, profile); | 189 g_browser_process->notification_ui_manager()->Add(notification, profile); |
| 182 } | 190 } |
| 183 #endif | 191 #endif |
| 184 | 192 |
| 185 // Show a popup notification balloon with a crash message for a given app/ | 193 // Show a popup notification balloon with a crash message for a given app/ |
| 186 // extension. | 194 // extension. |
| 187 void ShowBalloon(const Extension* extension, Profile* profile) { | 195 void ShowBalloon(const Extension* extension, Profile* profile) { |
| 188 #if defined(ENABLE_NOTIFICATIONS) | 196 #if defined(ENABLE_NOTIFICATIONS) |
| (...skipping 590 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 779 bool user_gesture, | 787 bool user_gesture, |
| 780 bool* was_blocked) { | 788 bool* was_blocked) { |
| 781 Browser* browser = chrome::FindLastActiveWithProfile( | 789 Browser* browser = chrome::FindLastActiveWithProfile( |
| 782 Profile::FromBrowserContext(new_contents->GetBrowserContext()), | 790 Profile::FromBrowserContext(new_contents->GetBrowserContext()), |
| 783 chrome::GetActiveDesktop()); | 791 chrome::GetActiveDesktop()); |
| 784 if (browser) { | 792 if (browser) { |
| 785 chrome::AddWebContents(browser, NULL, new_contents, disposition, | 793 chrome::AddWebContents(browser, NULL, new_contents, disposition, |
| 786 initial_rect, user_gesture, was_blocked); | 794 initial_rect, user_gesture, was_blocked); |
| 787 } | 795 } |
| 788 } | 796 } |
| OLD | NEW |