1 /* This Source Code Form is subject to the terms of the Mozilla Public
2  * License, v. 2.0. If a copy of the MPL was not distributed with this
3  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
4 
5 #ifndef nsHtml5StringParser_h
6 #define nsHtml5StringParser_h
7 
8 #include "mozilla/UniquePtr.h"
9 #include "nsHtml5AtomTable.h"
10 #include "nsParserBase.h"
11 
12 class nsHtml5OplessBuilder;
13 class nsHtml5TreeBuilder;
14 class nsHtml5Tokenizer;
15 class nsIContent;
16 namespace mozilla {
17 namespace dom {
18 class Document;
19 }
20 }  // namespace mozilla
21 
22 class nsHtml5StringParser : public nsParserBase {
23  public:
24   NS_DECL_ISUPPORTS
25 
26   /**
27    * Constructor for use ONLY by nsContentUtils. Others, please call the
28    * nsContentUtils statics that wrap this.
29    */
30   nsHtml5StringParser();
31 
32   /**
33    * Invoke the fragment parsing algorithm (innerHTML).
34    * DO NOT CALL from outside nsContentUtils.cpp.
35    *
36    * @param aSourceBuffer the string being set as innerHTML
37    * @param aTargetNode the target container
38    * @param aContextLocalName local name of context node
39    * @param aContextNamespace namespace of context node
40    * @param aQuirks true to make <table> not close <p>
41    * @param aPreventScriptExecution true to prevent scripts from executing;
42    * don't set to false when parsing into a target node that has been bound
43    * to tree.
44    */
45   nsresult ParseFragment(const nsAString& aSourceBuffer,
46                          nsIContent* aTargetNode, nsAtom* aContextLocalName,
47                          int32_t aContextNamespace, bool aQuirks,
48                          bool aPreventScriptExecution);
49 
50   /**
51    * Parse an entire HTML document from a source string.
52    * DO NOT CALL from outside nsContentUtils.cpp.
53    *
54    */
55   nsresult ParseDocument(const nsAString& aSourceBuffer,
56                          mozilla::dom::Document* aTargetDoc,
57                          bool aScriptingEnabledForNoscriptParsing);
58 
59  private:
60   virtual ~nsHtml5StringParser();
61 
62   nsresult Tokenize(const nsAString& aSourceBuffer,
63                     mozilla::dom::Document* aDocument,
64                     bool aScriptingEnabledForNoscriptParsing);
65 
66   /**
67    * The tree operation executor
68    */
69   RefPtr<nsHtml5OplessBuilder> mBuilder;
70 
71   /**
72    * The HTML5 tree builder
73    */
74   const mozilla::UniquePtr<nsHtml5TreeBuilder> mTreeBuilder;
75 
76   /**
77    * The HTML5 tokenizer
78    */
79   const mozilla::UniquePtr<nsHtml5Tokenizer> mTokenizer;
80 
81   /**
82    * The scoped atom table
83    */
84   nsHtml5AtomTable mAtomTable;
85 };
86 
87 #endif  // nsHtml5StringParser_h
88