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 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
53 | 53 |
54 namespace { | 54 namespace { |
55 | 55 |
56 const char kNotificationPrefix[] = "app.background.crashed."; | 56 const char kNotificationPrefix[] = "app.background.crashed."; |
57 | 57 |
58 void CloseBalloon(const std::string id) { | 58 void CloseBalloon(const std::string id) { |
59 g_browser_process->notification_ui_manager()->CancelById(id); | 59 g_browser_process->notification_ui_manager()->CancelById(id); |
60 } | 60 } |
61 | 61 |
62 void ScheduleCloseBalloon(const std::string& extension_id) { | 62 void ScheduleCloseBalloon(const std::string& extension_id) { |
63 if (!MessageLoop::current()) // For unit_tests | 63 if (!base::MessageLoop::current()) // For unit_tests |
64 return; | 64 return; |
65 MessageLoop::current()->PostTask( | 65 base::MessageLoop::current()->PostTask( |
66 FROM_HERE, base::Bind(&CloseBalloon, kNotificationPrefix + extension_id)); | 66 FROM_HERE, base::Bind(&CloseBalloon, kNotificationPrefix + extension_id)); |
67 } | 67 } |
68 | 68 |
69 class CrashNotificationDelegate : public NotificationDelegate { | 69 class CrashNotificationDelegate : public NotificationDelegate { |
70 public: | 70 public: |
71 CrashNotificationDelegate(Profile* profile, | 71 CrashNotificationDelegate(Profile* profile, |
72 const Extension* extension) | 72 const Extension* extension) |
73 : profile_(profile), | 73 : profile_(profile), |
74 is_hosted_app_(extension->is_hosted_app()), | 74 is_hosted_app_(extension->is_hosted_app()), |
75 is_platform_app_(extension->is_platform_app()), | 75 is_platform_app_(extension->is_platform_app()), |
(...skipping 291 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
367 extension = extension_host->extension(); | 367 extension = extension_host->extension(); |
368 } | 368 } |
369 if (!extension) | 369 if (!extension) |
370 break; | 370 break; |
371 | 371 |
372 // When an extension crashes, EXTENSION_PROCESS_TERMINATED is followed by | 372 // When an extension crashes, EXTENSION_PROCESS_TERMINATED is followed by |
373 // an EXTENSION_UNLOADED notification. This UNLOADED signal causes all the | 373 // an EXTENSION_UNLOADED notification. This UNLOADED signal causes all the |
374 // notifications for this extension to be cancelled by | 374 // notifications for this extension to be cancelled by |
375 // DesktopNotificationService. For this reason, instead of showing the | 375 // DesktopNotificationService. For this reason, instead of showing the |
376 // balloon right now, we schedule it to show a little later. | 376 // balloon right now, we schedule it to show a little later. |
377 MessageLoop::current()->PostTask( | 377 base::MessageLoop::current()->PostTask( |
378 FROM_HERE, base::Bind(&ShowBalloon, extension, profile)); | 378 FROM_HERE, base::Bind(&ShowBalloon, extension, profile)); |
379 break; | 379 break; |
380 } | 380 } |
381 case chrome::NOTIFICATION_EXTENSION_UNLOADED: | 381 case chrome::NOTIFICATION_EXTENSION_UNLOADED: |
382 switch (content::Details<UnloadedExtensionInfo>(details)->reason) { | 382 switch (content::Details<UnloadedExtensionInfo>(details)->reason) { |
383 case extension_misc::UNLOAD_REASON_DISABLE: // Fall through. | 383 case extension_misc::UNLOAD_REASON_DISABLE: // Fall through. |
384 case extension_misc::UNLOAD_REASON_TERMINATE: // Fall through. | 384 case extension_misc::UNLOAD_REASON_TERMINATE: // Fall through. |
385 case extension_misc::UNLOAD_REASON_UNINSTALL: // Fall through. | 385 case extension_misc::UNLOAD_REASON_UNINSTALL: // Fall through. |
386 case extension_misc::UNLOAD_REASON_BLACKLIST: | 386 case extension_misc::UNLOAD_REASON_BLACKLIST: |
387 ShutdownAssociatedBackgroundContents( | 387 ShutdownAssociatedBackgroundContents( |
(...skipping 294 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
682 bool user_gesture, | 682 bool user_gesture, |
683 bool* was_blocked) { | 683 bool* was_blocked) { |
684 Browser* browser = chrome::FindLastActiveWithProfile( | 684 Browser* browser = chrome::FindLastActiveWithProfile( |
685 Profile::FromBrowserContext(new_contents->GetBrowserContext()), | 685 Profile::FromBrowserContext(new_contents->GetBrowserContext()), |
686 chrome::GetActiveDesktop()); | 686 chrome::GetActiveDesktop()); |
687 if (browser) { | 687 if (browser) { |
688 chrome::AddWebContents(browser, NULL, new_contents, disposition, | 688 chrome::AddWebContents(browser, NULL, new_contents, disposition, |
689 initial_pos, user_gesture, was_blocked); | 689 initial_pos, user_gesture, was_blocked); |
690 } | 690 } |
691 } | 691 } |
OLD | NEW |