privet_http.h revision f8ee788a64d60abd8f2d742a5fdedde054ecd910
17dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// Copyright 2013 The Chromium Authors. All rights reserved. 27dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// Use of this source code is governed by a BSD-style license that can be 37dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// found in the LICENSE file. 47dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 57dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#ifndef CHROME_BROWSER_LOCAL_DISCOVERY_PRIVET_HTTP_H_ 67dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#define CHROME_BROWSER_LOCAL_DISCOVERY_PRIVET_HTTP_H_ 77dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 87dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include <string> 97dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 107dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "base/callback.h" 117dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/local_discovery/privet_url_fetcher.h" 12f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/local_discovery/pwg_raster_converter.h" 137dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "net/base/host_port_pair.h" 147dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 15f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace base { 16f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class RefCountedBytes; 17f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 18f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 19f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace gfx { 20f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class Size; 21f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 22f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 23f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace printing { 24f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class PdfRenderSettings; 25f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 26f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 277dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochnamespace local_discovery { 287dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 293551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)class PrivetHTTPClient; 307dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Represents a simple request that returns pure JSON. 325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class PrivetJSONOperation { 337dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch public: 345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // If value is null, the operation failed. 355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) typedef base::Callback<void( 365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const base::DictionaryValue* /*value*/)> ResultCallback; 375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual ~PrivetJSONOperation() {} 395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void Start() = 0; 417dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual PrivetHTTPClient* GetHTTPClient() = 0; 435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}; 441e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 45f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// Privet HTTP client. Must outlive the operations it creates. 46f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)class PrivetHTTPClient { 47f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) public: 48f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual ~PrivetHTTPClient() {} 49f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 50f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // A name for the HTTP client, e.g. the device name for the privet device. 51f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual const std::string& GetName() = 0; 52f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 53f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Creates operation to query basic information about local device. 54f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual scoped_ptr<PrivetJSONOperation> CreateInfoOperation( 55f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const PrivetJSONOperation::ResultCallback& callback) = 0; 56f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 57f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual scoped_ptr<PrivetURLFetcher> CreateURLFetcher( 58f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const GURL& url, 59f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) net::URLFetcher::RequestType request_type, 60f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) PrivetURLFetcher::Delegate* delegate) = 0; 61f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 62f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual void RefreshPrivetToken( 63f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const PrivetURLFetcher::TokenCallback& token_callback) = 0; 64f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)}; 65f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class PrivetDataReadOperation { 675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) public: 685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) enum ResponseType { 695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) RESPONSE_TYPE_ERROR, 705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) RESPONSE_TYPE_STRING, 715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) RESPONSE_TYPE_FILE 727dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch }; 737dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // If value is null, the operation failed. 755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) typedef base::Callback<void( 765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ResponseType /*response_type*/, 775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::string& /*response_str*/, 785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const base::FilePath& /*response_file_path*/)> ResultCallback; 795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual ~PrivetDataReadOperation() {} 817dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 827dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch virtual void Start() = 0; 833551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void SetDataRange(int range_start, int range_end) = 0; 855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void SaveDataToFile() = 0; 875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 883551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) virtual PrivetHTTPClient* GetHTTPClient() = 0; 897dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch}; 907dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 917dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// Represents a full registration flow (/privet/register), normally consisting 927dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// of calling the start action, the getClaimToken action, and calling the 937dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// complete action. Some intervention from the caller is required to display the 947dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// claim URL to the user (noted in OnPrivetRegisterClaimURL). 957dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochclass PrivetRegisterOperation { 967dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch public: 977dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch enum FailureReason { 987dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch FAILURE_NETWORK, 997dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch FAILURE_HTTP_ERROR, 1007dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch FAILURE_JSON_ERROR, 1010f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) FAILURE_MALFORMED_RESPONSE, 1020f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) FAILURE_TOKEN, 1030f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) FAILURE_RETRY 1047dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch }; 1057dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1067dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch class Delegate { 1077dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch public: 1087dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ~Delegate() {} 1097dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1107dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // Called when a user needs to claim the printer by visiting the given URL. 1113551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) virtual void OnPrivetRegisterClaimToken( 1123551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) PrivetRegisterOperation* operation, 1133551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) const std::string& token, 1143551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) const GURL& url) = 0; 1157dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1161e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // TODO(noamsml): Remove all unnecessary parameters. 1177dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // Called in case of an error while registering. |action| is the 1187dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // registration action taken during the error. |reason| is the reason for 1197dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // the failure. |printer_http_code| is the http code returned from the 1207dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // printer. If it is -1, an internal error occurred while trying to complete 1217dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // the request. |json| may be null if printer_http_code signifies an error. 1223551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) virtual void OnPrivetRegisterError(PrivetRegisterOperation* operation, 1233551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) const std::string& action, 1247dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch FailureReason reason, 1257dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch int printer_http_code, 1265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const base::DictionaryValue* json) = 0; 1277dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1287dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // Called when the registration is done. 1293551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) virtual void OnPrivetRegisterDone(PrivetRegisterOperation* operation, 1303551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) const std::string& device_id) = 0; 1317dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch }; 1327dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1337dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch virtual ~PrivetRegisterOperation() {} 1347dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1357dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch virtual void Start() = 0; 1367dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // Owner SHOULD call explicitly before destroying operation. 1377dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch virtual void Cancel() = 0; 1387dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch virtual void CompleteRegistration() = 0; 1393551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 1403551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) virtual PrivetHTTPClient* GetHTTPClient() = 0; 1417dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch}; 1427dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1431e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)class PrivetLocalPrintOperation { 1441e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) public: 1451e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) class Delegate { 1461e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) public: 1471e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) virtual ~Delegate() {} 1481e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) virtual void OnPrivetPrintingDone( 1491e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) const PrivetLocalPrintOperation* print_operation) = 0; 1501e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) virtual void OnPrivetPrintingError( 1511e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) const PrivetLocalPrintOperation* print_operation, int http_code) = 0; 1521e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) }; 1531e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 1541e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) virtual ~PrivetLocalPrintOperation() {} 1551e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 1561e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) virtual void Start() = 0; 1571e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 158f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 159f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Required print data. MUST be called before calling |Start()|. 160f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual void SetData(base::RefCountedBytes* data) = 0; 1611e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 1621e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Optional attributes for /submitdoc. Call before calling |Start()| 1631e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // |ticket| should be in CJT format. 1641e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) virtual void SetTicket(const std::string& ticket) = 0; 165effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // |capabilities| should be in CDD format. 166effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch virtual void SetCapabilities(const std::string& capabilities) = 0; 1671e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Username and jobname are for display only. 1681e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) virtual void SetUsername(const std::string& username) = 0; 1691e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) virtual void SetJobname(const std::string& jobname) = 0; 1701e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // If |offline| is true, we will indicate to the printer not to post the job 1711e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // to Google Cloud Print. 1721e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) virtual void SetOffline(bool offline) = 0; 173f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Document page size. 1745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void SetPageSize(const gfx::Size& page_size) = 0; 175f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 176f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // For testing, inject an alternative PWG raster converter. 177f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual void SetPWGRasterConverterForTesting( 178f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) scoped_ptr<PWGRasterConverter> pwg_raster_converter) = 0; 1791e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 1801e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) virtual PrivetHTTPClient* GetHTTPClient() = 0; 1811e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)}; 1821e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 18346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// Privet HTTP client. Must outlive the operations it creates. 184f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)class PrivetV1HTTPClient { 1857dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch public: 186f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual ~PrivetV1HTTPClient() {} 1877dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 188f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) static scoped_ptr<PrivetV1HTTPClient> CreateDefault( 189f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) scoped_ptr<PrivetHTTPClient> info_client); 190f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 191f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // A name for the HTTP client, e.g. the device name for the privet device. 192f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual const std::string& GetName() = 0; 19346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 19446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // Creates operation to query basic information about local device. 1955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual scoped_ptr<PrivetJSONOperation> CreateInfoOperation( 1965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const PrivetJSONOperation::ResultCallback& callback) = 0; 19746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 198f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Creates operation to register local device using Privet v1 protocol. 199f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual scoped_ptr<PrivetRegisterOperation> CreateRegisterOperation( 200f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const std::string& user, 201f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) PrivetRegisterOperation::Delegate* delegate) = 0; 202f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 20346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // Creates operation to query capabilities of local printer. 2045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual scoped_ptr<PrivetJSONOperation> CreateCapabilitiesOperation( 2055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const PrivetJSONOperation::ResultCallback& callback) = 0; 20646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 20746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // Creates operation to submit print job to local printer. 2081e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) virtual scoped_ptr<PrivetLocalPrintOperation> CreateLocalPrintOperation( 2091e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) PrivetLocalPrintOperation::Delegate* delegate) = 0; 21046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 21146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // Creates operation to list files on local Privet storage. 2125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual scoped_ptr<PrivetJSONOperation> CreateStorageListOperation( 2135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::string& path, 2145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const PrivetJSONOperation::ResultCallback& callback) = 0; 21546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 21646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // Creates operation to read data from local Privet storage. 2175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual scoped_ptr<PrivetDataReadOperation> CreateStorageReadOperation( 2185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::string& path, 2195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const PrivetDataReadOperation::ResultCallback& callback) = 0; 220f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)}; 221f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 222f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// Privet HTTP client. Must outlive the operations it creates. 223f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)class PrivetV3HTTPClient { 224f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) public: 225f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual ~PrivetV3HTTPClient() {} 226f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 227f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) static scoped_ptr<PrivetV3HTTPClient> CreateDefault( 228f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) scoped_ptr<PrivetHTTPClient> info_client); 2293551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 2303551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // A name for the HTTP client, e.g. the device name for the privet device. 2313551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) virtual const std::string& GetName() = 0; 232f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 233f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Creates operation to query basic information about local device. 234f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual scoped_ptr<PrivetJSONOperation> CreateInfoOperation( 235f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const PrivetJSONOperation::ResultCallback& callback) = 0; 2367dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch}; 2377dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 2387dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} // namespace local_discovery 2397dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#endif // CHROME_BROWSER_LOCAL_DISCOVERY_PRIVET_HTTP_H_ 240