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)#ifndef CHROME_BROWSER_EXTENSIONS_API_NETWORKING_PRIVATE_NETWORKING_PRIVATE_SERVICE_CLIENT_H_ 6f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#define CHROME_BROWSER_EXTENSIONS_API_NETWORKING_PRIVATE_NETWORKING_PRIVATE_SERVICE_CLIENT_H_ 7f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 8f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include <string> 9f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include <vector> 10f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 11f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/basictypes.h" 12f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/compiler_specific.h" 13f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/id_map.h" 14f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/memory/weak_ptr.h" 15f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/observer_list.h" 16f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/strings/string16.h" 17f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/supports_user_data.h" 18f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/threading/sequenced_worker_pool.h" 19f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/values.h" 20116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chrome/browser/extensions/api/networking_private/networking_private_delegate.h" 21a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "components/keyed_service/core/keyed_service.h" 22f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "components/wifi/wifi_service.h" 23f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "content/public/browser/utility_process_host.h" 24f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "content/public/browser/utility_process_host_client.h" 255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "net/base/network_change_notifier.h" 26f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 27f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace base { 28f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class SequencedTaskRunner; 29f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 30f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 31f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace wifi { 32f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class WiFiService; 33f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 34f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 35f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace extensions { 36f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 37f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using wifi::WiFiService; 38f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 39116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Windows / Mac NetworkingPrivateApi implementation. This implements 40116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// WiFiService and CryptoVerify interfaces and invokes them on the worker 41116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// thread. Observes |OnNetworkChanged| notifications and posts them to 42116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// WiFiService on the worker thread to |UpdateConnectedNetwork|. Created and 43116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// called from the UI thread. 445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class NetworkingPrivateServiceClient 45a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) : public KeyedService, 46116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch public NetworkingPrivateDelegate, 475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) net::NetworkChangeNotifier::NetworkChangeObserver { 48f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) public: 49f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Interface for Verify* methods implementation. 50f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) class CryptoVerify { 51f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) public: 52a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) typedef base::Callback< 53a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) void(const std::string& key_data, const std::string& error)> 54a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) VerifyAndEncryptCredentialsCallback; 55a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 56116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // TODO(stevenjb): Remove this when addressing crbug.com/394481 57116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch struct Credentials { 58116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch Credentials(); 59116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ~Credentials(); 60116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch std::string certificate; 61116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch std::string signed_data; 62116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch std::string unsigned_data; 63116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch std::string device_bssid; 64116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch std::string public_key; 65116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch }; 66116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 676e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) CryptoVerify(); 686e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) virtual ~CryptoVerify(); 69f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 706e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // Must be provided by the implementation. May return NULL if certificate 716e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // verification is unavailable, see NetworkingPrivateServiceClient(). 72f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) static CryptoVerify* Create(); 73f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 74116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual void VerifyDestination(const Credentials& credentials, 75f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) bool* verified, 76f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) std::string* error) = 0; 77f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 78a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) virtual void VerifyAndEncryptCredentials( 79116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const std::string& network_guid, 80116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const Credentials& credentials, 81a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const VerifyAndEncryptCredentialsCallback& callback) = 0; 82a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 83116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual void VerifyAndEncryptData(const Credentials& credentials, 84116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const std::string& data, 85f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) std::string* base64_encoded_ciphertext, 86f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) std::string* error) = 0; 87116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 88f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) private: 89f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(CryptoVerify); 90f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) }; 91f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 92f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Interface for observing Network Events. 93f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) class Observer { 94f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) public: 95f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Observer() {} 96f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual ~Observer() {} 97f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 98f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual void OnNetworksChangedEvent( 99f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const std::vector<std::string>& network_guids) = 0; 100f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual void OnNetworkListChangedEvent( 101f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const std::vector<std::string>& network_guids) = 0; 102f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 103f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) private: 104f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(Observer); 105f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) }; 106f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 107f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Takes ownership of |wifi_service| and |crypto_verify|. They are accessed 108f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // and deleted on the worker thread. The deletion task is posted during the 1096e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // NetworkingPrivateServiceClient shutdown. |crypto_verify| may be NULL in 1106e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // which case Verify* will return a 'not implemented' error. 111f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) NetworkingPrivateServiceClient(wifi::WiFiService* wifi_service, 112f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CryptoVerify* crypto_verify); 113f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 114116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // KeyedService 115f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual void Shutdown() OVERRIDE; 116f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 117116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // NetworkingPrivateDelegate 118116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual void GetProperties(const std::string& guid, 119116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const DictionaryCallback& success_callback, 120116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const FailureCallback& failure_callback) OVERRIDE; 121116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual void GetManagedProperties( 122116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const std::string& guid, 123116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const DictionaryCallback& success_callback, 124116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const FailureCallback& failure_callback) OVERRIDE; 125116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual void GetState(const std::string& guid, 126116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const DictionaryCallback& success_callback, 127116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const FailureCallback& failure_callback) OVERRIDE; 128116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual void SetProperties(const std::string& guid, 129116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch scoped_ptr<base::DictionaryValue> properties_dict, 130116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const VoidCallback& success_callback, 131116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const FailureCallback& failure_callback) OVERRIDE; 132116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual void CreateNetwork(bool shared, 133116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch scoped_ptr<base::DictionaryValue> properties_dict, 134116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const StringCallback& success_callback, 135116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const FailureCallback& failure_callback) OVERRIDE; 136116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual void GetNetworks(const std::string& network_type, 137116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bool configured_only, 138116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bool visible_only, 139116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch int limit, 140116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const NetworkListCallback& success_callback, 141116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const FailureCallback& failure_callback) OVERRIDE; 142116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual void StartConnect(const std::string& guid, 143116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const VoidCallback& success_callback, 144116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const FailureCallback& failure_callback) OVERRIDE; 145116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual void StartDisconnect( 146116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const std::string& guid, 147116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const VoidCallback& success_callback, 148116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const FailureCallback& failure_callback) OVERRIDE; 149116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual void VerifyDestination( 150116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const VerificationProperties& verification_properties, 151116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const BoolCallback& success_callback, 152116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const FailureCallback& failure_callback) OVERRIDE; 153116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual void VerifyAndEncryptCredentials( 154116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const std::string& guid, 155116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const VerificationProperties& verification_properties, 156116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const StringCallback& success_callback, 157116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const FailureCallback& failure_callback) OVERRIDE; 158116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual void VerifyAndEncryptData( 159116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const VerificationProperties& verification_properties, 160116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const std::string& data, 161116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const StringCallback& success_callback, 162116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const FailureCallback& failure_callback) OVERRIDE; 163116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual void SetWifiTDLSEnabledState( 164116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const std::string& ip_or_mac_address, 165116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bool enabled, 166116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const StringCallback& success_callback, 167116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const FailureCallback& failure_callback) OVERRIDE; 168116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual void GetWifiTDLSStatus( 169116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const std::string& ip_or_mac_address, 170116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const StringCallback& success_callback, 171116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const FailureCallback& failure_callback) OVERRIDE; 172116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual void GetCaptivePortalStatus( 173116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const std::string& guid, 174116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const StringCallback& success_callback, 175116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const FailureCallback& failure_callback) OVERRIDE; 176116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual scoped_ptr<base::ListValue> GetEnabledNetworkTypes() OVERRIDE; 177116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual bool EnableNetworkType(const std::string& type) OVERRIDE; 178116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual bool DisableNetworkType(const std::string& type) OVERRIDE; 179116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual bool RequestScan() OVERRIDE; 180f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 181f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Adds observer to network events. 182f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void AddObserver(Observer* network_events_observer); 183f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 184f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Removes observer to network events. If there is no observers, 185f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // then process can be shut down when there are no more calls pending return. 186f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void RemoveObserver(Observer* network_events_observer); 187f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 1885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // NetworkChangeNotifier::NetworkChangeObserver implementation. 1895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void OnNetworkChanged( 1905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) net::NetworkChangeNotifier::ConnectionType type) OVERRIDE; 1915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 192f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) private: 193f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Callbacks to extension api function objects. Keep reference to API object 194f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // and are released in ShutdownOnUIThread. Run when WiFiService calls back 195f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // into NetworkingPrivateServiceClient's callback wrappers. 196f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) typedef int32 ServiceCallbacksID; 197f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) struct ServiceCallbacks { 198f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ServiceCallbacks(); 199f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ~ServiceCallbacks(); 200f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 201116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch DictionaryCallback get_properties_callback; 202116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch VoidCallback start_connect_callback; 203116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch VoidCallback start_disconnect_callback; 204116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch VoidCallback set_properties_callback; 205116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch StringCallback create_network_callback; 206116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch NetworkListCallback get_visible_networks_callback; 207116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch FailureCallback failure_callback; 208f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 209116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch BoolCallback verify_destination_callback; 210116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch StringCallback verify_and_encrypt_data_callback; 211116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch StringCallback verify_and_encrypt_credentials_callback; 212f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 213f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ServiceCallbacksID id; 214f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) }; 215f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) typedef IDMap<ServiceCallbacks, IDMapOwnPointer> ServiceCallbacksMap; 216f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 217f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual ~NetworkingPrivateServiceClient(); 218f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 219f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Callback wrappers. 220f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void AfterGetProperties(ServiceCallbacksID callback_id, 221f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const std::string& network_guid, 222116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch scoped_ptr<base::DictionaryValue> properties, 223f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const std::string* error); 224f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void AfterSetProperties(ServiceCallbacksID callback_id, 225f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const std::string* error); 226a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) void AfterCreateNetwork(ServiceCallbacksID callback_id, 227a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const std::string* network_guid, 228a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const std::string* error); 229f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void AfterGetVisibleNetworks(ServiceCallbacksID callback_id, 230116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch scoped_ptr<base::ListValue> networks); 231f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void AfterStartConnect(ServiceCallbacksID callback_id, 232f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const std::string* error); 233f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void AfterStartDisconnect(ServiceCallbacksID callback_id, 234f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const std::string* error); 235f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void AfterVerifyDestination(ServiceCallbacksID callback_id, 236f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const bool* result, 237f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const std::string* error); 238f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void AfterVerifyAndEncryptData(ServiceCallbacksID callback_id, 239f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const std::string* result, 240f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const std::string* error); 241a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) void AfterVerifyAndEncryptCredentials(ServiceCallbacksID callback_id, 242a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const std::string& encrypted_data, 243a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const std::string& error); 244f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 245f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void OnNetworksChangedEventOnUIThread( 246f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const WiFiService::NetworkGuidList& network_guid_list); 247f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void OnNetworkListChangedEventOnUIThread( 248f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const WiFiService::NetworkGuidList& network_guid_list); 249f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 250f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Add new |ServiceCallbacks| to |callbacks_map_|. 251f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ServiceCallbacks* AddServiceCallbacks(); 252f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Removes ServiceCallbacks for |callback_id| from |callbacks_map_|. 253f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void RemoveServiceCallbacks(ServiceCallbacksID callback_id); 254f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 255f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Callbacks to run when callback is called from WiFiService. 256f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ServiceCallbacksMap callbacks_map_; 257f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Observers to Network Events. 258f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ObserverList<Observer> network_events_observers_; 259f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Interface for Verify* methods. Used and deleted on the worker thread. 2606e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // May be NULL. 261f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) scoped_ptr<CryptoVerify> crypto_verify_; 262f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Interface to WiFiService. Used and deleted on the worker thread. 263f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) scoped_ptr<wifi::WiFiService> wifi_service_; 264f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Sequence token associated with wifi tasks. 265f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::SequencedWorkerPool::SequenceToken sequence_token_; 266f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Task runner for worker tasks. 267f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) scoped_refptr<base::SequencedTaskRunner> task_runner_; 268f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Use WeakPtrs for callbacks from |wifi_service_| and |crypto_verify_|. 269f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::WeakPtrFactory<NetworkingPrivateServiceClient> weak_factory_; 270f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 271f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(NetworkingPrivateServiceClient); 272f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}; 273f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 274f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} // namespace extensions 275f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 276f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#endif // CHROME_BROWSER_EXTENSIONS_API_NETWORKING_PRIVATE_NETWORKING_PRIVATE_SERVICE_CLIENT_H_ 277