Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3051)

Unified Diff: chrome/browser/printing/cloud_print/job_status_updater.cc

Issue 1566047: First cut of Cloud Print Proxy implementation. The code is not enabled for no... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Final review changes Created 10 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/printing/cloud_print/job_status_updater.cc
===================================================================
--- chrome/browser/printing/cloud_print/job_status_updater.cc (revision 0)
+++ chrome/browser/printing/cloud_print/job_status_updater.cc (revision 0)
@@ -0,0 +1,90 @@
+// Copyright (c) 2010 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/printing/cloud_print/job_status_updater.h"
+
+#include "base/json/json_reader.h"
+#include "base/string_util.h"
+#include "base/utf_string_conversions.h"
+#include "base/values.h"
+#include "chrome/browser/printing/cloud_print/cloud_print_consts.h"
+#include "chrome/browser/printing/cloud_print/cloud_print_helpers.h"
+#include "googleurl/src/gurl.h"
+
+JobStatusUpdater::JobStatusUpdater(const std::string& printer_name,
+ const std::string& job_id,
+ cloud_print::PlatformJobId& local_job_id,
+ const std::string& auth_token,
+ Delegate* delegate)
+ : printer_name_(printer_name), job_id_(job_id),
+ local_job_id_(local_job_id), auth_token_(auth_token),
+ delegate_(delegate), stopped_(false) {
+ DCHECK(delegate_);
+}
+
+// Start checking the status of the local print job.
+void JobStatusUpdater::UpdateStatus() {
+ // It does not matter if we had already sent out an update and are waiting for
+ // a response. This is a new update and we will simply cancel the old request
+ // and send a new one.
+ if (!stopped_) {
+ bool need_update = false;
+ // If the job has already been completed, we just need to update the server
+ // with that status. The *only* reason we would come back here in that case
+ // is if our last server update attempt failed.
+ if (last_job_details_.status == cloud_print::PRINT_JOB_STATUS_COMPLETED) {
+ need_update = true;
+ } else {
+ cloud_print::PrintJobDetails details;
+ if (cloud_print::GetJobDetails(printer_name_, local_job_id_, &details)) {
+ if (details != last_job_details_) {
+ last_job_details_ = details;
+ need_update = true;
+ }
+ } else {
+ // If GetJobDetails failed, the most likely case is that the job no
+ // longer exists in the OS queue. We are going to assume it is done in
+ // this case.
+ last_job_details_.Clear();
+ last_job_details_.status = cloud_print::PRINT_JOB_STATUS_COMPLETED;
+ need_update = true;
+ }
+ }
+ if (need_update) {
+ GURL update_url = CloudPrintHelpers::GetUrlForJobStatusUpdate(
+ job_id_, last_job_details_);
+ request_.reset(new URLFetcher(update_url, URLFetcher::GET, this));
+ CloudPrintHelpers::PrepCloudPrintRequest(request_.get(), auth_token_);
+ request_->Start();
+ }
+ }
+}
+
+void JobStatusUpdater::Stop() {
+ request_.reset();
+ DCHECK(delegate_);
+ stopped_ = true;
+ delegate_->OnJobCompleted(this);
+}
+
+// URLFetcher::Delegate implementation.
+void JobStatusUpdater::OnURLFetchComplete(const URLFetcher* source,
+ const GURL& url,
+ const URLRequestStatus& status,
+ int response_code,
+ const ResponseCookies& cookies,
+ const std::string& data) {
+ int64 next_update_interval = kJobStatusUpdateInterval;
+ if (!status.is_success() || (response_code != 200)) {
+ next_update_interval *= 10;
+ MessageLoop::current()->PostDelayedTask(
+ FROM_HERE, NewRunnableMethod(this, &JobStatusUpdater::UpdateStatus),
+ next_update_interval);
+ } else if (last_job_details_.status ==
+ cloud_print::PRINT_JOB_STATUS_COMPLETED) {
+ MessageLoop::current()->PostTask(
+ FROM_HERE, NewRunnableMethod(this, &JobStatusUpdater::Stop));
+ }
+}
+
Property changes on: chrome\browser\printing\cloud_print\job_status_updater.cc
___________________________________________________________________
Added: svn:eol-style
+ LF
« no previous file with comments | « chrome/browser/printing/cloud_print/job_status_updater.h ('k') | chrome/browser/printing/cloud_print/printer_info.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698