15d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file.
42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
55d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#ifndef COMPONENTS_SYNC_DRIVER_PROXY_DATA_TYPE_CONTROLLER_H__
65d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define COMPONENTS_SYNC_DRIVER_PROXY_DATA_TYPE_CONTROLLER_H__
72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/basictypes.h"
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/compiler_specific.h"
105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "components/sync_driver/data_type_controller.h"
112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)namespace sync_driver {
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Implementation for proxy datatypes. These are datatype that have no
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// representation in sync, and therefore no change processor or syncable
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// service.
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class ProxyDataTypeController : public DataTypeController {
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public:
195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  explicit ProxyDataTypeController(
205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)       scoped_refptr<base::MessageLoopProxy> ui_thread,
215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)       syncer::ModelType type);
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // DataTypeController interface.
242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void LoadModels(
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      const ModelLoadCallback& model_load_callback) OVERRIDE;
262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void StartAssociating(const StartCallback& start_callback) OVERRIDE;
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void Stop() OVERRIDE;
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual syncer::ModelType type() const OVERRIDE;
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual syncer::ModelSafeGroup model_safe_group() const OVERRIDE;
30010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  virtual ChangeProcessor* GetChangeProcessor() const OVERRIDE;
312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual std::string name() const OVERRIDE;
322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual State state() const OVERRIDE;
332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // DataTypeErrorHandler interface.
356e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  virtual void OnSingleDataTypeUnrecoverableError(
366e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      const syncer::SyncError& error) OVERRIDE;
372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected:
392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // DataTypeController is RefCounted.
402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual ~ProxyDataTypeController();
412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // DataTypeController interface.
432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void OnModelLoaded() OVERRIDE;
442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private:
462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  State state_;
472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // The actual type for this controller.
492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  syncer::ModelType type_;
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(ProxyDataTypeController);
522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}  // namespace sync_driver
552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#endif  // COMPONENTS_SYNC_DRIVER_PROXY_DATA_TYPE_CONTROLLER_H__
57