- add sources.
[platform/framework/web/crosswalk.git] / src / chrome / browser / ui / app_list / app_list_service_impl.h
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_APP_LIST_APP_LIST_SERVICE_IMPL_H_
6 #define CHROME_BROWSER_UI_APP_LIST_APP_LIST_SERVICE_IMPL_H_
7
8 #include <string>
9
10 #include "base/basictypes.h"
11 #include "base/command_line.h"
12 #include "base/compiler_specific.h"
13 #include "base/memory/scoped_ptr.h"
14 #include "base/memory/weak_ptr.h"
15 #include "chrome/browser/profiles/profile.h"
16 #include "chrome/browser/profiles/profile_info_cache_observer.h"
17 #include "chrome/browser/ui/app_list/app_list_service.h"
18 #include "chrome/browser/ui/app_list/keep_alive_service.h"
19 #include "chrome/browser/ui/app_list/profile_loader.h"
20
21 class ProfileStore;
22
23 namespace base {
24 class FilePath;
25 }
26
27 // Parts of the AppListService implementation shared between platforms.
28 class AppListServiceImpl : public AppListService,
29                            public ProfileInfoCacheObserver {
30  public:
31   static void RecordAppListLaunch();
32   static void RecordAppListAppLaunch();
33   virtual ~AppListServiceImpl();
34
35   // Constructor used for testing.
36   AppListServiceImpl(const CommandLine& command_line,
37                      PrefService* local_state,
38                      scoped_ptr<ProfileStore> profile_store,
39                      scoped_ptr<KeepAliveService> keep_alive_service);
40
41   // AppListService overrides:
42   virtual void SetAppListNextPaintCallback(
43       const base::Closure& callback) OVERRIDE;
44   virtual void HandleFirstRun() OVERRIDE;
45   virtual void Init(Profile* initial_profile) OVERRIDE;
46   virtual base::FilePath GetProfilePath(
47       const base::FilePath& user_data_dir) OVERRIDE;
48   virtual void SetProfilePath(const base::FilePath& profile_path) OVERRIDE;
49   virtual void Show() OVERRIDE;
50   virtual void EnableAppList(Profile* initial_profile) OVERRIDE;
51
52  protected:
53   AppListServiceImpl();
54
55   void InvalidatePendingProfileLoads();
56   ProfileLoader& profile_loader() { return *profile_loader_; }
57   const ProfileLoader& profile_loader() const { return *profile_loader_; }
58
59   // Process command line flags shared between desktop implementations of the
60   // app list. Currently this allows for enabling or disabling the app list.
61   void HandleCommandLineFlags(Profile* initial_profile);
62
63   // Records UMA stats that try to approximate usage after a delay.
64   void SendUsageStats();
65
66   // Create a platform-specific shortcut for the app list.
67   virtual void CreateShortcut();
68
69  private:
70   static void SendAppListStats();
71
72   // Loads a profile asynchronously and calls OnProfileLoaded() when done.
73   void LoadProfileAsync(const base::FilePath& profile_file_path);
74
75   // Callback for asynchronous profile load.
76   void OnProfileLoaded(int profile_load_sequence_id,
77                        Profile* profile,
78                        Profile::CreateStatus status);
79
80   // ProfileInfoCacheObserver overrides:
81   virtual void OnProfileWillBeRemoved(
82       const base::FilePath& profile_path) OVERRIDE;
83
84   scoped_ptr<ProfileStore> profile_store_;
85   base::WeakPtrFactory<AppListServiceImpl> weak_factory_;
86   CommandLine command_line_;
87   PrefService* local_state_;
88   scoped_ptr<ProfileLoader> profile_loader_;
89
90   DISALLOW_COPY_AND_ASSIGN(AppListServiceImpl);
91 };
92
93 #endif  // CHROME_BROWSER_UI_APP_LIST_APP_LIST_SERVICE_IMPL_H_