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_EXTERNAL_POLICY_LOADER_H_
6#define CHROME_BROWSER_EXTENSIONS_EXTERNAL_POLICY_LOADER_H_
7
8#include <string>
9
10#include "base/compiler_specific.h"
11#include "chrome/browser/extensions/extension_management.h"
12#include "chrome/browser/extensions/external_loader.h"
13
14namespace base {
15class DictionaryValue;
16}
17
18namespace extensions {
19
20// A specialization of the ExternalProvider that uses extension management
21// policies to look up which external extensions are registered.
22class ExternalPolicyLoader : public ExternalLoader,
23                             public ExtensionManagement::Observer {
24 public:
25  explicit ExternalPolicyLoader(ExtensionManagement* settings);
26
27  // ExtensionManagement::Observer implementation
28  virtual void OnExtensionManagementSettingsChanged() OVERRIDE;
29
30  // Adds an extension to be updated to the pref dictionary.
31  static void AddExtension(base::DictionaryValue* dict,
32                           const std::string& extension_id,
33                           const std::string& update_url);
34
35 protected:
36  virtual void StartLoading() OVERRIDE;
37
38 private:
39  friend class base::RefCountedThreadSafe<ExternalLoader>;
40
41  virtual ~ExternalPolicyLoader();
42
43  ExtensionManagement* settings_;
44
45  DISALLOW_COPY_AND_ASSIGN(ExternalPolicyLoader);
46};
47
48}  // namespace extensions
49
50#endif  // CHROME_BROWSER_EXTENSIONS_EXTERNAL_POLICY_LOADER_H_
51