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. 4 5 #ifndef CHROME_BROWSER_EXTENSIONS_API_GCD_PRIVATE_GCD_PRIVATE_API_H_ 6 #define CHROME_BROWSER_EXTENSIONS_API_GCD_PRIVATE_GCD_PRIVATE_API_H_ 7 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/browser/local_discovery/gcd_api_flow.h" 12 #include "chrome/common/extensions/api/gcd_private.h" 13 #include "extensions/browser/browser_context_keyed_api_factory.h" 14 15 namespace extensions { 16 17 class GcdPrivateAPI : public BrowserContextKeyedAPI { 18 public: 19 class GCDApiFlowFactoryForTests { 20 public: 21 virtual ~GCDApiFlowFactoryForTests() {} 22 23 virtual scoped_ptr<local_discovery::GCDApiFlow> CreateGCDApiFlow() = 0; 24 }; 25 26 explicit GcdPrivateAPI(content::BrowserContext* context); 27 virtual ~GcdPrivateAPI(); 28 29 static void SetGCDApiFlowFactoryForTests(GCDApiFlowFactoryForTests* factory); 30 31 // BrowserContextKeyedAPI implementation. 32 static BrowserContextKeyedAPIFactory<GcdPrivateAPI>* GetFactoryInstance(); 33 34 private: 35 friend class BrowserContextKeyedAPIFactory<GcdPrivateAPI>; 36 37 // BrowserContextKeyedAPI implementation. 38 static const char* service_name() { return "GcdPrivateAPI"; } 39 40 content::BrowserContext* const browser_context_; 41 }; 42 43 class GcdPrivateGetCloudDeviceListFunction 44 : public ChromeAsyncExtensionFunction, 45 public local_discovery::CloudDeviceListDelegate { 46 public: 47 DECLARE_EXTENSION_FUNCTION("gcdPrivate.getCloudDeviceList", 48 FEEDBACKPRIVATE_GETSTRINGS) 49 50 GcdPrivateGetCloudDeviceListFunction(); 51 52 protected: 53 virtual ~GcdPrivateGetCloudDeviceListFunction(); 54 55 // SyncExtensionFunction overrides. 56 virtual bool RunAsync() OVERRIDE; 57 58 private: 59 // CloudDeviceListDelegate implementation 60 virtual void OnDeviceListReady(const DeviceList& devices) OVERRIDE; 61 virtual void OnDeviceListUnavailable() OVERRIDE; 62 63 void CheckListingDone(); 64 65 int requests_succeeded_; 66 int requests_failed_; 67 DeviceList devices_; 68 69 scoped_ptr<local_discovery::GCDApiFlow> printer_list_; 70 scoped_ptr<local_discovery::GCDApiFlow> device_list_; 71 }; 72 73 } // namespace extensions 74 75 #endif // CHROME_BROWSER_EXTENSIONS_API_GCD_PRIVATE_GCD_PRIVATE_API_H_ 76