Index: cloud_print/gcp20/prototype/cloud_print_requester.h |
diff --git a/cloud_print/gcp20/prototype/cloud_print_requester.h b/cloud_print/gcp20/prototype/cloud_print_requester.h |
index 663ea7b150fa8dec728da14b687a63749d1b0cf7..49031ad962c4cf8c29bbcfdc76b9976cba146ae6 100644 |
--- a/cloud_print/gcp20/prototype/cloud_print_requester.h |
+++ b/cloud_print/gcp20/prototype/cloud_print_requester.h |
@@ -5,28 +5,26 @@ |
#ifndef CLOUD_PRINT_GCP20_PROTOTYPE_CLOUD_REQUESTER_H_ |
#define CLOUD_PRINT_GCP20_PROTOTYPE_CLOUD_REQUESTER_H_ |
-#include <map> |
#include <string> |
+#include <vector> |
#include "base/basictypes.h" |
#include "base/callback.h" |
#include "base/memory/weak_ptr.h" |
#include "base/values.h" |
+#include "cloud_print/gcp20/prototype/cloud_print_request.h" |
+#include "cloud_print/gcp20/prototype/cloud_print_response_parser.h" |
#include "google_apis/gaia/gaia_oauth_client.h" |
-#include "net/url_request/url_fetcher.h" |
-#include "net/url_request/url_fetcher_delegate.h" |
-#include "net/url_request/url_request_context_getter.h" |
- |
-typedef base::Callback<void(const std::string&)> ParserCallback; |
class CloudPrintURLRequestContextGetter; |
+class GURL; |
extern const char kCloudPrintUrl[]; |
// Class for requesting CloudPrint server and parsing responses. |
class CloudPrintRequester : public base::SupportsWeakPtr<CloudPrintRequester>, |
- public net::URLFetcherDelegate, |
- public gaia::GaiaOAuthClient::Delegate { |
+ public gaia::GaiaOAuthClient::Delegate, |
+ public CloudPrintRequest::Delegate { |
public: |
class Delegate { |
public: |
@@ -48,6 +46,23 @@ class CloudPrintRequester : public base::SupportsWeakPtr<CloudPrintRequester>, |
// Invoked when server respond with |"success" = false| or we cannot parse |
// response. |
virtual void OnRegistrationError(const std::string& description) = 0; |
+ |
+ // Invoked when network connection cannot be established. |
+ virtual void OnNetworkError() = 0; |
+ |
+ // Invoked when server error is received or cannot parse json response. |
+ virtual void OnServerError(const std::string& description) = 0; |
+ |
+ // Invoked when fetch response was received. |
+ virtual void OnPrintJobsAvailable( |
+ const std::vector<cloud_print_response_parser::Job>& jobs) = 0; |
+ |
+ // Invoked when printjob is finally downloaded and available for printing. |
+ virtual void OnPrintJobDownloaded( |
+ const cloud_print_response_parser::Job& job) = 0; |
+ |
+ // Invoked when printjob is marked as done on CloudPrint server. |
+ virtual void OnPrintJobDone() = 0; |
}; |
// Creates and initializes objects. |
@@ -57,20 +72,42 @@ class CloudPrintRequester : public base::SupportsWeakPtr<CloudPrintRequester>, |
// Destroys the object. |
virtual ~CloudPrintRequester(); |
+ // Returns |true| if either |gaia| or |request| is awaiting for response. |
+ bool IsBusy() const; |
+ |
// Creates query to server for starting registration. |
- bool StartRegistration(const std::string& proxy_id, |
+ void StartRegistration(const std::string& proxy_id, |
const std::string& device_name, |
- const std::string& user, |
- const std::string& cdd); |
+ const std::string& user, const std::string& cdd); |
// Creates request for completing registration and receiving refresh token. |
- bool CompleteRegistration(); |
+ void CompleteRegistration(); |
+ |
+ // Creates request for fetching printjobs. |
+ void FetchPrintJobs(const std::string& refresh_token, |
+ const std::string& device_id); |
+ |
+ // Creates request for updating accesstoken. |
+ // TODO(maksymb): Handle expiration of accesstoken. |
+ void UpdateAccesstoken(const std::string& refresh_token); |
+ |
+ // Creates chain of requests for requesting printjob. |
+ void RequestPrintJob(const cloud_print_response_parser::Job& job); |
+ |
+ // Reports server that printjob has been printed. |
+ void SendPrintJobDone(const std::string& job_id); |
private: |
- // net::URLFetcherDelegate |
- virtual void OnURLFetchComplete(const net::URLFetcher* source) OVERRIDE; |
+ typedef base::Callback<void(const std::string&)> ParserCallback; |
+ |
+ // CloudPrintRequester::Delegate methods: |
+ virtual void OnFetchComplete(const std::string& response) OVERRIDE; |
+ virtual void OnFetchError(const std::string& server_api, |
+ int server_code, |
+ int server_http_code) OVERRIDE; |
+ virtual void OnFetchTimeoutReached() OVERRIDE; |
- // gaia::GaiaOAuthClient::Delegate |
+ // gaia::GaiaOAuthClient::Delegate methods: |
virtual void OnGetTokensResponse(const std::string& refresh_token, |
const std::string& access_token, |
int expires_in_seconds) OVERRIDE; |
@@ -79,26 +116,48 @@ class CloudPrintRequester : public base::SupportsWeakPtr<CloudPrintRequester>, |
virtual void OnOAuthError() OVERRIDE; |
virtual void OnNetworkError(int response_code) OVERRIDE; |
- // Creates request with given |url| and |method|. When response is received |
- // callback is called. |
- // TODO(maksymb): Add timeout control for request. |
- bool CreateRequest(const GURL& url, |
- net::URLFetcher::RequestType method, |
- const ParserCallback& callback) WARN_UNUSED_RESULT; |
+ // Creates GET request. |
+ scoped_ptr<CloudPrintRequest> CreateGet(const GURL& url, |
+ const ParserCallback& callback); |
+ |
+ // Creates POST request. |
+ scoped_ptr<CloudPrintRequest> CreatePost(const GURL& url, |
+ const std::string& content, |
+ const std::string& mimetype, |
+ const ParserCallback& callback); |
+ |
+ // Deletes all info about current request. |
+ void EraseRequest(); |
// Parses register-start server response. |
- void ParseRegisterStartResponse(const std::string& response); |
+ void ParseRegisterStart(const std::string& response); |
// Parses register-complete server response. Initializes gaia (OAuth client) |
// and receives refresh token. |
- void ParseRegisterCompleteResponse(const std::string& response); |
+ void ParseRegisterComplete(const std::string& response); |
+ |
+ // Parses fetch printjobs server response. |
+ void ParseFetch(const std::string& response); |
- // Fetcher contains |NULL| if no server response is awaiting. Otherwise wait |
- // until URLFetchComplete will be called and close connection. |
- scoped_ptr<net::URLFetcher> fetcher_; |
+ // Invoked after receiving printjob ticket. |
+ void ParseGetPrintJobTicket(const std::string& response); |
- // Callback for parsing server response. |
- ParserCallback parse_response_callback_; |
+ // Invoked after receiving printjob file. |
+ void ParseGetPrintJobData(const std::string& response); |
+ |
+ // Invoked after marking printjob as DONE. |
+ void ParsePrintJobDone(const std::string& response); |
+ |
+ // Invoked after marking printjob as IN_PROGRESS. |
+ void ParsePrintJobInProgress(const std::string& response); |
+ |
+ // |request| contains |NULL| if no server response is awaiting. Otherwise wait |
+ // until callback will be called will be called and close connection. |
+ scoped_ptr<CloudPrintRequest> request_; |
+ |
+ // Contains information about current printjob. Information is filled by |
+ // CloudPrint server responses. |
+ scoped_ptr<cloud_print_response_parser::Job> current_print_job_; |
// Privet context getter. |
scoped_refptr<CloudPrintURLRequestContextGetter> context_getter_; |
@@ -115,6 +174,8 @@ class CloudPrintRequester : public base::SupportsWeakPtr<CloudPrintRequester>, |
// OAuth client. |
scoped_ptr<gaia::GaiaOAuthClient> gaia_; |
+ ParserCallback parser_callback_; |
+ |
Delegate* delegate_; |
DISALLOW_COPY_AND_ASSIGN(CloudPrintRequester); |