| 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 | 
|---|