1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "sync/internal_api/js_sync_manager_observer.h" 6 7 #include <cstddef> 8 9 #include "base/location.h" 10 #include "base/logging.h" 11 #include "base/strings/string_number_conversions.h" 12 #include "base/values.h" 13 #include "sync/internal_api/public/base/model_type.h" 14 #include "sync/internal_api/public/change_record.h" 15 #include "sync/internal_api/public/sessions/sync_session_snapshot.h" 16 #include "sync/internal_api/public/util/sync_string_conversions.h" 17 #include "sync/js/js_event_details.h" 18 #include "sync/js/js_event_handler.h" 19 20 namespace syncer { 21 22 JsSyncManagerObserver::JsSyncManagerObserver() {} 23 24 JsSyncManagerObserver::~JsSyncManagerObserver() {} 25 26 void JsSyncManagerObserver::SetJsEventHandler( 27 const WeakHandle<JsEventHandler>& event_handler) { 28 event_handler_ = event_handler; 29 } 30 31 void JsSyncManagerObserver::OnSyncCycleCompleted( 32 const sessions::SyncSessionSnapshot& snapshot) { 33 if (!event_handler_.IsInitialized()) { 34 return; 35 } 36 base::DictionaryValue details; 37 details.Set("snapshot", snapshot.ToValue()); 38 HandleJsEvent(FROM_HERE, "onSyncCycleCompleted", JsEventDetails(&details)); 39 } 40 41 void JsSyncManagerObserver::OnConnectionStatusChange(ConnectionStatus status) { 42 if (!event_handler_.IsInitialized()) { 43 return; 44 } 45 base::DictionaryValue details; 46 details.SetString("status", ConnectionStatusToString(status)); 47 HandleJsEvent(FROM_HERE, 48 "onConnectionStatusChange", JsEventDetails(&details)); 49 } 50 51 void JsSyncManagerObserver::OnActionableError( 52 const SyncProtocolError& sync_error) { 53 if (!event_handler_.IsInitialized()) { 54 return; 55 } 56 base::DictionaryValue details; 57 details.Set("syncError", sync_error.ToValue()); 58 HandleJsEvent(FROM_HERE, "onActionableError", 59 JsEventDetails(&details)); 60 } 61 62 void JsSyncManagerObserver::OnProtocolEvent( 63 const ProtocolEvent& event) { } 64 65 void JsSyncManagerObserver::OnMigrationRequested(ModelTypeSet types) { } 66 67 void JsSyncManagerObserver::OnInitializationComplete( 68 const WeakHandle<JsBackend>& js_backend, 69 const WeakHandle<DataTypeDebugInfoListener>& debug_info_listener, 70 bool success, syncer::ModelTypeSet restored_types) { 71 if (!event_handler_.IsInitialized()) { 72 return; 73 } 74 // Ignore the |js_backend| argument; it's not really convertible to 75 // JSON anyway. 76 77 base::DictionaryValue details; 78 details.Set("restoredTypes", ModelTypeSetToValue(restored_types)); 79 80 HandleJsEvent(FROM_HERE, 81 "onInitializationComplete", 82 JsEventDetails(&details)); 83 } 84 85 void JsSyncManagerObserver::HandleJsEvent( 86 const tracked_objects::Location& from_here, 87 const std::string& name, const JsEventDetails& details) { 88 if (!event_handler_.IsInitialized()) { 89 NOTREACHED(); 90 return; 91 } 92 event_handler_.Call(from_here, 93 &JsEventHandler::HandleJsEvent, name, details); 94 } 95 96 } // namespace syncer 97