12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef SYNC_INTERNAL_API_JS_SYNC_MANAGER_OBSERVER_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define SYNC_INTERNAL_API_JS_SYNC_MANAGER_OBSERVER_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string>
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/compiler_specific.h"
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "sync/base/sync_export.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "sync/internal_api/public/sync_manager.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "sync/internal_api/public/util/weak_handle.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "sync/protocol/sync_protocol_error.h"
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace tracked_objects {
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Location;
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace tracked_objects
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace syncer {
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class JsEventDetails;
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class JsEventHandler;
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Routes SyncManager events to a JsEventHandler.
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class SYNC_EXPORT_PRIVATE JsSyncManagerObserver : public SyncManager::Observer {
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  JsSyncManagerObserver();
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~JsSyncManagerObserver();
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SetJsEventHandler(const WeakHandle<JsEventHandler>& event_handler);
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // SyncManager::Observer implementation.
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void OnSyncCycleCompleted(
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const sessions::SyncSessionSnapshot& snapshot) OVERRIDE;
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void OnConnectionStatusChange(ConnectionStatus status) OVERRIDE;
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void OnInitializationComplete(
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const WeakHandle<JsBackend>& js_backend,
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const WeakHandle<DataTypeDebugInfoListener>& debug_info_listener,
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      bool success,
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      syncer::ModelTypeSet restored_types) OVERRIDE;
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void OnActionableError(
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const SyncProtocolError& sync_protocol_error) OVERRIDE;
45effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  virtual void OnProtocolEvent(const ProtocolEvent& event) OVERRIDE;
465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual void OnMigrationRequested(
475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      syncer::ModelTypeSet types) OVERRIDE;
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void HandleJsEvent(const tracked_objects::Location& from_here,
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                    const std::string& name, const JsEventDetails& details);
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  WeakHandle<JsEventHandler> event_handler_;
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(JsSyncManagerObserver);
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace syncer
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // SYNC_INTERNAL_API_JS_SYNC_MANAGER_OBSERVER_H_
61