| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 "ios/chrome/browser/ui/webui/sync_internals/sync_internals_message_hand
ler.h" | 5 #include "ios/chrome/browser/ui/webui/sync_internals/sync_internals_message_hand
ler.h" |
| 6 | 6 |
| 7 #include <vector> | 7 #include <vector> |
| 8 | 8 |
| 9 #include "base/logging.h" | 9 #include "base/logging.h" |
| 10 #include "components/browser_sync/profile_sync_service.h" | 10 #include "components/browser_sync/profile_sync_service.h" |
| (...skipping 19 matching lines...) Expand all Loading... |
| 30 | 30 |
| 31 SyncInternalsMessageHandler::SyncInternalsMessageHandler() | 31 SyncInternalsMessageHandler::SyncInternalsMessageHandler() |
| 32 : is_registered_(false), | 32 : is_registered_(false), |
| 33 is_registered_for_counters_(false), | 33 is_registered_for_counters_(false), |
| 34 weak_ptr_factory_(this) {} | 34 weak_ptr_factory_(this) {} |
| 35 | 35 |
| 36 SyncInternalsMessageHandler::~SyncInternalsMessageHandler() { | 36 SyncInternalsMessageHandler::~SyncInternalsMessageHandler() { |
| 37 if (js_controller_) | 37 if (js_controller_) |
| 38 js_controller_->RemoveJsEventHandler(this); | 38 js_controller_->RemoveJsEventHandler(this); |
| 39 | 39 |
| 40 syncer::SyncService* service = GetSyncService(); | 40 sync_driver::SyncService* service = GetSyncService(); |
| 41 if (service && service->HasObserver(this)) { | 41 if (service && service->HasObserver(this)) { |
| 42 service->RemoveObserver(this); | 42 service->RemoveObserver(this); |
| 43 service->RemoveProtocolEventObserver(this); | 43 service->RemoveProtocolEventObserver(this); |
| 44 } | 44 } |
| 45 | 45 |
| 46 if (service && is_registered_for_counters_) { | 46 if (service && is_registered_for_counters_) { |
| 47 service->RemoveTypeDebugInfoObserver(this); | 47 service->RemoveTypeDebugInfoObserver(this); |
| 48 } | 48 } |
| 49 } | 49 } |
| 50 | 50 |
| 51 void SyncInternalsMessageHandler::RegisterMessages() { | 51 void SyncInternalsMessageHandler::RegisterMessages() { |
| 52 DCHECK_CURRENTLY_ON(web::WebThread::UI); | 52 DCHECK_CURRENTLY_ON(web::WebThread::UI); |
| 53 | 53 |
| 54 web_ui()->RegisterMessageCallback( | 54 web_ui()->RegisterMessageCallback( |
| 55 syncer::sync_ui_util::kRegisterForEvents, | 55 sync_driver::sync_ui_util::kRegisterForEvents, |
| 56 base::Bind(&SyncInternalsMessageHandler::HandleRegisterForEvents, | 56 base::Bind(&SyncInternalsMessageHandler::HandleRegisterForEvents, |
| 57 base::Unretained(this))); | 57 base::Unretained(this))); |
| 58 | 58 |
| 59 web_ui()->RegisterMessageCallback( | 59 web_ui()->RegisterMessageCallback( |
| 60 syncer::sync_ui_util::kRegisterForPerTypeCounters, | 60 sync_driver::sync_ui_util::kRegisterForPerTypeCounters, |
| 61 base::Bind(&SyncInternalsMessageHandler::HandleRegisterForPerTypeCounters, | 61 base::Bind(&SyncInternalsMessageHandler::HandleRegisterForPerTypeCounters, |
| 62 base::Unretained(this))); | 62 base::Unretained(this))); |
| 63 | 63 |
| 64 web_ui()->RegisterMessageCallback( | 64 web_ui()->RegisterMessageCallback( |
| 65 syncer::sync_ui_util::kRequestUpdatedAboutInfo, | 65 sync_driver::sync_ui_util::kRequestUpdatedAboutInfo, |
| 66 base::Bind(&SyncInternalsMessageHandler::HandleRequestUpdatedAboutInfo, | 66 base::Bind(&SyncInternalsMessageHandler::HandleRequestUpdatedAboutInfo, |
| 67 base::Unretained(this))); | 67 base::Unretained(this))); |
| 68 | 68 |
| 69 web_ui()->RegisterMessageCallback( | 69 web_ui()->RegisterMessageCallback( |
| 70 syncer::sync_ui_util::kRequestListOfTypes, | 70 sync_driver::sync_ui_util::kRequestListOfTypes, |
| 71 base::Bind(&SyncInternalsMessageHandler::HandleRequestListOfTypes, | 71 base::Bind(&SyncInternalsMessageHandler::HandleRequestListOfTypes, |
| 72 base::Unretained(this))); | 72 base::Unretained(this))); |
| 73 | 73 |
| 74 web_ui()->RegisterMessageCallback( | 74 web_ui()->RegisterMessageCallback( |
| 75 syncer::sync_ui_util::kGetAllNodes, | 75 sync_driver::sync_ui_util::kGetAllNodes, |
| 76 base::Bind(&SyncInternalsMessageHandler::HandleGetAllNodes, | 76 base::Bind(&SyncInternalsMessageHandler::HandleGetAllNodes, |
| 77 base::Unretained(this))); | 77 base::Unretained(this))); |
| 78 } | 78 } |
| 79 | 79 |
| 80 void SyncInternalsMessageHandler::HandleRegisterForEvents( | 80 void SyncInternalsMessageHandler::HandleRegisterForEvents( |
| 81 const base::ListValue* args) { | 81 const base::ListValue* args) { |
| 82 DCHECK(args->empty()); | 82 DCHECK(args->empty()); |
| 83 | 83 |
| 84 // is_registered_ flag protects us from double-registering. This could | 84 // is_registered_ flag protects us from double-registering. This could |
| 85 // happen on a page refresh, where the JavaScript gets re-run but the | 85 // happen on a page refresh, where the JavaScript gets re-run but the |
| 86 // message handler remains unchanged. | 86 // message handler remains unchanged. |
| 87 syncer::SyncService* service = GetSyncService(); | 87 sync_driver::SyncService* service = GetSyncService(); |
| 88 if (service && !is_registered_) { | 88 if (service && !is_registered_) { |
| 89 service->AddObserver(this); | 89 service->AddObserver(this); |
| 90 service->AddProtocolEventObserver(this); | 90 service->AddProtocolEventObserver(this); |
| 91 js_controller_ = service->GetJsController(); | 91 js_controller_ = service->GetJsController(); |
| 92 js_controller_->AddJsEventHandler(this); | 92 js_controller_->AddJsEventHandler(this); |
| 93 is_registered_ = true; | 93 is_registered_ = true; |
| 94 } | 94 } |
| 95 } | 95 } |
| 96 | 96 |
| 97 void SyncInternalsMessageHandler::HandleRegisterForPerTypeCounters( | 97 void SyncInternalsMessageHandler::HandleRegisterForPerTypeCounters( |
| 98 const base::ListValue* args) { | 98 const base::ListValue* args) { |
| 99 DCHECK(args->empty()); | 99 DCHECK(args->empty()); |
| 100 | 100 |
| 101 if (syncer::SyncService* service = GetSyncService()) { | 101 if (sync_driver::SyncService* service = GetSyncService()) { |
| 102 if (!is_registered_for_counters_) { | 102 if (!is_registered_for_counters_) { |
| 103 service->AddTypeDebugInfoObserver(this); | 103 service->AddTypeDebugInfoObserver(this); |
| 104 is_registered_for_counters_ = true; | 104 is_registered_for_counters_ = true; |
| 105 } else { | 105 } else { |
| 106 // Re-register to ensure counters get re-emitted. | 106 // Re-register to ensure counters get re-emitted. |
| 107 service->RemoveTypeDebugInfoObserver(this); | 107 service->RemoveTypeDebugInfoObserver(this); |
| 108 service->AddTypeDebugInfoObserver(this); | 108 service->AddTypeDebugInfoObserver(this); |
| 109 } | 109 } |
| 110 } | 110 } |
| 111 } | 111 } |
| 112 | 112 |
| 113 void SyncInternalsMessageHandler::HandleRequestUpdatedAboutInfo( | 113 void SyncInternalsMessageHandler::HandleRequestUpdatedAboutInfo( |
| 114 const base::ListValue* args) { | 114 const base::ListValue* args) { |
| 115 DCHECK(args->empty()); | 115 DCHECK(args->empty()); |
| 116 SendAboutInfo(); | 116 SendAboutInfo(); |
| 117 } | 117 } |
| 118 | 118 |
| 119 void SyncInternalsMessageHandler::HandleRequestListOfTypes( | 119 void SyncInternalsMessageHandler::HandleRequestListOfTypes( |
| 120 const base::ListValue* args) { | 120 const base::ListValue* args) { |
| 121 DCHECK(args->empty()); | 121 DCHECK(args->empty()); |
| 122 base::DictionaryValue event_details; | 122 base::DictionaryValue event_details; |
| 123 std::unique_ptr<base::ListValue> type_list(new base::ListValue()); | 123 std::unique_ptr<base::ListValue> type_list(new base::ListValue()); |
| 124 ModelTypeSet protocol_types = syncer::ProtocolTypes(); | 124 ModelTypeSet protocol_types = syncer::ProtocolTypes(); |
| 125 for (ModelTypeSet::Iterator it = protocol_types.First(); it.Good(); | 125 for (ModelTypeSet::Iterator it = protocol_types.First(); it.Good(); |
| 126 it.Inc()) { | 126 it.Inc()) { |
| 127 type_list->Append(new base::StringValue(ModelTypeToString(it.Get()))); | 127 type_list->Append(new base::StringValue(ModelTypeToString(it.Get()))); |
| 128 } | 128 } |
| 129 event_details.Set(syncer::sync_ui_util::kTypes, type_list.release()); | 129 event_details.Set(sync_driver::sync_ui_util::kTypes, type_list.release()); |
| 130 web_ui()->CallJavascriptFunction( | 130 web_ui()->CallJavascriptFunction( |
| 131 syncer::sync_ui_util::kDispatchEvent, | 131 sync_driver::sync_ui_util::kDispatchEvent, |
| 132 base::StringValue(syncer::sync_ui_util::kOnReceivedListOfTypes), | 132 base::StringValue(sync_driver::sync_ui_util::kOnReceivedListOfTypes), |
| 133 event_details); | 133 event_details); |
| 134 } | 134 } |
| 135 | 135 |
| 136 void SyncInternalsMessageHandler::HandleGetAllNodes( | 136 void SyncInternalsMessageHandler::HandleGetAllNodes( |
| 137 const base::ListValue* args) { | 137 const base::ListValue* args) { |
| 138 DCHECK_EQ(1U, args->GetSize()); | 138 DCHECK_EQ(1U, args->GetSize()); |
| 139 int request_id = 0; | 139 int request_id = 0; |
| 140 bool success = args->GetInteger(0, &request_id); | 140 bool success = args->GetInteger(0, &request_id); |
| 141 DCHECK(success); | 141 DCHECK(success); |
| 142 | 142 |
| 143 syncer::SyncService* service = GetSyncService(); | 143 sync_driver::SyncService* service = GetSyncService(); |
| 144 if (service) { | 144 if (service) { |
| 145 service->GetAllNodes( | 145 service->GetAllNodes( |
| 146 base::Bind(&SyncInternalsMessageHandler::OnReceivedAllNodes, | 146 base::Bind(&SyncInternalsMessageHandler::OnReceivedAllNodes, |
| 147 weak_ptr_factory_.GetWeakPtr(), request_id)); | 147 weak_ptr_factory_.GetWeakPtr(), request_id)); |
| 148 } | 148 } |
| 149 } | 149 } |
| 150 | 150 |
| 151 void SyncInternalsMessageHandler::OnReceivedAllNodes( | 151 void SyncInternalsMessageHandler::OnReceivedAllNodes( |
| 152 int request_id, | 152 int request_id, |
| 153 std::unique_ptr<base::ListValue> nodes) { | 153 std::unique_ptr<base::ListValue> nodes) { |
| 154 base::FundamentalValue id(request_id); | 154 base::FundamentalValue id(request_id); |
| 155 web_ui()->CallJavascriptFunction(syncer::sync_ui_util::kGetAllNodesCallback, | 155 web_ui()->CallJavascriptFunction( |
| 156 id, *nodes); | 156 sync_driver::sync_ui_util::kGetAllNodesCallback, id, *nodes); |
| 157 } | 157 } |
| 158 | 158 |
| 159 void SyncInternalsMessageHandler::OnStateChanged() { | 159 void SyncInternalsMessageHandler::OnStateChanged() { |
| 160 SendAboutInfo(); | 160 SendAboutInfo(); |
| 161 } | 161 } |
| 162 | 162 |
| 163 void SyncInternalsMessageHandler::OnProtocolEvent( | 163 void SyncInternalsMessageHandler::OnProtocolEvent( |
| 164 const syncer::ProtocolEvent& event) { | 164 const syncer::ProtocolEvent& event) { |
| 165 std::unique_ptr<base::DictionaryValue> value( | 165 std::unique_ptr<base::DictionaryValue> value( |
| 166 syncer::ProtocolEvent::ToValue(event)); | 166 syncer::ProtocolEvent::ToValue(event)); |
| 167 web_ui()->CallJavascriptFunction( | 167 web_ui()->CallJavascriptFunction( |
| 168 syncer::sync_ui_util::kDispatchEvent, | 168 sync_driver::sync_ui_util::kDispatchEvent, |
| 169 base::StringValue(syncer::sync_ui_util::kOnProtocolEvent), *value); | 169 base::StringValue(sync_driver::sync_ui_util::kOnProtocolEvent), *value); |
| 170 } | 170 } |
| 171 | 171 |
| 172 void SyncInternalsMessageHandler::OnCommitCountersUpdated( | 172 void SyncInternalsMessageHandler::OnCommitCountersUpdated( |
| 173 syncer::ModelType type, | 173 syncer::ModelType type, |
| 174 const syncer::CommitCounters& counters) { | 174 const syncer::CommitCounters& counters) { |
| 175 EmitCounterUpdate(type, syncer::sync_ui_util::kCommit, counters.ToValue()); | 175 EmitCounterUpdate(type, sync_driver::sync_ui_util::kCommit, |
| 176 counters.ToValue()); |
| 176 } | 177 } |
| 177 | 178 |
| 178 void SyncInternalsMessageHandler::OnUpdateCountersUpdated( | 179 void SyncInternalsMessageHandler::OnUpdateCountersUpdated( |
| 179 syncer::ModelType type, | 180 syncer::ModelType type, |
| 180 const syncer::UpdateCounters& counters) { | 181 const syncer::UpdateCounters& counters) { |
| 181 EmitCounterUpdate(type, syncer::sync_ui_util::kUpdate, counters.ToValue()); | 182 EmitCounterUpdate(type, sync_driver::sync_ui_util::kUpdate, |
| 183 counters.ToValue()); |
| 182 } | 184 } |
| 183 | 185 |
| 184 void SyncInternalsMessageHandler::OnStatusCountersUpdated( | 186 void SyncInternalsMessageHandler::OnStatusCountersUpdated( |
| 185 syncer::ModelType type, | 187 syncer::ModelType type, |
| 186 const syncer::StatusCounters& counters) { | 188 const syncer::StatusCounters& counters) { |
| 187 EmitCounterUpdate(type, syncer::sync_ui_util::kStatus, counters.ToValue()); | 189 EmitCounterUpdate(type, sync_driver::sync_ui_util::kStatus, |
| 190 counters.ToValue()); |
| 188 } | 191 } |
| 189 | 192 |
| 190 void SyncInternalsMessageHandler::EmitCounterUpdate( | 193 void SyncInternalsMessageHandler::EmitCounterUpdate( |
| 191 syncer::ModelType type, | 194 syncer::ModelType type, |
| 192 const std::string& counter_type, | 195 const std::string& counter_type, |
| 193 std::unique_ptr<base::DictionaryValue> value) { | 196 std::unique_ptr<base::DictionaryValue> value) { |
| 194 std::unique_ptr<base::DictionaryValue> details(new base::DictionaryValue()); | 197 std::unique_ptr<base::DictionaryValue> details(new base::DictionaryValue()); |
| 195 details->SetString(syncer::sync_ui_util::kModelType, ModelTypeToString(type)); | 198 details->SetString(sync_driver::sync_ui_util::kModelType, |
| 196 details->SetString(syncer::sync_ui_util::kCounterType, counter_type); | 199 ModelTypeToString(type)); |
| 197 details->Set(syncer::sync_ui_util::kCounters, value.release()); | 200 details->SetString(sync_driver::sync_ui_util::kCounterType, counter_type); |
| 201 details->Set(sync_driver::sync_ui_util::kCounters, value.release()); |
| 198 web_ui()->CallJavascriptFunction( | 202 web_ui()->CallJavascriptFunction( |
| 199 syncer::sync_ui_util::kDispatchEvent, | 203 sync_driver::sync_ui_util::kDispatchEvent, |
| 200 base::StringValue(syncer::sync_ui_util::kOnCountersUpdated), *details); | 204 base::StringValue(sync_driver::sync_ui_util::kOnCountersUpdated), |
| 205 *details); |
| 201 } | 206 } |
| 202 | 207 |
| 203 void SyncInternalsMessageHandler::HandleJsEvent(const std::string& name, | 208 void SyncInternalsMessageHandler::HandleJsEvent(const std::string& name, |
| 204 const JsEventDetails& details) { | 209 const JsEventDetails& details) { |
| 205 DVLOG(1) << "Handling event: " << name << " with details " | 210 DVLOG(1) << "Handling event: " << name << " with details " |
| 206 << details.ToString(); | 211 << details.ToString(); |
| 207 web_ui()->CallJavascriptFunction(syncer::sync_ui_util::kDispatchEvent, | 212 web_ui()->CallJavascriptFunction(sync_driver::sync_ui_util::kDispatchEvent, |
| 208 base::StringValue(name), details.Get()); | 213 base::StringValue(name), details.Get()); |
| 209 } | 214 } |
| 210 | 215 |
| 211 void SyncInternalsMessageHandler::SendAboutInfo() { | 216 void SyncInternalsMessageHandler::SendAboutInfo() { |
| 212 ios::ChromeBrowserState* browser_state = | 217 ios::ChromeBrowserState* browser_state = |
| 213 ios::ChromeBrowserState::FromWebUIIOS(web_ui()); | 218 ios::ChromeBrowserState::FromWebUIIOS(web_ui()); |
| 214 SigninManager* signin_manager = | 219 SigninManager* signin_manager = |
| 215 ios::SigninManagerFactory::GetForBrowserState(browser_state); | 220 ios::SigninManagerFactory::GetForBrowserState(browser_state); |
| 216 syncer::SyncService* sync_service = GetSyncService(); | 221 sync_driver::SyncService* sync_service = GetSyncService(); |
| 217 std::unique_ptr<base::DictionaryValue> value = | 222 std::unique_ptr<base::DictionaryValue> value = |
| 218 syncer::sync_ui_util::ConstructAboutInformation( | 223 sync_driver::sync_ui_util::ConstructAboutInformation( |
| 219 sync_service, signin_manager, GetChannel()); | 224 sync_service, signin_manager, GetChannel()); |
| 220 web_ui()->CallJavascriptFunction( | 225 web_ui()->CallJavascriptFunction( |
| 221 syncer::sync_ui_util::kDispatchEvent, | 226 sync_driver::sync_ui_util::kDispatchEvent, |
| 222 base::StringValue(syncer::sync_ui_util::kOnAboutInfoUpdated), *value); | 227 base::StringValue(sync_driver::sync_ui_util::kOnAboutInfoUpdated), |
| 228 *value); |
| 223 } | 229 } |
| 224 | 230 |
| 225 // Gets the SyncService of the underlying original profile. May return null. | 231 // Gets the SyncService of the underlying original profile. May return null. |
| 226 syncer::SyncService* SyncInternalsMessageHandler::GetSyncService() { | 232 sync_driver::SyncService* SyncInternalsMessageHandler::GetSyncService() { |
| 227 ios::ChromeBrowserState* browser_state = | 233 ios::ChromeBrowserState* browser_state = |
| 228 ios::ChromeBrowserState::FromWebUIIOS(web_ui()); | 234 ios::ChromeBrowserState::FromWebUIIOS(web_ui()); |
| 229 return IOSChromeProfileSyncServiceFactory::GetForBrowserState( | 235 return IOSChromeProfileSyncServiceFactory::GetForBrowserState( |
| 230 browser_state->GetOriginalChromeBrowserState()); | 236 browser_state->GetOriginalChromeBrowserState()); |
| 231 } | 237 } |
| OLD | NEW |