| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/common/cloud_print/cloud_print_helpers.h" | 5 #include "chrome/common/cloud_print/cloud_print_helpers.h" |
| 6 | 6 |
| 7 #include "base/json/json_reader.h" | 7 #include "base/json/json_reader.h" |
| 8 #include "base/logging.h" | 8 #include "base/logging.h" |
| 9 #include "base/md5.h" | 9 #include "base/md5.h" |
| 10 #include "base/memory/scoped_ptr.h" | 10 #include "base/memory/scoped_ptr.h" |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 69 GURL::Replacements replacements; | 69 GURL::Replacements replacements; |
| 70 replacements.SetPathStr(path); | 70 replacements.SetPathStr(path); |
| 71 return cloud_print_server_url.ReplaceComponents(replacements); | 71 return cloud_print_server_url.ReplaceComponents(replacements); |
| 72 } | 72 } |
| 73 | 73 |
| 74 GURL GetUrlForPrinterList(const GURL& cloud_print_server_url, | 74 GURL GetUrlForPrinterList(const GURL& cloud_print_server_url, |
| 75 const std::string& proxy_id) { | 75 const std::string& proxy_id) { |
| 76 std::string path(AppendPathToUrl(cloud_print_server_url, "list")); | 76 std::string path(AppendPathToUrl(cloud_print_server_url, "list")); |
| 77 GURL::Replacements replacements; | 77 GURL::Replacements replacements; |
| 78 replacements.SetPathStr(path); | 78 replacements.SetPathStr(path); |
| 79 std::string query = StringPrintf("proxy=%s", proxy_id.c_str()); | 79 std::string query = base::StringPrintf("proxy=%s", proxy_id.c_str()); |
| 80 replacements.SetQueryStr(query); | 80 replacements.SetQueryStr(query); |
| 81 return cloud_print_server_url.ReplaceComponents(replacements); | 81 return cloud_print_server_url.ReplaceComponents(replacements); |
| 82 } | 82 } |
| 83 | 83 |
| 84 GURL GetUrlForPrinterRegistration(const GURL& cloud_print_server_url) { | 84 GURL GetUrlForPrinterRegistration(const GURL& cloud_print_server_url) { |
| 85 std::string path(AppendPathToUrl(cloud_print_server_url, "register")); | 85 std::string path(AppendPathToUrl(cloud_print_server_url, "register")); |
| 86 GURL::Replacements replacements; | 86 GURL::Replacements replacements; |
| 87 replacements.SetPathStr(path); | 87 replacements.SetPathStr(path); |
| 88 return cloud_print_server_url.ReplaceComponents(replacements); | 88 return cloud_print_server_url.ReplaceComponents(replacements); |
| 89 } | 89 } |
| 90 | 90 |
| 91 GURL GetUrlForPrinterUpdate(const GURL& cloud_print_server_url, | 91 GURL GetUrlForPrinterUpdate(const GURL& cloud_print_server_url, |
| 92 const std::string& printer_id) { | 92 const std::string& printer_id) { |
| 93 std::string path(AppendPathToUrl(cloud_print_server_url, "update")); | 93 std::string path(AppendPathToUrl(cloud_print_server_url, "update")); |
| 94 GURL::Replacements replacements; | 94 GURL::Replacements replacements; |
| 95 replacements.SetPathStr(path); | 95 replacements.SetPathStr(path); |
| 96 std::string query = StringPrintf("printerid=%s", printer_id.c_str()); | 96 std::string query = base::StringPrintf("printerid=%s", printer_id.c_str()); |
| 97 replacements.SetQueryStr(query); | 97 replacements.SetQueryStr(query); |
| 98 return cloud_print_server_url.ReplaceComponents(replacements); | 98 return cloud_print_server_url.ReplaceComponents(replacements); |
| 99 } | 99 } |
| 100 | 100 |
| 101 GURL GetUrlForPrinterDelete(const GURL& cloud_print_server_url, | 101 GURL GetUrlForPrinterDelete(const GURL& cloud_print_server_url, |
| 102 const std::string& printer_id, | 102 const std::string& printer_id, |
| 103 const std::string& reason) { | 103 const std::string& reason) { |
| 104 std::string path(AppendPathToUrl(cloud_print_server_url, "delete")); | 104 std::string path(AppendPathToUrl(cloud_print_server_url, "delete")); |
| 105 GURL::Replacements replacements; | 105 GURL::Replacements replacements; |
| 106 replacements.SetPathStr(path); | 106 replacements.SetPathStr(path); |
| 107 std::string query = StringPrintf( | 107 std::string query = base::StringPrintf( |
| 108 "printerid=%s&reason=%s", printer_id.c_str(), reason.c_str()); | 108 "printerid=%s&reason=%s", printer_id.c_str(), reason.c_str()); |
| 109 replacements.SetQueryStr(query); | 109 replacements.SetQueryStr(query); |
| 110 return cloud_print_server_url.ReplaceComponents(replacements); | 110 return cloud_print_server_url.ReplaceComponents(replacements); |
| 111 } | 111 } |
| 112 | 112 |
| 113 GURL GetUrlForJobFetch(const GURL& cloud_print_server_url, | 113 GURL GetUrlForJobFetch(const GURL& cloud_print_server_url, |
| 114 const std::string& printer_id, | 114 const std::string& printer_id, |
| 115 const std::string& reason) { | 115 const std::string& reason) { |
| 116 std::string path(AppendPathToUrl(cloud_print_server_url, "fetch")); | 116 std::string path(AppendPathToUrl(cloud_print_server_url, "fetch")); |
| 117 GURL::Replacements replacements; | 117 GURL::Replacements replacements; |
| 118 replacements.SetPathStr(path); | 118 replacements.SetPathStr(path); |
| 119 std::string query = StringPrintf( | 119 std::string query = base::StringPrintf( |
| 120 "printerid=%s&deb=%s", printer_id.c_str(), reason.c_str()); | 120 "printerid=%s&deb=%s", printer_id.c_str(), reason.c_str()); |
| 121 replacements.SetQueryStr(query); | 121 replacements.SetQueryStr(query); |
| 122 return cloud_print_server_url.ReplaceComponents(replacements); | 122 return cloud_print_server_url.ReplaceComponents(replacements); |
| 123 } | 123 } |
| 124 | 124 |
| 125 | 125 |
| 126 GURL GetUrlForJobDelete(const GURL& cloud_print_server_url, | 126 GURL GetUrlForJobDelete(const GURL& cloud_print_server_url, |
| 127 const std::string& job_id) { | 127 const std::string& job_id) { |
| 128 std::string path(AppendPathToUrl(cloud_print_server_url, "deletejob")); | 128 std::string path(AppendPathToUrl(cloud_print_server_url, "deletejob")); |
| 129 GURL::Replacements replacements; | 129 GURL::Replacements replacements; |
| 130 replacements.SetPathStr(path); | 130 replacements.SetPathStr(path); |
| 131 std::string query = StringPrintf("jobid=%s", job_id.c_str()); | 131 std::string query = base::StringPrintf("jobid=%s", job_id.c_str()); |
| 132 replacements.SetQueryStr(query); | 132 replacements.SetQueryStr(query); |
| 133 return cloud_print_server_url.ReplaceComponents(replacements); | 133 return cloud_print_server_url.ReplaceComponents(replacements); |
| 134 } | 134 } |
| 135 | 135 |
| 136 GURL GetUrlForJobStatusUpdate(const GURL& cloud_print_server_url, | 136 GURL GetUrlForJobStatusUpdate(const GURL& cloud_print_server_url, |
| 137 const std::string& job_id, | 137 const std::string& job_id, |
| 138 const std::string& status_string) { | 138 const std::string& status_string) { |
| 139 std::string path(AppendPathToUrl(cloud_print_server_url, "control")); | 139 std::string path(AppendPathToUrl(cloud_print_server_url, "control")); |
| 140 GURL::Replacements replacements; | 140 GURL::Replacements replacements; |
| 141 replacements.SetPathStr(path); | 141 replacements.SetPathStr(path); |
| 142 std::string query = StringPrintf( | 142 std::string query = base::StringPrintf( |
| 143 "jobid=%s&status=%s", job_id.c_str(), status_string.c_str()); | 143 "jobid=%s&status=%s", job_id.c_str(), status_string.c_str()); |
| 144 replacements.SetQueryStr(query); | 144 replacements.SetQueryStr(query); |
| 145 return cloud_print_server_url.ReplaceComponents(replacements); | 145 return cloud_print_server_url.ReplaceComponents(replacements); |
| 146 } | 146 } |
| 147 | 147 |
| 148 GURL GetUrlForUserMessage(const GURL& cloud_print_server_url, | 148 GURL GetUrlForUserMessage(const GURL& cloud_print_server_url, |
| 149 const std::string& message_id) { | 149 const std::string& message_id) { |
| 150 std::string path(AppendPathToUrl(cloud_print_server_url, "message")); | 150 std::string path(AppendPathToUrl(cloud_print_server_url, "message")); |
| 151 GURL::Replacements replacements; | 151 GURL::Replacements replacements; |
| 152 replacements.SetPathStr(path); | 152 replacements.SetPathStr(path); |
| 153 std::string query = StringPrintf("code=%s", message_id.c_str()); | 153 std::string query = base::StringPrintf("code=%s", message_id.c_str()); |
| 154 replacements.SetQueryStr(query); | 154 replacements.SetQueryStr(query); |
| 155 return cloud_print_server_url.ReplaceComponents(replacements); | 155 return cloud_print_server_url.ReplaceComponents(replacements); |
| 156 } | 156 } |
| 157 | 157 |
| 158 GURL GetUrlForGetAuthCode(const GURL& cloud_print_server_url, | 158 GURL GetUrlForGetAuthCode(const GURL& cloud_print_server_url, |
| 159 const std::string& oauth_client_id, | 159 const std::string& oauth_client_id, |
| 160 const std::string& proxy_id) { | 160 const std::string& proxy_id) { |
| 161 // We use the internal API "createrobot" instead of "getauthcode". This API | 161 // We use the internal API "createrobot" instead of "getauthcode". This API |
| 162 // will add the robot as owner to all the existing printers for this user. | 162 // will add the robot as owner to all the existing printers for this user. |
| 163 std::string path(AppendPathToUrl(cloud_print_server_url, "createrobot")); | 163 std::string path(AppendPathToUrl(cloud_print_server_url, "createrobot")); |
| 164 GURL::Replacements replacements; | 164 GURL::Replacements replacements; |
| 165 replacements.SetPathStr(path); | 165 replacements.SetPathStr(path); |
| 166 std::string query = StringPrintf("oauth_client_id=%s&proxy=%s", | 166 std::string query = base::StringPrintf("oauth_client_id=%s&proxy=%s", |
| 167 oauth_client_id.c_str(), | 167 oauth_client_id.c_str(), |
| 168 proxy_id.c_str()); | 168 proxy_id.c_str()); |
| 169 replacements.SetQueryStr(query); | 169 replacements.SetQueryStr(query); |
| 170 return cloud_print_server_url.ReplaceComponents(replacements); | 170 return cloud_print_server_url.ReplaceComponents(replacements); |
| 171 } | 171 } |
| 172 | 172 |
| 173 scoped_ptr<base::DictionaryValue> ParseResponseJSON( | 173 scoped_ptr<base::DictionaryValue> ParseResponseJSON( |
| 174 const std::string& response_data, | 174 const std::string& response_data, |
| 175 bool* succeeded) { | 175 bool* succeeded) { |
| 176 scoped_ptr<base::Value> message_value(base::JSONReader::Read(response_data)); | 176 scoped_ptr<base::Value> message_value(base::JSONReader::Read(response_data)); |
| 177 if (!message_value.get()) | 177 if (!message_value.get()) |
| 178 return scoped_ptr<base::DictionaryValue>(); | 178 return scoped_ptr<base::DictionaryValue>(); |
| (...skipping 11 matching lines...) Expand all Loading... |
| 190 | 190 |
| 191 void AddMultipartValueForUpload(const std::string& value_name, | 191 void AddMultipartValueForUpload(const std::string& value_name, |
| 192 const std::string& value, | 192 const std::string& value, |
| 193 const std::string& mime_boundary, | 193 const std::string& mime_boundary, |
| 194 const std::string& content_type, | 194 const std::string& content_type, |
| 195 std::string* post_data) { | 195 std::string* post_data) { |
| 196 DCHECK(post_data); | 196 DCHECK(post_data); |
| 197 // First line is the boundary | 197 // First line is the boundary |
| 198 post_data->append("--" + mime_boundary + "\r\n"); | 198 post_data->append("--" + mime_boundary + "\r\n"); |
| 199 // Next line is the Content-disposition | 199 // Next line is the Content-disposition |
| 200 post_data->append(StringPrintf("Content-Disposition: form-data; " | 200 post_data->append(base::StringPrintf("Content-Disposition: form-data; " |
| 201 "name=\"%s\"\r\n", value_name.c_str())); | 201 "name=\"%s\"\r\n", value_name.c_str())); |
| 202 if (!content_type.empty()) { | 202 if (!content_type.empty()) { |
| 203 // If Content-type is specified, the next line is that | 203 // If Content-type is specified, the next line is that |
| 204 post_data->append(StringPrintf("Content-Type: %s\r\n", | 204 post_data->append(base::StringPrintf("Content-Type: %s\r\n", |
| 205 content_type.c_str())); | 205 content_type.c_str())); |
| 206 } | 206 } |
| 207 // Leave an empty line and append the value. | 207 // Leave an empty line and append the value. |
| 208 post_data->append(StringPrintf("\r\n%s\r\n", value.c_str())); | 208 post_data->append(base::StringPrintf("\r\n%s\r\n", value.c_str())); |
| 209 } | 209 } |
| 210 | 210 |
| 211 std::string GetMultipartMimeType(const std::string& mime_boundary) { | 211 std::string GetMultipartMimeType(const std::string& mime_boundary) { |
| 212 return std::string("multipart/form-data; boundary=") + mime_boundary; | 212 return std::string("multipart/form-data; boundary=") + mime_boundary; |
| 213 } | 213 } |
| 214 | 214 |
| 215 // Create a MIME boundary marker (27 '-' characters followed by 16 hex digits). | 215 // Create a MIME boundary marker (27 '-' characters followed by 16 hex digits). |
| 216 void CreateMimeBoundaryForUpload(std::string* out) { | 216 void CreateMimeBoundaryForUpload(std::string* out) { |
| 217 int r1 = base::RandInt(0, kint32max); | 217 int r1 = base::RandInt(0, kint32max); |
| 218 int r2 = base::RandInt(0, kint32max); | 218 int r2 = base::RandInt(0, kint32max); |
| (...skipping 13 matching lines...) Expand all Loading... |
| 232 std::string post_data; | 232 std::string post_data; |
| 233 for (PrinterTags::const_iterator it = printer_tags_prepared.begin(); | 233 for (PrinterTags::const_iterator it = printer_tags_prepared.begin(); |
| 234 it != printer_tags_prepared.end(); ++it) { | 234 it != printer_tags_prepared.end(); ++it) { |
| 235 // TODO(gene) Escape '=' char from name. Warning for now. | 235 // TODO(gene) Escape '=' char from name. Warning for now. |
| 236 if (it->first.find('=') != std::string::npos) { | 236 if (it->first.find('=') != std::string::npos) { |
| 237 LOG(WARNING) << | 237 LOG(WARNING) << |
| 238 "CP_PROXY: Printer option name contains '=' character"; | 238 "CP_PROXY: Printer option name contains '=' character"; |
| 239 NOTREACHED(); | 239 NOTREACHED(); |
| 240 } | 240 } |
| 241 // All our tags have a special prefix to identify them as such. | 241 // All our tags have a special prefix to identify them as such. |
| 242 std::string msg = StringPrintf("%s%s=%s", | 242 std::string msg = base::StringPrintf("%s%s=%s", |
| 243 proxy_tag_prefix.c_str(), it->first.c_str(), it->second.c_str()); | 243 proxy_tag_prefix.c_str(), it->first.c_str(), it->second.c_str()); |
| 244 AddMultipartValueForUpload(kPrinterTagValue, msg, mime_boundary, | 244 AddMultipartValueForUpload(kPrinterTagValue, msg, mime_boundary, |
| 245 std::string(), &post_data); | 245 std::string(), &post_data); |
| 246 } | 246 } |
| 247 std::string tags_hash_msg = StringPrintf("%s=%s", | 247 std::string tags_hash_msg = base::StringPrintf("%s=%s", |
| 248 tags_hash_tag_name.c_str(), | 248 tags_hash_tag_name.c_str(), |
| 249 HashPrinterTags(printer_tags_prepared).c_str()); | 249 HashPrinterTags(printer_tags_prepared).c_str()); |
| 250 AddMultipartValueForUpload(kPrinterTagValue, tags_hash_msg, mime_boundary, | 250 AddMultipartValueForUpload(kPrinterTagValue, tags_hash_msg, mime_boundary, |
| 251 std::string(), &post_data); | 251 std::string(), &post_data); |
| 252 return post_data; | 252 return post_data; |
| 253 } | 253 } |
| 254 | 254 |
| 255 std::string GetCloudPrintAuthHeader(const std::string& auth_token) { | 255 std::string GetCloudPrintAuthHeader(const std::string& auth_token) { |
| 256 return StringPrintf("Authorization: OAuth %s", auth_token.c_str()); | 256 return base::StringPrintf("Authorization: OAuth %s", auth_token.c_str()); |
| 257 } | 257 } |
| 258 | 258 |
| 259 } // namespace cloud_print | 259 } // namespace cloud_print |
| OLD | NEW |