• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "chrome/service/cloud_print/cloud_print_service_helpers.h"
6 
7 #include "base/strings/stringprintf.h"
8 #include "chrome/common/cloud_print/cloud_print_constants.h"
9 #include "chrome/common/cloud_print/cloud_print_helpers.h"
10 #include "chrome/service/cloud_print/cloud_print_token_store.h"
11 #include "chrome/service/service_process.h"
12 
13 namespace {
14 
StringFromJobStatus(cloud_print::PrintJobStatus status)15 std::string StringFromJobStatus(cloud_print::PrintJobStatus status) {
16   std::string ret;
17   switch (status) {
18     case cloud_print::PRINT_JOB_STATUS_IN_PROGRESS:
19       ret = "IN_PROGRESS";
20       break;
21     case cloud_print::PRINT_JOB_STATUS_ERROR:
22       ret = "ERROR";
23       break;
24     case cloud_print::PRINT_JOB_STATUS_COMPLETED:
25       ret = "DONE";
26       break;
27     default:
28       ret = "UNKNOWN";
29       NOTREACHED();
30       break;
31   }
32   return ret;
33 }
34 
35 }  // namespace
36 
37 namespace cloud_print {
38 
GetUrlForJobStatusUpdate(const GURL & cloud_print_server_url,const std::string & job_id,PrintJobStatus status,int connector_code)39 GURL GetUrlForJobStatusUpdate(const GURL& cloud_print_server_url,
40                               const std::string& job_id,
41                               PrintJobStatus status,
42                               int connector_code) {
43   return GetUrlForJobStatusUpdate(cloud_print_server_url,
44                                   job_id,
45                                   StringFromJobStatus(status),
46                                   connector_code);
47 }
48 
GetUrlForJobStatusUpdate(const GURL & cloud_print_server_url,const std::string & job_id,const PrintJobDetails & details)49 GURL GetUrlForJobStatusUpdate(const GURL& cloud_print_server_url,
50                               const std::string& job_id,
51                               const PrintJobDetails& details) {
52   std::string status_string = StringFromJobStatus(details.status);
53   std::string path(AppendPathToUrl(cloud_print_server_url, "control"));
54   GURL::Replacements replacements;
55   replacements.SetPathStr(path);
56   std::string query =
57       base::StringPrintf("jobid=%s&status=%s&code=%d&message=%s"
58                          "&numpages=%d&pagesprinted=%d",
59                          job_id.c_str(),
60                          status_string.c_str(),
61                          details.platform_status_flags,
62                          details.status_message.c_str(),
63                          details.total_pages,
64                          details.pages_printed);
65   replacements.SetQueryStr(query);
66   return cloud_print_server_url.ReplaceComponents(replacements);
67 }
68 
GetHashOfPrinterInfo(const printing::PrinterBasicInfo & printer_info)69 std::string GetHashOfPrinterInfo(
70     const printing::PrinterBasicInfo& printer_info) {
71   return GetHashOfPrinterTags(printer_info.options);
72 }
73 
GetPostDataForPrinterInfo(const printing::PrinterBasicInfo & printer_info,const std::string & mime_boundary)74 std::string GetPostDataForPrinterInfo(
75     const printing::PrinterBasicInfo& printer_info,
76     const std::string& mime_boundary) {
77   return GetPostDataForPrinterTags(
78       printer_info.options,
79       mime_boundary,
80       kCloudPrintServiceProxyTagPrefix,
81       kCloudPrintServiceTagsHashTagName);
82 }
83 
IsDryRunJob(const std::vector<std::string> & tags)84 bool IsDryRunJob(const std::vector<std::string>& tags) {
85   return std::find(tags.begin(), tags.end(),
86                    std::string(kCloudPrintServiceTagDryRunFlag)) != tags.end();
87 }
88 
GetCloudPrintAuthHeaderFromStore()89 std::string GetCloudPrintAuthHeaderFromStore() {
90   CloudPrintTokenStore* token_store = CloudPrintTokenStore::current();
91   if (!token_store || token_store->token().empty()) {
92     // Using LOG here for critical errors. GCP connector may run in the headless
93     // mode and error indication might be useful for user in that case.
94     LOG(ERROR) << "CP_PROXY: Missing OAuth token for request";
95     return std::string();
96   }
97   return GetCloudPrintAuthHeader(token_store->token());
98 }
99 
100 }  // namespace cloud_print
101