networking_private_service_client.cc revision 6e8cce623b6e4fe0c9e4af605d675dd9d0338c38
1// Copyright 2013 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 "chrome/browser/extensions/api/networking_private/networking_private_service_client.h" 6 7#include "base/base64.h" 8#include "base/bind.h" 9#include "base/sequenced_task_runner.h" 10#include "base/strings/string_number_conversions.h" 11#include "base/strings/string_util.h" 12#include "base/threading/worker_pool.h" 13#include "chrome/browser/browser_process.h" 14#include "chrome/browser/extensions/api/networking_private/networking_private_api.h" 15#include "chrome/common/extensions/api/networking_private.h" 16#include "content/public/browser/browser_thread.h" 17 18using content::BrowserThread; 19 20namespace extensions { 21 22namespace { 23 24const char kNetworkingPrivateSequenceTokenName[] = "NetworkingPrivate"; 25 26bool GetVerificationCredentials( 27 const NetworkingPrivateDelegate::VerificationProperties& properties, 28 NetworkingPrivateServiceClient::CryptoVerify::Credentials* credentials) { 29 std::vector<std::string> data_parts; 30 data_parts.push_back(properties.device_ssid); 31 data_parts.push_back(properties.device_serial); 32 data_parts.push_back(properties.device_bssid); 33 data_parts.push_back(properties.public_key); 34 data_parts.push_back(properties.nonce); 35 credentials->unsigned_data = JoinString(data_parts, ","); 36 if (!base::Base64Decode(properties.signed_data, &credentials->signed_data)) { 37 LOG(ERROR) << "Failed to decode signed data: " << properties.signed_data; 38 return false; 39 } 40 credentials->certificate = properties.certificate; 41 credentials->device_bssid = properties.device_bssid; 42 if (!base::Base64Decode(properties.public_key, &credentials->public_key)) { 43 LOG(ERROR) << "Failed to decode public key"; 44 return false; 45 } 46 return true; 47} 48 49// Deletes WiFiService and CryptoVerify objects on worker thread. 50void ShutdownServicesOnWorkerThread( 51 scoped_ptr<wifi::WiFiService> wifi_service, 52 scoped_ptr<NetworkingPrivateServiceClient::CryptoVerify> crypto_verify) { 53 DCHECK(wifi_service.get()); 54 DCHECK(crypto_verify.get()); 55} 56 57// Forwards call back from VerifyAndEncryptCredentials on random thread to 58// |callback| on correct |callback_loop_proxy|. 59void AfterVerifyAndEncryptCredentialsRelay( 60 const NetworkingPrivateServiceClient::CryptoVerify:: 61 VerifyAndEncryptCredentialsCallback& callback, 62 scoped_refptr<base::MessageLoopProxy> callback_loop_proxy, 63 const std::string& key_data, 64 const std::string& error) { 65 callback_loop_proxy->PostTask(FROM_HERE, 66 base::Bind(callback, key_data, error)); 67} 68 69} // namespace 70 71NetworkingPrivateServiceClient::CryptoVerify::CryptoVerify() {} 72NetworkingPrivateServiceClient::CryptoVerify::~CryptoVerify() {} 73 74NetworkingPrivateServiceClient::CryptoVerify::Credentials::Credentials() {} 75NetworkingPrivateServiceClient::CryptoVerify::Credentials::~Credentials() {} 76 77NetworkingPrivateServiceClient::NetworkingPrivateServiceClient( 78 wifi::WiFiService* wifi_service, 79 CryptoVerify* crypto_verify) 80 : crypto_verify_(crypto_verify), 81 wifi_service_(wifi_service), 82 weak_factory_(this) { 83 sequence_token_ = BrowserThread::GetBlockingPool()-> 84 GetNamedSequenceToken(kNetworkingPrivateSequenceTokenName); 85 task_runner_ = BrowserThread::GetBlockingPool()-> 86 GetSequencedTaskRunnerWithShutdownBehavior( 87 sequence_token_, 88 base::SequencedWorkerPool::CONTINUE_ON_SHUTDOWN); 89 task_runner_->PostTask( 90 FROM_HERE, 91 base::Bind( 92 &WiFiService::Initialize, 93 base::Unretained(wifi_service_.get()), 94 task_runner_)); 95 task_runner_->PostTask( 96 FROM_HERE, 97 base::Bind( 98 &WiFiService::SetEventObservers, 99 base::Unretained(wifi_service_.get()), 100 base::MessageLoopProxy::current(), 101 base::Bind( 102 &NetworkingPrivateServiceClient::OnNetworksChangedEventOnUIThread, 103 weak_factory_.GetWeakPtr()), 104 base::Bind( 105 &NetworkingPrivateServiceClient:: 106 OnNetworkListChangedEventOnUIThread, 107 weak_factory_.GetWeakPtr()))); 108 net::NetworkChangeNotifier::AddNetworkChangeObserver(this); 109} 110 111NetworkingPrivateServiceClient::~NetworkingPrivateServiceClient() { 112 // Verify that these objects were passed to ShutdownServicesOnWorkerThread to 113 // be deleted after completion of all posted tasks. 114 DCHECK(!wifi_service_.get()); 115 DCHECK(!crypto_verify_.get()); 116} 117 118NetworkingPrivateServiceClient::ServiceCallbacks::ServiceCallbacks() {} 119 120NetworkingPrivateServiceClient::ServiceCallbacks::~ServiceCallbacks() {} 121 122void NetworkingPrivateServiceClient::Shutdown() { 123 DCHECK_CURRENTLY_ON(BrowserThread::UI); 124 net::NetworkChangeNotifier::RemoveNetworkChangeObserver(this); 125 // Clear callbacks map to release callbacks from UI thread. 126 callbacks_map_.Clear(); 127 // Post ShutdownServicesOnWorkerThread task to delete services when all posted 128 // tasks are done. 129 task_runner_->PostTask( 130 FROM_HERE, 131 base::Bind(&ShutdownServicesOnWorkerThread, 132 base::Passed(&wifi_service_), 133 base::Passed(&crypto_verify_))); 134} 135 136void NetworkingPrivateServiceClient::AddObserver(Observer* observer) { 137 network_events_observers_.AddObserver(observer); 138} 139 140void NetworkingPrivateServiceClient::RemoveObserver(Observer* observer) { 141 network_events_observers_.RemoveObserver(observer); 142} 143 144void NetworkingPrivateServiceClient::OnNetworkChanged( 145 net::NetworkChangeNotifier::ConnectionType type) { 146 task_runner_->PostTask( 147 FROM_HERE, 148 base::Bind(&WiFiService::RequestConnectedNetworkUpdate, 149 base::Unretained(wifi_service_.get()))); 150} 151 152NetworkingPrivateServiceClient::ServiceCallbacks* 153NetworkingPrivateServiceClient::AddServiceCallbacks() { 154 ServiceCallbacks* service_callbacks = new ServiceCallbacks(); 155 service_callbacks->id = callbacks_map_.Add(service_callbacks); 156 return service_callbacks; 157} 158 159void NetworkingPrivateServiceClient::RemoveServiceCallbacks( 160 ServiceCallbacksID callback_id) { 161 callbacks_map_.Remove(callback_id); 162} 163 164// NetworkingPrivateServiceClient implementation 165 166void NetworkingPrivateServiceClient::GetProperties( 167 const std::string& guid, 168 const DictionaryCallback& success_callback, 169 const FailureCallback& failure_callback) { 170 ServiceCallbacks* service_callbacks = AddServiceCallbacks(); 171 service_callbacks->failure_callback = failure_callback; 172 service_callbacks->get_properties_callback = success_callback; 173 174 scoped_ptr<base::DictionaryValue> properties(new base::DictionaryValue); 175 std::string* error = new std::string; 176 177 task_runner_->PostTaskAndReply( 178 FROM_HERE, 179 base::Bind(&WiFiService::GetProperties, 180 base::Unretained(wifi_service_.get()), 181 guid, 182 properties.get(), 183 error), 184 base::Bind(&NetworkingPrivateServiceClient::AfterGetProperties, 185 weak_factory_.GetWeakPtr(), 186 service_callbacks->id, 187 guid, 188 base::Passed(&properties), 189 base::Owned(error))); 190} 191 192void NetworkingPrivateServiceClient::GetManagedProperties( 193 const std::string& guid, 194 const DictionaryCallback& success_callback, 195 const FailureCallback& failure_callback) { 196 ServiceCallbacks* service_callbacks = AddServiceCallbacks(); 197 service_callbacks->failure_callback = failure_callback; 198 service_callbacks->get_properties_callback = success_callback; 199 200 scoped_ptr<base::DictionaryValue> properties(new base::DictionaryValue); 201 std::string* error = new std::string; 202 203 task_runner_->PostTaskAndReply( 204 FROM_HERE, 205 base::Bind(&WiFiService::GetManagedProperties, 206 base::Unretained(wifi_service_.get()), 207 guid, 208 properties.get(), 209 error), 210 base::Bind(&NetworkingPrivateServiceClient::AfterGetProperties, 211 weak_factory_.GetWeakPtr(), 212 service_callbacks->id, 213 guid, 214 base::Passed(&properties), 215 base::Owned(error))); 216} 217 218void NetworkingPrivateServiceClient::GetState( 219 const std::string& guid, 220 const DictionaryCallback& success_callback, 221 const FailureCallback& failure_callback) { 222 ServiceCallbacks* service_callbacks = AddServiceCallbacks(); 223 service_callbacks->failure_callback = failure_callback; 224 service_callbacks->get_properties_callback = success_callback; 225 226 scoped_ptr<base::DictionaryValue> properties(new base::DictionaryValue); 227 std::string* error = new std::string; 228 229 task_runner_->PostTaskAndReply( 230 FROM_HERE, 231 base::Bind(&WiFiService::GetState, 232 base::Unretained(wifi_service_.get()), 233 guid, 234 properties.get(), 235 error), 236 base::Bind(&NetworkingPrivateServiceClient::AfterGetProperties, 237 weak_factory_.GetWeakPtr(), 238 service_callbacks->id, 239 guid, 240 base::Passed(&properties), 241 base::Owned(error))); 242} 243 244void NetworkingPrivateServiceClient::SetProperties( 245 const std::string& guid, 246 scoped_ptr<base::DictionaryValue> properties, 247 const VoidCallback& success_callback, 248 const FailureCallback& failure_callback) { 249 ServiceCallbacks* service_callbacks = AddServiceCallbacks(); 250 service_callbacks->failure_callback = failure_callback; 251 service_callbacks->set_properties_callback = success_callback; 252 253 std::string* error = new std::string; 254 255 task_runner_->PostTaskAndReply( 256 FROM_HERE, 257 base::Bind(&WiFiService::SetProperties, 258 base::Unretained(wifi_service_.get()), 259 guid, 260 base::Passed(&properties), 261 error), 262 base::Bind(&NetworkingPrivateServiceClient::AfterSetProperties, 263 weak_factory_.GetWeakPtr(), 264 service_callbacks->id, 265 base::Owned(error))); 266} 267 268void NetworkingPrivateServiceClient::CreateNetwork( 269 bool shared, 270 scoped_ptr<base::DictionaryValue> properties, 271 const StringCallback& success_callback, 272 const FailureCallback& failure_callback) { 273 ServiceCallbacks* service_callbacks = AddServiceCallbacks(); 274 service_callbacks->failure_callback = failure_callback; 275 service_callbacks->create_network_callback = success_callback; 276 277 std::string* network_guid = new std::string; 278 std::string* error = new std::string; 279 280 task_runner_->PostTaskAndReply( 281 FROM_HERE, 282 base::Bind(&WiFiService::CreateNetwork, 283 base::Unretained(wifi_service_.get()), 284 shared, 285 base::Passed(&properties), 286 network_guid, 287 error), 288 base::Bind(&NetworkingPrivateServiceClient::AfterCreateNetwork, 289 weak_factory_.GetWeakPtr(), 290 service_callbacks->id, 291 base::Owned(network_guid), 292 base::Owned(error))); 293} 294 295void NetworkingPrivateServiceClient::GetNetworks( 296 const std::string& network_type, 297 bool configured_only, 298 bool visible_only, 299 int limit, 300 const NetworkListCallback& success_callback, 301 const FailureCallback& failure_callback) { 302 ServiceCallbacks* service_callbacks = AddServiceCallbacks(); 303 service_callbacks->failure_callback = failure_callback; 304 service_callbacks->get_visible_networks_callback = success_callback; 305 306 scoped_ptr<base::ListValue> networks(new base::ListValue); 307 308 // TODO(stevenjb/mef): Apply filters (configured, visible, limit). 309 310 task_runner_->PostTaskAndReply( 311 FROM_HERE, 312 base::Bind(&WiFiService::GetVisibleNetworks, 313 base::Unretained(wifi_service_.get()), 314 network_type, 315 networks.get(), 316 false), 317 base::Bind(&NetworkingPrivateServiceClient::AfterGetVisibleNetworks, 318 weak_factory_.GetWeakPtr(), 319 service_callbacks->id, 320 base::Passed(&networks))); 321} 322 323void NetworkingPrivateServiceClient::StartConnect( 324 const std::string& guid, 325 const VoidCallback& success_callback, 326 const FailureCallback& failure_callback) { 327 ServiceCallbacks* service_callbacks = AddServiceCallbacks(); 328 service_callbacks->failure_callback = failure_callback; 329 service_callbacks->start_connect_callback = success_callback; 330 331 std::string* error = new std::string; 332 333 task_runner_->PostTaskAndReply( 334 FROM_HERE, 335 base::Bind(&WiFiService::StartConnect, 336 base::Unretained(wifi_service_.get()), 337 guid, 338 error), 339 base::Bind(&NetworkingPrivateServiceClient::AfterStartConnect, 340 weak_factory_.GetWeakPtr(), 341 service_callbacks->id, 342 base::Owned(error))); 343} 344 345void NetworkingPrivateServiceClient::StartDisconnect( 346 const std::string& guid, 347 const VoidCallback& success_callback, 348 const FailureCallback& failure_callback) { 349 ServiceCallbacks* service_callbacks = AddServiceCallbacks(); 350 service_callbacks->failure_callback = failure_callback; 351 service_callbacks->start_disconnect_callback = success_callback; 352 353 std::string* error = new std::string; 354 355 task_runner_->PostTaskAndReply( 356 FROM_HERE, 357 base::Bind(&WiFiService::StartDisconnect, 358 base::Unretained(wifi_service_.get()), 359 guid, 360 error), 361 base::Bind(&NetworkingPrivateServiceClient::AfterStartDisconnect, 362 weak_factory_.GetWeakPtr(), 363 service_callbacks->id, 364 base::Owned(error))); 365} 366 367void NetworkingPrivateServiceClient::VerifyDestination( 368 const VerificationProperties& verification_properties, 369 const BoolCallback& success_callback, 370 const FailureCallback& failure_callback) { 371 if (!crypto_verify_) { 372 failure_callback.Run(networking_private::kErrorNotSupported); 373 return; 374 } 375 376 ServiceCallbacks* service_callbacks = AddServiceCallbacks(); 377 service_callbacks->failure_callback = failure_callback; 378 service_callbacks->verify_destination_callback = success_callback; 379 380 CryptoVerify::Credentials credentials; 381 if (!GetVerificationCredentials(verification_properties, &credentials)) { 382 failure_callback.Run(networking_private::kErrorEncryptionError); 383 return; 384 } 385 386 bool* result = new bool; 387 std::string* error = new std::string; 388 389 task_runner_->PostTaskAndReply( 390 FROM_HERE, 391 base::Bind(&CryptoVerify::VerifyDestination, 392 base::Unretained(crypto_verify_.get()), 393 credentials, 394 result, 395 error), 396 base::Bind(&NetworkingPrivateServiceClient::AfterVerifyDestination, 397 weak_factory_.GetWeakPtr(), 398 service_callbacks->id, 399 base::Owned(result), 400 base::Owned(error))); 401} 402 403void NetworkingPrivateServiceClient::VerifyAndEncryptCredentials( 404 const std::string& guid, 405 const VerificationProperties& verification_properties, 406 const StringCallback& success_callback, 407 const FailureCallback& failure_callback) { 408 if (!crypto_verify_) { 409 failure_callback.Run(networking_private::kErrorNotSupported); 410 return; 411 } 412 413 ServiceCallbacks* service_callbacks = AddServiceCallbacks(); 414 service_callbacks->failure_callback = failure_callback; 415 service_callbacks->verify_and_encrypt_credentials_callback = success_callback; 416 417 CryptoVerify::Credentials credentials; 418 if (!GetVerificationCredentials(verification_properties, &credentials)) { 419 failure_callback.Run(networking_private::kErrorEncryptionError); 420 return; 421 } 422 423 CryptoVerify::VerifyAndEncryptCredentialsCallback callback_relay(base::Bind( 424 &AfterVerifyAndEncryptCredentialsRelay, 425 base::Bind( 426 &NetworkingPrivateServiceClient::AfterVerifyAndEncryptCredentials, 427 weak_factory_.GetWeakPtr(), 428 service_callbacks->id), 429 base::MessageLoopProxy::current())); 430 431 task_runner_->PostTask(FROM_HERE, 432 base::Bind(&CryptoVerify::VerifyAndEncryptCredentials, 433 base::Unretained(crypto_verify_.get()), 434 guid, 435 credentials, 436 callback_relay)); 437} 438 439void NetworkingPrivateServiceClient::VerifyAndEncryptData( 440 const VerificationProperties& verification_properties, 441 const std::string& data, 442 const StringCallback& success_callback, 443 const FailureCallback& failure_callback) { 444 if (!crypto_verify_) { 445 failure_callback.Run(networking_private::kErrorNotSupported); 446 return; 447 } 448 449 ServiceCallbacks* service_callbacks = AddServiceCallbacks(); 450 service_callbacks->failure_callback = failure_callback; 451 service_callbacks->verify_and_encrypt_data_callback = success_callback; 452 453 CryptoVerify::Credentials credentials; 454 if (!GetVerificationCredentials(verification_properties, &credentials)) { 455 failure_callback.Run(networking_private::kErrorEncryptionError); 456 return; 457 } 458 459 std::string* result = new std::string; 460 std::string* error = new std::string; 461 462 task_runner_->PostTaskAndReply( 463 FROM_HERE, 464 base::Bind(&CryptoVerify::VerifyAndEncryptData, 465 base::Unretained(crypto_verify_.get()), 466 credentials, 467 data, 468 result, 469 error), 470 base::Bind(&NetworkingPrivateServiceClient::AfterVerifyAndEncryptData, 471 weak_factory_.GetWeakPtr(), 472 service_callbacks->id, 473 base::Owned(result), 474 base::Owned(error))); 475} 476 477void NetworkingPrivateServiceClient::SetWifiTDLSEnabledState( 478 const std::string& ip_or_mac_address, 479 bool enabled, 480 const StringCallback& success_callback, 481 const FailureCallback& failure_callback) { 482 failure_callback.Run(networking_private::kErrorNotSupported); 483} 484 485void NetworkingPrivateServiceClient::GetWifiTDLSStatus( 486 const std::string& ip_or_mac_address, 487 const StringCallback& success_callback, 488 const FailureCallback& failure_callback) { 489 failure_callback.Run(networking_private::kErrorNotSupported); 490} 491 492void NetworkingPrivateServiceClient::GetCaptivePortalStatus( 493 const std::string& guid, 494 const StringCallback& success_callback, 495 const FailureCallback& failure_callback) { 496 failure_callback.Run(networking_private::kErrorNotSupported); 497} 498 499scoped_ptr<base::ListValue> 500NetworkingPrivateServiceClient::GetEnabledNetworkTypes() { 501 scoped_ptr<base::ListValue> network_list; 502 return network_list.Pass(); 503} 504 505bool NetworkingPrivateServiceClient::EnableNetworkType( 506 const std::string& type) { 507 return false; 508} 509 510bool NetworkingPrivateServiceClient::DisableNetworkType( 511 const std::string& type) { 512 return false; 513} 514 515bool NetworkingPrivateServiceClient::RequestScan() { 516 task_runner_->PostTask( 517 FROM_HERE, 518 base::Bind(&WiFiService::RequestNetworkScan, 519 base::Unretained(wifi_service_.get()))); 520 return true; 521} 522 523//////////////////////////////////////////////////////////////////////////////// 524 525void NetworkingPrivateServiceClient::AfterGetProperties( 526 ServiceCallbacksID callback_id, 527 const std::string& network_guid, 528 scoped_ptr<base::DictionaryValue> properties, 529 const std::string* error) { 530 ServiceCallbacks* service_callbacks = callbacks_map_.Lookup(callback_id); 531 DCHECK(service_callbacks); 532 if (!error->empty()) { 533 DCHECK(!service_callbacks->failure_callback.is_null()); 534 service_callbacks->failure_callback.Run(*error); 535 } else { 536 DCHECK(!service_callbacks->get_properties_callback.is_null()); 537 service_callbacks->get_properties_callback.Run(properties.Pass()); 538 } 539 RemoveServiceCallbacks(callback_id); 540} 541 542void NetworkingPrivateServiceClient::AfterGetVisibleNetworks( 543 ServiceCallbacksID callback_id, 544 scoped_ptr<base::ListValue> networks) { 545 ServiceCallbacks* service_callbacks = callbacks_map_.Lookup(callback_id); 546 DCHECK(service_callbacks); 547 DCHECK(!service_callbacks->get_visible_networks_callback.is_null()); 548 service_callbacks->get_visible_networks_callback.Run(networks.Pass()); 549 RemoveServiceCallbacks(callback_id); 550} 551 552void NetworkingPrivateServiceClient::AfterSetProperties( 553 ServiceCallbacksID callback_id, 554 const std::string* error) { 555 ServiceCallbacks* service_callbacks = callbacks_map_.Lookup(callback_id); 556 DCHECK(service_callbacks); 557 if (!error->empty()) { 558 DCHECK(!service_callbacks->failure_callback.is_null()); 559 service_callbacks->failure_callback.Run(*error); 560 } else { 561 DCHECK(!service_callbacks->set_properties_callback.is_null()); 562 service_callbacks->set_properties_callback.Run(); 563 } 564 RemoveServiceCallbacks(callback_id); 565} 566 567void NetworkingPrivateServiceClient::AfterCreateNetwork( 568 ServiceCallbacksID callback_id, 569 const std::string* network_guid, 570 const std::string* error) { 571 ServiceCallbacks* service_callbacks = callbacks_map_.Lookup(callback_id); 572 DCHECK(service_callbacks); 573 if (!error->empty()) { 574 DCHECK(!service_callbacks->failure_callback.is_null()); 575 service_callbacks->failure_callback.Run(*error); 576 } else { 577 DCHECK(!service_callbacks->create_network_callback.is_null()); 578 service_callbacks->create_network_callback.Run(*network_guid); 579 } 580 RemoveServiceCallbacks(callback_id); 581} 582 583void NetworkingPrivateServiceClient::AfterStartConnect( 584 ServiceCallbacksID callback_id, 585 const std::string* error) { 586 ServiceCallbacks* service_callbacks = callbacks_map_.Lookup(callback_id); 587 DCHECK(service_callbacks); 588 if (!error->empty()) { 589 DCHECK(!service_callbacks->failure_callback.is_null()); 590 service_callbacks->failure_callback.Run(*error); 591 } else { 592 DCHECK(!service_callbacks->start_connect_callback.is_null()); 593 service_callbacks->start_connect_callback.Run(); 594 } 595 RemoveServiceCallbacks(callback_id); 596} 597 598void NetworkingPrivateServiceClient::AfterStartDisconnect( 599 ServiceCallbacksID callback_id, 600 const std::string* error) { 601 ServiceCallbacks* service_callbacks = callbacks_map_.Lookup(callback_id); 602 DCHECK(service_callbacks); 603 if (!error->empty()) { 604 DCHECK(!service_callbacks->failure_callback.is_null()); 605 service_callbacks->failure_callback.Run(*error); 606 } else { 607 DCHECK(!service_callbacks->start_disconnect_callback.is_null()); 608 service_callbacks->start_disconnect_callback.Run(); 609 } 610 RemoveServiceCallbacks(callback_id); 611} 612 613void NetworkingPrivateServiceClient::AfterVerifyDestination( 614 ServiceCallbacksID callback_id, 615 const bool* result, 616 const std::string* error) { 617 ServiceCallbacks* service_callbacks = callbacks_map_.Lookup(callback_id); 618 DCHECK(service_callbacks); 619 if (!error->empty()) { 620 DCHECK(!service_callbacks->failure_callback.is_null()); 621 service_callbacks->failure_callback.Run(*error); 622 } else { 623 DCHECK(!service_callbacks->verify_destination_callback.is_null()); 624 service_callbacks->verify_destination_callback.Run(*result); 625 } 626 RemoveServiceCallbacks(callback_id); 627} 628 629void NetworkingPrivateServiceClient::AfterVerifyAndEncryptCredentials( 630 ServiceCallbacksID callback_id, 631 const std::string& encrypted_data, 632 const std::string& error) { 633 DCHECK_CURRENTLY_ON(BrowserThread::UI); 634 ServiceCallbacks* service_callbacks = callbacks_map_.Lookup(callback_id); 635 DCHECK(service_callbacks); 636 if (!error.empty()) { 637 DCHECK(!service_callbacks->failure_callback.is_null()); 638 service_callbacks->failure_callback.Run(error); 639 } else { 640 DCHECK( 641 !service_callbacks->verify_and_encrypt_credentials_callback.is_null()); 642 service_callbacks->verify_and_encrypt_credentials_callback.Run( 643 encrypted_data); 644 } 645 RemoveServiceCallbacks(callback_id); 646} 647 648void NetworkingPrivateServiceClient::AfterVerifyAndEncryptData( 649 ServiceCallbacksID callback_id, 650 const std::string* result, 651 const std::string* error) { 652 ServiceCallbacks* service_callbacks = callbacks_map_.Lookup(callback_id); 653 DCHECK(service_callbacks); 654 if (!error->empty()) { 655 DCHECK(!service_callbacks->failure_callback.is_null()); 656 service_callbacks->failure_callback.Run(*error); 657 } else { 658 DCHECK(!service_callbacks->verify_and_encrypt_data_callback.is_null()); 659 service_callbacks->verify_and_encrypt_data_callback.Run(*result); 660 } 661 RemoveServiceCallbacks(callback_id); 662} 663 664void NetworkingPrivateServiceClient::OnNetworksChangedEventOnUIThread( 665 const std::vector<std::string>& network_guids) { 666 DCHECK_CURRENTLY_ON(BrowserThread::UI); 667 FOR_EACH_OBSERVER(Observer, 668 network_events_observers_, 669 OnNetworksChangedEvent(network_guids)); 670} 671 672void NetworkingPrivateServiceClient::OnNetworkListChangedEventOnUIThread( 673 const std::vector<std::string>& network_guids) { 674 DCHECK_CURRENTLY_ON(BrowserThread::UI); 675 FOR_EACH_OBSERVER(Observer, 676 network_events_observers_, 677 OnNetworkListChangedEvent(network_guids)); 678} 679 680} // namespace extensions 681