Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(66)

Side by Side Diff: chrome/browser/extensions/extension_service.cc

Issue 10641017: make "reload" on chrome://extensions automatically relaunch running apps (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix android compile Created 8 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « chrome/browser/extensions/extension_service.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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
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
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 }
OLDNEW
« no previous file with comments | « chrome/browser/extensions/extension_service.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698