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