| 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 "base/basictypes.h" | 7 #include "base/basictypes.h" |
| 8 #include "base/bind.h" | 8 #include "base/bind.h" |
| 9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
| 10 #include "base/message_loop.h" | 10 #include "base/message_loop.h" |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 49 | 49 |
| 50 namespace { | 50 namespace { |
| 51 | 51 |
| 52 const char kNotificationPrefix[] = "app.background.crashed."; | 52 const char kNotificationPrefix[] = "app.background.crashed."; |
| 53 | 53 |
| 54 void CloseBalloon(const std::string id) { | 54 void CloseBalloon(const std::string id) { |
| 55 g_browser_process->notification_ui_manager()->CancelById(id); | 55 g_browser_process->notification_ui_manager()->CancelById(id); |
| 56 } | 56 } |
| 57 | 57 |
| 58 void ScheduleCloseBalloon(const std::string& extension_id) { | 58 void ScheduleCloseBalloon(const std::string& extension_id) { |
| 59 if (!MessageLoop::current()) // For unit_tests | 59 if (!base::MessageLoop::current()) // For unit_tests |
| 60 return; | 60 return; |
| 61 MessageLoop::current()->PostTask( | 61 base::MessageLoop::current()->PostTask( |
| 62 FROM_HERE, base::Bind(&CloseBalloon, kNotificationPrefix + extension_id)); | 62 FROM_HERE, base::Bind(&CloseBalloon, kNotificationPrefix + extension_id)); |
| 63 } | 63 } |
| 64 | 64 |
| 65 class CrashNotificationDelegate : public NotificationDelegate { | 65 class CrashNotificationDelegate : public NotificationDelegate { |
| 66 public: | 66 public: |
| 67 CrashNotificationDelegate(Profile* profile, | 67 CrashNotificationDelegate(Profile* profile, |
| 68 const Extension* extension) | 68 const Extension* extension) |
| 69 : profile_(profile), | 69 : profile_(profile), |
| 70 is_hosted_app_(extension->is_hosted_app()), | 70 is_hosted_app_(extension->is_hosted_app()), |
| 71 is_platform_app_(extension->is_platform_app()), | 71 is_platform_app_(extension->is_platform_app()), |
| (...skipping 250 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 322 extension = extension_host->extension(); | 322 extension = extension_host->extension(); |
| 323 } | 323 } |
| 324 if (!extension) | 324 if (!extension) |
| 325 break; | 325 break; |
| 326 | 326 |
| 327 // When an extension crashes, EXTENSION_PROCESS_TERMINATED is followed by | 327 // When an extension crashes, EXTENSION_PROCESS_TERMINATED is followed by |
| 328 // an EXTENSION_UNLOADED notification. This UNLOADED signal causes all the | 328 // an EXTENSION_UNLOADED notification. This UNLOADED signal causes all the |
| 329 // notifications for this extension to be cancelled by | 329 // notifications for this extension to be cancelled by |
| 330 // DesktopNotificationService. For this reason, instead of showing the | 330 // DesktopNotificationService. For this reason, instead of showing the |
| 331 // balloon right now, we schedule it to show a little later. | 331 // balloon right now, we schedule it to show a little later. |
| 332 MessageLoop::current()->PostTask( | 332 base::MessageLoop::current()->PostTask( |
| 333 FROM_HERE, base::Bind(&ShowBalloon, extension, profile)); | 333 FROM_HERE, base::Bind(&ShowBalloon, extension, profile)); |
| 334 break; | 334 break; |
| 335 } | 335 } |
| 336 case chrome::NOTIFICATION_EXTENSION_UNLOADED: | 336 case chrome::NOTIFICATION_EXTENSION_UNLOADED: |
| 337 switch (content::Details<UnloadedExtensionInfo>(details)->reason) { | 337 switch (content::Details<UnloadedExtensionInfo>(details)->reason) { |
| 338 case extension_misc::UNLOAD_REASON_DISABLE: // Fall through. | 338 case extension_misc::UNLOAD_REASON_DISABLE: // Fall through. |
| 339 case extension_misc::UNLOAD_REASON_TERMINATE: // Fall through. | 339 case extension_misc::UNLOAD_REASON_TERMINATE: // Fall through. |
| 340 case extension_misc::UNLOAD_REASON_UNINSTALL: // Fall through. | 340 case extension_misc::UNLOAD_REASON_UNINSTALL: // Fall through. |
| 341 case extension_misc::UNLOAD_REASON_BLACKLIST: | 341 case extension_misc::UNLOAD_REASON_BLACKLIST: |
| 342 ShutdownAssociatedBackgroundContents( | 342 ShutdownAssociatedBackgroundContents( |
| (...skipping 294 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 637 bool user_gesture, | 637 bool user_gesture, |
| 638 bool* was_blocked) { | 638 bool* was_blocked) { |
| 639 Browser* browser = chrome::FindLastActiveWithProfile( | 639 Browser* browser = chrome::FindLastActiveWithProfile( |
| 640 Profile::FromBrowserContext(new_contents->GetBrowserContext()), | 640 Profile::FromBrowserContext(new_contents->GetBrowserContext()), |
| 641 chrome::GetActiveDesktop()); | 641 chrome::GetActiveDesktop()); |
| 642 if (browser) { | 642 if (browser) { |
| 643 chrome::AddWebContents(browser, NULL, new_contents, disposition, | 643 chrome::AddWebContents(browser, NULL, new_contents, disposition, |
| 644 initial_pos, user_gesture, was_blocked); | 644 initial_pos, user_gesture, was_blocked); |
| 645 } | 645 } |
| 646 } | 646 } |
| OLD | NEW |