1116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Copyright 2014 The Chromium Authors. All rights reserved.
2116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Use of this source code is governed by a BSD-style license that can be
3116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// found in the LICENSE file.
4116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
5116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#ifndef CHROME_BROWSER_SYNC_GLUE_EXTENSION_BACKED_DATA_TYPE_CONTROLLER_H_
6116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#define CHROME_BROWSER_SYNC_GLUE_EXTENSION_BACKED_DATA_TYPE_CONTROLLER_H_
7116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
8116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include <string>
9116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
10116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "base/compiler_specific.h"
11116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "components/sync_driver/ui_data_type_controller.h"
12116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "extensions/browser/extension_registry_observer.h"
13116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
14116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass Profile;
15116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
16116680a4aac90f2aa7413d9095a592090648e557Ben Murdochnamespace browser_sync {
17116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
18116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// A data type controller for types backed by an extension. Manages waiting for
19116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// extension enable/disable and triggering reconfigurations as necessary.
20116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass ExtensionBackedDataTypeController
215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    : public sync_driver::UIDataTypeController,
22116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      public extensions::ExtensionRegistryObserver {
23116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch public:
24116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  ExtensionBackedDataTypeController(
25116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      syncer::ModelType type,
26116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      const std::string& extension_hash,
275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      sync_driver::SyncApiComponentFactory* sync_factory,
28116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      Profile* profile);
29116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
30116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // UIDataTypeController overrides.
31116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual bool ReadyForStart() const OVERRIDE;
32116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual bool StartModels() OVERRIDE;
33116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
34116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // ExtensionRegistryObserver implementation.
35116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual void OnExtensionLoaded(
36116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      content::BrowserContext* browser_context,
37116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      const extensions::Extension* extension) OVERRIDE;
38116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual void OnExtensionUnloaded(
39116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      content::BrowserContext* browser_context,
40116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      const extensions::Extension* extension,
41116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      extensions::UnloadedExtensionInfo::Reason reason) OVERRIDE;
42116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
43116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch private:
44116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // Refcounted via DataTypeController.
45116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual ~ExtensionBackedDataTypeController();
46116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
47116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // Returns whether the extension syncing this type is enabled.
48116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  bool IsSyncingExtensionEnabled() const;
49116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
50116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // Returns whether |extension|'s id hash matches |extension_hash_|.
51116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  bool DoesExtensionMatch(const extensions::Extension& extension) const;
52116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
53116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // A hash of the extension id this datatype is dependent on.
54116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  const std::string extension_hash_;
55116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
56116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // The owning profile.
57116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  Profile* profile_;
58116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
59116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  DISALLOW_COPY_AND_ASSIGN(ExtensionBackedDataTypeController);
60116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch};
61116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
62116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}  // namespace browser_sync
63116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
64116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif  // CHROME_BROWSER_SYNC_GLUE_EXTENSION_BACKED_DATA_TYPE_CONTROLLER_H_
65