Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / extensions / api / networking_private / networking_private_service_client.cc
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
18 using content::BrowserThread;
19
20 namespace extensions {
21
22 namespace {
23
24 const char kNetworkingPrivateSequenceTokenName[] = "NetworkingPrivate";
25
26 bool 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.
50 void 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|.
59 void 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
71 NetworkingPrivateServiceClient::CryptoVerify::CryptoVerify() {}
72 NetworkingPrivateServiceClient::CryptoVerify::~CryptoVerify() {}
73
74 NetworkingPrivateServiceClient::CryptoVerify::Credentials::Credentials() {}
75 NetworkingPrivateServiceClient::CryptoVerify::Credentials::~Credentials() {}
76
77 NetworkingPrivateServiceClient::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
111 NetworkingPrivateServiceClient::~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
118 NetworkingPrivateServiceClient::ServiceCallbacks::ServiceCallbacks() {}
119
120 NetworkingPrivateServiceClient::ServiceCallbacks::~ServiceCallbacks() {}
121
122 void 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
136 void NetworkingPrivateServiceClient::AddObserver(Observer* observer) {
137   network_events_observers_.AddObserver(observer);
138 }
139
140 void NetworkingPrivateServiceClient::RemoveObserver(Observer* observer) {
141   network_events_observers_.RemoveObserver(observer);
142 }
143
144 void 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
152 NetworkingPrivateServiceClient::ServiceCallbacks*
153 NetworkingPrivateServiceClient::AddServiceCallbacks() {
154   ServiceCallbacks* service_callbacks = new ServiceCallbacks();
155   service_callbacks->id = callbacks_map_.Add(service_callbacks);
156   return service_callbacks;
157 }
158
159 void NetworkingPrivateServiceClient::RemoveServiceCallbacks(
160     ServiceCallbacksID callback_id) {
161   callbacks_map_.Remove(callback_id);
162 }
163
164 // NetworkingPrivateServiceClient implementation
165
166 void 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   base::DictionaryValue* properties_ptr = properties.get();
178   task_runner_->PostTaskAndReply(
179       FROM_HERE,
180       base::Bind(&WiFiService::GetProperties,
181                  base::Unretained(wifi_service_.get()),
182                  guid,
183                  properties_ptr,
184                  error),
185       base::Bind(&NetworkingPrivateServiceClient::AfterGetProperties,
186                  weak_factory_.GetWeakPtr(),
187                  service_callbacks->id,
188                  guid,
189                  base::Passed(&properties),
190                  base::Owned(error)));
191 }
192
193 void NetworkingPrivateServiceClient::GetManagedProperties(
194     const std::string& guid,
195     const DictionaryCallback& success_callback,
196     const FailureCallback& failure_callback) {
197   ServiceCallbacks* service_callbacks = AddServiceCallbacks();
198   service_callbacks->failure_callback = failure_callback;
199   service_callbacks->get_properties_callback = success_callback;
200
201   scoped_ptr<base::DictionaryValue> properties(new base::DictionaryValue);
202   std::string* error = new std::string;
203
204   base::DictionaryValue* properties_ptr = properties.get();
205   task_runner_->PostTaskAndReply(
206       FROM_HERE,
207       base::Bind(&WiFiService::GetManagedProperties,
208                  base::Unretained(wifi_service_.get()),
209                  guid,
210                  properties_ptr,
211                  error),
212       base::Bind(&NetworkingPrivateServiceClient::AfterGetProperties,
213                  weak_factory_.GetWeakPtr(),
214                  service_callbacks->id,
215                  guid,
216                  base::Passed(&properties),
217                  base::Owned(error)));
218 }
219
220 void NetworkingPrivateServiceClient::GetState(
221     const std::string& guid,
222     const DictionaryCallback& success_callback,
223     const FailureCallback& failure_callback) {
224   ServiceCallbacks* service_callbacks = AddServiceCallbacks();
225   service_callbacks->failure_callback = failure_callback;
226   service_callbacks->get_properties_callback = success_callback;
227
228   scoped_ptr<base::DictionaryValue> properties(new base::DictionaryValue);
229   std::string* error = new std::string;
230
231   base::DictionaryValue* properties_ptr = properties.get();
232   task_runner_->PostTaskAndReply(
233       FROM_HERE,
234       base::Bind(&WiFiService::GetState,
235                  base::Unretained(wifi_service_.get()),
236                  guid,
237                  properties_ptr,
238                  error),
239       base::Bind(&NetworkingPrivateServiceClient::AfterGetProperties,
240                  weak_factory_.GetWeakPtr(),
241                  service_callbacks->id,
242                  guid,
243                  base::Passed(&properties),
244                  base::Owned(error)));
245 }
246
247 void NetworkingPrivateServiceClient::SetProperties(
248     const std::string& guid,
249     scoped_ptr<base::DictionaryValue> properties,
250     const VoidCallback& success_callback,
251     const FailureCallback& failure_callback) {
252   ServiceCallbacks* service_callbacks = AddServiceCallbacks();
253   service_callbacks->failure_callback = failure_callback;
254   service_callbacks->set_properties_callback = success_callback;
255
256   std::string* error = new std::string;
257
258   task_runner_->PostTaskAndReply(
259       FROM_HERE,
260       base::Bind(&WiFiService::SetProperties,
261                  base::Unretained(wifi_service_.get()),
262                  guid,
263                  base::Passed(&properties),
264                  error),
265       base::Bind(&NetworkingPrivateServiceClient::AfterSetProperties,
266                  weak_factory_.GetWeakPtr(),
267                  service_callbacks->id,
268                  base::Owned(error)));
269 }
270
271 void NetworkingPrivateServiceClient::CreateNetwork(
272     bool shared,
273     scoped_ptr<base::DictionaryValue> properties,
274     const StringCallback& success_callback,
275     const FailureCallback& failure_callback) {
276   ServiceCallbacks* service_callbacks = AddServiceCallbacks();
277   service_callbacks->failure_callback = failure_callback;
278   service_callbacks->create_network_callback = success_callback;
279
280   std::string* network_guid = new std::string;
281   std::string* error = new std::string;
282
283   task_runner_->PostTaskAndReply(
284       FROM_HERE,
285       base::Bind(&WiFiService::CreateNetwork,
286                  base::Unretained(wifi_service_.get()),
287                  shared,
288                  base::Passed(&properties),
289                  network_guid,
290                  error),
291       base::Bind(&NetworkingPrivateServiceClient::AfterCreateNetwork,
292                  weak_factory_.GetWeakPtr(),
293                  service_callbacks->id,
294                  base::Owned(network_guid),
295                  base::Owned(error)));
296 }
297
298 void NetworkingPrivateServiceClient::GetNetworks(
299     const std::string& network_type,
300     bool configured_only,
301     bool visible_only,
302     int limit,
303     const NetworkListCallback& success_callback,
304     const FailureCallback& failure_callback) {
305   ServiceCallbacks* service_callbacks = AddServiceCallbacks();
306   service_callbacks->failure_callback = failure_callback;
307   service_callbacks->get_visible_networks_callback = success_callback;
308
309   scoped_ptr<base::ListValue> networks(new base::ListValue);
310
311   // TODO(stevenjb/mef): Apply filters (configured, visible, limit).
312
313   base::ListValue* networks_ptr = networks.get();
314   task_runner_->PostTaskAndReply(
315       FROM_HERE,
316       base::Bind(&WiFiService::GetVisibleNetworks,
317                  base::Unretained(wifi_service_.get()),
318                  network_type,
319                  networks_ptr,
320                  false),
321       base::Bind(&NetworkingPrivateServiceClient::AfterGetVisibleNetworks,
322                  weak_factory_.GetWeakPtr(),
323                  service_callbacks->id,
324                  base::Passed(&networks)));
325 }
326
327 void NetworkingPrivateServiceClient::StartConnect(
328     const std::string& guid,
329     const VoidCallback& success_callback,
330     const FailureCallback& failure_callback) {
331   ServiceCallbacks* service_callbacks = AddServiceCallbacks();
332   service_callbacks->failure_callback = failure_callback;
333   service_callbacks->start_connect_callback = success_callback;
334
335   std::string* error = new std::string;
336
337   task_runner_->PostTaskAndReply(
338       FROM_HERE,
339       base::Bind(&WiFiService::StartConnect,
340                  base::Unretained(wifi_service_.get()),
341                  guid,
342                  error),
343       base::Bind(&NetworkingPrivateServiceClient::AfterStartConnect,
344                  weak_factory_.GetWeakPtr(),
345                  service_callbacks->id,
346                  base::Owned(error)));
347 }
348
349 void NetworkingPrivateServiceClient::StartDisconnect(
350     const std::string& guid,
351     const VoidCallback& success_callback,
352     const FailureCallback& failure_callback) {
353   ServiceCallbacks* service_callbacks = AddServiceCallbacks();
354   service_callbacks->failure_callback = failure_callback;
355   service_callbacks->start_disconnect_callback = success_callback;
356
357   std::string* error = new std::string;
358
359   task_runner_->PostTaskAndReply(
360       FROM_HERE,
361       base::Bind(&WiFiService::StartDisconnect,
362                  base::Unretained(wifi_service_.get()),
363                  guid,
364                  error),
365       base::Bind(&NetworkingPrivateServiceClient::AfterStartDisconnect,
366                  weak_factory_.GetWeakPtr(),
367                  service_callbacks->id,
368                  base::Owned(error)));
369 }
370
371 void NetworkingPrivateServiceClient::VerifyDestination(
372     const VerificationProperties& verification_properties,
373     const BoolCallback& success_callback,
374     const FailureCallback& failure_callback) {
375   if (!crypto_verify_) {
376     failure_callback.Run(networking_private::kErrorNotSupported);
377     return;
378   }
379
380   ServiceCallbacks* service_callbacks = AddServiceCallbacks();
381   service_callbacks->failure_callback = failure_callback;
382   service_callbacks->verify_destination_callback = success_callback;
383
384   CryptoVerify::Credentials credentials;
385   if (!GetVerificationCredentials(verification_properties, &credentials)) {
386     failure_callback.Run(networking_private::kErrorEncryptionError);
387     return;
388   }
389
390   bool* result = new bool;
391   std::string* error = new std::string;
392
393   task_runner_->PostTaskAndReply(
394       FROM_HERE,
395       base::Bind(&CryptoVerify::VerifyDestination,
396                  base::Unretained(crypto_verify_.get()),
397                  credentials,
398                  result,
399                  error),
400       base::Bind(&NetworkingPrivateServiceClient::AfterVerifyDestination,
401                  weak_factory_.GetWeakPtr(),
402                  service_callbacks->id,
403                  base::Owned(result),
404                  base::Owned(error)));
405 }
406
407 void NetworkingPrivateServiceClient::VerifyAndEncryptCredentials(
408     const std::string& guid,
409     const VerificationProperties& verification_properties,
410     const StringCallback& success_callback,
411     const FailureCallback& failure_callback) {
412   if (!crypto_verify_) {
413     failure_callback.Run(networking_private::kErrorNotSupported);
414     return;
415   }
416
417   ServiceCallbacks* service_callbacks = AddServiceCallbacks();
418   service_callbacks->failure_callback = failure_callback;
419   service_callbacks->verify_and_encrypt_credentials_callback = success_callback;
420
421   CryptoVerify::Credentials credentials;
422   if (!GetVerificationCredentials(verification_properties, &credentials)) {
423     failure_callback.Run(networking_private::kErrorEncryptionError);
424     return;
425   }
426
427   CryptoVerify::VerifyAndEncryptCredentialsCallback callback_relay(base::Bind(
428       &AfterVerifyAndEncryptCredentialsRelay,
429       base::Bind(
430           &NetworkingPrivateServiceClient::AfterVerifyAndEncryptCredentials,
431           weak_factory_.GetWeakPtr(),
432           service_callbacks->id),
433       base::MessageLoopProxy::current()));
434
435   task_runner_->PostTask(FROM_HERE,
436                          base::Bind(&CryptoVerify::VerifyAndEncryptCredentials,
437                                     base::Unretained(crypto_verify_.get()),
438                                     guid,
439                                     credentials,
440                                     callback_relay));
441 }
442
443 void NetworkingPrivateServiceClient::VerifyAndEncryptData(
444     const VerificationProperties& verification_properties,
445     const std::string& data,
446     const StringCallback& success_callback,
447     const FailureCallback& failure_callback) {
448   if (!crypto_verify_) {
449     failure_callback.Run(networking_private::kErrorNotSupported);
450     return;
451   }
452
453   ServiceCallbacks* service_callbacks = AddServiceCallbacks();
454   service_callbacks->failure_callback = failure_callback;
455   service_callbacks->verify_and_encrypt_data_callback = success_callback;
456
457   CryptoVerify::Credentials credentials;
458   if (!GetVerificationCredentials(verification_properties, &credentials)) {
459     failure_callback.Run(networking_private::kErrorEncryptionError);
460     return;
461   }
462
463   std::string* result = new std::string;
464   std::string* error = new std::string;
465
466   task_runner_->PostTaskAndReply(
467       FROM_HERE,
468       base::Bind(&CryptoVerify::VerifyAndEncryptData,
469                  base::Unretained(crypto_verify_.get()),
470                  credentials,
471                  data,
472                  result,
473                  error),
474       base::Bind(&NetworkingPrivateServiceClient::AfterVerifyAndEncryptData,
475                  weak_factory_.GetWeakPtr(),
476                  service_callbacks->id,
477                  base::Owned(result),
478                  base::Owned(error)));
479 }
480
481 void NetworkingPrivateServiceClient::SetWifiTDLSEnabledState(
482     const std::string& ip_or_mac_address,
483     bool enabled,
484     const StringCallback& success_callback,
485     const FailureCallback& failure_callback) {
486   failure_callback.Run(networking_private::kErrorNotSupported);
487 }
488
489 void NetworkingPrivateServiceClient::GetWifiTDLSStatus(
490     const std::string& ip_or_mac_address,
491     const StringCallback& success_callback,
492     const FailureCallback& failure_callback) {
493   failure_callback.Run(networking_private::kErrorNotSupported);
494 }
495
496 void NetworkingPrivateServiceClient::GetCaptivePortalStatus(
497     const std::string& guid,
498     const StringCallback& success_callback,
499     const FailureCallback& failure_callback) {
500   failure_callback.Run(networking_private::kErrorNotSupported);
501 }
502
503 scoped_ptr<base::ListValue>
504 NetworkingPrivateServiceClient::GetEnabledNetworkTypes() {
505   scoped_ptr<base::ListValue> network_list;
506   return network_list.Pass();
507 }
508
509 bool NetworkingPrivateServiceClient::EnableNetworkType(
510     const std::string& type) {
511   return false;
512 }
513
514 bool NetworkingPrivateServiceClient::DisableNetworkType(
515     const std::string& type) {
516   return false;
517 }
518
519 bool NetworkingPrivateServiceClient::RequestScan() {
520   task_runner_->PostTask(
521       FROM_HERE,
522       base::Bind(&WiFiService::RequestNetworkScan,
523                  base::Unretained(wifi_service_.get())));
524   return true;
525 }
526
527 ////////////////////////////////////////////////////////////////////////////////
528
529 void NetworkingPrivateServiceClient::AfterGetProperties(
530     ServiceCallbacksID callback_id,
531     const std::string& network_guid,
532     scoped_ptr<base::DictionaryValue> properties,
533     const std::string* error) {
534   ServiceCallbacks* service_callbacks = callbacks_map_.Lookup(callback_id);
535   DCHECK(service_callbacks);
536   if (!error->empty()) {
537     DCHECK(!service_callbacks->failure_callback.is_null());
538     service_callbacks->failure_callback.Run(*error);
539   } else {
540     DCHECK(!service_callbacks->get_properties_callback.is_null());
541     service_callbacks->get_properties_callback.Run(properties.Pass());
542   }
543   RemoveServiceCallbacks(callback_id);
544 }
545
546 void NetworkingPrivateServiceClient::AfterGetVisibleNetworks(
547     ServiceCallbacksID callback_id,
548     scoped_ptr<base::ListValue> networks) {
549   ServiceCallbacks* service_callbacks = callbacks_map_.Lookup(callback_id);
550   DCHECK(service_callbacks);
551   DCHECK(!service_callbacks->get_visible_networks_callback.is_null());
552   service_callbacks->get_visible_networks_callback.Run(networks.Pass());
553   RemoveServiceCallbacks(callback_id);
554 }
555
556 void NetworkingPrivateServiceClient::AfterSetProperties(
557     ServiceCallbacksID callback_id,
558     const std::string* error) {
559   ServiceCallbacks* service_callbacks = callbacks_map_.Lookup(callback_id);
560   DCHECK(service_callbacks);
561   if (!error->empty()) {
562     DCHECK(!service_callbacks->failure_callback.is_null());
563     service_callbacks->failure_callback.Run(*error);
564   } else {
565     DCHECK(!service_callbacks->set_properties_callback.is_null());
566     service_callbacks->set_properties_callback.Run();
567   }
568   RemoveServiceCallbacks(callback_id);
569 }
570
571 void NetworkingPrivateServiceClient::AfterCreateNetwork(
572     ServiceCallbacksID callback_id,
573     const std::string* network_guid,
574     const std::string* error) {
575   ServiceCallbacks* service_callbacks = callbacks_map_.Lookup(callback_id);
576   DCHECK(service_callbacks);
577   if (!error->empty()) {
578     DCHECK(!service_callbacks->failure_callback.is_null());
579     service_callbacks->failure_callback.Run(*error);
580   } else {
581     DCHECK(!service_callbacks->create_network_callback.is_null());
582     service_callbacks->create_network_callback.Run(*network_guid);
583   }
584   RemoveServiceCallbacks(callback_id);
585 }
586
587 void NetworkingPrivateServiceClient::AfterStartConnect(
588     ServiceCallbacksID callback_id,
589     const std::string* error) {
590   ServiceCallbacks* service_callbacks = callbacks_map_.Lookup(callback_id);
591   DCHECK(service_callbacks);
592   if (!error->empty()) {
593     DCHECK(!service_callbacks->failure_callback.is_null());
594     service_callbacks->failure_callback.Run(*error);
595   } else {
596     DCHECK(!service_callbacks->start_connect_callback.is_null());
597     service_callbacks->start_connect_callback.Run();
598   }
599   RemoveServiceCallbacks(callback_id);
600 }
601
602 void NetworkingPrivateServiceClient::AfterStartDisconnect(
603     ServiceCallbacksID callback_id,
604     const std::string* error) {
605   ServiceCallbacks* service_callbacks = callbacks_map_.Lookup(callback_id);
606   DCHECK(service_callbacks);
607   if (!error->empty()) {
608     DCHECK(!service_callbacks->failure_callback.is_null());
609     service_callbacks->failure_callback.Run(*error);
610   } else {
611     DCHECK(!service_callbacks->start_disconnect_callback.is_null());
612     service_callbacks->start_disconnect_callback.Run();
613   }
614   RemoveServiceCallbacks(callback_id);
615 }
616
617 void NetworkingPrivateServiceClient::AfterVerifyDestination(
618     ServiceCallbacksID callback_id,
619     const bool* result,
620     const std::string* error) {
621   ServiceCallbacks* service_callbacks = callbacks_map_.Lookup(callback_id);
622   DCHECK(service_callbacks);
623   if (!error->empty()) {
624     DCHECK(!service_callbacks->failure_callback.is_null());
625     service_callbacks->failure_callback.Run(*error);
626   } else {
627     DCHECK(!service_callbacks->verify_destination_callback.is_null());
628     service_callbacks->verify_destination_callback.Run(*result);
629   }
630   RemoveServiceCallbacks(callback_id);
631 }
632
633 void NetworkingPrivateServiceClient::AfterVerifyAndEncryptCredentials(
634     ServiceCallbacksID callback_id,
635     const std::string& encrypted_data,
636     const std::string& error) {
637   DCHECK_CURRENTLY_ON(BrowserThread::UI);
638   ServiceCallbacks* service_callbacks = callbacks_map_.Lookup(callback_id);
639   DCHECK(service_callbacks);
640   if (!error.empty()) {
641     DCHECK(!service_callbacks->failure_callback.is_null());
642     service_callbacks->failure_callback.Run(error);
643   } else {
644     DCHECK(
645         !service_callbacks->verify_and_encrypt_credentials_callback.is_null());
646     service_callbacks->verify_and_encrypt_credentials_callback.Run(
647         encrypted_data);
648   }
649   RemoveServiceCallbacks(callback_id);
650 }
651
652 void NetworkingPrivateServiceClient::AfterVerifyAndEncryptData(
653     ServiceCallbacksID callback_id,
654     const std::string* result,
655     const std::string* error) {
656   ServiceCallbacks* service_callbacks = callbacks_map_.Lookup(callback_id);
657   DCHECK(service_callbacks);
658   if (!error->empty()) {
659     DCHECK(!service_callbacks->failure_callback.is_null());
660     service_callbacks->failure_callback.Run(*error);
661   } else {
662     DCHECK(!service_callbacks->verify_and_encrypt_data_callback.is_null());
663     service_callbacks->verify_and_encrypt_data_callback.Run(*result);
664   }
665   RemoveServiceCallbacks(callback_id);
666 }
667
668 void NetworkingPrivateServiceClient::OnNetworksChangedEventOnUIThread(
669     const std::vector<std::string>& network_guids) {
670   DCHECK_CURRENTLY_ON(BrowserThread::UI);
671   FOR_EACH_OBSERVER(Observer,
672                     network_events_observers_,
673                     OnNetworksChangedEvent(network_guids));
674 }
675
676 void NetworkingPrivateServiceClient::OnNetworkListChangedEventOnUIThread(
677     const std::vector<std::string>& network_guids) {
678   DCHECK_CURRENTLY_ON(BrowserThread::UI);
679   FOR_EACH_OBSERVER(Observer,
680                     network_events_observers_,
681                     OnNetworkListChangedEvent(network_guids));
682 }
683
684 }  // namespace extensions