Home | History | Annotate | Download | only in apps
      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_APPS_SHORTCUT_MANAGER_H_
      6 #define CHROME_BROWSER_APPS_SHORTCUT_MANAGER_H_
      7 
      8 #include "base/memory/weak_ptr.h"
      9 #include "base/scoped_observer.h"
     10 #include "chrome/browser/profiles/profile_info_cache_observer.h"
     11 #include "components/keyed_service/core/keyed_service.h"
     12 #include "extensions/browser/extension_registry_observer.h"
     13 #include "extensions/common/extension.h"
     14 
     15 class PrefService;
     16 class Profile;
     17 
     18 namespace extensions {
     19 class ExtensionRegistry;
     20 }
     21 
     22 namespace user_prefs {
     23 class PrefRegistrySyncable;
     24 }
     25 
     26 // This class manages the installation of shortcuts for platform apps.
     27 class AppShortcutManager : public KeyedService,
     28                            public extensions::ExtensionRegistryObserver,
     29                            public ProfileInfoCacheObserver {
     30  public:
     31   static void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry);
     32 
     33   explicit AppShortcutManager(Profile* profile);
     34 
     35   virtual ~AppShortcutManager();
     36 
     37   // Updates all shortcuts if kAppShortcutsVersion in prefs is less than
     38   // kCurrentAppShortcutsVersion.
     39   void UpdateShortcutsForAllAppsIfNeeded();
     40 
     41   // extensions::ExtensionRegistryObserver.
     42   virtual void OnExtensionWillBeInstalled(
     43       content::BrowserContext* browser_context,
     44       const extensions::Extension* extension,
     45       bool is_update,
     46       bool from_ephemeral,
     47       const std::string& old_name) OVERRIDE;
     48   virtual void OnExtensionUninstalled(
     49       content::BrowserContext* browser_context,
     50       const extensions::Extension* extension) OVERRIDE;
     51 
     52   // ProfileInfoCacheObserver.
     53   virtual void OnProfileWillBeRemoved(
     54       const base::FilePath& profile_path) OVERRIDE;
     55 
     56  private:
     57   void DeleteApplicationShortcuts(const extensions::Extension* extension);
     58 
     59   Profile* profile_;
     60   bool is_profile_info_cache_observer_;
     61   PrefService* prefs_;
     62 
     63   ScopedObserver<extensions::ExtensionRegistry,
     64                  extensions::ExtensionRegistryObserver>
     65       extension_registry_observer_;
     66 
     67   base::WeakPtrFactory<AppShortcutManager> weak_ptr_factory_;
     68 
     69   DISALLOW_COPY_AND_ASSIGN(AppShortcutManager);
     70 };
     71 
     72 #endif  // CHROME_BROWSER_APPS_SHORTCUT_MANAGER_H_
     73