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