1 // Copyright (c) 2012 The Chromium Embedded Framework Authors. All rights 2 // reserved. Use of this source code is governed by a BSD-style license that 3 // can be found in the LICENSE file. 4 5 #ifndef CEF_LIBCEF_BROWSER_XML_READER_IMPL_H_ 6 #define CEF_LIBCEF_BROWSER_XML_READER_IMPL_H_ 7 #pragma once 8 9 #include <libxml/xmlreader.h> 10 #include <sstream> 11 12 #include "base/threading/platform_thread.h" 13 #include "include/cef_xml_reader.h" 14 15 // Implementation of CefXmlReader 16 class CefXmlReaderImpl : public CefXmlReader { 17 public: 18 CefXmlReaderImpl(); 19 ~CefXmlReaderImpl() override; 20 21 // Initialize the reader context. 22 bool Initialize(CefRefPtr<CefStreamReader> stream, 23 EncodingType encodingType, 24 const CefString& URI); 25 26 bool MoveToNextNode() override; 27 bool Close() override; 28 bool HasError() override; 29 CefString GetError() override; 30 NodeType GetType() override; 31 int GetDepth() override; 32 CefString GetLocalName() override; 33 CefString GetPrefix() override; 34 CefString GetQualifiedName() override; 35 CefString GetNamespaceURI() override; 36 CefString GetBaseURI() override; 37 CefString GetXmlLang() override; 38 bool IsEmptyElement() override; 39 bool HasValue() override; 40 CefString GetValue() override; 41 bool HasAttributes() override; 42 size_t GetAttributeCount() override; 43 CefString GetAttribute(int index) override; 44 CefString GetAttribute(const CefString& qualifiedName) override; 45 CefString GetAttribute(const CefString& localName, 46 const CefString& namespaceURI) override; 47 CefString GetInnerXml() override; 48 CefString GetOuterXml() override; 49 int GetLineNumber() override; 50 bool MoveToAttribute(int index) override; 51 bool MoveToAttribute(const CefString& qualifiedName) override; 52 bool MoveToAttribute(const CefString& localName, 53 const CefString& namespaceURI) override; 54 bool MoveToFirstAttribute() override; 55 bool MoveToNextAttribute() override; 56 bool MoveToCarryingElement() override; 57 58 // Add another line to the error string. 59 void AppendError(const CefString& error_str); 60 61 // Verify that the reader exists and is being accessed from the correct 62 // thread. 63 bool VerifyContext(); 64 65 protected: 66 base::PlatformThreadId supported_thread_id_; 67 CefRefPtr<CefStreamReader> stream_; 68 xmlTextReaderPtr reader_; 69 std::stringstream error_buf_; 70 71 IMPLEMENT_REFCOUNTING(CefXmlReaderImpl); 72 }; 73 74 #endif // CEF_LIBCEF_BROWSER_XML_READER_IMPL_H_ 75