1 // Copyright 2014 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_service_views.h" 6 7 #include "chrome/browser/apps/scoped_keep_alive.h" 8 #include "chrome/browser/ui/app_list/app_list_controller_delegate.h" 9 #include "ui/app_list/views/app_list_view.h" 10 11 AppListServiceViews::AppListServiceViews( 12 scoped_ptr<AppListControllerDelegate> controller_delegate) 13 : shower_(this), 14 can_dismiss_(true), 15 controller_delegate_(controller_delegate.Pass()) { 16 } 17 18 AppListServiceViews::~AppListServiceViews() {} 19 20 void AppListServiceViews::OnViewBeingDestroyed() { 21 can_dismiss_ = true; 22 shower_.HandleViewBeingDestroyed(); 23 } 24 25 void AppListServiceViews::Init(Profile* initial_profile) { 26 PerformStartupChecks(initial_profile); 27 } 28 29 void AppListServiceViews::CreateForProfile(Profile* requested_profile) { 30 shower_.CreateViewForProfile(requested_profile); 31 } 32 33 void AppListServiceViews::ShowForProfile(Profile* requested_profile) { 34 DCHECK(requested_profile); 35 36 ScopedKeepAlive keep_alive; 37 38 InvalidatePendingProfileLoads(); 39 SetProfilePath(requested_profile->GetPath()); 40 shower_.ShowForProfile(requested_profile); 41 RecordAppListLaunch(); 42 } 43 44 void AppListServiceViews::DismissAppList() { 45 if (!can_dismiss_) 46 return; 47 48 shower_.DismissAppList(); 49 } 50 51 bool AppListServiceViews::IsAppListVisible() const { 52 return shower_.IsAppListVisible(); 53 } 54 55 gfx::NativeWindow AppListServiceViews::GetAppListWindow() { 56 return shower_.GetWindow(); 57 } 58 59 Profile* AppListServiceViews::GetCurrentAppListProfile() { 60 return shower_.profile(); 61 } 62 63 AppListControllerDelegate* AppListServiceViews::GetControllerDelegate() { 64 return controller_delegate_.get(); 65 } 66 67 void AppListServiceViews::DestroyAppList() { 68 if (!shower_.HasView()) 69 return; 70 71 // Use CloseNow(). This can't be asynchronous because the profile will be 72 // deleted once this function returns. 73 shower_.app_list()->GetWidget()->CloseNow(); 74 DCHECK(!shower_.HasView()); 75 } 76 77 AppListViewDelegate* AppListServiceViews::GetViewDelegateForCreate() { 78 return GetViewDelegate(shower_.profile()); 79 } 80