Chromium Code Reviews| 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..4749c71838152968543a155ed7c23d48ec1568e7 100644 |
| --- a/cloud_print/gcp20/prototype/cloud_print_requester.h |
| +++ b/cloud_print/gcp20/prototype/cloud_print_requester.h |
| @@ -5,28 +5,28 @@ |
| #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; |
|
gene
2013/07/23 09:36:23
Looks like this is defined in 2 places, here and i
maksymb
2013/07/23 19:02:37
Done.
|
| 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 +48,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 +74,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(); |
| - private: |
| - // net::URLFetcherDelegate |
| - virtual void OnURLFetchComplete(const net::URLFetcher* source) OVERRIDE; |
| + // 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); |
| - // gaia::GaiaOAuthClient::Delegate |
| + // Reports server that printjob has been printed. |
| + void SendPrintJobDone(const std::string& job_id); |
| + |
| + private: |
| + // |
| + virtual void OnFetchComplete() OVERRIDE; |
| + virtual void OnFetchError(const std::string& server_api, |
| + int server_code, |
| + int server_http_code) OVERRIDE; |
| + virtual void OnFetchTimeoutReached() OVERRIDE; |
| + virtual std::string access_token() OVERRIDE; |
| + virtual scoped_refptr<net::URLRequestContextGetter> context_getter() OVERRIDE; |
| + |
| + // gaia::GaiaOAuthClient::Delegate methods: |
| virtual void OnGetTokensResponse(const std::string& refresh_token, |
| const std::string& access_token, |
| int expires_in_seconds) OVERRIDE; |
| @@ -79,26 +118,43 @@ 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); |
| + |
| + // Creates POST request. |
| + scoped_ptr<CloudPrintRequest> CreatePost( |
| + const GURL& url, |
| + const CloudPrintRequest::DataForUpload& data); |
| // 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); |
| + |
| + // Invoked after receiving printjob ticket. |
| + void ParseGetPrintJobTicket(const std::string& response); |
| + |
| + // 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); |
| - // Fetcher contains |NULL| if no server response is awaiting. Otherwise wait |
| - // until URLFetchComplete will be called and close connection. |
| - scoped_ptr<net::URLFetcher> fetcher_; |
| + // |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_; |
| - // Callback for parsing server response. |
| - ParserCallback parse_response_callback_; |
| + // 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_; |