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/extensions/extension_service.h" | 5 #include "chrome/browser/extensions/extension_service.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <set> | 8 #include <set> |
9 | 9 |
10 #include "base/basictypes.h" | 10 #include "base/basictypes.h" |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
54 #include "chrome/browser/extensions/extension_process_manager.h" | 54 #include "chrome/browser/extensions/extension_process_manager.h" |
55 #include "chrome/browser/extensions/extension_processes_api.h" | 55 #include "chrome/browser/extensions/extension_processes_api.h" |
56 #include "chrome/browser/extensions/extension_sorting.h" | 56 #include "chrome/browser/extensions/extension_sorting.h" |
57 #include "chrome/browser/extensions/extension_special_storage_policy.h" | 57 #include "chrome/browser/extensions/extension_special_storage_policy.h" |
58 #include "chrome/browser/extensions/extension_sync_data.h" | 58 #include "chrome/browser/extensions/extension_sync_data.h" |
59 #include "chrome/browser/extensions/extension_system.h" | 59 #include "chrome/browser/extensions/extension_system.h" |
60 #include "chrome/browser/extensions/extension_web_ui.h" | 60 #include "chrome/browser/extensions/extension_web_ui.h" |
61 #include "chrome/browser/extensions/external_provider_impl.h" | 61 #include "chrome/browser/extensions/external_provider_impl.h" |
62 #include "chrome/browser/extensions/external_provider_interface.h" | 62 #include "chrome/browser/extensions/external_provider_interface.h" |
63 #include "chrome/browser/extensions/installed_loader.h" | 63 #include "chrome/browser/extensions/installed_loader.h" |
| 64 #include "chrome/browser/extensions/lazy_background_task_queue.h" |
64 #include "chrome/browser/extensions/pending_extension_manager.h" | 65 #include "chrome/browser/extensions/pending_extension_manager.h" |
65 #include "chrome/browser/extensions/permissions_updater.h" | 66 #include "chrome/browser/extensions/permissions_updater.h" |
| 67 #include "chrome/browser/extensions/platform_app_launcher.h" |
66 #include "chrome/browser/extensions/settings/settings_frontend.h" | 68 #include "chrome/browser/extensions/settings/settings_frontend.h" |
| 69 #include "chrome/browser/extensions/shell_window_registry.h" |
67 #include "chrome/browser/extensions/unpacked_installer.h" | 70 #include "chrome/browser/extensions/unpacked_installer.h" |
68 #include "chrome/browser/extensions/updater/extension_updater.h" | 71 #include "chrome/browser/extensions/updater/extension_updater.h" |
69 #include "chrome/browser/extensions/window_event_router.h" | 72 #include "chrome/browser/extensions/window_event_router.h" |
70 #include "chrome/browser/history/history_extension_api.h" | 73 #include "chrome/browser/history/history_extension_api.h" |
71 #include "chrome/browser/net/chrome_url_request_context.h" | 74 #include "chrome/browser/net/chrome_url_request_context.h" |
72 #include "chrome/browser/prefs/pref_service.h" | 75 #include "chrome/browser/prefs/pref_service.h" |
73 #include "chrome/browser/profiles/profile.h" | 76 #include "chrome/browser/profiles/profile.h" |
74 #include "chrome/browser/profiles/profile_manager.h" | 77 #include "chrome/browser/profiles/profile_manager.h" |
75 #include "chrome/browser/search_engines/template_url_service.h" | 78 #include "chrome/browser/search_engines/template_url_service.h" |
76 #include "chrome/browser/search_engines/template_url_service_factory.h" | 79 #include "chrome/browser/search_engines/template_url_service_factory.h" |
(...skipping 24 matching lines...) Expand all Loading... |
101 #include "content/public/browser/plugin_service.h" | 104 #include "content/public/browser/plugin_service.h" |
102 #include "content/public/browser/render_process_host.h" | 105 #include "content/public/browser/render_process_host.h" |
103 #include "content/public/common/pepper_plugin_info.h" | 106 #include "content/public/common/pepper_plugin_info.h" |
104 #include "googleurl/src/gurl.h" | 107 #include "googleurl/src/gurl.h" |
105 #include "grit/generated_resources.h" | 108 #include "grit/generated_resources.h" |
106 #include "net/base/registry_controlled_domains/registry_controlled_domain.h" | 109 #include "net/base/registry_controlled_domains/registry_controlled_domain.h" |
107 #include "sync/api/sync_change.h" | 110 #include "sync/api/sync_change.h" |
108 #include "sync/api/sync_error_factory.h" | 111 #include "sync/api/sync_error_factory.h" |
109 #include "webkit/database/database_tracker.h" | 112 #include "webkit/database/database_tracker.h" |
110 #include "webkit/database/database_util.h" | 113 #include "webkit/database/database_util.h" |
111 | |
112 #if defined(OS_CHROMEOS) | 114 #if defined(OS_CHROMEOS) |
113 #include "chrome/browser/chromeos/cros/cros_library.h" | 115 #include "chrome/browser/chromeos/cros/cros_library.h" |
114 #include "chrome/browser/chromeos/extensions/bluetooth_event_router.h" | 116 #include "chrome/browser/chromeos/extensions/bluetooth_event_router.h" |
115 #include "chrome/browser/chromeos/extensions/file_browser_event_router.h" | 117 #include "chrome/browser/chromeos/extensions/file_browser_event_router.h" |
116 #include "chrome/browser/chromeos/extensions/input_method_event_router.h" | 118 #include "chrome/browser/chromeos/extensions/input_method_event_router.h" |
117 #include "chrome/browser/chromeos/extensions/media_player_event_router.h" | 119 #include "chrome/browser/chromeos/extensions/media_player_event_router.h" |
118 #include "chrome/browser/chromeos/input_method/input_method_manager.h" | 120 #include "chrome/browser/chromeos/input_method/input_method_manager.h" |
119 #include "chrome/browser/extensions/api/input_ime/input_ime_api.h" | 121 #include "chrome/browser/extensions/api/input_ime/input_ime_api.h" |
120 #include "webkit/fileapi/file_system_context.h" | 122 #include "webkit/fileapi/file_system_context.h" |
121 #include "webkit/fileapi/file_system_mount_point_provider.h" | 123 #include "webkit/fileapi/file_system_mount_point_provider.h" |
(...skipping 535 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
657 // Look for an open inspector for the background page. | 659 // Look for an open inspector for the background page. |
658 DevToolsAgentHost* agent = | 660 DevToolsAgentHost* agent = |
659 DevToolsAgentHostRegistry::GetDevToolsAgentHost( | 661 DevToolsAgentHostRegistry::GetDevToolsAgentHost( |
660 host->render_view_host()); | 662 host->render_view_host()); |
661 int devtools_cookie = | 663 int devtools_cookie = |
662 content::DevToolsManager::GetInstance()->DetachClientHost(agent); | 664 content::DevToolsManager::GetInstance()->DetachClientHost(agent); |
663 if (devtools_cookie >= 0) | 665 if (devtools_cookie >= 0) |
664 orphaned_dev_tools_[extension_id] = devtools_cookie; | 666 orphaned_dev_tools_[extension_id] = devtools_cookie; |
665 } | 667 } |
666 | 668 |
| 669 if (current_extension->is_platform_app() && |
| 670 !extensions::ShellWindowRegistry::Get(profile_)-> |
| 671 GetShellWindowsForApp(extension_id).empty()) { |
| 672 relaunch_app_ids_.insert(extension_id); |
| 673 } |
| 674 |
667 path = current_extension->path(); | 675 path = current_extension->path(); |
668 DisableExtension(extension_id, Extension::DISABLE_RELOAD); | 676 DisableExtension(extension_id, Extension::DISABLE_RELOAD); |
669 disabled_extension_paths_[extension_id] = path; | 677 disabled_extension_paths_[extension_id] = path; |
670 } else { | 678 } else { |
671 path = unloaded_extension_paths_[extension_id]; | 679 path = unloaded_extension_paths_[extension_id]; |
672 } | 680 } |
673 | 681 |
674 // If we're reloading a component extension, use the component extension | 682 // If we're reloading a component extension, use the component extension |
675 // loader's reloader. | 683 // loader's reloader. |
676 if (component_loader_->Exists(extension_id)) { | 684 if (component_loader_->Exists(extension_id)) { |
(...skipping 1270 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1947 } | 1955 } |
1948 | 1956 |
1949 // All apps that are displayed in the launcher are ordered by their ordinals | 1957 // All apps that are displayed in the launcher are ordered by their ordinals |
1950 // so we must ensure they have valid ordinals. | 1958 // so we must ensure they have valid ordinals. |
1951 if (extension->ShouldDisplayInLauncher()) | 1959 if (extension->ShouldDisplayInLauncher()) |
1952 extension_prefs_->extension_sorting()->EnsureValidOrdinals(extension->id()); | 1960 extension_prefs_->extension_sorting()->EnsureValidOrdinals(extension->id()); |
1953 | 1961 |
1954 extensions_.Insert(scoped_extension); | 1962 extensions_.Insert(scoped_extension); |
1955 SyncExtensionChangeIfNeeded(*extension); | 1963 SyncExtensionChangeIfNeeded(*extension); |
1956 NotifyExtensionLoaded(extension); | 1964 NotifyExtensionLoaded(extension); |
| 1965 QueueRestoreAppWindow(extension); |
1957 } | 1966 } |
1958 | 1967 |
1959 void ExtensionService::InitializePermissions(const Extension* extension) { | 1968 void ExtensionService::InitializePermissions(const Extension* extension) { |
1960 // If the extension has used the optional permissions API, it will have a | 1969 // If the extension has used the optional permissions API, it will have a |
1961 // custom set of active permissions defined in the extension prefs. Here, | 1970 // custom set of active permissions defined in the extension prefs. Here, |
1962 // we update the extension's active permissions based on the prefs. | 1971 // we update the extension's active permissions based on the prefs. |
1963 scoped_refptr<PermissionSet> active_permissions = | 1972 scoped_refptr<PermissionSet> active_permissions = |
1964 extension_prefs()->GetActivePermissions(extension->id()); | 1973 extension_prefs()->GetActivePermissions(extension->id()); |
1965 | 1974 |
1966 if (active_permissions.get()) { | 1975 if (active_permissions.get()) { |
(...skipping 591 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2558 | 2567 |
2559 ExtensionService::NaClModuleInfoList::iterator | 2568 ExtensionService::NaClModuleInfoList::iterator |
2560 ExtensionService::FindNaClModule(const GURL& url) { | 2569 ExtensionService::FindNaClModule(const GURL& url) { |
2561 for (NaClModuleInfoList::iterator iter = nacl_module_list_.begin(); | 2570 for (NaClModuleInfoList::iterator iter = nacl_module_list_.begin(); |
2562 iter != nacl_module_list_.end(); ++iter) { | 2571 iter != nacl_module_list_.end(); ++iter) { |
2563 if (iter->url == url) | 2572 if (iter->url == url) |
2564 return iter; | 2573 return iter; |
2565 } | 2574 } |
2566 return nacl_module_list_.end(); | 2575 return nacl_module_list_.end(); |
2567 } | 2576 } |
| 2577 |
| 2578 void ExtensionService::QueueRestoreAppWindow(const Extension* extension) { |
| 2579 std::set<std::string>::iterator relaunch_iter = |
| 2580 relaunch_app_ids_.find(extension->id()); |
| 2581 if (relaunch_iter != relaunch_app_ids_.end()) { |
| 2582 extensions::LazyBackgroundTaskQueue* queue = |
| 2583 system_->lazy_background_task_queue(); |
| 2584 if (queue->ShouldEnqueueTask(profile(), extension)) { |
| 2585 queue->AddPendingTask(profile(), extension->id(), |
| 2586 base::Bind(&ExtensionService::LaunchApplication)); |
| 2587 } |
| 2588 |
| 2589 relaunch_app_ids_.erase(relaunch_iter); |
| 2590 } |
| 2591 } |
| 2592 |
| 2593 // static |
| 2594 void ExtensionService::LaunchApplication( |
| 2595 extensions::ExtensionHost* extension_host) { |
| 2596 if (!extension_host) |
| 2597 return; |
| 2598 |
| 2599 #if !defined(OS_ANDROID) |
| 2600 extensions::LaunchPlatformApp(extension_host->profile(), |
| 2601 extension_host->extension(), |
| 2602 NULL, FilePath()); |
| 2603 #endif |
| 2604 } |
OLD | NEW |