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