1558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch// Copyright 2013 The Chromium Authors. All rights reserved.
22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file.
42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#ifndef CHROME_BROWSER_APPS_SHORTCUT_MANAGER_H_
6558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#define CHROME_BROWSER_APPS_SHORTCUT_MANAGER_H_
72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
8cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "base/memory/weak_ptr.h"
9cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "base/scoped_observer.h"
10eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "chrome/browser/profiles/profile_info_cache_observer.h"
11a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "components/keyed_service/core/keyed_service.h"
12cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "extensions/browser/extension_registry_observer.h"
13f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "extensions/common/extension.h"
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
15eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochclass PrefService;
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class Profile;
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
18cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)namespace extensions {
19cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class ExtensionRegistry;
20cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}
21cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
224e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)namespace user_prefs {
234e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)class PrefRegistrySyncable;
244e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}
254e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// This class manages the installation of shortcuts for platform apps.
27a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)class AppShortcutManager : public KeyedService,
28cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                           public extensions::ExtensionRegistryObserver,
29558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch                           public ProfileInfoCacheObserver {
302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public:
314e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  static void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry);
324e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
33558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  explicit AppShortcutManager(Profile* profile);
342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
35558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  virtual ~AppShortcutManager();
362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  // Updates all shortcuts if kAppShortcutsVersion in prefs is less than
3846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  // kCurrentAppShortcutsVersion.
3946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  void UpdateShortcutsForAllAppsIfNeeded();
400f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
41cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // extensions::ExtensionRegistryObserver.
42cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  virtual void OnExtensionWillBeInstalled(
43cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      content::BrowserContext* browser_context,
44cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      const extensions::Extension* extension,
45cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      bool is_update,
46cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      bool from_ephemeral,
47cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      const std::string& old_name) OVERRIDE;
48cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  virtual void OnExtensionUninstalled(
49cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      content::BrowserContext* browser_context,
505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      const extensions::Extension* extension,
515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      extensions::UninstallReason reason) OVERRIDE;
522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
53cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // ProfileInfoCacheObserver.
54eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  virtual void OnProfileWillBeRemoved(
55eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      const base::FilePath& profile_path) OVERRIDE;
56eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private:
582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void DeleteApplicationShortcuts(const extensions::Extension* extension);
592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  Profile* profile_;
61eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  bool is_profile_info_cache_observer_;
62eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  PrefService* prefs_;
632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
64cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  ScopedObserver<extensions::ExtensionRegistry,
65cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                 extensions::ExtensionRegistryObserver>
66cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      extension_registry_observer_;
67cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
68cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  base::WeakPtrFactory<AppShortcutManager> weak_ptr_factory_;
69cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
70558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  DISALLOW_COPY_AND_ASSIGN(AppShortcutManager);
712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
73558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#endif  // CHROME_BROWSER_APPS_SHORTCUT_MANAGER_H_
74