1// Copyright (c) 2012 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_EXTENSIONS_DEFAULT_APPS_H_
6#define CHROME_BROWSER_EXTENSIONS_DEFAULT_APPS_H_
7
8#include "base/basictypes.h"
9#include "chrome/browser/extensions/external_provider_impl.h"
10#include "extensions/common/manifest.h"
11
12class Profile;
13
14namespace base {
15class DictionaryValue;
16}
17
18namespace user_prefs {
19class PrefRegistrySyncable;
20}
21
22// Functions and types related to installing default apps.
23namespace default_apps {
24
25// These enum values are persisted in the user preferences, so they should not
26// be changed.
27enum InstallState {
28  kUnknown,
29  // Now unused, left for backward compatibility.
30  kProvideLegacyDefaultApps,
31  kNeverInstallDefaultApps,
32  kAlreadyInstalledDefaultApps
33};
34
35// Register preference properties used by default apps to maintain
36// install state.
37void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry);
38
39// A specialization of the ExternalProviderImpl that conditionally installs apps
40// from the chrome::DIR_DEFAULT_APPS location based on a preference in the
41// profile.
42class Provider : public extensions::ExternalProviderImpl {
43 public:
44  Provider(Profile* profile,
45           VisitorInterface* service,
46           extensions::ExternalLoader* loader,
47           extensions::Manifest::Location crx_location,
48           extensions::Manifest::Location download_location,
49           int creation_flags);
50
51  bool ShouldInstallInProfile();
52
53  // ExternalProviderImpl overrides:
54  virtual void VisitRegisteredExtension() OVERRIDE;
55  virtual void SetPrefs(base::DictionaryValue* prefs) OVERRIDE;
56
57 private:
58  Profile* profile_;
59  bool is_migration_;
60
61  DISALLOW_COPY_AND_ASSIGN(Provider);
62};
63
64}  // namespace default_apps
65
66#endif  // CHROME_BROWSER_EXTENSIONS_DEFAULT_APPS_H_
67