OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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/apps/app_shim/extension_app_shim_handler_mac.h" | 5 #include "chrome/browser/apps/app_shim/extension_app_shim_handler_mac.h" |
6 | 6 |
7 #include "apps/app_lifetime_monitor_factory.h" | 7 #include "apps/app_lifetime_monitor_factory.h" |
8 #include "apps/launcher.h" | 8 #include "apps/launcher.h" |
9 #include "base/files/file_path.h" | 9 #include "base/files/file_path.h" |
10 #include "base/logging.h" | 10 #include "base/logging.h" |
(...skipping 13 matching lines...) Expand all Loading... |
24 #include "chrome/browser/ui/extensions/application_launch.h" | 24 #include "chrome/browser/ui/extensions/application_launch.h" |
25 #include "chrome/browser/ui/extensions/extension_enable_flow.h" | 25 #include "chrome/browser/ui/extensions/extension_enable_flow.h" |
26 #include "chrome/browser/ui/extensions/extension_enable_flow_delegate.h" | 26 #include "chrome/browser/ui/extensions/extension_enable_flow_delegate.h" |
27 #include "chrome/browser/ui/user_manager.h" | 27 #include "chrome/browser/ui/user_manager.h" |
28 #include "chrome/browser/web_applications/web_app_mac.h" | 28 #include "chrome/browser/web_applications/web_app_mac.h" |
29 #include "chrome/common/extensions/extension_constants.h" | 29 #include "chrome/common/extensions/extension_constants.h" |
30 #include "chrome/common/extensions/extension_metrics.h" | 30 #include "chrome/common/extensions/extension_metrics.h" |
31 #include "chrome/common/extensions/manifest_handlers/app_launch_info.h" | 31 #include "chrome/common/extensions/manifest_handlers/app_launch_info.h" |
32 #include "chrome/common/mac/app_shim_messages.h" | 32 #include "chrome/common/mac/app_shim_messages.h" |
33 #include "components/crx_file/id_util.h" | 33 #include "components/crx_file/id_util.h" |
| 34 #include "content/public/browser/browser_context.h" |
34 #include "content/public/browser/notification_details.h" | 35 #include "content/public/browser/notification_details.h" |
35 #include "content/public/browser/notification_service.h" | 36 #include "content/public/browser/notification_service.h" |
36 #include "content/public/browser/notification_source.h" | 37 #include "content/public/browser/notification_source.h" |
37 #include "extensions/browser/app_window/app_window.h" | 38 #include "extensions/browser/app_window/app_window.h" |
38 #include "extensions/browser/app_window/app_window_registry.h" | 39 #include "extensions/browser/app_window/app_window_registry.h" |
39 #include "extensions/browser/app_window/native_app_window.h" | 40 #include "extensions/browser/app_window/native_app_window.h" |
40 #include "extensions/browser/extension_host.h" | 41 #include "extensions/browser/extension_host.h" |
41 #include "extensions/browser/extension_prefs.h" | 42 #include "extensions/browser/extension_prefs.h" |
42 #include "extensions/browser/extension_registry.h" | 43 #include "extensions/browser/extension_registry.h" |
43 #include "extensions/common/constants.h" | 44 #include "extensions/common/constants.h" |
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
189 return profiles::IsProfileLocked(full_path); | 190 return profiles::IsProfileLocked(full_path); |
190 } | 191 } |
191 | 192 |
192 AppWindowList ExtensionAppShimHandler::Delegate::GetWindows( | 193 AppWindowList ExtensionAppShimHandler::Delegate::GetWindows( |
193 Profile* profile, | 194 Profile* profile, |
194 const std::string& extension_id) { | 195 const std::string& extension_id) { |
195 return AppWindowRegistry::Get(profile)->GetAppWindowsForApp(extension_id); | 196 return AppWindowRegistry::Get(profile)->GetAppWindowsForApp(extension_id); |
196 } | 197 } |
197 | 198 |
198 const Extension* ExtensionAppShimHandler::Delegate::MaybeGetAppExtension( | 199 const Extension* ExtensionAppShimHandler::Delegate::MaybeGetAppExtension( |
199 Profile* profile, | 200 content::BrowserContext* context, |
200 const std::string& extension_id) { | 201 const std::string& extension_id) { |
201 return ExtensionAppShimHandler::MaybeGetAppExtension(profile, extension_id); | 202 return ExtensionAppShimHandler::MaybeGetAppExtension(context, extension_id); |
202 } | 203 } |
203 | 204 |
204 void ExtensionAppShimHandler::Delegate::EnableExtension( | 205 void ExtensionAppShimHandler::Delegate::EnableExtension( |
205 Profile* profile, | 206 Profile* profile, |
206 const std::string& extension_id, | 207 const std::string& extension_id, |
207 const base::Callback<void()>& callback) { | 208 const base::Callback<void()>& callback) { |
208 (new EnableViaPrompt(profile, extension_id, callback))->Run(); | 209 (new EnableViaPrompt(profile, extension_id, callback))->Run(); |
209 } | 210 } |
210 | 211 |
211 void ExtensionAppShimHandler::Delegate::LaunchApp( | 212 void ExtensionAppShimHandler::Delegate::LaunchApp( |
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
289 | 290 |
290 if (hidden) | 291 if (hidden) |
291 browser->window()->Hide(); | 292 browser->window()->Hide(); |
292 else | 293 else |
293 browser->window()->Show(); | 294 browser->window()->Show(); |
294 } | 295 } |
295 } | 296 } |
296 | 297 |
297 // static | 298 // static |
298 const Extension* ExtensionAppShimHandler::MaybeGetAppExtension( | 299 const Extension* ExtensionAppShimHandler::MaybeGetAppExtension( |
299 Profile* profile, | 300 content::BrowserContext* context, |
300 const std::string& extension_id) { | 301 const std::string& extension_id) { |
301 if (!profile) | 302 if (!context) |
302 return NULL; | 303 return NULL; |
303 | 304 |
304 ExtensionRegistry* registry = ExtensionRegistry::Get(profile); | 305 ExtensionRegistry* registry = ExtensionRegistry::Get(context); |
305 const Extension* extension = | 306 const Extension* extension = |
306 registry->GetExtensionById(extension_id, ExtensionRegistry::ENABLED); | 307 registry->GetExtensionById(extension_id, ExtensionRegistry::ENABLED); |
307 return extension && | 308 return extension && |
308 (extension->is_platform_app() || extension->is_hosted_app()) | 309 (extension->is_platform_app() || extension->is_hosted_app()) |
309 ? extension | 310 ? extension |
310 : NULL; | 311 : NULL; |
311 } | 312 } |
312 | 313 |
313 // static | 314 // static |
314 const Extension* ExtensionAppShimHandler::MaybeGetAppForBrowser( | 315 const Extension* ExtensionAppShimHandler::MaybeGetAppForBrowser( |
(...skipping 339 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
654 void ExtensionAppShimHandler::Observe( | 655 void ExtensionAppShimHandler::Observe( |
655 int type, | 656 int type, |
656 const content::NotificationSource& source, | 657 const content::NotificationSource& source, |
657 const content::NotificationDetails& details) { | 658 const content::NotificationDetails& details) { |
658 switch (type) { | 659 switch (type) { |
659 case chrome::NOTIFICATION_PROFILE_CREATED: { | 660 case chrome::NOTIFICATION_PROFILE_CREATED: { |
660 Profile* profile = content::Source<Profile>(source).ptr(); | 661 Profile* profile = content::Source<Profile>(source).ptr(); |
661 if (profile->IsOffTheRecord()) | 662 if (profile->IsOffTheRecord()) |
662 return; | 663 return; |
663 | 664 |
664 AppLifetimeMonitorFactory::GetForProfile(profile)->AddObserver(this); | 665 AppLifetimeMonitorFactory::GetForBrowserContext(profile)->AddObserver( |
| 666 this); |
665 break; | 667 break; |
666 } | 668 } |
667 case chrome::NOTIFICATION_PROFILE_DESTROYED: { | 669 case chrome::NOTIFICATION_PROFILE_DESTROYED: { |
668 Profile* profile = content::Source<Profile>(source).ptr(); | 670 Profile* profile = content::Source<Profile>(source).ptr(); |
669 if (profile->IsOffTheRecord()) | 671 if (profile->IsOffTheRecord()) |
670 return; | 672 return; |
671 | 673 |
672 AppLifetimeMonitorFactory::GetForProfile(profile)->RemoveObserver(this); | 674 AppLifetimeMonitorFactory::GetForBrowserContext(profile)->RemoveObserver( |
| 675 this); |
673 // Shut down every shim associated with this profile. | 676 // Shut down every shim associated with this profile. |
674 for (HostMap::iterator it = hosts_.begin(); it != hosts_.end(); ) { | 677 for (HostMap::iterator it = hosts_.begin(); it != hosts_.end(); ) { |
675 // Increment the iterator first as OnAppClosed may call back to | 678 // Increment the iterator first as OnAppClosed may call back to |
676 // OnShimClose and invalidate the iterator. | 679 // OnShimClose and invalidate the iterator. |
677 HostMap::iterator current = it++; | 680 HostMap::iterator current = it++; |
678 if (profile->IsSameProfile(current->first.first)) { | 681 if (profile->IsSameProfile(current->first.first)) { |
679 Host* host = current->second; | 682 Host* host = current->second; |
680 host->OnAppClosed(); | 683 host->OnAppClosed(); |
681 } | 684 } |
682 } | 685 } |
(...skipping 13 matching lines...) Expand all Loading... |
696 | 699 |
697 break; | 700 break; |
698 } | 701 } |
699 default: { | 702 default: { |
700 NOTREACHED(); // Unexpected notification. | 703 NOTREACHED(); // Unexpected notification. |
701 break; | 704 break; |
702 } | 705 } |
703 } | 706 } |
704 } | 707 } |
705 | 708 |
706 void ExtensionAppShimHandler::OnAppStart(Profile* profile, | 709 void ExtensionAppShimHandler::OnAppStart(content::BrowserContext* context, |
707 const std::string& app_id) {} | 710 const std::string& app_id) {} |
708 | 711 |
709 void ExtensionAppShimHandler::OnAppActivated(Profile* profile, | 712 void ExtensionAppShimHandler::OnAppActivated(content::BrowserContext* context, |
710 const std::string& app_id) { | 713 const std::string& app_id) { |
711 const Extension* extension = delegate_->MaybeGetAppExtension(profile, app_id); | 714 const Extension* extension = delegate_->MaybeGetAppExtension(context, app_id); |
712 if (!extension) | 715 if (!extension) |
713 return; | 716 return; |
714 | 717 |
| 718 Profile* profile = static_cast<Profile*>(context); |
715 Host* host = FindHost(profile, app_id); | 719 Host* host = FindHost(profile, app_id); |
716 if (host) { | 720 if (host) { |
717 host->OnAppLaunchComplete(APP_SHIM_LAUNCH_SUCCESS); | 721 host->OnAppLaunchComplete(APP_SHIM_LAUNCH_SUCCESS); |
718 OnShimFocus(host, APP_SHIM_FOCUS_NORMAL, std::vector<base::FilePath>()); | 722 OnShimFocus(host, APP_SHIM_FOCUS_NORMAL, std::vector<base::FilePath>()); |
719 return; | 723 return; |
720 } | 724 } |
721 | 725 |
722 delegate_->LaunchShim(profile, extension); | 726 delegate_->LaunchShim(profile, extension); |
723 } | 727 } |
724 | 728 |
725 void ExtensionAppShimHandler::OnAppDeactivated(Profile* profile, | 729 void ExtensionAppShimHandler::OnAppDeactivated(content::BrowserContext* context, |
726 const std::string& app_id) { | 730 const std::string& app_id) { |
727 Host* host = FindHost(profile, app_id); | 731 Host* host = FindHost(static_cast<Profile*>(context), app_id); |
728 if (host) | 732 if (host) |
729 host->OnAppClosed(); | 733 host->OnAppClosed(); |
730 | 734 |
731 if (hosts_.empty()) | 735 if (hosts_.empty()) |
732 delegate_->MaybeTerminate(); | 736 delegate_->MaybeTerminate(); |
733 } | 737 } |
734 | 738 |
735 void ExtensionAppShimHandler::OnAppStop(Profile* profile, | 739 void ExtensionAppShimHandler::OnAppStop(content::BrowserContext* context, |
736 const std::string& app_id) {} | 740 const std::string& app_id) {} |
737 | 741 |
738 // The BrowserWindow may be NULL when this is called. | 742 // The BrowserWindow may be NULL when this is called. |
739 // Therefore we listen for the notification | 743 // Therefore we listen for the notification |
740 // chrome::NOTIFICATION_BROWSER_WINDOW_READY and then call OnAppActivated. | 744 // chrome::NOTIFICATION_BROWSER_WINDOW_READY and then call OnAppActivated. |
741 // If this notification is removed, check that OnBrowserAdded is called after | 745 // If this notification is removed, check that OnBrowserAdded is called after |
742 // the BrowserWindow is ready. | 746 // the BrowserWindow is ready. |
743 void ExtensionAppShimHandler::OnBrowserAdded(Browser* browser) { | 747 void ExtensionAppShimHandler::OnBrowserAdded(Browser* browser) { |
744 } | 748 } |
745 | 749 |
746 void ExtensionAppShimHandler::OnBrowserRemoved(Browser* browser) { | 750 void ExtensionAppShimHandler::OnBrowserRemoved(Browser* browser) { |
747 const Extension* extension = MaybeGetAppForBrowser(browser); | 751 const Extension* extension = MaybeGetAppForBrowser(browser); |
748 if (!extension) | 752 if (!extension) |
749 return; | 753 return; |
750 | 754 |
751 AppBrowserMap::iterator it = app_browser_windows_.find(extension->id()); | 755 AppBrowserMap::iterator it = app_browser_windows_.find(extension->id()); |
752 if (it != app_browser_windows_.end()) { | 756 if (it != app_browser_windows_.end()) { |
753 BrowserSet& browsers = it->second; | 757 BrowserSet& browsers = it->second; |
754 browsers.erase(browser); | 758 browsers.erase(browser); |
755 if (browsers.empty()) | 759 if (browsers.empty()) |
756 OnAppDeactivated(browser->profile(), extension->id()); | 760 OnAppDeactivated(browser->profile(), extension->id()); |
757 } | 761 } |
758 } | 762 } |
759 | 763 |
760 } // namespace apps | 764 } // namespace apps |
OLD | NEW |