Index: chrome/service/cloud_print/printer_job_handler.h |
=================================================================== |
--- chrome/service/cloud_print/printer_job_handler.h (revision 64444) |
+++ chrome/service/cloud_print/printer_job_handler.h (working copy) |
@@ -13,12 +13,13 @@ |
#include "base/ref_counted.h" |
#include "base/message_loop_proxy.h" |
#include "base/thread.h" |
+#include "chrome/service/cloud_print/cloud_print_url_fetcher.h" |
#include "chrome/service/cloud_print/job_status_updater.h" |
-#include "chrome/common/net/url_fetcher.h" |
#include "googleurl/src/gurl.h" |
#include "net/url_request/url_request_status.h" |
#include "printing/backend/print_backend.h" |
+class URLFetcher; |
// A class that handles cloud print jobs for a particular printer. This class |
// imlements a state machine that transitions from Start to various states. The |
// various states are shown in the below diagram. |
@@ -58,10 +59,8 @@ |
// Stop |
// (If there are pending tasks go back to Start) |
-typedef URLFetcher::Delegate URLFetcherDelegate; |
- |
class PrinterJobHandler : public base::RefCountedThreadSafe<PrinterJobHandler>, |
- public URLFetcherDelegate, |
+ public CloudPrintURLFetcherDelegate, |
public JobStatusUpdaterDelegate, |
public cloud_print::PrinterWatcherDelegate, |
public cloud_print::JobSpoolerDelegate { |
@@ -120,12 +119,19 @@ |
// Begin Delegate implementations |
- // URLFetcher::Delegate implementation. |
- virtual void OnURLFetchComplete(const URLFetcher* source, const GURL& url, |
- const URLRequestStatus& status, |
- int response_code, |
- const ResponseCookies& cookies, |
- const std::string& data); |
+ // CloudPrintURLFetcher::Delegate implementation. |
+ virtual CloudPrintURLFetcher::ResponseAction HandleRawData( |
+ const URLFetcher* source, |
+ const GURL& url, |
+ const std::string& data); |
+ virtual CloudPrintURLFetcher::ResponseAction HandleJSONData( |
+ const URLFetcher* source, |
+ const GURL& url, |
+ DictionaryValue* json_data, |
+ bool succeeded); |
+ virtual void OnRequestGiveUp(); |
+ virtual void OnRequestAuthError(); |
+ |
// JobStatusUpdater::Delegate implementation |
virtual bool OnJobCompleted(JobStatusUpdater* updater); |
virtual void OnAuthError(); |
@@ -143,55 +149,57 @@ |
// End Delegate implementations |
private: |
- // Prototype for a response handler. The return value indicates whether the |
- // request should be retried, false means "retry", true means "do not retry" |
- typedef bool (PrinterJobHandler::*ResponseHandler)( |
- const URLFetcher* source, const GURL& url, |
- const URLRequestStatus& status, int response_code, |
- const ResponseCookies& cookies, const std::string& data); |
- // Prototype for a failure handler. This handler will be executed if all |
- // attempts to fetch url failed. |
- typedef void (PrinterJobHandler::*FailureHandler)(); |
+ // Prototype for a JSON data handler. |
+ typedef CloudPrintURLFetcher::ResponseAction |
+ (PrinterJobHandler::*JSONDataHandler)(const URLFetcher* source, |
+ const GURL& url, |
+ DictionaryValue* json_data, |
+ bool succeeded); |
+ // Prototype for a data handler. |
+ typedef CloudPrintURLFetcher::ResponseAction |
+ (PrinterJobHandler::*DataHandler)(const URLFetcher* source, |
+ const GURL& url, |
+ const std::string& data); |
// Begin request handlers for each state in the state machine |
- bool HandlePrinterUpdateResponse(const URLFetcher* source, const GURL& url, |
- const URLRequestStatus& status, |
- int response_code, |
- const ResponseCookies& cookies, |
- const std::string& data); |
- bool HandlePrinterDeleteResponse(const URLFetcher* source, const GURL& url, |
- const URLRequestStatus& status, |
- int response_code, |
- const ResponseCookies& cookies, |
- const std::string& data); |
- bool HandleJobMetadataResponse(const URLFetcher* source, const GURL& url, |
- const URLRequestStatus& status, |
- int response_code, |
- const ResponseCookies& cookies, |
- const std::string& data); |
- bool HandlePrintTicketResponse(const URLFetcher* source, |
- const GURL& url, |
- const URLRequestStatus& status, |
- int response_code, |
- const ResponseCookies& cookies, |
- const std::string& data); |
- bool HandlePrintDataResponse(const URLFetcher* source, |
- const GURL& url, |
- const URLRequestStatus& status, |
- int response_code, |
- const ResponseCookies& cookies, |
- const std::string& data); |
- bool HandleSuccessStatusUpdateResponse(const URLFetcher* source, |
- const GURL& url, |
- const URLRequestStatus& status, |
- int response_code, |
- const ResponseCookies& cookies, |
- const std::string& data); |
- bool HandleFailureStatusUpdateResponse(const URLFetcher* source, |
- const GURL& url, |
- const URLRequestStatus& status, |
- int response_code, |
- const ResponseCookies& cookies, |
- const std::string& data); |
+ CloudPrintURLFetcher::ResponseAction HandlePrinterUpdateResponse( |
+ const URLFetcher* source, |
+ const GURL& url, |
+ DictionaryValue* json_data, |
+ bool succeeded); |
+ |
+ CloudPrintURLFetcher::ResponseAction HandlePrinterDeleteResponse( |
+ const URLFetcher* source, |
+ const GURL& url, |
+ DictionaryValue* json_data, |
+ bool succeeded); |
+ |
+ CloudPrintURLFetcher::ResponseAction HandleJobMetadataResponse( |
+ const URLFetcher* source, |
+ const GURL& url, |
+ DictionaryValue* json_data, |
+ bool succeeded); |
+ |
+ CloudPrintURLFetcher::ResponseAction HandlePrintTicketResponse( |
+ const URLFetcher* source, |
+ const GURL& url, |
+ const std::string& data); |
+ |
+ CloudPrintURLFetcher::ResponseAction HandlePrintDataResponse( |
+ const URLFetcher* source, |
+ const GURL& url, |
+ const std::string& data); |
+ |
+ CloudPrintURLFetcher::ResponseAction HandleSuccessStatusUpdateResponse( |
+ const URLFetcher* source, |
+ const GURL& url, |
+ DictionaryValue* json_data, |
+ bool succeeded); |
+ |
+ CloudPrintURLFetcher::ResponseAction HandleFailureStatusUpdateResponse( |
+ const URLFetcher* source, |
+ const GURL& url, |
+ DictionaryValue* json_data, |
+ bool succeeded); |
// End request handlers for each state in the state machine |
// Start the state machine. Based on the flags set this could mean updating |
@@ -208,16 +216,10 @@ |
void Reset(); |
void UpdateJobStatus(cloud_print::PrintJobStatus status, PrintJobError error); |
- // This function should be used to go from one state to another. It will |
- // retry to fetch url (up to a limit) if response handler will return false. |
- // Calling this function will zero failure counter. |
- void MakeServerRequest(const GURL& url, |
- ResponseHandler response_handler, |
- FailureHandler failure_handler); |
- // This function should be used ONLY from MakeServerRequest and |
- // HandleServerError. It is using stored handlers and failure counter |
- // to decide which handler to call. |
- void FetchURL(const GURL& url); |
+ // Sets the next response handler to the specifed JSON data handler. |
+ void SetNextJSONHandler(JSONDataHandler handler); |
+ // Sets the next response handler to the specifed data handler. |
+ void SetNextDataHandler(DataHandler handler); |
void JobFailed(PrintJobError error); |
void JobSpooled(cloud_print::PlatformJobId local_job_id); |
@@ -230,7 +232,7 @@ |
void DoPrint(const JobDetails& job_details, |
const std::string& printer_name); |
- scoped_ptr<URLFetcher> request_; |
+ scoped_refptr<CloudPrintURLFetcher> request_; |
scoped_refptr<cloud_print::PrintSystem> print_system_; |
printing::PrinterBasicInfo printer_info_; |
PrinterInfoFromCloud printer_info_cloud_; |
@@ -242,8 +244,11 @@ |
// Once the job has been spooled to the local spooler, this specifies the |
// job id of the job on the local spooler. |
cloud_print::PlatformJobId local_job_id_; |
- ResponseHandler next_response_handler_; |
- FailureHandler next_failure_handler_; |
+ |
+ // The next response handler can either be a JSONDataHandler or a |
+ // DataHandler (depending on the current request being made). |
+ JSONDataHandler next_json_data_handler_; |
+ DataHandler next_data_handler_; |
// The number of consecutive times that connecting to the server failed. |
int server_error_count_; |
// The thread on which the actual print operation happens |