Index: chrome/browser/extensions/api/networking_private/networking_private_process_client.h |
diff --git a/chrome/browser/extensions/api/networking_private/networking_private_process_client.h b/chrome/browser/extensions/api/networking_private/networking_private_process_client.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..fbee5a3143cff3e6145f96d2ffcbbe24742b81f6 |
--- /dev/null |
+++ b/chrome/browser/extensions/api/networking_private/networking_private_process_client.h |
@@ -0,0 +1,158 @@ |
+// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#ifndef CHROME_BROWSER_EXTENSIONS_API_NETWORKING_PRIVATE_NETWORKING_PRIVATE_PROCESS_CLIENT_H_ |
+#define CHROME_BROWSER_EXTENSIONS_API_NETWORKING_PRIVATE_NETWORKING_PRIVATE_PROCESS_CLIENT_H_ |
+ |
+#include <string> |
+#include <vector> |
+ |
+#include "base/basictypes.h" |
+#include "base/compiler_specific.h" |
+#include "base/id_map.h" |
+#include "base/memory/weak_ptr.h" |
+#include "base/strings/string16.h" |
+#include "base/supports_user_data.h" |
+#include "base/values.h" |
+#include "content/public/browser/browser_thread.h" |
+#include "content/public/browser/utility_process_host.h" |
+#include "content/public/browser/utility_process_host_client.h" |
+ |
+class Profile; |
+ |
+// This class is the client for the out-of-process networkingPrivate handler. |
+class NetworkingPrivateProcessClient |
+ : public content::UtilityProcessHostClient { |
+ public: |
+ explicit NetworkingPrivateProcessClient(Profile* profile); |
+ |
+ // An error callback used by both the configuration handler and the state |
+ // handler to receive error results from the API. |
+ typedef base::Callback<void(const std::string& error_name, |
+ scoped_ptr<base::DictionaryValue> error_data)> |
+ ErrorCallback; |
+ |
+ // Callback used to return Dictionary of network properties. |
+ typedef base::Callback<void(const std::string& network_guid, |
+ const base::DictionaryValue& dictionary)> |
+ DictionaryResultCallback; |
+ |
+ // Callback used to return List of visibile networks. |
+ typedef base::Callback<void(const base::ListValue& network_list)> |
+ ListResultCallback; |
+ |
+ // Callback used to notify API function of completed API call without data. |
+ typedef base::Callback<void()> VoidResultCallback; |
+ |
+ // Gets the properties of the network with id |service_path|. See note on |
+ // |callback| and |error_callback|, in class description above. |
+ void GetProperties(const std::string& service_path, |
+ const DictionaryResultCallback& callback, |
+ const ErrorCallback& error_callback); |
+ |
+ // Start connect to the network with id |service_path|. See note on |
+ // |callback| and |error_callback|, in class description above. |
+ void StartConnect(const std::string& service_path, |
+ const VoidResultCallback& callback, |
+ const ErrorCallback& error_callback); |
+ |
+ // Start disconnect from the network with id |service_path|. See note on |
+ // |callback| and |error_callback|, in class description above. |
+ void StartDisconnect(const std::string& service_path, |
+ const VoidResultCallback& callback, |
+ const ErrorCallback& error_callback); |
+ |
+ // Sets the |properties| of the network with id |service_path|. See note on |
+ // |callback| and |error_callback|, in class description above. |
+ void SetProperties(const std::string& service_path, |
+ const base::DictionaryValue& properties, |
+ const VoidResultCallback& callback, |
+ const ErrorCallback& error_callback); |
+ |
+ // Requests network scan. Broadcasts NetworkListChangedEvent upon completion. |
+ void RequestNetworkScan(); |
+ |
+ // Gets the list of visible networks and calls |callback|. |
+ void GetVisibleNetworks(const ListResultCallback& callback); |
+ |
+ // Switches Utility Process to use WiFiServiceMock for browser_tests. |
+ void UseWiFiServiceMock(const base::DictionaryValue& parameters); |
+ // Checks whether WiFiServiceMock is used in unit test to provide expected |
+ // hardcoded data. |
+ bool using_wifi_service_mock() { return using_wifi_service_mock_; } |
+ |
+ // Gets a NetworkingPrivateProcessClient instances, creating one if it |
+ // doesn't exist. |
+ static scoped_refptr<NetworkingPrivateProcessClient> |
+ GetProcessClientForProfile(Profile* profile); |
+ |
+ // Shuts down Utility Process. |
+ void ShutdownProcessClient(); |
+ |
+ private: |
+ // Launches the task to start the external process. |
+ void Start(); |
+ |
+ // UtilityProcessHostClient implementation: |
+ virtual void OnProcessCrashed(int exit_code) OVERRIDE; |
+ virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE; |
+ |
+ // Message handlers |
+ void OnApiError(int message_id, |
+ const std::string& error_code, |
+ const base::DictionaryValue& error_data); |
+ void OnGetPropertiesSucceeded(int message_id, |
+ const std::string& network_guid, |
+ const base::DictionaryValue& properties); |
+ void OnGetVisibleNetworksSucceeded(int message_id, |
+ const base::ListValue& network_list); |
+ void OnNetworksChangedEvent(const std::vector<std::string>& network_guids); |
+ void OnNetworkListChangedEvent(const std::vector<std::string>& network_guids); |
+ void OnSetPropertiesSucceeded(int message_id, |
+ const std::string& network_guid); |
+ void OnStartConnectSucceeded(int message_id, const std::string& network_guid); |
+ void OnStartDisconnectSucceeded(int message_id, |
+ const std::string& network_guid); |
+ |
+ virtual ~NetworkingPrivateProcessClient(); |
+ |
+ // Creates a new UtilityProcessHost, which launches the utility process. |
+ void StartProcessOnIOThread(content::BrowserThread::ID thread_id); |
+ // Deletes a UtilityProcessHost, which stops the utility process. |
+ void ShutdownProcessOnIOThread(); |
+ |
+ // Sends message to UtilityProcess. |
+ void Send(IPC::Message* message); |
+ void SendOnIOThread(IPC::Message* message); |
+ |
+ // Callbacks to run when reply message is received from UtilityProcess. |
+ struct MessageCallbacks { |
+ MessageCallbacks(); |
+ ~MessageCallbacks(); |
+ |
+ DictionaryResultCallback get_properties_callback; |
+ VoidResultCallback start_connect_callback; |
+ VoidResultCallback start_disconnect_callback; |
+ VoidResultCallback set_properties_callback; |
+ ListResultCallback get_visible_networks_callback; |
+ ErrorCallback error_callback; |
+ }; |
+ |
+ // Callbacks to run when message is received from UtilityProcess. |
+ IDMap<MessageCallbacks, IDMapOwnPointer> callbacks_map_; |
+ |
+ // Browser profile, which is running API listening for events. |
+ Profile* profile_; |
+ |
+ // Handles sending messages to the external process. Deletes itself when |
+ // the external process dies. |
+ base::WeakPtr<content::UtilityProcessHost> utility_process_host_; |
+ |
+ // True if utility process is using WiFiServiceMock. |
+ bool using_wifi_service_mock_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(NetworkingPrivateProcessClient); |
+}; |
+ |
+#endif // CHROME_BROWSER_EXTENSIONS_API_NETWORKING_PRIVATE_NETWORKING_PRIVATE_PROCESS_CLIENT_H_ |