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_LOCAL_DISCOVERY_PRIVET_LOCAL_PRINTER_LISTER_H_ 6f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#define CHROME_BROWSER_LOCAL_DISCOVERY_PRIVET_LOCAL_PRINTER_LISTER_H_ 7f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 8f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include <map> 9f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include <string> 10f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 11f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/memory/linked_ptr.h" 12f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/local_discovery/privet_device_lister.h" 13f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/local_discovery/privet_http.h" 14f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/local_discovery/privet_http_asynchronous_factory.h" 15f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/common/local_discovery/service_discovery_client.h" 16f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "net/url_request/url_request_context.h" 17f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 18f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace local_discovery { 19f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 20f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// This is an adapter to PrivetDeviceLister that finds printers and checks if 21f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// they support Privet local printing. 225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class PrivetLocalPrinterLister : PrivetDeviceLister::Delegate { 23f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) public: 24f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) class Delegate { 25f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) public: 26f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual ~Delegate() {} 27f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual void LocalPrinterChanged(bool added, 28f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const std::string& name, 29a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) bool has_local_printing, 30f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const DeviceDescription& description) = 0; 31f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual void LocalPrinterRemoved(const std::string& name) = 0; 32f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual void LocalPrinterCacheFlushed() = 0; 33f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) }; 34f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 35f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) PrivetLocalPrinterLister(ServiceDiscoveryClient* service_discovery_client, 36f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) net::URLRequestContextGetter* request_context, 37f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Delegate* delegate); 38f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual ~PrivetLocalPrinterLister(); 39f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 40f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void Start(); 41f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 42f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Stops listening/listing, keeps the data. 43f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void Stop(); 44f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 45f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const DeviceDescription* GetDeviceDescription(const std::string& name); 46f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 47f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // PrivetDeviceLister::Delegate implementation. 48f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual void DeviceChanged(bool added, 49f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const std::string& name, 50f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const DeviceDescription& description) OVERRIDE; 51f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual void DeviceRemoved(const std::string& name) OVERRIDE; 52f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual void DeviceCacheFlushed() OVERRIDE; 53f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 54f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) private: 55f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) struct DeviceContext; 56f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 57f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) typedef std::map<std::string, linked_ptr<DeviceContext> > DeviceContextMap; 58f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void OnPrivetInfoDone(DeviceContext* context, 60f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const std::string& name, 615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const base::DictionaryValue* json_value); 625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 63f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) void OnPrivetResolved(const std::string& name, 64f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) scoped_ptr<PrivetHTTPClient> http_client); 655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 66f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) scoped_ptr<PrivetHTTPAsynchronousFactory> privet_http_factory_; 67f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) DeviceContextMap device_contexts_; 68f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Delegate* delegate_; 69f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 70f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) scoped_ptr<PrivetDeviceLister> privet_lister_; 71f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}; 72f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 73f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} // namespace local_discovery 74f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 75f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#endif // CHROME_BROWSER_LOCAL_DISCOVERY_PRIVET_LOCAL_PRINTER_LISTER_H_ 76