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.
5 #ifndef CHROME_UTILITY_MEDIA_GALLERIES_IAPPS_XML_UTILS_H_
6 #define CHROME_UTILITY_MEDIA_GALLERIES_IAPPS_XML_UTILS_H_
11 #include "base/files/file.h"
12 #include "base/stl_util.h"
18 // Like XmlReader::SkipToElement, but will advance to the next open tag if the
19 // cursor is on a close tag.
20 bool SkipToNextElement(XmlReader
* reader
);
22 // Traverse |reader| looking for a node named |name| at the current depth
24 bool SeekToNodeAtCurrentDepth(XmlReader
* reader
, const std::string
& name
);
26 // Search within a "dict" node for |key|. The cursor must be on the starting
27 // "dict" node when entering this function.
28 bool SeekInDict(XmlReader
* reader
, const std::string
& key
);
30 // Get the value out of a string node.
31 bool ReadString(XmlReader
* reader
, std::string
* result
);
33 // Get the value out of an integer node.
34 bool ReadInteger(XmlReader
* reader
, uint64
* result
);
36 // Read in the contents of the given library xml |file| and return as a string.
37 std::string
ReadFileAsString(base::File file
);
39 // Contains the common code and main loop for reading the key/values
40 // of an XML dict. The derived class must implement |HandleKeyImpl()|
41 // which is called with each key, and may re-implement |ShouldLoop()|,
42 // |FinishedOk()| and/or |AllowRepeats()|.
45 explicit XmlDictReader(XmlReader
* reader
);
46 virtual ~XmlDictReader();
48 // The main loop of this class. Reads all the keys in the
49 // current element and calls |HandleKey()| with each.
52 // Re-implemented by derived class if it should bail from the
53 // loop earlier, such as if it encountered all required fields.
54 virtual bool ShouldLoop();
56 // Called by |Read()| with each key. Calls derived |HandleKeyImpl()|.
57 bool HandleKey(const std::string
& key
);
59 virtual bool HandleKeyImpl(const std::string
& key
) = 0;
61 // Re-implemented by the derived class (to return true) if
62 // it should allow fields to be repeated, but skipped.
63 virtual bool AllowRepeats();
65 // Re-implemented by derived class if it should test for required
66 // fields instead of just returning true.
67 virtual bool FinishedOk();
69 // A convenience function for the derived classes.
70 // Skips to next element.
73 // A convenience function for the derived classes.
74 // Used to test if all required keys have been encountered.
75 bool Found(const std::string
& key
) const;
81 // The keys that the reader has run into in this element.
82 std::set
<std::string
> found_
;
84 DISALLOW_COPY_AND_ASSIGN(XmlDictReader
);
89 #endif // CHROME_UTILITY_MEDIA_GALLERIES_IAPPS_XML_UTILS_H_