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

Side by Side Diff: components/update_client/update_response.cc

Issue 2700733002: Mechanical refactoring of the parser and ActionUpdateCheck (Closed)
Patch Set: . Created 3 years, 10 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 unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "components/update_client/update_response.h" 5 #include "components/update_client/update_response.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <algorithm> 9 #include <algorithm>
10 #include <memory> 10 #include <memory>
(...skipping 240 matching lines...) Expand 10 before | Expand all | Expand 10 after
251 return false; 251 return false;
252 } 252 }
253 253
254 return true; 254 return true;
255 } 255 }
256 256
257 // Parses the <updatecheck> tag. 257 // Parses the <updatecheck> tag.
258 bool ParseUpdateCheckTag(xmlNode* updatecheck, 258 bool ParseUpdateCheckTag(xmlNode* updatecheck,
259 UpdateResponse::Result* result, 259 UpdateResponse::Result* result,
260 std::string* error) { 260 std::string* error) {
261 if (GetAttribute(updatecheck, "status") == "noupdate") { 261 // Read the |status| attribute.
262 return true; 262 result->status = GetAttribute(updatecheck, "status");
263 } 263 if (result->status.empty()) {
264 264 *error = "Missing status on updatecheck node";
265 // Get the <urls> tag.
266 std::vector<xmlNode*> urls = GetChildren(updatecheck, "urls");
267 if (urls.empty()) {
268 *error = "Missing urls on updatecheck.";
269 return false; 265 return false;
270 } 266 }
271 267
272 if (!ParseUrlsTag(urls[0], result, error)) { 268 if (result->status == "noupdate")
273 return false; 269 return true;
270
271 if (result->status == "ok") {
272 std::vector<xmlNode*> urls = GetChildren(updatecheck, "urls");
273 if (urls.empty()) {
274 *error = "Missing urls on updatecheck.";
275 return false;
276 }
277
278 if (!ParseUrlsTag(urls[0], result, error)) {
279 return false;
280 }
281
282 std::vector<xmlNode*> manifests = GetChildren(updatecheck, "manifest");
283 if (manifests.empty()) {
284 *error = "Missing manifest on updatecheck.";
285 return false;
286 }
287
288 return ParseManifestTag(manifests[0], result, error);
274 } 289 }
275 290
276 std::vector<xmlNode*> manifests = GetChildren(updatecheck, "manifest"); 291 // Return the |updatecheck| element status as a parsing error.
277 if (manifests.empty()) { 292 *error = result->status;
278 *error = "Missing manifest on updatecheck."; 293 return false;
279 return false;
280 }
281
282 return ParseManifestTag(manifests[0], result, error);
283 } 294 }
284 295
285 // Parses a single <app> tag. 296 // Parses a single <app> tag.
286 bool ParseAppTag(xmlNode* app, 297 bool ParseAppTag(xmlNode* app,
287 UpdateResponse::Result* result, 298 UpdateResponse::Result* result,
288 std::string* error) { 299 std::string* error) {
289 // Read cohort information. 300 // Read cohort information.
290 auto cohort = GetAttributePtr(app, "cohort"); 301 auto cohort = GetAttributePtr(app, "cohort");
291 static const char* attrs[] = {UpdateResponse::Result::kCohort, 302 static const char* attrs[] = {UpdateResponse::Result::kCohort,
292 UpdateResponse::Result::kCohortHint, 303 UpdateResponse::Result::kCohortHint,
(...skipping 20 matching lines...) Expand all
313 324
314 return ParseUpdateCheckTag(updates[0], result, error); 325 return ParseUpdateCheckTag(updates[0], result, error);
315 } 326 }
316 327
317 bool UpdateResponse::Parse(const std::string& response_xml) { 328 bool UpdateResponse::Parse(const std::string& response_xml) {
318 results_.daystart_elapsed_seconds = kNoDaystart; 329 results_.daystart_elapsed_seconds = kNoDaystart;
319 results_.daystart_elapsed_days = kNoDaystart; 330 results_.daystart_elapsed_days = kNoDaystart;
320 results_.list.clear(); 331 results_.list.clear();
321 errors_.clear(); 332 errors_.clear();
322 333
323 if (response_xml.length() < 1) { 334 if (response_xml.empty()) {
324 ParseError("Empty xml"); 335 ParseError("Empty xml");
325 return false; 336 return false;
326 } 337 }
327 338
328 std::string xml_errors; 339 std::string xml_errors;
329 ScopedXmlErrorFunc error_func(&xml_errors, &XmlErrorFunc); 340 ScopedXmlErrorFunc error_func(&xml_errors, &XmlErrorFunc);
330 341
331 // Start up the xml parser with the manifest_xml contents. 342 // Start up the xml parser with the manifest_xml contents.
332 ScopedXmlDocument document( 343 ScopedXmlDocument document(
333 xmlParseDoc(reinterpret_cast<const xmlChar*>(response_xml.c_str()))); 344 xmlParseDoc(reinterpret_cast<const xmlChar*>(response_xml.c_str())));
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
381 results_.list.push_back(result); 392 results_.list.push_back(result);
382 } else { 393 } else {
383 ParseError("%s", error.c_str()); 394 ParseError("%s", error.c_str());
384 } 395 }
385 } 396 }
386 397
387 return true; 398 return true;
388 } 399 }
389 400
390 } // namespace update_client 401 } // namespace update_client
OLDNEW
« no previous file with comments | « components/update_client/update_response.h ('k') | components/update_client/update_response_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698