app_list_controller_delegate.cc revision 1e9bf3e0803691d0a228da41fc608347b6db4340
158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// found in the LICENSE file. 458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/browser/ui/app_list/app_list_controller_delegate.h" 658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/browser/extensions/extension_service.h" 858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/browser/extensions/extension_system.h" 958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/browser/extensions/management_policy.h" 1058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/browser/ui/app_list/extension_uninstaller.h" 1158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/browser/ui/browser_navigator.h" 1258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/common/extensions/extension.h" 1358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/common/extensions/extension_constants.h" 1458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/common/extensions/manifest_url_handler.h" 1558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "net/base/url_util.h" 1658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 1758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)namespace { 1858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 1958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)const extensions::Extension* GetExtension(Profile* profile, 20a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch const std::string& extension_id) { 215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const ExtensionService* service = 225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) extensions::ExtensionSystem::Get(profile)->extension_service(); 2358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const extensions::Extension* extension = 2458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) service->GetInstalledExtension(extension_id); 2558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) return extension; 2658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 2758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 2858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} // namespace 2958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 30116680a4aac90f2aa7413d9095a592090648e557Ben MurdochAppListControllerDelegate::~AppListControllerDelegate() {} 31116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 3258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)void AppListControllerDelegate::ViewClosing() {} 3358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 3458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)void AppListControllerDelegate::OnShowExtensionPrompt() {} 3558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)void AppListControllerDelegate::OnCloseExtensionPrompt() {} 3658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 3758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)std::string AppListControllerDelegate::AppListSourceToString( 3858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) AppListSource source) { 39a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch switch (source) { 405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) case LAUNCH_FROM_APP_LIST: 415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return extension_urls::kLaunchSourceAppList; 4258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) case LAUNCH_FROM_APP_LIST_SEARCH: 4358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) return extension_urls::kLaunchSourceAppListSearch; 4458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) default: return std::string(); 4558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 4658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 4758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)bool AppListControllerDelegate::UserMayModifySettings( 4958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) Profile* profile, 5058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const std::string& app_id) { 5158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const extensions::Extension* extension = GetExtension(profile, app_id); 52a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch const extensions::ManagementPolicy* policy = 5358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) extensions::ExtensionSystem::Get(profile)->management_policy(); 5458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) return extension && 5558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) policy->UserMayModifySettings(extension, NULL); 5658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 5758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 5858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)void AppListControllerDelegate::UninstallApp(Profile* profile, 59 const std::string& app_id) { 60 // ExtensionUninstall deletes itself when done or aborted. 61 ExtensionUninstaller* uninstaller = 62 new ExtensionUninstaller(profile, app_id, this); 63 uninstaller->Run(); 64} 65 66bool AppListControllerDelegate::IsAppFromWebStore( 67 Profile* profile, 68 const std::string& app_id) { 69 const extensions::Extension* extension = GetExtension(profile, app_id); 70 return extension && extension->from_webstore(); 71} 72 73void AppListControllerDelegate::ShowAppInWebStore( 74 Profile* profile, 75 const std::string& app_id, 76 bool is_search_result) { 77 const extensions::Extension* extension = GetExtension(profile, app_id); 78 if (!extension) 79 return; 80 81 const GURL url = extensions::ManifestURL::GetDetailsURL(extension); 82 DCHECK_NE(url, GURL::EmptyGURL()); 83 84 const std::string source = AppListSourceToString( 85 is_search_result ? 86 AppListControllerDelegate::LAUNCH_FROM_APP_LIST_SEARCH : 87 AppListControllerDelegate::LAUNCH_FROM_APP_LIST); 88 chrome::NavigateParams params( 89 profile, 90 net::AppendQueryParameter(url, 91 extension_urls::kWebstoreSourceField, 92 source), 93 content::PAGE_TRANSITION_LINK); 94 chrome::Navigate(¶ms); 95} 96 97bool AppListControllerDelegate::HasOptionsPage( 98 Profile* profile, 99 const std::string& app_id) { 100 const ExtensionService* service = 101 extensions::ExtensionSystem::Get(profile)->extension_service(); 102 const extensions::Extension* extension = GetExtension(profile, app_id); 103 return service->IsExtensionEnabledForLauncher(app_id) && 104 extension && 105 !extensions::ManifestURL::GetOptionsPage(extension).is_empty(); 106} 107 108void AppListControllerDelegate::ShowOptionsPage( 109 Profile* profile, 110 const std::string& app_id) { 111 const extensions::Extension* extension = GetExtension(profile, app_id); 112 if (!extension) 113 return; 114 115 chrome::NavigateParams params( 116 profile, 117 extensions::ManifestURL::GetOptionsPage(extension), 118 content::PAGE_TRANSITION_LINK); 119 chrome::Navigate(¶ms); 120} 121 122extensions::ExtensionPrefs::LaunchType 123AppListControllerDelegate::GetExtensionLaunchType( 124 Profile* profile, 125 const std::string& app_id) { 126 ExtensionService* service = 127 extensions::ExtensionSystem::Get(profile)->extension_service(); 128 return service->extension_prefs()-> 129 GetLaunchType(GetExtension(profile, app_id), 130 extensions::ExtensionPrefs::LAUNCH_DEFAULT); 131} 132 133void AppListControllerDelegate::SetExtensionLaunchType( 134 Profile* profile, 135 const std::string& extension_id, 136 extensions::ExtensionPrefs::LaunchType launch_type) { 137 ExtensionService* service = 138 extensions::ExtensionSystem::Get(profile)->extension_service(); 139 service->extension_prefs()->SetLaunchType(extension_id, launch_type); 140} 141 142bool AppListControllerDelegate::IsExtensionInstalled( 143 Profile* profile, const std::string& app_id) { 144 return !!GetExtension(profile, app_id); 145} 146