1f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 2f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// found in the LICENSE file. 4f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 5f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/memory/scoped_vector.h" 603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "components/component_updater/update_response.h" 7f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "libxml/globals.h" 8f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 9f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 10f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace component_updater { 11f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 12f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)const char* kValidXml = 13010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) "<?xml version='1.0' encoding='UTF-8'?>" 14010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) "<response protocol='3.0'>" 15010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " <app appid='12345'>" 16010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " <updatecheck status='ok'>" 17010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " <urls>" 18010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " <url codebase='http://example.com/'/>" 19010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " <url codebasediff='http://diff.example.com/'/>" 20010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " </urls>" 21010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " <manifest version='1.2.3.4' prodversionmin='2.0.143.0'>" 22010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " <packages>" 23010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " <package name='extension_1_2_3_4.crx'/>" 24010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " </packages>" 25010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " </manifest>" 26010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " </updatecheck>" 27010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " </app>" 28010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) "</response>"; 29f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 30f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)const char* valid_xml_with_hash = 31010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) "<?xml version='1.0' encoding='UTF-8'?>" 32010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) "<response protocol='3.0'>" 33010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " <app appid='12345'>" 34010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " <updatecheck status='ok'>" 35010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " <urls>" 36010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " <url codebase='http://example.com/'/>" 37010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " </urls>" 38010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " <manifest version='1.2.3.4' prodversionmin='2.0.143.0'>" 39010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " <packages>" 40010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " <package name='extension_1_2_3_4.crx' hash_sha256='1234'/>" 41010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " </packages>" 42010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " </manifest>" 43010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " </updatecheck>" 44010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " </app>" 45010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) "</response>"; 46f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 47f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)const char* valid_xml_with_invalid_sizes = 48010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) "<?xml version='1.0' encoding='UTF-8'?>" 49010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) "<response protocol='3.0'>" 50010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " <app appid='12345'>" 51010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " <updatecheck status='ok'>" 52010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " <urls>" 53010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " <url codebase='http://example.com/'/>" 54010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " </urls>" 55010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " <manifest version='1.2.3.4' prodversionmin='2.0.143.0'>" 56010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " <packages>" 57010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " <package name='1' size='1234'/>" 58010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " <package name='2' size='-1234'/>" 59010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " <package name='3' />" 60010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " <package name='4' size='-a'/>" 61010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " <package name='5' size='-123467890123456789'/>" 62010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " <package name='6' size='123467890123456789'/>" 63010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " </packages>" 64010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " </manifest>" 65010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " </updatecheck>" 66010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " </app>" 67010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) "</response>"; 68f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)const char* kInvalidValidXmlMissingCodebase = 70010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) "<?xml version='1.0' encoding='UTF-8'?>" 71010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) "<response protocol='3.0'>" 72010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " <app appid='12345'>" 73010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " <updatecheck status='ok'>" 74010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " <urls>" 75010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " <url codebasediff='http://diff.example.com/'/>" 76010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " </urls>" 77010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " <manifest version='1.2.3.4' prodversionmin='2.0.143.0'>" 78010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " <packages>" 79010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " <package namediff='extension_1_2_3_4.crx'/>" 80010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " </packages>" 81010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " </manifest>" 82010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " </updatecheck>" 83010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " </app>" 84010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) "</response>"; 855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 86f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)const char* kMissingAppId = 87010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) "<?xml version='1.0'?>" 88010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) "<response protocol='3.0'>" 89010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " <app>" 90010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " <updatecheck codebase='http://example.com/extension_1.2.3.4.crx'" 91010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " version='1.2.3.4' />" 92010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " </app>" 93010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) "</response>"; 94f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 95f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)const char* kInvalidCodebase = 96010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) "<?xml version='1.0'?>" 97010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) "<response protocol='3.0'>" 98010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " <app appid='12345' status='ok'>" 99010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " <updatecheck codebase='example.com/extension_1.2.3.4.crx'" 100010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " version='1.2.3.4' />" 101010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " </app>" 102010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) "</response>"; 103f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 104f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)const char* kMissingVersion = 105010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) "<?xml version='1.0'?>" 106010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) "<response protocol='3.0'>" 107010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " <app appid='12345' status='ok'>" 108010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " <updatecheck codebase='http://example.com/extension_1.2.3.4.crx' />" 109010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " </app>" 110010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) "</response>"; 111f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 112f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)const char* kInvalidVersion = 113010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) "<?xml version='1.0'?>" 114010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) "<response protocol='3.0'>" 115010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " <app appid='12345' status='ok'>" 116010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " <updatecheck codebase='http://example.com/extension_1.2.3.4.crx' " 117010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " version='1.2.3.a'/>" 118010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " </app>" 119010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) "</response>"; 120f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 121f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// The v3 version of the protocol is not using namespaces. However, the parser 122f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// must be able to parse responses that include namespaces. 123f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)const char* kUsesNamespacePrefix = 124010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) "<?xml version='1.0' encoding='UTF-8'?>" 1251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "<g:response xmlns:g='http://www.google.com/update2/response' protocol='3.0'>" 126010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " <g:app appid='12345'>" 127010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " <g:updatecheck status='ok'>" 128010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " <g:urls>" 129010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " <g:url codebase='http://example.com/'/>" 130010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " </g:urls>" 131010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " <g:manifest version='1.2.3.4' prodversionmin='2.0.143.0'>" 132010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " <g:packages>" 133010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " <g:package name='extension_1_2_3_4.crx'/>" 134010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " </g:packages>" 135010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " </g:manifest>" 136010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " </g:updatecheck>" 137010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " </g:app>" 138010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) "</g:response>"; 139f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 140f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Includes unrelated <app> tags from other xml namespaces - this should 141f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// not cause problems. 142f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)const char* kSimilarTagnames = 143010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) "<?xml version='1.0' encoding='UTF-8'?>" 144010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) "<response xmlns:a='http://a' protocol='3.0'>" 145010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " <a:app appid='12345'>" 146010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " <updatecheck status='ok'>" 147010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " <urls>" 148010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " <url codebase='http://example.com/'/>" 149010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " </urls>" 150010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " <manifest version='1.2.3.4' prodversionmin='2.0.143.0'>" 151010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " <packages>" 152010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " <package name='extension_1_2_3_4.crx'/>" 153010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " </packages>" 154010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " </manifest>" 155010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " </updatecheck>" 156010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " </a:app>" 157010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " <b:app appid='xyz' xmlns:b='http://b'>" 158010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " <updatecheck status='noupdate'/>" 159010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " </b:app>" 160010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) "</response>"; 161f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 162f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Includes a <daystart> tag. 163f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)const char* kWithDaystart = 164010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) "<?xml version='1.0' encoding='UTF-8'?>" 165010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) "<response protocol='3.0'>" 166010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " <daystart elapsed_seconds='456' />" 167010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " <app appid='12345'>" 168010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " <updatecheck status='ok'>" 169010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " <urls>" 170010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " <url codebase='http://example.com/'/>" 171010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " </urls>" 172010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " <manifest version='1.2.3.4' prodversionmin='2.0.143.0'>" 173010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " <packages>" 174010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " <package name='extension_1_2_3_4.crx'/>" 175010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " </packages>" 176010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " </manifest>" 177010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " </updatecheck>" 178010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " </app>" 179010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) "</response>"; 180f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 181f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Indicates no updates available - this should not be a parse error. 182f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)const char* kNoUpdate = 183010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) "<?xml version='1.0' encoding='UTF-8'?>" 184010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) "<response protocol='3.0'>" 185010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " <app appid='12345'>" 186010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " <updatecheck status='noupdate' />" 187010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " </app>" 188010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) "</response>"; 189f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 190f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Includes two <app> tags, one with an error. 191f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)const char* kTwoAppsOneError = 192010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) "<?xml version='1.0' encoding='UTF-8'?>" 193010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) "<response protocol='3.0'>" 194010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " <app appid='aaaaaaaa' status='error-unknownApplication'>" 195010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " <updatecheck status='error-unknownapplication'/>" 196010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " </app>" 197010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " <app appid='bbbbbbbb'>" 198010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " <updatecheck status='ok'>" 199010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " <urls>" 200010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " <url codebase='http://example.com/'/>" 201010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " </urls>" 202010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " <manifest version='1.2.3.4' prodversionmin='2.0.143.0'>" 203010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " <packages>" 204010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " <package name='extension_1_2_3_4.crx'/>" 205010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " </packages>" 206010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " </manifest>" 207010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " </updatecheck>" 208010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) " </app>" 209010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) "</response>"; 210f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 211f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST(ComponentUpdaterUpdateResponseTest, TestParser) { 212f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) UpdateResponse parser; 213f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 214f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Test parsing of a number of invalid xml cases 215f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_FALSE(parser.Parse(std::string())); 216f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_FALSE(parser.errors().empty()); 217f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 218f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(parser.Parse(kMissingAppId)); 219f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(parser.results().list.empty()); 220f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_FALSE(parser.errors().empty()); 221f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 222f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(parser.Parse(kInvalidCodebase)); 223f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(parser.results().list.empty()); 224f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_FALSE(parser.errors().empty()); 225f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 226f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(parser.Parse(kMissingVersion)); 227f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(parser.results().list.empty()); 228f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_FALSE(parser.errors().empty()); 229f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 230f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(parser.Parse(kInvalidVersion)); 231f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(parser.results().list.empty()); 232f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_FALSE(parser.errors().empty()); 233f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 2345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_TRUE(parser.Parse(kInvalidValidXmlMissingCodebase)); 2355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_TRUE(parser.results().list.empty()); 2365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FALSE(parser.errors().empty()); 2375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 238f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Parse some valid XML, and check that all params came out as expected 239f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(parser.Parse(kValidXml)); 240f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(parser.errors().empty()); 241f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ(1u, parser.results().list.size()); 242f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const UpdateResponse::Result* firstResult = &parser.results().list[0]; 243f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ(1u, firstResult->crx_urls.size()); 244f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ(GURL("http://example.com/"), firstResult->crx_urls[0]); 245f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ(GURL("http://diff.example.com/"), firstResult->crx_diffurls[0]); 246f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ("1.2.3.4", firstResult->manifest.version); 247f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ("2.0.143.0", firstResult->manifest.browser_min_version); 248f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ(1u, firstResult->manifest.packages.size()); 249f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ("extension_1_2_3_4.crx", firstResult->manifest.packages[0].name); 250f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 251f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Parse some xml that uses namespace prefixes. 252f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(parser.Parse(kUsesNamespacePrefix)); 253f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(parser.errors().empty()); 254f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(parser.Parse(kSimilarTagnames)); 255f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(parser.errors().empty()); 256f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) xmlCleanupGlobals(); 257f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 258f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Parse xml with hash value 259f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(parser.Parse(valid_xml_with_hash)); 260f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(parser.errors().empty()); 261f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_FALSE(parser.results().list.empty()); 262f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) firstResult = &parser.results().list[0]; 263f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_FALSE(firstResult->manifest.packages.empty()); 264f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ("1234", firstResult->manifest.packages[0].hash_sha256); 265f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 266f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Parse xml with package size value 267f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(parser.Parse(valid_xml_with_invalid_sizes)); 268f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(parser.errors().empty()); 269f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_FALSE(parser.results().list.empty()); 270f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) firstResult = &parser.results().list[0]; 271f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_FALSE(firstResult->manifest.packages.empty()); 272f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ(1234, firstResult->manifest.packages[0].size); 273f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ(-1234, firstResult->manifest.packages[1].size); 274f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ(0, firstResult->manifest.packages[2].size); 275f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ(0, firstResult->manifest.packages[3].size); 276f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ(0, firstResult->manifest.packages[4].size); 277f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ(0, firstResult->manifest.packages[5].size); 278f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 279f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Parse xml with a <daystart> element. 280f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(parser.Parse(kWithDaystart)); 281f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(parser.errors().empty()); 282f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_FALSE(parser.results().list.empty()); 283f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ(parser.results().daystart_elapsed_seconds, 456); 284f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 285f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Parse a no-update response. 286f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(parser.Parse(kNoUpdate)); 287f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(parser.errors().empty()); 288f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_FALSE(parser.results().list.empty()); 289f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) firstResult = &parser.results().list[0]; 290f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ(firstResult->extension_id, "12345"); 291f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ(firstResult->manifest.version, ""); 292f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 293f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Parse xml with one error and one success <app> tag. 294f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(parser.Parse(kTwoAppsOneError)); 295f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_FALSE(parser.errors().empty()); 296f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ(1u, parser.results().list.size()); 297f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) firstResult = &parser.results().list[0]; 298f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ(firstResult->extension_id, "bbbbbbbb"); 299f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 300f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 301f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} // namespace component_updater 302