Index: chrome/service/cloud_print/printer_job_handler.cc |
diff --git a/chrome/service/cloud_print/printer_job_handler.cc b/chrome/service/cloud_print/printer_job_handler.cc |
index e38b5cafc27084bab32519f358d7547732c51fb2..22371b847967bd435b761752f5c0fa57e0ecd593 100644 |
--- a/chrome/service/cloud_print/printer_job_handler.cc |
+++ b/chrome/service/cloud_print/printer_job_handler.cc |
@@ -315,7 +315,6 @@ PrinterJobHandler::HandlePrintDataResponse(const net::URLFetcher* source, |
const std::string& data) { |
VLOG(1) << "CP_CONNECTOR: Handling print data response" |
<< ", printer id: " << printer_info_cloud_.printer_id; |
- base::Closure next_task; |
if (file_util::CreateTemporaryFile(&job_details_.print_data_file_path_)) { |
int ret = file_util::WriteFile(job_details_.print_data_file_path_, |
data.c_str(), |
@@ -324,47 +323,31 @@ PrinterJobHandler::HandlePrintDataResponse(const net::URLFetcher* source, |
&job_details_.print_data_mime_type_); |
DCHECK(ret == static_cast<int>(data.length())); |
if (ret == static_cast<int>(data.length())) { |
- next_task = base::Bind(&PrinterJobHandler::StartPrinting, this); |
+ UpdateJobStatus(PRINT_JOB_STATUS_IN_PROGRESS, SUCCESS); |
+ return CloudPrintURLFetcher::STOP_PROCESSING; |
} |
} |
- // If there was no task allocated above, then there was an error in |
- // saving the print data, bail out here. |
- if (next_task.is_null()) { |
- VLOG(1) << "CP_CONNECTOR: Error saving print data" |
- << ", printer id: " << printer_info_cloud_.printer_id; |
- next_task = base::Bind(&PrinterJobHandler::JobFailed, this, |
- JOB_DOWNLOAD_FAILED); |
- } |
- base::MessageLoop::current()->PostTask(FROM_HERE, next_task); |
+ |
+ // If we are here, then there was an error in saving the print data, bail out |
+ // here. |
+ VLOG(1) << "CP_CONNECTOR: Error saving print data" |
+ << ", printer id: " << printer_info_cloud_.printer_id; |
+ base::MessageLoop::current()->PostTask( |
+ FROM_HERE, base::Bind(&PrinterJobHandler::JobFailed, this, |
+ JOB_DOWNLOAD_FAILED)); |
return CloudPrintURLFetcher::STOP_PROCESSING; |
} |
CloudPrintURLFetcher::ResponseAction |
-PrinterJobHandler::HandleSuccessStatusUpdateResponse( |
+PrinterJobHandler::HandleInProgressStatusUpdateResponse( |
const net::URLFetcher* source, |
const GURL& url, |
DictionaryValue* json_data, |
bool succeeded) { |
VLOG(1) << "CP_CONNECTOR: Handling success status update response" |
<< ", printer id: " << printer_info_cloud_.printer_id; |
- // The print job has been spooled locally. We now need to create an object |
- // that monitors the status of the job and updates the server. |
- scoped_refptr<JobStatusUpdater> job_status_updater( |
- new JobStatusUpdater(printer_info_.printer_name, job_details_.job_id_, |
- local_job_id_, cloud_print_server_url_, |
- print_system_.get(), this)); |
- job_status_updater_list_.push_back(job_status_updater); |
base::MessageLoop::current()->PostTask( |
- FROM_HERE, |
- base::Bind(&JobStatusUpdater::UpdateStatus, job_status_updater.get())); |
- if (succeeded) { |
- // Since we just printed successfully, we want to look for more jobs. |
- CheckForJobs(kJobFetchReasonQueryMore); |
- } |
- VLOG(1) << "CP_CONNECTOR: Stopping printer job handler" |
- << ", printer id: " << printer_info_cloud_.printer_id; |
- base::MessageLoop::current()->PostTask( |
- FROM_HERE, base::Bind(&PrinterJobHandler::Stop, this)); |
+ FROM_HERE, base::Bind(&PrinterJobHandler::StartPrinting, this)); |
return CloudPrintURLFetcher::STOP_PROCESSING; |
} |
@@ -484,19 +467,18 @@ void PrinterJobHandler::UpdateJobStatus(PrintJobStatus status, |
} |
if (error == SUCCESS) { |
+ DCHECK_EQ(status, PRINT_JOB_STATUS_IN_PROGRESS); |
SetNextJSONHandler( |
- &PrinterJobHandler::HandleSuccessStatusUpdateResponse); |
+ &PrinterJobHandler::HandleInProgressStatusUpdateResponse); |
} else { |
SetNextJSONHandler( |
&PrinterJobHandler::HandleFailureStatusUpdateResponse); |
} |
request_ = CloudPrintURLFetcher::Create(); |
- request_->StartGetRequest(GetUrlForJobStatusUpdate(cloud_print_server_url_, |
- job_details_.job_id_, |
- status), |
- this, |
- kCloudPrintAPIMaxRetryCount, |
- std::string()); |
+ request_->StartGetRequest( |
+ GetUrlForJobStatusUpdate(cloud_print_server_url_, job_details_.job_id_, |
+ status), |
+ this, kCloudPrintAPIMaxRetryCount, std::string()); |
} |
void PrinterJobHandler::RunScheduledJobCheck() { |
@@ -530,11 +512,29 @@ void PrinterJobHandler::JobSpooled(PlatformJobId local_job_id) { |
VLOG(1) << "CP_CONNECTOR: Job spooled" |
<< ", printer id: " << printer_info_cloud_.printer_id |
<< ", job id: " << local_job_id; |
- if (!shutting_down_) { |
- local_job_id_ = local_job_id; |
- UpdateJobStatus(PRINT_JOB_STATUS_IN_PROGRESS, SUCCESS); |
- print_thread_.Stop(); |
- } |
+ if (shutting_down_) |
+ return; |
+ |
+ local_job_id_ = local_job_id; |
+ print_thread_.Stop(); |
+ |
+ // The print job has been spooled locally. We now need to create an object |
+ // that monitors the status of the job and updates the server. |
+ scoped_refptr<JobStatusUpdater> job_status_updater( |
+ new JobStatusUpdater(printer_info_.printer_name, job_details_.job_id_, |
+ local_job_id_, cloud_print_server_url_, |
+ print_system_.get(), this)); |
+ job_status_updater_list_.push_back(job_status_updater); |
+ base::MessageLoop::current()->PostTask( |
+ FROM_HERE, |
+ base::Bind(&JobStatusUpdater::UpdateStatus, job_status_updater.get())); |
+ |
+ CheckForJobs(kJobFetchReasonQueryMore); |
+ |
+ VLOG(1) << "CP_CONNECTOR: Stopping printer job handler" |
+ << ", printer id: " << printer_info_cloud_.printer_id; |
+ base::MessageLoop::current()->PostTask( |
+ FROM_HERE, base::Bind(&PrinterJobHandler::Stop, this)); |
} |
bool PrinterJobHandler::UpdatePrinterInfo() { |