Check USB device path access when prompting users to select a device.
[chromium-blink-merge.git] / chrome / browser / local_discovery / privet_http.h
blobe750b1b05e23b26bfce66ce2b5dea2be6365a58e
1 // Copyright 2013 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_LOCAL_DISCOVERY_PRIVET_HTTP_H_
6 #define CHROME_BROWSER_LOCAL_DISCOVERY_PRIVET_HTTP_H_
8 #include <string>
10 #include "base/callback.h"
11 #include "chrome/browser/local_discovery/privet_url_fetcher.h"
12 #include "net/base/host_port_pair.h"
14 namespace base {
15 class RefCountedBytes;
18 namespace gfx {
19 class Size;
22 namespace printing {
23 class PdfRenderSettings;
26 namespace local_discovery {
28 class PWGRasterConverter;
29 class PrivetHTTPClient;
31 // Represents a simple request that returns pure JSON.
32 class PrivetJSONOperation {
33 public:
34 // If value is null, the operation failed.
35 typedef base::Callback<void(
36 const base::DictionaryValue* /*value*/)> ResultCallback;
38 virtual ~PrivetJSONOperation() {}
40 virtual void Start() = 0;
42 virtual PrivetHTTPClient* GetHTTPClient() = 0;
45 // Privet HTTP client. Must outlive the operations it creates.
46 class PrivetHTTPClient {
47 public:
48 virtual ~PrivetHTTPClient() {}
50 // A name for the HTTP client, e.g. the device name for the privet device.
51 virtual const std::string& GetName() = 0;
53 // Creates operation to query basic information about local device.
54 virtual scoped_ptr<PrivetJSONOperation> CreateInfoOperation(
55 const PrivetJSONOperation::ResultCallback& callback) = 0;
57 // Creates a URL fetcher for PrivetV1.
58 virtual scoped_ptr<PrivetURLFetcher> CreateURLFetcher(
59 const GURL& url,
60 net::URLFetcher::RequestType request_type,
61 PrivetURLFetcher::Delegate* delegate) = 0;
63 virtual void RefreshPrivetToken(
64 const PrivetURLFetcher::TokenCallback& token_callback) = 0;
67 class PrivetDataReadOperation {
68 public:
69 enum ResponseType {
70 RESPONSE_TYPE_ERROR,
71 RESPONSE_TYPE_STRING,
72 RESPONSE_TYPE_FILE
75 // If value is null, the operation failed.
76 typedef base::Callback<void(
77 ResponseType /*response_type*/,
78 const std::string& /*response_str*/,
79 const base::FilePath& /*response_file_path*/)> ResultCallback;
81 virtual ~PrivetDataReadOperation() {}
83 virtual void Start() = 0;
85 virtual void SetDataRange(int range_start, int range_end) = 0;
87 virtual void SaveDataToFile() = 0;
89 virtual PrivetHTTPClient* GetHTTPClient() = 0;
92 // Represents a full registration flow (/privet/register), normally consisting
93 // of calling the start action, the getClaimToken action, and calling the
94 // complete action. Some intervention from the caller is required to display the
95 // claim URL to the user (noted in OnPrivetRegisterClaimURL).
96 class PrivetRegisterOperation {
97 public:
98 enum FailureReason {
99 FAILURE_NETWORK,
100 FAILURE_HTTP_ERROR,
101 FAILURE_JSON_ERROR,
102 FAILURE_MALFORMED_RESPONSE,
103 FAILURE_TOKEN,
104 FAILURE_RETRY
107 class Delegate {
108 public:
109 ~Delegate() {}
111 // Called when a user needs to claim the printer by visiting the given URL.
112 virtual void OnPrivetRegisterClaimToken(
113 PrivetRegisterOperation* operation,
114 const std::string& token,
115 const GURL& url) = 0;
117 // TODO(noamsml): Remove all unnecessary parameters.
118 // Called in case of an error while registering. |action| is the
119 // registration action taken during the error. |reason| is the reason for
120 // the failure. |printer_http_code| is the http code returned from the
121 // printer. If it is -1, an internal error occurred while trying to complete
122 // the request. |json| may be null if printer_http_code signifies an error.
123 virtual void OnPrivetRegisterError(PrivetRegisterOperation* operation,
124 const std::string& action,
125 FailureReason reason,
126 int printer_http_code,
127 const base::DictionaryValue* json) = 0;
129 // Called when the registration is done.
130 virtual void OnPrivetRegisterDone(PrivetRegisterOperation* operation,
131 const std::string& device_id) = 0;
134 virtual ~PrivetRegisterOperation() {}
136 virtual void Start() = 0;
137 // Owner SHOULD call explicitly before destroying operation.
138 virtual void Cancel() = 0;
139 virtual void CompleteRegistration() = 0;
141 virtual PrivetHTTPClient* GetHTTPClient() = 0;
144 class PrivetLocalPrintOperation {
145 public:
146 class Delegate {
147 public:
148 virtual ~Delegate() {}
149 virtual void OnPrivetPrintingDone(
150 const PrivetLocalPrintOperation* print_operation) = 0;
151 virtual void OnPrivetPrintingError(
152 const PrivetLocalPrintOperation* print_operation, int http_code) = 0;
155 virtual ~PrivetLocalPrintOperation() {}
157 virtual void Start() = 0;
160 // Required print data. MUST be called before calling |Start()|.
161 virtual void SetData(const scoped_refptr<base::RefCountedBytes>& data) = 0;
163 // Optional attributes for /submitdoc. Call before calling |Start()|
164 // |ticket| should be in CJT format.
165 virtual void SetTicket(const std::string& ticket) = 0;
166 // |capabilities| should be in CDD format.
167 virtual void SetCapabilities(const std::string& capabilities) = 0;
168 // Username and jobname are for display only.
169 virtual void SetUsername(const std::string& username) = 0;
170 virtual void SetJobname(const std::string& jobname) = 0;
171 // If |offline| is true, we will indicate to the printer not to post the job
172 // to Google Cloud Print.
173 virtual void SetOffline(bool offline) = 0;
174 // Document page size.
175 virtual void SetPageSize(const gfx::Size& page_size) = 0;
177 // For testing, inject an alternative PWG raster converter.
178 virtual void SetPWGRasterConverterForTesting(
179 scoped_ptr<PWGRasterConverter> pwg_raster_converter) = 0;
181 virtual PrivetHTTPClient* GetHTTPClient() = 0;
184 // Privet HTTP client. Must outlive the operations it creates.
185 class PrivetV1HTTPClient {
186 public:
187 virtual ~PrivetV1HTTPClient() {}
189 static scoped_ptr<PrivetV1HTTPClient> CreateDefault(
190 scoped_ptr<PrivetHTTPClient> info_client);
192 // A name for the HTTP client, e.g. the device name for the privet device.
193 virtual const std::string& GetName() = 0;
195 // Creates operation to query basic information about local device.
196 virtual scoped_ptr<PrivetJSONOperation> CreateInfoOperation(
197 const PrivetJSONOperation::ResultCallback& callback) = 0;
199 // Creates operation to register local device using Privet v1 protocol.
200 virtual scoped_ptr<PrivetRegisterOperation> CreateRegisterOperation(
201 const std::string& user,
202 PrivetRegisterOperation::Delegate* delegate) = 0;
204 // Creates operation to query capabilities of local printer.
205 virtual scoped_ptr<PrivetJSONOperation> CreateCapabilitiesOperation(
206 const PrivetJSONOperation::ResultCallback& callback) = 0;
208 // Creates operation to submit print job to local printer.
209 virtual scoped_ptr<PrivetLocalPrintOperation> CreateLocalPrintOperation(
210 PrivetLocalPrintOperation::Delegate* delegate) = 0;
213 } // namespace local_discovery
214 #endif // CHROME_BROWSER_LOCAL_DISCOVERY_PRIVET_HTTP_H_