Index: chrome/browser/local_discovery/privet_http_impl.cc |
diff --git a/chrome/browser/local_discovery/privet_http_impl.cc b/chrome/browser/local_discovery/privet_http_impl.cc |
index 28575a36c7623d1c4901119251403e9935c3d8b4..f312553b9e989c67411fa9290e5b4d07b9d517b8 100644 |
--- a/chrome/browser/local_discovery/privet_http_impl.cc |
+++ b/chrome/browser/local_discovery/privet_http_impl.cc |
@@ -25,12 +25,15 @@ const char kPrivetURLValueOffline[] = "1"; |
const char kPrivetContentTypePDF[] = "application/pdf"; |
const char kPrivetContentTypePWGRaster[] = "image/pwg-raster"; |
+const char kPrivetContentTypeCJT[] = "application/json"; |
const char kPrivetCDDKeySupportedContentTypes[] = |
"printer.supported_content_type"; |
const char kPrivetCDDKeyContentType[] = "content_type"; |
+const char kPrivetKeyJobID[] = "job_id"; |
+ |
const int kPrivetCancelationTimeoutSeconds = 3; |
GURL CreatePrivetURL(const std::string& path) { |
@@ -365,10 +368,6 @@ PrivetLocalPrintOperationImpl::~PrivetLocalPrintOperationImpl() { |
void PrivetLocalPrintOperationImpl::Start() { |
DCHECK(!started_); |
- current_request_ = |
- base::Bind(&PrivetLocalPrintOperationImpl::StartInitialRequest, |
- base::Unretained(this)); |
- |
// We need to get the /info response so we can know which APIs are available. |
// TODO(noamsml): Use cached info when available. |
info_operation_ = privet_client_->CreateInfoOperation(this); |
@@ -377,11 +376,6 @@ void PrivetLocalPrintOperationImpl::Start() { |
started_ = true; |
} |
-void PrivetLocalPrintOperationImpl::StartCurrentRequest() { |
- DCHECK(!current_request_.is_null()); |
- current_request_.Run(); |
-} |
- |
void PrivetLocalPrintOperationImpl::OnPrivetInfoDone( |
PrivetInfoOperation* operation, |
int http_code, |
@@ -411,7 +405,7 @@ void PrivetLocalPrintOperationImpl::OnPrivetInfoDone( |
return; |
} |
- StartCurrentRequest(); |
+ StartInitialRequest(); |
} else { |
delegate_->OnPrivetPrintingError(this, http_code); |
} |
@@ -430,7 +424,7 @@ void PrivetLocalPrintOperationImpl::StartInitialRequest() { |
void PrivetLocalPrintOperationImpl::GetCapabilities() { |
current_response_ = base::Bind( |
- &PrivetLocalPrintOperationImpl::OnCapabilities, |
+ &PrivetLocalPrintOperationImpl::OnCapabilitiesResponse, |
base::Unretained(this)); |
url_fetcher_= privet_client_->CreateURLFetcher( |
@@ -440,6 +434,18 @@ void PrivetLocalPrintOperationImpl::GetCapabilities() { |
url_fetcher_->Start(); |
} |
+void PrivetLocalPrintOperationImpl::DoCreatejob() { |
+ current_response_ = base::Bind( |
+ &PrivetLocalPrintOperationImpl::OnCreatejobResponse, |
+ base::Unretained(this)); |
+ |
+ url_fetcher_= privet_client_->CreateURLFetcher( |
+ CreatePrivetURL(kPrivetCreatejobPath), net::URLFetcher::POST, this); |
+ url_fetcher_->SetUploadData(kPrivetContentTypeCJT, ticket_); |
+ |
+ url_fetcher_->Start(); |
+} |
+ |
void PrivetLocalPrintOperationImpl::DoSubmitdoc() { |
current_response_ = base::Bind( |
&PrivetLocalPrintOperationImpl::OnSubmitdocResponse, |
@@ -459,6 +465,12 @@ void PrivetLocalPrintOperationImpl::DoSubmitdoc() { |
jobname_); |
} |
+ if (!jobid_.empty()) { |
+ url = net::AppendQueryParameter(url, |
+ kPrivetKeyJobID, |
+ jobid_); |
+ } |
+ |
if (offline_) { |
url = net::AppendQueryParameter(url, |
kPrivetURLKeyOffline, |
@@ -476,7 +488,7 @@ void PrivetLocalPrintOperationImpl::DoSubmitdoc() { |
url_fetcher_->Start(); |
} |
-void PrivetLocalPrintOperationImpl::OnCapabilities( |
+void PrivetLocalPrintOperationImpl::OnCapabilitiesResponse( |
const base::DictionaryValue* value) { |
const base::ListValue* supported_content_types; |
use_pdf_ = false; |
@@ -511,6 +523,15 @@ void PrivetLocalPrintOperationImpl::OnSubmitdocResponse( |
delegate_->OnPrivetPrintingDone(this); |
} |
+void PrivetLocalPrintOperationImpl::OnCreatejobResponse( |
+ const base::DictionaryValue* value) { |
+ // Try to get job ID from value. If not, jobid_ will be empty and we will use |
+ // simple printing. |
+ value->GetString(kPrivetKeyJobID, &jobid_); |
+ |
+ DoSubmitdoc(); |
+} |
+ |
PrivetHTTPClient* PrivetLocalPrintOperationImpl::GetHTTPClient() { |
return privet_client_; |
} |
@@ -543,11 +564,12 @@ void PrivetLocalPrintOperationImpl::OnNeedPrivetToken( |
void PrivetLocalPrintOperationImpl::SendData(const std::string& data) { |
DCHECK(started_); |
data_ = data; |
- current_request_ = base::Bind( |
- &PrivetLocalPrintOperationImpl::DoSubmitdoc, |
- base::Unretained(this)); |
- StartCurrentRequest(); |
+ if (has_extended_workflow_ && !ticket_.empty()) { |
+ DoCreatejob(); |
+ } else { |
+ DoSubmitdoc(); |
+ } |
} |
void PrivetLocalPrintOperationImpl::SetTicket(const std::string& ticket) { |