• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2011 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 "testing/gtest/include/gtest/gtest.h"
6 
7 #include <string>
8 #include <vector>
9 
10 #include "base/string16.h"
11 #include "base/string_util.h"
12 #include "base/utf_string_conversions.h"
13 #include "chrome/browser/first_run/first_run.h"
14 #include "chrome/browser/importer/toolbar_importer.h"
15 #include "chrome/common/libxml_utils.h"
16 #include "googleurl/src/gurl.h"
17 
18 // See http://crbug.com/11838
TEST(Toolbar5ImporterTest,BookmarkParse)19 TEST(Toolbar5ImporterTest, BookmarkParse) {
20 static const string16 kTitle = ASCIIToUTF16("MyTitle");
21 static const char kUrl[] = "http://www.google.com/";
22 static const string16 kFolder = ASCIIToUTF16("Google");
23 static const string16 kFolder2 = ASCIIToUTF16("Homepage");
24 static const string16 kFolderArray[3] = {
25   ASCIIToUTF16("Google"),
26   ASCIIToUTF16("Search"),
27   ASCIIToUTF16("Page")
28 };
29 static const string16 kOtherTitle = ASCIIToUTF16("MyOtherTitle");
30 static const char* kOtherUrl = "http://www.google.com/mail";
31 static const string16 kOtherFolder = ASCIIToUTF16("Mail");
32 
33 static const string16 kBookmarkGroupTitle = ASCIIToUTF16("BookmarkGroupTitle");
34 
35 // Since the following is very dense to read I enumerate the test cases here.
36 // 1. Correct bookmark structure with one label.
37 // 2. Correct bookmark structure with no labels.
38 // 3. Correct bookmark structure with two labels.
39 // 4. Correct bookmark structure with a folder->label translation by toolbar.
40 // 5. Correct bookmark structure with no favicon.
41 // 6. Two correct bookmarks.
42 // The following are error cases by removing sections from the xml:
43 // 7. Empty string passed as xml.
44 // 8. No <bookmarks> section in the xml.
45 // 9. No <bookmark> section below the <bookmarks> section.
46 // 10. No <title> in a <bookmark> section.
47 // 11. No <url> in a <bookmark> section.
48 // 12. No <timestamp> in a <bookmark> section.
49 // 13. No <labels> in a <bookmark> section.
50 static const char* kGoodBookmark =
51     "<?xml version=\"1.0\" ?> <xml_api_reply version=\"1\"> <bookmarks>"
52     " <bookmark> "
53     "<title>MyTitle</title> "
54     "<url>http://www.google.com/</url> "
55     "<timestamp>1153328691085181</timestamp> "
56     "<id>N123nasdf239</id> <notebook_id>Bxxxxxxx</notebook_id> "
57     "<section_id>Sxxxxxx</section_id> <has_highlight>0</has_highlight>"
58     "<labels> <label>Google</label> </labels> "
59     "<attributes> "
60     "<attribute> "
61     "<name>favicon_url</name> <value>http://www.google.com/favicon.ico</value> "
62     "</attribute> "
63     "<attribute> "
64     "<name>favicon_timestamp</name> <value>1153328653</value> "
65     "</attribute> "
66     "<attribute> <name>notebook_name</name> <value>My notebook 0</value> "
67     "</attribute> "
68     "<attribute> <name>section_name</name> <value>My section 0 "
69     "</value> </attribute> </attributes> "
70     "</bookmark> </bookmarks>";
71 static const char* kGoodBookmarkNoLabel =
72     "<?xml version=\"1.0\" ?> <xml_api_reply version=\"1\"> <bookmarks>"
73     " <bookmark> "
74     "<title>MyTitle</title> "
75     "<url>http://www.google.com/</url> "
76     "<timestamp>1153328691085181</timestamp> "
77     "<id>N123nasdf239</id> <notebook_id>Bxxxxxxx</notebook_id> "
78     "<section_id>Sxxxxxx</section_id> <has_highlight>0</has_highlight>"
79     "<labels> </labels> "
80     "<attributes> "
81     "<attribute> "
82     "<name>favicon_url</name> <value>http://www.google.com/favicon.ico</value> "
83     "</attribute> "
84     "<attribute> "
85     "<name>favicon_timestamp</name> <value>1153328653</value> "
86     "</attribute> "
87     "<attribute> <name>notebook_name</name> <value>My notebook 0</value> "
88     "</attribute> "
89     "<attribute> <name>section_name</name> <value>My section 0 "
90     "</value> </attribute> </attributes> "
91     "</bookmark> </bookmarks>";
92 static const char* kGoodBookmarkTwoLabels =
93     "<?xml version=\"1.0\" ?> <xml_api_reply version=\"1\"> <bookmarks>"
94     " <bookmark> "
95     "<title>MyTitle</title> "
96     "<url>http://www.google.com/</url> "
97     "<timestamp>1153328691085181</timestamp> "
98     "<id>N123nasdf239</id> <notebook_id>Bxxxxxxx</notebook_id> "
99     "<section_id>Sxxxxxx</section_id> <has_highlight>0</has_highlight>"
100     "<labels> <label>Google</label> <label>Homepage</label> </labels> "
101     "<attributes> "
102     "<attribute> "
103     "<name>favicon_url</name> <value>http://www.google.com/favicon.ico</value> "
104     "</attribute> "
105     "<attribute> "
106     "<name>favicon_timestamp</name> <value>1153328653</value> "
107     "</attribute> "
108     "<attribute> <name>notebook_name</name> <value>My notebook 0</value> "
109     "</attribute> "
110     "<attribute> <name>section_name</name> <value>My section 0 "
111     "</value> </attribute> </attributes> "
112     "</bookmark> </bookmarks>";
113 static const char* kGoodBookmarkFolderLabel =
114     "<?xml version=\"1.0\" ?> <xml_api_reply version=\"1\"> <bookmarks>"
115     " <bookmark> "
116     "<title>MyTitle</title> "
117     "<url>http://www.google.com/</url> "
118     "<timestamp>1153328691085181</timestamp> "
119     "<id>N123nasdf239</id> <notebook_id>Bxxxxxxx</notebook_id> "
120     "<section_id>Sxxxxxx</section_id> <has_highlight>0</has_highlight>"
121     "<labels> <label>Google:Search:Page</label> </labels> "
122     "<attributes> "
123     "<attribute> "
124     "<name>favicon_url</name> <value>http://www.google.com/favicon.ico</value> "
125     "</attribute> "
126     "<attribute> "
127     "<name>favicon_timestamp</name> <value>1153328653</value> "
128     "</attribute> "
129     "<attribute> <name>notebook_name</name> <value>My notebook 0</value> "
130     "</attribute> "
131     "<attribute> <name>section_name</name> <value>My section 0 "
132     "</value> </attribute> </attributes> "
133     "</bookmark> </bookmarks>";
134 static const char* kGoodBookmarkNoFavicon =
135     "<?xml version=\"1.0\" ?> <xml_api_reply version=\"1\"> <bookmarks>"
136     " <bookmark> "
137     "<title>MyTitle</title> "
138     "<url>http://www.google.com/</url> "
139     "<timestamp>1153328691085181</timestamp> "
140     "<id>N123nasdf239</id> <notebook_id>Bxxxxxxx</notebook_id> "
141     "<section_id>Sxxxxxx</section_id> <has_highlight>0</has_highlight>"
142     "<labels> <label>Google</label> </labels> "
143     "<attributes> "
144     "<attribute> "
145     "<name>favicon_timestamp</name> <value>1153328653</value> "
146     "</attribute> "
147     "<attribute> <name>notebook_name</name> <value>My notebook 0</value> "
148     "</attribute> "
149     "<attribute> <name>section_name</name> <value>My section 0 "
150     "</value> </attribute> </attributes> "
151     "</bookmark> </bookmarks>";
152 static const char* kGoodBookmark2Items =
153     "<?xml version=\"1.0\" ?> <xml_api_reply version=\"1\"> <bookmarks>"
154     " <bookmark> "
155     "<title>MyTitle</title> "
156     "<url>http://www.google.com/</url> "
157     "<timestamp>1153328691085181</timestamp> "
158     "<id>N123nasdf239</id> <notebook_id>Bxxxxxxx</notebook_id> "
159     "<section_id>Sxxxxxx</section_id> <has_highlight>0</has_highlight>"
160     "<labels> <label>Google</label> </labels> "
161     "<attributes> "
162     "<attribute> "
163     "<name>favicon_url</name> <value>http://www.google.com/favicon.ico</value> "
164     "</attribute> "
165     "<attribute> "
166     "<name>favicon_timestamp</name> <value>1153328653</value> "
167     "</attribute> "
168     "<attribute> <name>notebook_name</name> <value>My notebook 0</value> "
169     "</attribute> "
170     "<attribute> <name>section_name</name> <value>My section 0 "
171     "</value> </attribute> </attributes> "
172     "</bookmark>"
173     " <bookmark> "
174     "<title>MyOtherTitle</title> "
175     "<url>http://www.google.com/mail</url> "
176     "<timestamp>1153328691085181</timestamp> "
177     "<id>N123nasdf239</id> <notebook_id>Bxxxxxxx</notebook_id> "
178     "<section_id>Sxxxxxx</section_id> <has_highlight>0</has_highlight>"
179     "<labels> <label>Mail</label> </labels> "
180     "<attributes> "
181     "<attribute> "
182     "<name>favicon_url</name>"
183     "<value>http://www.google.com/mail/favicon.ico</value> "
184     "</attribute> "
185     "<attribute> "
186     "<name>favicon_timestamp</name> <value>1253328653</value> "
187     "</attribute> "
188     "<attribute> <name>notebook_name</name> <value>My notebook 0</value> "
189     "</attribute> "
190     "<attribute> <name>section_name</name> <value>My section 0 "
191     "</value> </attribute> </attributes> "
192     "</bookmark>"
193     "</bookmarks>";
194 static const char* kEmptyString = "";
195 static const char* kBadBookmarkNoBookmarks =
196     " <bookmark> "
197     "<title>MyTitle</title> "
198     "<url>http://www.google.com/</url> "
199     "<timestamp>1153328691085181</timestamp> "
200     "<id>N123nasdf239</id> <notebook_id>Bxxxxxxx</notebook_id> "
201     "<section_id>Sxxxxxx</section_id> <has_highlight>0</has_highlight>"
202     "<labels> <label>Google</label> </labels> "
203     "<attributes> "
204     "<attribute> "
205     "<name>favicon_url</name> <value>http://www.google.com/favicon.ico</value> "
206     "</attribute> "
207     "<attribute> "
208     "<name>favicon_timestamp</name> <value>1153328653</value> "
209     "</attribute> "
210     "<attribute> <name>notebook_name</name> <value>My notebook 0</value> "
211     "</attribute> "
212     "<attribute> <name>section_name</name> <value>My section 0 "
213     "</value> </attribute> </attributes> "
214     "</bookmark> </bookmarks>";
215 static const char* kBadBookmarkNoBookmark =
216     "<?xml version=\"1.0\" ?> <xml_api_reply version=\"1\"> <bookmarks>"
217     "<title>MyTitle</title> "
218     "<url>http://www.google.com/</url> "
219     "<timestamp>1153328691085181</timestamp> "
220     "<id>N123nasdf239</id> <notebook_id>Bxxxxxxx</notebook_id> "
221     "<section_id>Sxxxxxx</section_id> <has_highlight>0</has_highlight>"
222     "<labels> <label>Google</label> </labels> "
223     "<attributes> "
224     "<attribute> "
225     "<name>favicon_url</name> <value>http://www.google.com/favicon.ico</value> "
226     "</attribute> "
227     "<attribute> "
228     "<name>favicon_timestamp</name> <value>1153328653</value> "
229     "</attribute> "
230     "<attribute> <name>notebook_name</name> <value>My notebook 0</value> "
231     "</attribute> "
232     "<attribute> <name>section_name</name> <value>My section 0 "
233     "</value> </attribute> </attributes> "
234     "</bookmark> </bookmarks>";
235 static const char* kBadBookmarkNoTitle =
236     "<?xml version=\"1.0\" ?> <xml_api_reply version=\"1\"> <bookmarks>"
237     " <bookmark> "
238     "<url>http://www.google.com/</url> "
239     "<timestamp>1153328691085181</timestamp> "
240     "<id>N123nasdf239</id> <notebook_id>Bxxxxxxx</notebook_id> "
241     "<section_id>Sxxxxxx</section_id> <has_highlight>0</has_highlight>"
242     "<labels> <label>Google</label> </labels> "
243     "<attributes> "
244     "<attribute> "
245     "<name>favicon_url</name> <value>http://www.google.com/favicon.ico</value> "
246     "</attribute> "
247     "<attribute> "
248     "<name>favicon_timestamp</name> <value>1153328653</value> "
249     "</attribute> "
250     "<attribute> <name>notebook_name</name> <value>My notebook 0</value> "
251     "</attribute> "
252     "<attribute> <name>section_name</name> <value>My section 0 "
253     "</value> </attribute> </attributes> "
254     "</bookmark> </bookmarks>";
255 static const char* kBadBookmarkNoUrl =
256     "<?xml version=\"1.0\" ?> <xml_api_reply version=\"1\"> <bookmarks>"
257     " <bookmark> "
258     "<title>MyTitle</title> "
259     "<timestamp>1153328691085181</timestamp> "
260     "<id>N123nasdf239</id> <notebook_id>Bxxxxxxx</notebook_id> "
261     "<section_id>Sxxxxxx</section_id> <has_highlight>0</has_highlight>"
262     "<labels> <label>Google</label> </labels> "
263     "<attributes> "
264     "<attribute> "
265     "<name>favicon_url</name> <value>http://www.google.com/favicon.ico</value> "
266     "</attribute> "
267     "<attribute> "
268     "<name>favicon_timestamp</name> <value>1153328653</value> "
269     "</attribute> "
270     "<attribute> <name>notebook_name</name> <value>My notebook 0</value> "
271     "</attribute> "
272     "<attribute> <name>section_name</name> <value>My section 0 "
273     "</value> </attribute> </attributes> "
274     "</bookmark> </bookmarks>";
275 static const char* kBadBookmarkNoTimestamp =
276     "<?xml version=\"1.0\" ?> <xml_api_reply version=\"1\"> <bookmarks>"
277     " <bookmark> "
278     "<title>MyTitle</title> "
279     "<url>http://www.google.com/</url> "
280     "<id>N123nasdf239</id> <notebook_id>Bxxxxxxx</notebook_id> "
281     "<section_id>Sxxxxxx</section_id> <has_highlight>0</has_highlight>"
282     "<labels> <label>Google</label> </labels> "
283     "<attributes> "
284     "<attribute> "
285     "<name>favicon_url</name> <value>http://www.google.com/favicon.ico</value> "
286     "</attribute> "
287     "<attribute> "
288     "<name>favicon_timestamp</name> <value>1153328653</value> "
289     "</attribute> "
290     "<attribute> <name>notebook_name</name> <value>My notebook 0</value> "
291     "</attribute> "
292     "<attribute> <name>section_name</name> <value>My section 0 "
293     "</value> </attribute> </attributes> "
294     "</bookmark> </bookmarks>";
295 static const char* kBadBookmarkNoLabels =
296     "<?xml version=\"1.0\" ?> <xml_api_reply version=\"1\"> <bookmarks>"
297     " <bookmark> "
298     "<title>MyTitle</title> "
299     "<url>http://www.google.com/</url> "
300     "<timestamp>1153328691085181</timestamp> "
301     "<id>N123nasdf239</id> <notebook_id>Bxxxxxxx</notebook_id> "
302     "<section_id>Sxxxxxx</section_id> <has_highlight>0</has_highlight>"
303     "<attributes> "
304     "<attribute> "
305     "<name>favicon_url</name> <value>http://www.google.com/favicon.ico</value> "
306     "</attribute> "
307     "<attribute> "
308     "<name>favicon_timestamp</name> <value>1153328653</value> "
309     "</attribute> "
310     "<attribute> <name>notebook_name</name> <value>My notebook 0</value> "
311     "</attribute> "
312     "<attribute> <name>section_name</name> <value>My section 0 "
313     "</value> </attribute> </attributes> "
314     "</bookmark> </bookmarks>";
315 
316   XmlReader reader;
317   std::string bookmark_xml;
318   std::vector<ProfileWriter::BookmarkEntry> bookmarks;
319 
320   const GURL url(kUrl);
321   const GURL other_url(kOtherUrl);
322 
323   // Test doesn't work if the importer thinks this is the first run of Chromium.
324   // Mark this as a subsequent run of the browser.
325   FirstRun::first_run_ = FirstRun::FIRST_RUN_FALSE;
326 
327   // Test case 1 is parsing a basic bookmark with a single label.
328   bookmark_xml = kGoodBookmark;
329   bookmarks.clear();
330   XmlReader reader1;
331   EXPECT_TRUE(reader1.Load(bookmark_xml));
332   EXPECT_TRUE(Toolbar5Importer::ParseBookmarksFromReader(&reader1, &bookmarks,
333       kBookmarkGroupTitle));
334 
335   ASSERT_EQ(1U, bookmarks.size());
336   EXPECT_FALSE(bookmarks[0].in_toolbar);
337   EXPECT_EQ(kTitle, bookmarks[0].title);
338   EXPECT_EQ(url, bookmarks[0].url);
339   ASSERT_EQ(2U, bookmarks[0].path.size());
340   EXPECT_EQ(kFolder, bookmarks[0].path[1]);
341 
342   // Test case 2 is parsing a single bookmark with no label.
343   bookmark_xml = kGoodBookmarkNoLabel;
344   bookmarks.clear();
345   XmlReader reader2;
346   EXPECT_TRUE(reader2.Load(bookmark_xml));
347   EXPECT_TRUE(Toolbar5Importer::ParseBookmarksFromReader(&reader2, &bookmarks,
348       kBookmarkGroupTitle));
349 
350   ASSERT_EQ(1U, bookmarks.size());
351   EXPECT_FALSE(bookmarks[0].in_toolbar);
352   EXPECT_EQ(kTitle, bookmarks[0].title);
353   EXPECT_EQ(url, bookmarks[0].url);
354   EXPECT_EQ(1U, bookmarks[0].path.size());
355 
356   // Test case 3 is parsing a single bookmark with two labels.
357   bookmark_xml = kGoodBookmarkTwoLabels;
358   bookmarks.clear();
359   XmlReader reader3;
360   EXPECT_TRUE(reader3.Load(bookmark_xml));
361   EXPECT_TRUE(Toolbar5Importer::ParseBookmarksFromReader(&reader3, &bookmarks,
362       kBookmarkGroupTitle));
363 
364   ASSERT_EQ(2U, bookmarks.size());
365   EXPECT_FALSE(bookmarks[0].in_toolbar);
366   EXPECT_FALSE(bookmarks[1].in_toolbar);
367   EXPECT_EQ(kTitle, bookmarks[0].title);
368   EXPECT_EQ(kTitle, bookmarks[1].title);
369   EXPECT_EQ(url, bookmarks[0].url);
370   EXPECT_EQ(url, bookmarks[1].url);
371   ASSERT_EQ(2U, bookmarks[0].path.size());
372   EXPECT_EQ(kFolder, bookmarks[0].path[1]);
373   ASSERT_EQ(2U, bookmarks[1].path.size());
374   EXPECT_EQ(kFolder2, bookmarks[1].path[1]);
375 
376   // Test case 4 is parsing a single bookmark which has a label with a colon,
377   // this test file name translation between Toolbar and Chrome.
378   bookmark_xml = kGoodBookmarkFolderLabel;
379   bookmarks.clear();
380   XmlReader reader4;
381   EXPECT_TRUE(reader4.Load(bookmark_xml));
382   EXPECT_TRUE(Toolbar5Importer::ParseBookmarksFromReader(&reader4, &bookmarks,
383       kBookmarkGroupTitle));
384 
385   ASSERT_EQ(1U, bookmarks.size());
386   EXPECT_FALSE(bookmarks[0].in_toolbar);
387   EXPECT_EQ(kTitle, bookmarks[0].title);
388   EXPECT_EQ(url, bookmarks[0].url);
389   ASSERT_EQ(4U, bookmarks[0].path.size());
390   EXPECT_EQ(string16(kFolderArray[0]),
391             bookmarks[0].path[1]);
392   EXPECT_EQ(string16(kFolderArray[1]),
393             bookmarks[0].path[2]);
394   EXPECT_EQ(string16(kFolderArray[2]),
395             bookmarks[0].path[3]);
396 
397   // Test case 5 is parsing a single bookmark without a favicon URL.
398   bookmark_xml = kGoodBookmarkNoFavicon;
399   bookmarks.clear();
400   XmlReader reader5;
401   EXPECT_TRUE(reader5.Load(bookmark_xml));
402   EXPECT_TRUE(Toolbar5Importer::ParseBookmarksFromReader(&reader5, &bookmarks,
403       kBookmarkGroupTitle));
404 
405   ASSERT_EQ(1U, bookmarks.size());
406   EXPECT_FALSE(bookmarks[0].in_toolbar);
407   EXPECT_EQ(kTitle, bookmarks[0].title);
408   EXPECT_EQ(url, bookmarks[0].url);
409   ASSERT_EQ(2U, bookmarks[0].path.size());
410   EXPECT_EQ(kFolder, bookmarks[0].path[1]);
411 
412   // Test case 6 is parsing two bookmarks.
413   bookmark_xml = kGoodBookmark2Items;
414   bookmarks.clear();
415   XmlReader reader6;
416   EXPECT_TRUE(reader6.Load(bookmark_xml));
417   EXPECT_TRUE(Toolbar5Importer::ParseBookmarksFromReader(&reader6, &bookmarks,
418       kBookmarkGroupTitle));
419 
420   ASSERT_EQ(2U, bookmarks.size());
421   EXPECT_FALSE(bookmarks[0].in_toolbar);
422   EXPECT_FALSE(bookmarks[1].in_toolbar);
423   EXPECT_EQ(kTitle, bookmarks[0].title);
424   EXPECT_EQ(kOtherTitle, bookmarks[1].title);
425   EXPECT_EQ(url, bookmarks[0].url);
426   EXPECT_EQ(other_url, bookmarks[1].url);
427   ASSERT_EQ(2U, bookmarks[0].path.size());
428   EXPECT_EQ(kFolder, bookmarks[0].path[1]);
429   ASSERT_EQ(2U, bookmarks[1].path.size());
430   EXPECT_EQ(kOtherFolder, bookmarks[1].path[1]);
431 
432   // Test case 7 is parsing an empty string for bookmarks.
433   bookmark_xml = kEmptyString;
434   bookmarks.clear();
435   XmlReader reader7;
436   EXPECT_FALSE(reader7.Load(bookmark_xml));
437 
438   // Test case 8 is testing the error when no <bookmarks> section is present.
439   bookmark_xml = kBadBookmarkNoBookmarks;
440   bookmarks.clear();
441   XmlReader reader8;
442   EXPECT_TRUE(reader8.Load(bookmark_xml));
443   EXPECT_FALSE(Toolbar5Importer::ParseBookmarksFromReader(&reader8,
444       &bookmarks, kBookmarkGroupTitle));
445 
446   // Test case 9 tests when no <bookmark> section is present.
447   bookmark_xml = kBadBookmarkNoBookmark;
448   bookmarks.clear();
449   XmlReader reader9;
450   EXPECT_TRUE(reader9.Load(bookmark_xml));
451   EXPECT_FALSE(Toolbar5Importer::ParseBookmarksFromReader(&reader9,
452       &bookmarks, kBookmarkGroupTitle));
453 
454 
455   // Test case 10 tests when a bookmark has no <title> section.
456   bookmark_xml = kBadBookmarkNoTitle;
457   bookmarks.clear();
458   XmlReader reader10;
459   EXPECT_TRUE(reader10.Load(bookmark_xml));
460   EXPECT_FALSE(Toolbar5Importer::ParseBookmarksFromReader(&reader10,
461       &bookmarks, kBookmarkGroupTitle));
462 
463   // Test case 11 tests when a bookmark has no <url> section.
464   bookmark_xml = kBadBookmarkNoUrl;
465   bookmarks.clear();
466   XmlReader reader11;
467   EXPECT_TRUE(reader11.Load(bookmark_xml));
468   EXPECT_FALSE(Toolbar5Importer::ParseBookmarksFromReader(&reader11,
469       &bookmarks, kBookmarkGroupTitle));
470 
471   // Test case 12 tests when a bookmark has no <timestamp> section.
472   bookmark_xml = kBadBookmarkNoTimestamp;
473   bookmarks.clear();
474   XmlReader reader12;
475   EXPECT_TRUE(reader12.Load(bookmark_xml));
476   EXPECT_FALSE(Toolbar5Importer::ParseBookmarksFromReader(&reader12,
477       &bookmarks, kBookmarkGroupTitle));
478 
479   // Test case 13 tests when a bookmark has no <labels> section.
480   bookmark_xml = kBadBookmarkNoLabels;
481   bookmarks.clear();
482   XmlReader reader13;
483   EXPECT_TRUE(reader13.Load(bookmark_xml));
484   EXPECT_FALSE(Toolbar5Importer::ParseBookmarksFromReader(&reader13,
485       &bookmarks, kBookmarkGroupTitle));
486 }
487