Home | History | Annotate | Download | only in app_list
      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
      3 // found in the LICENSE file.
      4 
      5 #include "chrome/browser/ui/app_list/app_list_controller_delegate_impl.h"
      6 
      7 #include "chrome/browser/browser_process.h"
      8 #include "chrome/browser/extensions/extension_service.h"
      9 #include "chrome/browser/profiles/profile_manager.h"
     10 #include "chrome/browser/ui/app_list/app_list_service_impl.h"
     11 #include "chrome/browser/ui/browser_commands.h"
     12 #include "chrome/browser/ui/browser_dialogs.h"
     13 #include "chrome/browser/ui/extensions/application_launch.h"
     14 #include "chrome/common/extensions/manifest_handlers/app_launch_info.h"
     15 #include "extensions/browser/extension_system.h"
     16 #include "extensions/common/constants.h"
     17 #include "extensions/common/extension.h"
     18 #include "net/base/url_util.h"
     19 #include "ui/gfx/image/image_skia.h"
     20 
     21 AppListControllerDelegateImpl::AppListControllerDelegateImpl(
     22     AppListService* service)
     23     : service_(service) {}
     24 
     25 AppListControllerDelegateImpl::~AppListControllerDelegateImpl() {}
     26 
     27 void AppListControllerDelegateImpl::DismissView() {
     28   service_->DismissAppList();
     29 }
     30 
     31 gfx::NativeWindow AppListControllerDelegateImpl::GetAppListWindow() {
     32   return service_->GetAppListWindow();
     33 }
     34 
     35 gfx::ImageSkia AppListControllerDelegateImpl::GetWindowIcon() {
     36   return gfx::ImageSkia();
     37 }
     38 
     39 bool AppListControllerDelegateImpl::IsAppPinned(
     40     const std::string& extension_id) {
     41   return false;
     42 }
     43 
     44 void AppListControllerDelegateImpl::PinApp(const std::string& extension_id) {
     45   NOTREACHED();
     46 }
     47 
     48 void AppListControllerDelegateImpl::UnpinApp(const std::string& extension_id) {
     49   NOTREACHED();
     50 }
     51 
     52 AppListControllerDelegateImpl::Pinnable
     53     AppListControllerDelegateImpl::GetPinnable() {
     54   return NO_PIN;
     55 }
     56 
     57 bool AppListControllerDelegateImpl::CanDoCreateShortcutsFlow() {
     58   return false;
     59 }
     60 
     61 void AppListControllerDelegateImpl::DoCreateShortcutsFlow(
     62     Profile* profile,
     63     const std::string& extension_id) {
     64   DCHECK(CanDoCreateShortcutsFlow());
     65   ExtensionService* service =
     66       extensions::ExtensionSystem::Get(profile)->extension_service();
     67   DCHECK(service);
     68   const extensions::Extension* extension = service->GetInstalledExtension(
     69       extension_id);
     70   DCHECK(extension);
     71 
     72   gfx::NativeWindow parent_window = GetAppListWindow();
     73   if (!parent_window)
     74     return;
     75   OnShowChildDialog();
     76   chrome::ShowCreateChromeAppShortcutsDialog(
     77       parent_window, profile, extension,
     78       base::Bind(&AppListControllerDelegateImpl::OnCloseCreateShortcutsPrompt,
     79                  base::Unretained(this)));
     80 }
     81 
     82 void AppListControllerDelegateImpl::CreateNewWindow(Profile* profile,
     83                                                    bool incognito) {
     84   Profile* window_profile = incognito ?
     85       profile->GetOffTheRecordProfile() : profile;
     86   chrome::NewEmptyWindow(window_profile, chrome::HOST_DESKTOP_TYPE_NATIVE);
     87 }
     88 
     89 void AppListControllerDelegateImpl::ActivateApp(
     90     Profile* profile,
     91     const extensions::Extension* extension,
     92     AppListSource source,
     93     int event_flags) {
     94   LaunchApp(profile, extension, source, event_flags);
     95 }
     96 
     97 void AppListControllerDelegateImpl::LaunchApp(
     98     Profile* profile,
     99     const extensions::Extension* extension,
    100     AppListSource source,
    101     int event_flags) {
    102   AppListServiceImpl::RecordAppListAppLaunch();
    103 
    104   AppLaunchParams params(profile, extension, NEW_FOREGROUND_TAB);
    105 
    106   if (source != LAUNCH_FROM_UNKNOWN &&
    107       extension->id() == extensions::kWebStoreAppId) {
    108     // Set an override URL to include the source.
    109     GURL extension_url = extensions::AppLaunchInfo::GetFullLaunchURL(extension);
    110     params.override_url = net::AppendQueryParameter(
    111         extension_url,
    112         extension_urls::kWebstoreSourceField,
    113         AppListSourceToString(source));
    114   }
    115 
    116   FillLaunchParams(&params);
    117   OpenApplication(params);
    118 }
    119 
    120 void AppListControllerDelegateImpl::ShowForProfileByPath(
    121     const base::FilePath& profile_path) {
    122   service_->SetProfilePath(profile_path);
    123   service_->Show();
    124 }
    125 
    126 bool AppListControllerDelegateImpl::ShouldShowUserIcon() {
    127   return g_browser_process->profile_manager()->GetNumberOfProfiles() > 1;
    128 }
    129 
    130 void AppListControllerDelegateImpl::FillLaunchParams(AppLaunchParams* params) {}
    131 
    132 void AppListControllerDelegateImpl::OnCloseCreateShortcutsPrompt(
    133     bool created) {
    134   OnCloseChildDialog();
    135 }
    136