1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #ifndef CHROME_BROWSER_EXTENSIONS_API_GCD_PRIVATE_GCD_PRIVATE_API_H_
6 #define CHROME_BROWSER_EXTENSIONS_API_GCD_PRIVATE_GCD_PRIVATE_API_H_
8 #include "base/memory/scoped_ptr.h"
9 #include "chrome/browser/extensions/chrome_extension_function.h"
10 #include "chrome/browser/local_discovery/cloud_device_list_delegate.h"
11 #include "chrome/common/extensions/api/gcd_private.h"
12 #include "extensions/browser/browser_context_keyed_api_factory.h"
14 namespace local_discovery {
18 namespace extensions {
20 class GcdPrivateAPIImpl;
22 class GcdPrivateAPI : public BrowserContextKeyedAPI {
24 class GCDApiFlowFactoryForTests {
26 virtual ~GCDApiFlowFactoryForTests() {}
28 virtual scoped_ptr<local_discovery::GCDApiFlow> CreateGCDApiFlow() = 0;
31 explicit GcdPrivateAPI(content::BrowserContext* context);
32 virtual ~GcdPrivateAPI();
34 static void SetGCDApiFlowFactoryForTests(GCDApiFlowFactoryForTests* factory);
36 // BrowserContextKeyedAPI implementation.
37 static BrowserContextKeyedAPIFactory<GcdPrivateAPI>* GetFactoryInstance();
40 friend class BrowserContextKeyedAPIFactory<GcdPrivateAPI>;
41 friend class GcdPrivateAPIImpl;
43 // BrowserContextKeyedAPI implementation.
44 static const char* service_name() { return "GcdPrivateAPI"; }
46 scoped_ptr<GcdPrivateAPIImpl> impl_;
49 class GcdPrivateGetCloudDeviceListFunction
50 : public ChromeAsyncExtensionFunction,
51 public local_discovery::CloudDeviceListDelegate {
53 DECLARE_EXTENSION_FUNCTION("gcdPrivate.getCloudDeviceList",
54 GCDPRIVATE_GETCLOUDDEVICELIST)
56 GcdPrivateGetCloudDeviceListFunction();
59 virtual ~GcdPrivateGetCloudDeviceListFunction();
61 // AsyncExtensionFunction overrides.
62 virtual bool RunAsync() OVERRIDE;
65 // CloudDeviceListDelegate implementation
66 virtual void OnDeviceListReady(const DeviceList& devices) OVERRIDE;
67 virtual void OnDeviceListUnavailable() OVERRIDE;
69 void CheckListingDone();
71 int requests_succeeded_;
75 scoped_ptr<local_discovery::GCDApiFlow> printer_list_;
76 scoped_ptr<local_discovery::GCDApiFlow> device_list_;
79 class GcdPrivateQueryForNewLocalDevicesFunction
80 : public ChromeSyncExtensionFunction {
82 DECLARE_EXTENSION_FUNCTION("gcdPrivate.queryForNewLocalDevices",
83 GCDPRIVATE_QUERYFORNEWLOCALDEVICES)
85 GcdPrivateQueryForNewLocalDevicesFunction();
88 virtual ~GcdPrivateQueryForNewLocalDevicesFunction();
90 // SyncExtensionFunction overrides.
91 virtual bool RunSync() OVERRIDE;
94 class GcdPrivatePrefetchWifiPasswordFunction
95 : public ChromeAsyncExtensionFunction {
97 DECLARE_EXTENSION_FUNCTION("gcdPrivate.prefetchWifiPassword",
98 GCDPRIVATE_PREFETCHWIFIPASSWORD)
100 GcdPrivatePrefetchWifiPasswordFunction();
103 virtual ~GcdPrivatePrefetchWifiPasswordFunction();
105 // AsyncExtensionFunction overrides.
106 virtual bool RunAsync() OVERRIDE;
108 void OnResponse(bool response);
111 class GcdPrivateGetPrefetchedWifiNameListFunction
112 : public ChromeSyncExtensionFunction {
114 DECLARE_EXTENSION_FUNCTION("gcdPrivate.getPrefetchedWifiNameList",
115 GCDPRIVATE_GETPREFETCHEDWIFINAMELIST);
117 GcdPrivateGetPrefetchedWifiNameListFunction();
120 virtual ~GcdPrivateGetPrefetchedWifiNameListFunction();
122 // SyncExtensionFunction overrides.
123 virtual bool RunSync() OVERRIDE;
126 class GcdPrivateEstablishSessionFunction : public ChromeAsyncExtensionFunction {
128 DECLARE_EXTENSION_FUNCTION("gcdPrivate.establishSession",
129 GCDPRIVATE_ESTABLISHSESSION)
131 GcdPrivateEstablishSessionFunction();
134 virtual ~GcdPrivateEstablishSessionFunction();
136 // AsyncExtensionFunction overrides.
137 virtual bool RunAsync() OVERRIDE;
140 void OnConfirmCodeCallback(
142 api::gcd_private::Status status,
143 const std::string& confirm_code,
144 api::gcd_private::ConfirmationType confirmation_type);
147 class GcdPrivateConfirmCodeFunction : public ChromeAsyncExtensionFunction {
149 DECLARE_EXTENSION_FUNCTION("gcdPrivate.confirmCode", GCDPRIVATE_CONFIRMCODE)
151 GcdPrivateConfirmCodeFunction();
154 virtual ~GcdPrivateConfirmCodeFunction();
156 // AsyncExtensionFunction overrides.
157 virtual bool RunAsync() OVERRIDE;
160 void OnSessionEstablishedCallback(api::gcd_private::Status status);
163 class GcdPrivateSendMessageFunction : public ChromeAsyncExtensionFunction {
165 DECLARE_EXTENSION_FUNCTION("gcdPrivate.sendMessage", GCDPRIVATE_SENDMESSAGE)
167 GcdPrivateSendMessageFunction();
170 virtual ~GcdPrivateSendMessageFunction();
172 // AsyncExtensionFunction overrides.
173 virtual bool RunAsync() OVERRIDE;
176 void OnMessageSentCallback(api::gcd_private::Status status,
177 const base::DictionaryValue& value);
180 class GcdPrivateTerminateSessionFunction : public ChromeAsyncExtensionFunction {
182 DECLARE_EXTENSION_FUNCTION("gcdPrivate.terminateSession",
183 GCDPRIVATE_TERMINATESESSION)
185 GcdPrivateTerminateSessionFunction();
188 virtual ~GcdPrivateTerminateSessionFunction();
190 // AsyncExtensionFunction overrides.
191 virtual bool RunAsync() OVERRIDE;
194 class GcdPrivateGetCommandDefinitionsFunction
195 : public ChromeAsyncExtensionFunction {
197 DECLARE_EXTENSION_FUNCTION("gcdPrivate.getCommandDefinitions",
198 GCDPRIVATE_GETCOMMANDDEFINITIONS)
200 GcdPrivateGetCommandDefinitionsFunction();
203 virtual ~GcdPrivateGetCommandDefinitionsFunction();
205 // AsyncExtensionFunction overrides.
206 virtual bool RunAsync() OVERRIDE;
211 class GcdPrivateInsertCommandFunction : public ChromeAsyncExtensionFunction {
213 DECLARE_EXTENSION_FUNCTION("gcdPrivate.insertCommand",
214 GCDPRIVATE_INSERTCOMMAND)
216 GcdPrivateInsertCommandFunction();
219 virtual ~GcdPrivateInsertCommandFunction();
221 // AsyncExtensionFunction overrides.
222 virtual bool RunAsync() OVERRIDE;
227 class GcdPrivateGetCommandFunction : public ChromeAsyncExtensionFunction {
229 DECLARE_EXTENSION_FUNCTION("gcdPrivate.getCommand", GCDPRIVATE_GETCOMMAND)
231 GcdPrivateGetCommandFunction();
234 virtual ~GcdPrivateGetCommandFunction();
236 // AsyncExtensionFunction overrides.
237 virtual bool RunAsync() OVERRIDE;
242 class GcdPrivateCancelCommandFunction : public ChromeAsyncExtensionFunction {
244 DECLARE_EXTENSION_FUNCTION("gcdPrivate.cancelCommand",
245 GCDPRIVATE_CANCELCOMMAND)
247 GcdPrivateCancelCommandFunction();
250 virtual ~GcdPrivateCancelCommandFunction();
252 // AsyncExtensionFunction overrides.
253 virtual bool RunAsync() OVERRIDE;
258 class GcdPrivateGetCommandsListFunction : public ChromeAsyncExtensionFunction {
260 DECLARE_EXTENSION_FUNCTION("gcdPrivate.getCommandsList",
261 GCDPRIVATE_GETCOMMANDSLIST)
263 GcdPrivateGetCommandsListFunction();
266 virtual ~GcdPrivateGetCommandsListFunction();
268 // AsyncExtensionFunction overrides.
269 virtual bool RunAsync() OVERRIDE;
274 } // namespace extensions
276 #endif // CHROME_BROWSER_EXTENSIONS_API_GCD_PRIVATE_GCD_PRIVATE_API_H_