app_list_service_win.h revision 1e9bf3e0803691d0a228da41fc608347b6db4340
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#ifndef CHROME_BROWSER_UI_VIEWS_APP_LIST_WIN_APP_LIST_SERVICE_WIN_H_
6#define CHROME_BROWSER_UI_VIEWS_APP_LIST_WIN_APP_LIST_SERVICE_WIN_H_
7
8#include "base/memory/singleton.h"
9#include "chrome/browser/ui/app_list/app_list_service_impl.h"
10
11namespace app_list{
12class AppListModel;
13}
14
15class AppListShower;
16
17// Exposes methods required by the AppListServiceTestApi on Windows.
18// TODO(tapted): Remove testing methods once they can access the implementation
19// from the test api.
20class AppListServiceWin : public AppListServiceImpl {
21 public:
22  AppListServiceWin();
23  virtual ~AppListServiceWin();
24
25  app_list::AppListModel* GetAppListModelForTesting();
26
27  static AppListServiceWin* GetInstance();
28  void set_can_close(bool can_close);
29  void OnAppListClosing();
30
31  // AppListService overrides:
32  virtual void SetAppListNextPaintCallback(
33      const base::Closure& callback) OVERRIDE;
34  virtual void HandleFirstRun() OVERRIDE;
35  virtual void Init(Profile* initial_profile) OVERRIDE;
36  virtual void CreateForProfile(Profile* requested_profile) OVERRIDE;
37  virtual void ShowForProfile(Profile* requested_profile) OVERRIDE;
38  virtual void DismissAppList() OVERRIDE;
39  virtual bool IsAppListVisible() const OVERRIDE;
40  virtual gfx::NativeWindow GetAppListWindow() OVERRIDE;
41  virtual Profile* GetCurrentAppListProfile() OVERRIDE;
42  virtual AppListControllerDelegate* CreateControllerDelegate() OVERRIDE;
43
44  // AppListServiceImpl overrides:
45  virtual void CreateShortcut() OVERRIDE;
46
47 private:
48  friend struct DefaultSingletonTraits<AppListServiceWin>;
49
50  bool IsWarmupNeeded();
51  void ScheduleWarmup();
52
53  // Loads the profile last used with the app list and populates the view from
54  // it without showing it so that the next show is faster. Does nothing if the
55  // view already exists, or another profile is in the middle of being loaded to
56  // be shown.
57  void LoadProfileForWarmup();
58  void OnLoadProfileForWarmup(Profile* initial_profile);
59
60  // Responsible for putting views on the screen.
61  scoped_ptr<AppListShower> shower_;
62
63  bool enable_app_list_on_next_init_;
64
65  base::WeakPtrFactory<AppListServiceWin> weak_factory_;
66
67  DISALLOW_COPY_AND_ASSIGN(AppListServiceWin);
68};
69
70namespace chrome {
71
72AppListService* GetAppListServiceWin();
73
74}  // namespace chrome
75
76#endif  // CHROME_BROWSER_UI_VIEWS_APP_LIST_WIN_APP_LIST_SERVICE_WIN_H_
77