summaryrefslogtreecommitdiffstats
path: root/chrome/service/cloud_print/printer_job_handler.cc
diff options
context:
space:
mode:
authorvitalybuka@chromium.org <vitalybuka@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-07-15 11:51:05 +0000
committervitalybuka@chromium.org <vitalybuka@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-07-15 11:51:05 +0000
commit3613ce639551ae140b32a71efe8481160f109841 (patch)
tree5ddec3217f306db747f9593b0d9a9135a6bfd88e /chrome/service/cloud_print/printer_job_handler.cc
parent182427ca6c1641ee8cf835cd8ed738d4166fb385 (diff)
downloadchromium_src-3613ce639551ae140b32a71efe8481160f109841.zip
chromium_src-3613ce639551ae140b32a71efe8481160f109841.tar.gz
chromium_src-3613ce639551ae140b32a71efe8481160f109841.tar.bz2
Set task into IN_PROCESS before sending to printer.
BUG=258173 Review URL: https://chromiumcodereview.appspot.com/18890005 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@211630 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/service/cloud_print/printer_job_handler.cc')
-rw-r--r--chrome/service/cloud_print/printer_job_handler.cc82
1 files changed, 41 insertions, 41 deletions
diff --git a/chrome/service/cloud_print/printer_job_handler.cc b/chrome/service/cloud_print/printer_job_handler.cc
index e38b5ca..22371b8 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() {