Upstream version 5.34.104.0
[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   virtual ~AppListServiceImpl();
32
33   // Constructor used for testing.
34   AppListServiceImpl(const CommandLine& command_line,
35                      PrefService* local_state,
36                      scoped_ptr<ProfileStore> profile_store,
37                      scoped_ptr<KeepAliveService> keep_alive_service);
38
39   void RecordAppListLaunch();
40   static void RecordAppListAppLaunch();
41
42   // AppListService overrides:
43   virtual void SetAppListNextPaintCallback(void (*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 AutoShowForProfile(Profile* requested_profile) OVERRIDE;
51   virtual void EnableAppList(Profile* initial_profile,
52                              AppListEnableSource enable_source) OVERRIDE;
53
54  protected:
55   AppListServiceImpl();
56
57   void InvalidatePendingProfileLoads();
58   ProfileLoader& profile_loader() { return *profile_loader_; }
59   const ProfileLoader& profile_loader() const { return *profile_loader_; }
60
61   // Perform startup checks shared between desktop implementations of the app
62   // list. Currently this checks command line flags to enable or disable the app
63   // list, and records UMA stats delayed from a previous Chrome process.
64   void PerformStartupChecks(Profile* initial_profile);
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_