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 #ifndef CHROME_BROWSER_UI_APP_LIST_APP_LIST_SHOWER_VIEWS_H_ 6 #define CHROME_BROWSER_UI_APP_LIST_APP_LIST_SHOWER_VIEWS_H_ 7 8 #include "base/memory/scoped_ptr.h" 9 #include "ui/gfx/native_widget_types.h" 10 11 namespace app_list { 12 class AppListView; 13 } 14 15 class AppListShowerDelegate; 16 class AppListShowerUnitTest; 17 class Profile; 18 class ScopedKeepAlive; 19 20 // Creates and shows an AppList as needed for non-Ash desktops. It is owned by 21 // AppListServiceViews. 22 class AppListShower { 23 public: 24 explicit AppListShower(AppListShowerDelegate* delegate); 25 virtual ~AppListShower(); 26 27 void ShowForProfile(Profile* requested_profile); 28 gfx::NativeWindow GetWindow(); 29 30 app_list::AppListView* app_list() { return app_list_; } 31 Profile* profile() const { return profile_; } 32 33 // Create or recreate, and initialize |app_list_| from |requested_profile|. 34 void CreateViewForProfile(Profile* requested_profile); 35 36 void DismissAppList(); 37 38 // Virtual functions mocked out in tests. 39 virtual void HandleViewBeingDestroyed(); 40 virtual bool IsAppListVisible() const; 41 void WarmupForProfile(Profile* profile); 42 virtual bool HasView() const; 43 44 protected: 45 virtual app_list::AppListView* MakeViewForCurrentProfile(); 46 virtual void UpdateViewForNewProfile(); 47 48 // Shows the app list, activates it, and ensures the taskbar icon is updated. 49 virtual void Show(); 50 virtual void Hide(); 51 52 private: 53 friend class ::AppListShowerUnitTest; 54 55 void ResetKeepAliveSoon(); 56 void ResetKeepAlive(); 57 58 AppListShowerDelegate* delegate_; // Weak. Owns this. 59 60 // The profile currently shown by |app_list_|. 61 Profile* profile_; 62 63 // The view, once created. Owned by native widget. 64 app_list::AppListView* app_list_; 65 66 // Used to keep the browser process alive while the app list is visible. 67 scoped_ptr<ScopedKeepAlive> keep_alive_; 68 69 bool window_icon_updated_; 70 71 DISALLOW_COPY_AND_ASSIGN(AppListShower); 72 }; 73 74 #endif // CHROME_BROWSER_UI_APP_LIST_APP_LIST_SHOWER_VIEWS_H_ 75