1ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file. 4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifndef CHROME_BROWSER_SYNC_GLUE_DATA_TYPE_MANAGER_IMPL_H__ 6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define CHROME_BROWSER_SYNC_GLUE_DATA_TYPE_MANAGER_IMPL_H__ 73345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#pragma once 8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/sync/glue/data_type_manager.h" 10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <map> 12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <vector> 13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/basictypes.h" 15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/task.h" 16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace browser_sync { 18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass DataTypeController; 20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass SyncBackendHost; 21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 22ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenclass DataTypeManagerImpl : public DataTypeManager { 23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DataTypeManagerImpl(SyncBackendHost* backend, 25ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const DataTypeController::TypeMap& controllers); 26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual ~DataTypeManagerImpl(); 27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // DataTypeManager interface. 29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void Configure(const TypeSet& desired_types); 30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void Stop(); 3121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen virtual const DataTypeController::TypeMap& controllers(); 3221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen virtual State state(); 33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private: 35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Starts the next data type in the kStartOrder list, indicated by 36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // the current_type_ member. If there are no more data types to 37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // start, the stashed start_callback_ is invoked. 38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void StartNextType(); 39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Callback passed to each data type controller on startup. 41ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen void TypeStartCallback(DataTypeController::StartResult result, 42ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const tracked_objects::Location& from_here); 43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Stops all data types. 45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void FinishStop(); 46ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen void FinishStopAndNotify(ConfigureResult result, 47ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const tracked_objects::Location& location); 48ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 49ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Returns true if any last_requested_types_ currently needs to start model 50ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // association. If non-null, fills |needs_start| with all such controllers. 51ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen bool GetControllersNeedingStart( 52ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::vector<DataTypeController*>* needs_start); 53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void Restart(); 55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void DownloadReady(); 56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void NotifyStart(); 57ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen void NotifyDone(ConfigureResult result, 58ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const tracked_objects::Location& location); 59ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen void SetBlockedAndNotify(); 60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch SyncBackendHost* backend_; 62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Map of all data type controllers that are available for sync. 63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // This list is determined at startup by various command line flags. 64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const DataTypeController::TypeMap controllers_; 65c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch State state_; 66c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::map<syncable::ModelType, int> start_order_; 67c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch TypeSet last_requested_types_; 68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::vector<DataTypeController*> needs_start_; 69c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::vector<DataTypeController*> needs_stop_; 70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 71ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Whether an attempt to reconfigure was made while we were busy configuring. 72ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // The |last_requested_types_| will reflect the newest set of requested types. 73ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen bool needs_reconfigure_; 74dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 75c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ScopedRunnableMethodFactory<DataTypeManagerImpl> method_factory_; 76c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 77c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DISALLOW_COPY_AND_ASSIGN(DataTypeManagerImpl); 78c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 79c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 80c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} // namespace browser_sync 81c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 82c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif // CHROME_BROWSER_SYNC_GLUE_DATA_TYPE_MANAGER_IMPL_H__ 83