OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "sync/internal_api/sync_manager_impl.h" | 5 #include "sync/internal_api/sync_manager_impl.h" |
6 | 6 |
7 #include <string> | 7 #include <string> |
8 | 8 |
9 #include "base/base64.h" | 9 #include "base/base64.h" |
10 #include "base/bind.h" | 10 #include "base/bind.h" |
11 #include "base/callback.h" | 11 #include "base/callback.h" |
12 #include "base/compiler_specific.h" | 12 #include "base/compiler_specific.h" |
13 #include "base/json/json_writer.h" | 13 #include "base/json/json_writer.h" |
14 #include "base/memory/ref_counted.h" | 14 #include "base/memory/ref_counted.h" |
15 #include "base/metrics/histogram.h" | 15 #include "base/metrics/histogram.h" |
16 #include "base/observer_list.h" | 16 #include "base/observer_list.h" |
17 #include "base/strings/string_number_conversions.h" | 17 #include "base/strings/string_number_conversions.h" |
18 #include "base/values.h" | 18 #include "base/values.h" |
| 19 #include "sync/engine/directory_type_debug_info_emitter.h" |
19 #include "sync/engine/sync_scheduler.h" | 20 #include "sync/engine/sync_scheduler.h" |
20 #include "sync/engine/syncer_types.h" | 21 #include "sync/engine/syncer_types.h" |
21 #include "sync/internal_api/change_reorder_buffer.h" | 22 #include "sync/internal_api/change_reorder_buffer.h" |
22 #include "sync/internal_api/public/base/cancelation_signal.h" | 23 #include "sync/internal_api/public/base/cancelation_signal.h" |
23 #include "sync/internal_api/public/base/model_type.h" | 24 #include "sync/internal_api/public/base/model_type.h" |
24 #include "sync/internal_api/public/base_node.h" | 25 #include "sync/internal_api/public/base_node.h" |
25 #include "sync/internal_api/public/configure_reason.h" | 26 #include "sync/internal_api/public/configure_reason.h" |
26 #include "sync/internal_api/public/engine/polling_constants.h" | 27 #include "sync/internal_api/public/engine/polling_constants.h" |
27 #include "sync/internal_api/public/http_post_provider_factory.h" | 28 #include "sync/internal_api/public/http_post_provider_factory.h" |
28 #include "sync/internal_api/public/internal_components_factory.h" | 29 #include "sync/internal_api/public/internal_components_factory.h" |
29 #include "sync/internal_api/public/read_node.h" | 30 #include "sync/internal_api/public/read_node.h" |
30 #include "sync/internal_api/public/read_transaction.h" | 31 #include "sync/internal_api/public/read_transaction.h" |
31 #include "sync/internal_api/public/user_share.h" | 32 #include "sync/internal_api/public/user_share.h" |
32 #include "sync/internal_api/public/util/experiments.h" | 33 #include "sync/internal_api/public/util/experiments.h" |
33 #include "sync/internal_api/public/write_node.h" | 34 #include "sync/internal_api/public/write_node.h" |
34 #include "sync/internal_api/public/write_transaction.h" | 35 #include "sync/internal_api/public/write_transaction.h" |
35 #include "sync/internal_api/sync_core.h" | 36 #include "sync/internal_api/sync_core.h" |
36 #include "sync/internal_api/syncapi_internal.h" | 37 #include "sync/internal_api/syncapi_internal.h" |
37 #include "sync/internal_api/syncapi_server_connection_manager.h" | 38 #include "sync/internal_api/syncapi_server_connection_manager.h" |
38 #include "sync/js/js_arg_list.h" | |
39 #include "sync/js/js_reply_handler.h" | |
40 #include "sync/notifier/invalidation_util.h" | 39 #include "sync/notifier/invalidation_util.h" |
41 #include "sync/notifier/invalidator.h" | 40 #include "sync/notifier/invalidator.h" |
42 #include "sync/notifier/object_id_invalidation_map.h" | 41 #include "sync/notifier/object_id_invalidation_map.h" |
43 #include "sync/protocol/proto_value_conversions.h" | 42 #include "sync/protocol/proto_value_conversions.h" |
44 #include "sync/protocol/sync.pb.h" | 43 #include "sync/protocol/sync.pb.h" |
45 #include "sync/syncable/directory.h" | 44 #include "sync/syncable/directory.h" |
46 #include "sync/syncable/entry.h" | 45 #include "sync/syncable/entry.h" |
47 #include "sync/syncable/in_memory_directory_backing_store.h" | 46 #include "sync/syncable/in_memory_directory_backing_store.h" |
48 #include "sync/syncable/on_disk_directory_backing_store.h" | 47 #include "sync/syncable/on_disk_directory_backing_store.h" |
49 | 48 |
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
169 observing_network_connectivity_changes_(false), | 168 observing_network_connectivity_changes_(false), |
170 invalidator_state_(DEFAULT_INVALIDATION_ERROR), | 169 invalidator_state_(DEFAULT_INVALIDATION_ERROR), |
171 encryptor_(NULL), | 170 encryptor_(NULL), |
172 report_unrecoverable_error_function_(NULL), | 171 report_unrecoverable_error_function_(NULL), |
173 weak_ptr_factory_(this) { | 172 weak_ptr_factory_(this) { |
174 // Pre-fill |notification_info_map_|. | 173 // Pre-fill |notification_info_map_|. |
175 for (int i = FIRST_REAL_MODEL_TYPE; i < MODEL_TYPE_COUNT; ++i) { | 174 for (int i = FIRST_REAL_MODEL_TYPE; i < MODEL_TYPE_COUNT; ++i) { |
176 notification_info_map_.insert( | 175 notification_info_map_.insert( |
177 std::make_pair(ModelTypeFromInt(i), NotificationInfo())); | 176 std::make_pair(ModelTypeFromInt(i), NotificationInfo())); |
178 } | 177 } |
179 | |
180 // Bind message handlers. | |
181 BindJsMessageHandler( | |
182 "getAllNodes", | |
183 &SyncManagerImpl::GetAllNodes); | |
184 } | 178 } |
185 | 179 |
186 SyncManagerImpl::~SyncManagerImpl() { | 180 SyncManagerImpl::~SyncManagerImpl() { |
187 DCHECK(thread_checker_.CalledOnValidThread()); | 181 DCHECK(thread_checker_.CalledOnValidThread()); |
188 CHECK(!initialized_); | 182 CHECK(!initialized_); |
189 } | 183 } |
190 | 184 |
191 SyncManagerImpl::NotificationInfo::NotificationInfo() : total_count(0) {} | 185 SyncManagerImpl::NotificationInfo::NotificationInfo() : total_count(0) {} |
192 SyncManagerImpl::NotificationInfo::~NotificationInfo() {} | 186 SyncManagerImpl::NotificationInfo::~NotificationInfo() {} |
193 | 187 |
(...skipping 748 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
942 OnProtocolEvent(event)); | 936 OnProtocolEvent(event)); |
943 } | 937 } |
944 | 938 |
945 void SyncManagerImpl::SetJsEventHandler( | 939 void SyncManagerImpl::SetJsEventHandler( |
946 const WeakHandle<JsEventHandler>& event_handler) { | 940 const WeakHandle<JsEventHandler>& event_handler) { |
947 js_sync_manager_observer_.SetJsEventHandler(event_handler); | 941 js_sync_manager_observer_.SetJsEventHandler(event_handler); |
948 js_mutation_event_observer_.SetJsEventHandler(event_handler); | 942 js_mutation_event_observer_.SetJsEventHandler(event_handler); |
949 js_sync_encryption_handler_observer_.SetJsEventHandler(event_handler); | 943 js_sync_encryption_handler_observer_.SetJsEventHandler(event_handler); |
950 } | 944 } |
951 | 945 |
| 946 // TODO(rlarocque): This function is no longer needed and should be removed. |
| 947 // See http://crbug.com/357821. |
952 void SyncManagerImpl::ProcessJsMessage( | 948 void SyncManagerImpl::ProcessJsMessage( |
953 const std::string& name, const JsArgList& args, | 949 const std::string& name, const JsArgList& args, |
954 const WeakHandle<JsReplyHandler>& reply_handler) { | 950 const WeakHandle<JsReplyHandler>& reply_handler) { |
955 if (!initialized_) { | 951 NOTREACHED(); |
956 NOTREACHED(); | 952 } |
957 return; | 953 |
| 954 scoped_ptr<base::ListValue> SyncManagerImpl::GetAllNodesForType( |
| 955 syncer::ModelType type) { |
| 956 DirectoryTypeDebugInfoEmitterMap* emitter_map = |
| 957 model_type_registry_->directory_type_debug_info_emitter_map(); |
| 958 DirectoryTypeDebugInfoEmitterMap::iterator it = emitter_map->find(type); |
| 959 |
| 960 if (it == emitter_map->end()) { |
| 961 NOTREACHED() << "Asked to return debug info for invalid type " |
| 962 << ModelTypeToString(type); |
| 963 return scoped_ptr<base::ListValue>(); |
958 } | 964 } |
959 | 965 |
960 if (!reply_handler.IsInitialized()) { | 966 return it->second->GetAllNodes(); |
961 DVLOG(1) << "Uninitialized reply handler; dropping unknown message " | |
962 << name << " with args " << args.ToString(); | |
963 return; | |
964 } | |
965 | |
966 JsMessageHandler js_message_handler = js_message_handlers_[name]; | |
967 if (js_message_handler.is_null()) { | |
968 DVLOG(1) << "Dropping unknown message " << name | |
969 << " with args " << args.ToString(); | |
970 return; | |
971 } | |
972 | |
973 reply_handler.Call(FROM_HERE, | |
974 &JsReplyHandler::HandleJsReply, | |
975 name, js_message_handler.Run(args)); | |
976 } | |
977 | |
978 void SyncManagerImpl::BindJsMessageHandler( | |
979 const std::string& name, | |
980 UnboundJsMessageHandler unbound_message_handler) { | |
981 js_message_handlers_[name] = | |
982 base::Bind(unbound_message_handler, base::Unretained(this)); | |
983 } | |
984 | |
985 JsArgList SyncManagerImpl::GetAllNodes(const JsArgList& args) { | |
986 ReadTransaction trans(FROM_HERE, GetUserShare()); | |
987 base::ListValue return_args; | |
988 scoped_ptr<base::ListValue> nodes( | |
989 trans.GetDirectory()->GetAllNodeDetails(trans.GetWrappedTrans())); | |
990 return_args.Append(nodes.release()); | |
991 return JsArgList(&return_args); | |
992 } | 967 } |
993 | 968 |
994 void SyncManagerImpl::OnInvalidatorStateChange(InvalidatorState state) { | 969 void SyncManagerImpl::OnInvalidatorStateChange(InvalidatorState state) { |
995 DCHECK(thread_checker_.CalledOnValidThread()); | 970 DCHECK(thread_checker_.CalledOnValidThread()); |
996 | 971 |
997 const std::string& state_str = InvalidatorStateToString(state); | 972 const std::string& state_str = InvalidatorStateToString(state); |
998 invalidator_state_ = state; | 973 invalidator_state_ = state; |
999 DVLOG(1) << "Invalidator state changed to: " << state_str; | 974 DVLOG(1) << "Invalidator state changed to: " << state_str; |
1000 const bool notifications_enabled = | 975 const bool notifications_enabled = |
1001 (invalidator_state_ == INVALIDATIONS_ENABLED); | 976 (invalidator_state_ == INVALIDATIONS_ENABLED); |
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1153 int SyncManagerImpl::GetDefaultNudgeDelay() { | 1128 int SyncManagerImpl::GetDefaultNudgeDelay() { |
1154 return kDefaultNudgeDelayMilliseconds; | 1129 return kDefaultNudgeDelayMilliseconds; |
1155 } | 1130 } |
1156 | 1131 |
1157 // static. | 1132 // static. |
1158 int SyncManagerImpl::GetPreferencesNudgeDelay() { | 1133 int SyncManagerImpl::GetPreferencesNudgeDelay() { |
1159 return kPreferencesNudgeDelayMilliseconds; | 1134 return kPreferencesNudgeDelayMilliseconds; |
1160 } | 1135 } |
1161 | 1136 |
1162 } // namespace syncer | 1137 } // namespace syncer |
OLD | NEW |