1f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 2f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// found in the LICENSE file. 4f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 5f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/extensions/api/networking_private/networking_private_service_client.h" 6f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 7f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/base64.h" 8f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/bind.h" 9f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/sequenced_task_runner.h" 10f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/strings/string_number_conversions.h" 11f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/strings/string_util.h" 12f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/threading/worker_pool.h" 13f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/browser_process.h" 14116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chrome/browser/extensions/api/networking_private/networking_private_api.h" 15f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/common/extensions/api/networking_private.h" 16f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "content/public/browser/browser_thread.h" 17f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 18f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using content::BrowserThread; 19f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 20f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace extensions { 21f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 22f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace { 23f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 24f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)const char kNetworkingPrivateSequenceTokenName[] = "NetworkingPrivate"; 25f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 26116680a4aac90f2aa7413d9095a592090648e557Ben Murdochbool GetVerificationCredentials( 27116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const NetworkingPrivateDelegate::VerificationProperties& properties, 28116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch NetworkingPrivateServiceClient::CryptoVerify::Credentials* credentials) { 29116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch std::vector<std::string> data_parts; 30116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch data_parts.push_back(properties.device_ssid); 31116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch data_parts.push_back(properties.device_serial); 32116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch data_parts.push_back(properties.device_bssid); 33116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch data_parts.push_back(properties.public_key); 34116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch data_parts.push_back(properties.nonce); 35116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch credentials->unsigned_data = JoinString(data_parts, ","); 36116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (!base::Base64Decode(properties.signed_data, &credentials->signed_data)) { 37116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch LOG(ERROR) << "Failed to decode signed data: " << properties.signed_data; 38116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return false; 39116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 40116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch credentials->certificate = properties.certificate; 41116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch credentials->device_bssid = properties.device_bssid; 42116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (!base::Base64Decode(properties.public_key, &credentials->public_key)) { 43116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch LOG(ERROR) << "Failed to decode public key"; 44116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return false; 45116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 46116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return true; 47116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 48116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 49f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Deletes WiFiService and CryptoVerify objects on worker thread. 50f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void ShutdownServicesOnWorkerThread( 51f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) scoped_ptr<wifi::WiFiService> wifi_service, 52f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) scoped_ptr<NetworkingPrivateServiceClient::CryptoVerify> crypto_verify) { 53f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) DCHECK(wifi_service.get()); 54f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) DCHECK(crypto_verify.get()); 55f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 56f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 57a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// Forwards call back from VerifyAndEncryptCredentials on random thread to 58a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// |callback| on correct |callback_loop_proxy|. 59a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void AfterVerifyAndEncryptCredentialsRelay( 60a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const NetworkingPrivateServiceClient::CryptoVerify:: 61a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) VerifyAndEncryptCredentialsCallback& callback, 62a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) scoped_refptr<base::MessageLoopProxy> callback_loop_proxy, 63a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const std::string& key_data, 64a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const std::string& error) { 65a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) callback_loop_proxy->PostTask(FROM_HERE, 66a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::Bind(callback, key_data, error)); 67a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 68a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 69f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} // namespace 70f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 716e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)NetworkingPrivateServiceClient::CryptoVerify::CryptoVerify() {} 726e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)NetworkingPrivateServiceClient::CryptoVerify::~CryptoVerify() {} 736e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 74116680a4aac90f2aa7413d9095a592090648e557Ben MurdochNetworkingPrivateServiceClient::CryptoVerify::Credentials::Credentials() {} 75116680a4aac90f2aa7413d9095a592090648e557Ben MurdochNetworkingPrivateServiceClient::CryptoVerify::Credentials::~Credentials() {} 76116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 77f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)NetworkingPrivateServiceClient::NetworkingPrivateServiceClient( 78f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) wifi::WiFiService* wifi_service, 79f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CryptoVerify* crypto_verify) 80f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) : crypto_verify_(crypto_verify), 81f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) wifi_service_(wifi_service), 82f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) weak_factory_(this) { 83f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) sequence_token_ = BrowserThread::GetBlockingPool()-> 84f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) GetNamedSequenceToken(kNetworkingPrivateSequenceTokenName); 85f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) task_runner_ = BrowserThread::GetBlockingPool()-> 86f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) GetSequencedTaskRunnerWithShutdownBehavior( 87f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) sequence_token_, 88f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::SequencedWorkerPool::CONTINUE_ON_SHUTDOWN); 89f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) task_runner_->PostTask( 90f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) FROM_HERE, 91f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::Bind( 92a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) &WiFiService::Initialize, 93a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::Unretained(wifi_service_.get()), 94a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) task_runner_)); 95a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) task_runner_->PostTask( 96a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) FROM_HERE, 97a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::Bind( 98f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) &WiFiService::SetEventObservers, 99f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::Unretained(wifi_service_.get()), 100f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::MessageLoopProxy::current(), 101f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::Bind( 102f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) &NetworkingPrivateServiceClient::OnNetworksChangedEventOnUIThread, 103f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) weak_factory_.GetWeakPtr()), 104f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::Bind( 105f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) &NetworkingPrivateServiceClient:: 106f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) OnNetworkListChangedEventOnUIThread, 107f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) weak_factory_.GetWeakPtr()))); 1085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) net::NetworkChangeNotifier::AddNetworkChangeObserver(this); 109f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 110f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 111f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)NetworkingPrivateServiceClient::~NetworkingPrivateServiceClient() { 112f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Verify that these objects were passed to ShutdownServicesOnWorkerThread to 113f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // be deleted after completion of all posted tasks. 114f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) DCHECK(!wifi_service_.get()); 115f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) DCHECK(!crypto_verify_.get()); 116f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 117f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 118f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)NetworkingPrivateServiceClient::ServiceCallbacks::ServiceCallbacks() {} 119f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 120f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)NetworkingPrivateServiceClient::ServiceCallbacks::~ServiceCallbacks() {} 121f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 122f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void NetworkingPrivateServiceClient::Shutdown() { 123effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch DCHECK_CURRENTLY_ON(BrowserThread::UI); 1245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) net::NetworkChangeNotifier::RemoveNetworkChangeObserver(this); 125f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Clear callbacks map to release callbacks from UI thread. 126f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) callbacks_map_.Clear(); 127f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Post ShutdownServicesOnWorkerThread task to delete services when all posted 128f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // tasks are done. 129f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) task_runner_->PostTask( 130f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) FROM_HERE, 131f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::Bind(&ShutdownServicesOnWorkerThread, 132f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::Passed(&wifi_service_), 133f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::Passed(&crypto_verify_))); 134f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 135f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 136f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void NetworkingPrivateServiceClient::AddObserver(Observer* observer) { 137f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) network_events_observers_.AddObserver(observer); 138f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 139f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 140f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void NetworkingPrivateServiceClient::RemoveObserver(Observer* observer) { 141f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) network_events_observers_.RemoveObserver(observer); 142f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 143f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 1445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void NetworkingPrivateServiceClient::OnNetworkChanged( 1455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) net::NetworkChangeNotifier::ConnectionType type) { 1465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) task_runner_->PostTask( 1475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) FROM_HERE, 1485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::Bind(&WiFiService::RequestConnectedNetworkUpdate, 1495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::Unretained(wifi_service_.get()))); 1505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 1515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 152f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)NetworkingPrivateServiceClient::ServiceCallbacks* 153f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)NetworkingPrivateServiceClient::AddServiceCallbacks() { 154f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ServiceCallbacks* service_callbacks = new ServiceCallbacks(); 155f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) service_callbacks->id = callbacks_map_.Add(service_callbacks); 156f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return service_callbacks; 157f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 158f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 159f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void NetworkingPrivateServiceClient::RemoveServiceCallbacks( 160f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ServiceCallbacksID callback_id) { 161f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) callbacks_map_.Remove(callback_id); 162f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 163f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 164116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// NetworkingPrivateServiceClient implementation 165116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 166f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void NetworkingPrivateServiceClient::GetProperties( 167116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const std::string& guid, 168116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const DictionaryCallback& success_callback, 169116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const FailureCallback& failure_callback) { 170f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ServiceCallbacks* service_callbacks = AddServiceCallbacks(); 171116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch service_callbacks->failure_callback = failure_callback; 172116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch service_callbacks->get_properties_callback = success_callback; 173f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 174116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch scoped_ptr<base::DictionaryValue> properties(new base::DictionaryValue); 175f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) std::string* error = new std::string; 176f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 1771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::DictionaryValue* properties_ptr = properties.get(); 178f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) task_runner_->PostTaskAndReply( 179f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) FROM_HERE, 180f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::Bind(&WiFiService::GetProperties, 181f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::Unretained(wifi_service_.get()), 182116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch guid, 1831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci properties_ptr, 184f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) error), 185f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::Bind(&NetworkingPrivateServiceClient::AfterGetProperties, 186f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) weak_factory_.GetWeakPtr(), 187f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) service_callbacks->id, 188116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch guid, 189116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::Passed(&properties), 190f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::Owned(error))); 191f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 192f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 193a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)void NetworkingPrivateServiceClient::GetManagedProperties( 194116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const std::string& guid, 195116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const DictionaryCallback& success_callback, 196116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const FailureCallback& failure_callback) { 197a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ServiceCallbacks* service_callbacks = AddServiceCallbacks(); 198116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch service_callbacks->failure_callback = failure_callback; 199116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch service_callbacks->get_properties_callback = success_callback; 200a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 201116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch scoped_ptr<base::DictionaryValue> properties(new base::DictionaryValue); 202a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) std::string* error = new std::string; 203a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 2041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::DictionaryValue* properties_ptr = properties.get(); 205a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) task_runner_->PostTaskAndReply( 206a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) FROM_HERE, 207a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::Bind(&WiFiService::GetManagedProperties, 208a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::Unretained(wifi_service_.get()), 209116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch guid, 2101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci properties_ptr, 211a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) error), 212a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::Bind(&NetworkingPrivateServiceClient::AfterGetProperties, 213a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) weak_factory_.GetWeakPtr(), 214a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) service_callbacks->id, 215116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch guid, 216116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::Passed(&properties), 217a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::Owned(error))); 218a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)} 219a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 220a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)void NetworkingPrivateServiceClient::GetState( 221116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const std::string& guid, 222116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const DictionaryCallback& success_callback, 223116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const FailureCallback& failure_callback) { 224a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ServiceCallbacks* service_callbacks = AddServiceCallbacks(); 225116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch service_callbacks->failure_callback = failure_callback; 226116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch service_callbacks->get_properties_callback = success_callback; 227a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 228116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch scoped_ptr<base::DictionaryValue> properties(new base::DictionaryValue); 229a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) std::string* error = new std::string; 230a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 2311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::DictionaryValue* properties_ptr = properties.get(); 232a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) task_runner_->PostTaskAndReply( 233a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) FROM_HERE, 234a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::Bind(&WiFiService::GetState, 235a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::Unretained(wifi_service_.get()), 236116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch guid, 2371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci properties_ptr, 238a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) error), 239a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::Bind(&NetworkingPrivateServiceClient::AfterGetProperties, 240a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) weak_factory_.GetWeakPtr(), 241a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) service_callbacks->id, 242116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch guid, 243116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::Passed(&properties), 244a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::Owned(error))); 245a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)} 246a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 247f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void NetworkingPrivateServiceClient::SetProperties( 248116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const std::string& guid, 249116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch scoped_ptr<base::DictionaryValue> properties, 250116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const VoidCallback& success_callback, 251116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const FailureCallback& failure_callback) { 252f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ServiceCallbacks* service_callbacks = AddServiceCallbacks(); 253116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch service_callbacks->failure_callback = failure_callback; 254116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch service_callbacks->set_properties_callback = success_callback; 255f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 256f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) std::string* error = new std::string; 257f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 258f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) task_runner_->PostTaskAndReply( 259f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) FROM_HERE, 260f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::Bind(&WiFiService::SetProperties, 261f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::Unretained(wifi_service_.get()), 262116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch guid, 263116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::Passed(&properties), 264f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) error), 265f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::Bind(&NetworkingPrivateServiceClient::AfterSetProperties, 266f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) weak_factory_.GetWeakPtr(), 267f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) service_callbacks->id, 268f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::Owned(error))); 269f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 270f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 271a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)void NetworkingPrivateServiceClient::CreateNetwork( 272a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) bool shared, 273116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch scoped_ptr<base::DictionaryValue> properties, 274116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const StringCallback& success_callback, 275116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const FailureCallback& failure_callback) { 276a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ServiceCallbacks* service_callbacks = AddServiceCallbacks(); 277116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch service_callbacks->failure_callback = failure_callback; 278116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch service_callbacks->create_network_callback = success_callback; 279a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 280a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) std::string* network_guid = new std::string; 281a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) std::string* error = new std::string; 282a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 283a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) task_runner_->PostTaskAndReply( 284a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) FROM_HERE, 285a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::Bind(&WiFiService::CreateNetwork, 286a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::Unretained(wifi_service_.get()), 287a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) shared, 288116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::Passed(&properties), 289a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) network_guid, 290a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) error), 291a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::Bind(&NetworkingPrivateServiceClient::AfterCreateNetwork, 292a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) weak_factory_.GetWeakPtr(), 293a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) service_callbacks->id, 294a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::Owned(network_guid), 295a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::Owned(error))); 296a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)} 297f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 298116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid NetworkingPrivateServiceClient::GetNetworks( 299116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const std::string& network_type, 300116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bool configured_only, 301116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bool visible_only, 302116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch int limit, 303116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const NetworkListCallback& success_callback, 304116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const FailureCallback& failure_callback) { 305116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ServiceCallbacks* service_callbacks = AddServiceCallbacks(); 306116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch service_callbacks->failure_callback = failure_callback; 307116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch service_callbacks->get_visible_networks_callback = success_callback; 308116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 309116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch scoped_ptr<base::ListValue> networks(new base::ListValue); 310116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 311116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // TODO(stevenjb/mef): Apply filters (configured, visible, limit). 312116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 3131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::ListValue* networks_ptr = networks.get(); 314116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch task_runner_->PostTaskAndReply( 315116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch FROM_HERE, 316116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::Bind(&WiFiService::GetVisibleNetworks, 317116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::Unretained(wifi_service_.get()), 318116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch network_type, 3191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci networks_ptr, 320116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch false), 321116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::Bind(&NetworkingPrivateServiceClient::AfterGetVisibleNetworks, 322116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch weak_factory_.GetWeakPtr(), 323116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch service_callbacks->id, 324116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::Passed(&networks))); 325116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 326116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 327f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void NetworkingPrivateServiceClient::StartConnect( 328116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const std::string& guid, 329116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const VoidCallback& success_callback, 330116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const FailureCallback& failure_callback) { 331f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ServiceCallbacks* service_callbacks = AddServiceCallbacks(); 332116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch service_callbacks->failure_callback = failure_callback; 333116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch service_callbacks->start_connect_callback = success_callback; 334f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 335f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) std::string* error = new std::string; 336f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 337f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) task_runner_->PostTaskAndReply( 338f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) FROM_HERE, 339f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::Bind(&WiFiService::StartConnect, 340f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::Unretained(wifi_service_.get()), 341116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch guid, 342f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) error), 343f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::Bind(&NetworkingPrivateServiceClient::AfterStartConnect, 344f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) weak_factory_.GetWeakPtr(), 345f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) service_callbacks->id, 346f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::Owned(error))); 347f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 348f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 349f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void NetworkingPrivateServiceClient::StartDisconnect( 350116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const std::string& guid, 351116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const VoidCallback& success_callback, 352116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const FailureCallback& failure_callback) { 353f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ServiceCallbacks* service_callbacks = AddServiceCallbacks(); 354116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch service_callbacks->failure_callback = failure_callback; 355116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch service_callbacks->start_disconnect_callback = success_callback; 356f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 357f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) std::string* error = new std::string; 358f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 359f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) task_runner_->PostTaskAndReply( 360f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) FROM_HERE, 361f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::Bind(&WiFiService::StartDisconnect, 362f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::Unretained(wifi_service_.get()), 363116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch guid, 364f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) error), 365f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::Bind(&NetworkingPrivateServiceClient::AfterStartDisconnect, 366f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) weak_factory_.GetWeakPtr(), 367f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) service_callbacks->id, 368f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::Owned(error))); 369f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 370f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 371f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void NetworkingPrivateServiceClient::VerifyDestination( 372116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const VerificationProperties& verification_properties, 373116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const BoolCallback& success_callback, 374116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const FailureCallback& failure_callback) { 3756e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) if (!crypto_verify_) { 3766e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) failure_callback.Run(networking_private::kErrorNotSupported); 3776e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) return; 3786e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } 3796e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 380f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ServiceCallbacks* service_callbacks = AddServiceCallbacks(); 381116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch service_callbacks->failure_callback = failure_callback; 382116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch service_callbacks->verify_destination_callback = success_callback; 383116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 384116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch CryptoVerify::Credentials credentials; 385116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (!GetVerificationCredentials(verification_properties, &credentials)) { 386116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch failure_callback.Run(networking_private::kErrorEncryptionError); 387116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return; 388116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 389f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 390f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) bool* result = new bool; 391f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) std::string* error = new std::string; 392f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 393f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) task_runner_->PostTaskAndReply( 394f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) FROM_HERE, 395f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::Bind(&CryptoVerify::VerifyDestination, 396f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::Unretained(crypto_verify_.get()), 397116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch credentials, 398f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) result, 399f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) error), 400f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::Bind(&NetworkingPrivateServiceClient::AfterVerifyDestination, 401f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) weak_factory_.GetWeakPtr(), 402f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) service_callbacks->id, 403f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::Owned(result), 404f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::Owned(error))); 405f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 406f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 407a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void NetworkingPrivateServiceClient::VerifyAndEncryptCredentials( 408116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const std::string& guid, 409116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const VerificationProperties& verification_properties, 410116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const StringCallback& success_callback, 411116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const FailureCallback& failure_callback) { 4126e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) if (!crypto_verify_) { 4136e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) failure_callback.Run(networking_private::kErrorNotSupported); 4146e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) return; 4156e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } 4166e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 417a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ServiceCallbacks* service_callbacks = AddServiceCallbacks(); 418116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch service_callbacks->failure_callback = failure_callback; 419116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch service_callbacks->verify_and_encrypt_credentials_callback = success_callback; 420116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 421116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch CryptoVerify::Credentials credentials; 422116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (!GetVerificationCredentials(verification_properties, &credentials)) { 423116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch failure_callback.Run(networking_private::kErrorEncryptionError); 424116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return; 425116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 426a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 427a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) CryptoVerify::VerifyAndEncryptCredentialsCallback callback_relay(base::Bind( 428a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) &AfterVerifyAndEncryptCredentialsRelay, 429a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::Bind( 430a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) &NetworkingPrivateServiceClient::AfterVerifyAndEncryptCredentials, 431a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) weak_factory_.GetWeakPtr(), 432a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) service_callbacks->id), 433a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::MessageLoopProxy::current())); 434a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 435a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) task_runner_->PostTask(FROM_HERE, 436a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::Bind(&CryptoVerify::VerifyAndEncryptCredentials, 437a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::Unretained(crypto_verify_.get()), 438116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch guid, 439116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch credentials, 440a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) callback_relay)); 441a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 442a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 443f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void NetworkingPrivateServiceClient::VerifyAndEncryptData( 444116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const VerificationProperties& verification_properties, 445116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const std::string& data, 446116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const StringCallback& success_callback, 447116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const FailureCallback& failure_callback) { 4486e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) if (!crypto_verify_) { 4496e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) failure_callback.Run(networking_private::kErrorNotSupported); 4506e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) return; 4516e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } 4526e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 453f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ServiceCallbacks* service_callbacks = AddServiceCallbacks(); 454116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch service_callbacks->failure_callback = failure_callback; 455116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch service_callbacks->verify_and_encrypt_data_callback = success_callback; 456116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 457116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch CryptoVerify::Credentials credentials; 458116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (!GetVerificationCredentials(verification_properties, &credentials)) { 459116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch failure_callback.Run(networking_private::kErrorEncryptionError); 460116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return; 461116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 462f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 463f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) std::string* result = new std::string; 464f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) std::string* error = new std::string; 465f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 466f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) task_runner_->PostTaskAndReply( 467f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) FROM_HERE, 468f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::Bind(&CryptoVerify::VerifyAndEncryptData, 469f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::Unretained(crypto_verify_.get()), 470116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch credentials, 471116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch data, 472f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) result, 473f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) error), 474f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::Bind(&NetworkingPrivateServiceClient::AfterVerifyAndEncryptData, 475f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) weak_factory_.GetWeakPtr(), 476f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) service_callbacks->id, 477f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::Owned(result), 478f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::Owned(error))); 479f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 480f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 481116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid NetworkingPrivateServiceClient::SetWifiTDLSEnabledState( 482116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const std::string& ip_or_mac_address, 483116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bool enabled, 484116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const StringCallback& success_callback, 485116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const FailureCallback& failure_callback) { 486116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch failure_callback.Run(networking_private::kErrorNotSupported); 487116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 488116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 489116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid NetworkingPrivateServiceClient::GetWifiTDLSStatus( 490116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const std::string& ip_or_mac_address, 491116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const StringCallback& success_callback, 492116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const FailureCallback& failure_callback) { 493116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch failure_callback.Run(networking_private::kErrorNotSupported); 494116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 495116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 496116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid NetworkingPrivateServiceClient::GetCaptivePortalStatus( 497116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const std::string& guid, 498116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const StringCallback& success_callback, 499116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const FailureCallback& failure_callback) { 500116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch failure_callback.Run(networking_private::kErrorNotSupported); 501116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 502116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 503116680a4aac90f2aa7413d9095a592090648e557Ben Murdochscoped_ptr<base::ListValue> 504116680a4aac90f2aa7413d9095a592090648e557Ben MurdochNetworkingPrivateServiceClient::GetEnabledNetworkTypes() { 505116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch scoped_ptr<base::ListValue> network_list; 506116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return network_list.Pass(); 507116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 508116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 509116680a4aac90f2aa7413d9095a592090648e557Ben Murdochbool NetworkingPrivateServiceClient::EnableNetworkType( 510116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const std::string& type) { 511116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return false; 512116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 513116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 514116680a4aac90f2aa7413d9095a592090648e557Ben Murdochbool NetworkingPrivateServiceClient::DisableNetworkType( 515116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const std::string& type) { 516116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return false; 517116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 518116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 519116680a4aac90f2aa7413d9095a592090648e557Ben Murdochbool NetworkingPrivateServiceClient::RequestScan() { 520116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch task_runner_->PostTask( 521116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch FROM_HERE, 522116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::Bind(&WiFiService::RequestNetworkScan, 523116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::Unretained(wifi_service_.get()))); 524116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return true; 525116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 526116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 527116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch//////////////////////////////////////////////////////////////////////////////// 528116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 529f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void NetworkingPrivateServiceClient::AfterGetProperties( 530f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ServiceCallbacksID callback_id, 531f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const std::string& network_guid, 532116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch scoped_ptr<base::DictionaryValue> properties, 533f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const std::string* error) { 534f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ServiceCallbacks* service_callbacks = callbacks_map_.Lookup(callback_id); 535f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) DCHECK(service_callbacks); 536f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (!error->empty()) { 537116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch DCHECK(!service_callbacks->failure_callback.is_null()); 538116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch service_callbacks->failure_callback.Run(*error); 539f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } else { 540f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) DCHECK(!service_callbacks->get_properties_callback.is_null()); 541116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch service_callbacks->get_properties_callback.Run(properties.Pass()); 542f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 543f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RemoveServiceCallbacks(callback_id); 544f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 545f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 546f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void NetworkingPrivateServiceClient::AfterGetVisibleNetworks( 547f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ServiceCallbacksID callback_id, 548116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch scoped_ptr<base::ListValue> networks) { 549f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ServiceCallbacks* service_callbacks = callbacks_map_.Lookup(callback_id); 550f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) DCHECK(service_callbacks); 551f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) DCHECK(!service_callbacks->get_visible_networks_callback.is_null()); 552116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch service_callbacks->get_visible_networks_callback.Run(networks.Pass()); 553f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RemoveServiceCallbacks(callback_id); 554f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 555f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 556f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void NetworkingPrivateServiceClient::AfterSetProperties( 557f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ServiceCallbacksID callback_id, 558f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const std::string* error) { 559f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ServiceCallbacks* service_callbacks = callbacks_map_.Lookup(callback_id); 560f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) DCHECK(service_callbacks); 561f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (!error->empty()) { 562116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch DCHECK(!service_callbacks->failure_callback.is_null()); 563116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch service_callbacks->failure_callback.Run(*error); 564f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } else { 565f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) DCHECK(!service_callbacks->set_properties_callback.is_null()); 566f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) service_callbacks->set_properties_callback.Run(); 567f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 568f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RemoveServiceCallbacks(callback_id); 569f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 570f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 571a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)void NetworkingPrivateServiceClient::AfterCreateNetwork( 572a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ServiceCallbacksID callback_id, 573a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const std::string* network_guid, 574a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const std::string* error) { 575a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ServiceCallbacks* service_callbacks = callbacks_map_.Lookup(callback_id); 576a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) DCHECK(service_callbacks); 577a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) if (!error->empty()) { 578116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch DCHECK(!service_callbacks->failure_callback.is_null()); 579116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch service_callbacks->failure_callback.Run(*error); 580a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) } else { 581a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) DCHECK(!service_callbacks->create_network_callback.is_null()); 582a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) service_callbacks->create_network_callback.Run(*network_guid); 583a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) } 584a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) RemoveServiceCallbacks(callback_id); 585a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)} 586a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 587f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void NetworkingPrivateServiceClient::AfterStartConnect( 588f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ServiceCallbacksID callback_id, 589f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const std::string* error) { 590f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ServiceCallbacks* service_callbacks = callbacks_map_.Lookup(callback_id); 591f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) DCHECK(service_callbacks); 592f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (!error->empty()) { 593116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch DCHECK(!service_callbacks->failure_callback.is_null()); 594116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch service_callbacks->failure_callback.Run(*error); 595f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } else { 596f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) DCHECK(!service_callbacks->start_connect_callback.is_null()); 597f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) service_callbacks->start_connect_callback.Run(); 598f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 599f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RemoveServiceCallbacks(callback_id); 600f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 601f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 602f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void NetworkingPrivateServiceClient::AfterStartDisconnect( 603f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ServiceCallbacksID callback_id, 604f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const std::string* error) { 605f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ServiceCallbacks* service_callbacks = callbacks_map_.Lookup(callback_id); 606f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) DCHECK(service_callbacks); 607f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (!error->empty()) { 608116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch DCHECK(!service_callbacks->failure_callback.is_null()); 609116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch service_callbacks->failure_callback.Run(*error); 610f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } else { 611f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) DCHECK(!service_callbacks->start_disconnect_callback.is_null()); 612f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) service_callbacks->start_disconnect_callback.Run(); 613f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 614f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RemoveServiceCallbacks(callback_id); 615f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 616f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 617f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void NetworkingPrivateServiceClient::AfterVerifyDestination( 618f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ServiceCallbacksID callback_id, 619f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const bool* result, 620f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const std::string* error) { 621f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ServiceCallbacks* service_callbacks = callbacks_map_.Lookup(callback_id); 622f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) DCHECK(service_callbacks); 623f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (!error->empty()) { 624116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch DCHECK(!service_callbacks->failure_callback.is_null()); 625116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch service_callbacks->failure_callback.Run(*error); 626f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } else { 627f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) DCHECK(!service_callbacks->verify_destination_callback.is_null()); 628f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) service_callbacks->verify_destination_callback.Run(*result); 629f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 630f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RemoveServiceCallbacks(callback_id); 631f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 632f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 633a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void NetworkingPrivateServiceClient::AfterVerifyAndEncryptCredentials( 634a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ServiceCallbacksID callback_id, 635a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const std::string& encrypted_data, 636a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const std::string& error) { 637effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch DCHECK_CURRENTLY_ON(BrowserThread::UI); 638a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ServiceCallbacks* service_callbacks = callbacks_map_.Lookup(callback_id); 639a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) DCHECK(service_callbacks); 640a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (!error.empty()) { 641116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch DCHECK(!service_callbacks->failure_callback.is_null()); 642116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch service_callbacks->failure_callback.Run(error); 643a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } else { 644a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) DCHECK( 645a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) !service_callbacks->verify_and_encrypt_credentials_callback.is_null()); 646a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) service_callbacks->verify_and_encrypt_credentials_callback.Run( 647a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) encrypted_data); 648a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 649a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) RemoveServiceCallbacks(callback_id); 650a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 651a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 652f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void NetworkingPrivateServiceClient::AfterVerifyAndEncryptData( 653f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ServiceCallbacksID callback_id, 654f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const std::string* result, 655f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const std::string* error) { 656f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ServiceCallbacks* service_callbacks = callbacks_map_.Lookup(callback_id); 657f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) DCHECK(service_callbacks); 658f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (!error->empty()) { 659116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch DCHECK(!service_callbacks->failure_callback.is_null()); 660116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch service_callbacks->failure_callback.Run(*error); 661f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } else { 662f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) DCHECK(!service_callbacks->verify_and_encrypt_data_callback.is_null()); 663f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) service_callbacks->verify_and_encrypt_data_callback.Run(*result); 664f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 665f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RemoveServiceCallbacks(callback_id); 666f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 667f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 668f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void NetworkingPrivateServiceClient::OnNetworksChangedEventOnUIThread( 669f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const std::vector<std::string>& network_guids) { 670effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch DCHECK_CURRENTLY_ON(BrowserThread::UI); 671f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) FOR_EACH_OBSERVER(Observer, 672f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) network_events_observers_, 673f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) OnNetworksChangedEvent(network_guids)); 674f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 675f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 676f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void NetworkingPrivateServiceClient::OnNetworkListChangedEventOnUIThread( 677f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const std::vector<std::string>& network_guids) { 678effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch DCHECK_CURRENTLY_ON(BrowserThread::UI); 679f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) FOR_EACH_OBSERVER(Observer, 680f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) network_events_observers_, 681f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) OnNetworkListChangedEvent(network_guids)); 682f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 683f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 684f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} // namespace extensions 685