mirror of
				https://github.com/mozilla/gecko-dev.git
				synced 2025-11-04 10:18:41 +02:00 
			
		
		
		
	
		
			
				
	
	
		
			112 lines
		
	
	
	
		
			3.1 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			112 lines
		
	
	
	
		
			3.1 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
/* This Source Code Form is subject to the terms of the Mozilla Public
 | 
						|
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 | 
						|
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 | 
						|
 | 
						|
#ifndef nsHtml5StringParser_h
 | 
						|
#define nsHtml5StringParser_h
 | 
						|
 | 
						|
#include "mozilla/UniquePtr.h"
 | 
						|
#include "nsHtml5AtomTable.h"
 | 
						|
#include "nsParserBase.h"
 | 
						|
 | 
						|
class nsHtml5OplessBuilder;
 | 
						|
class nsHtml5TreeBuilder;
 | 
						|
class nsHtml5Tokenizer;
 | 
						|
class nsIContent;
 | 
						|
namespace mozilla {
 | 
						|
namespace dom {
 | 
						|
class Document;
 | 
						|
}
 | 
						|
}  // namespace mozilla
 | 
						|
 | 
						|
class nsHtml5StringParser : public nsParserBase {
 | 
						|
 public:
 | 
						|
  NS_DECL_ISUPPORTS
 | 
						|
 | 
						|
  /**
 | 
						|
   * Constructor for use ONLY by nsContentUtils. Others, please call the
 | 
						|
   * nsContentUtils statics that wrap this.
 | 
						|
   */
 | 
						|
  nsHtml5StringParser();
 | 
						|
 | 
						|
  /**
 | 
						|
   * Invoke the fragment parsing algorithm (innerHTML).
 | 
						|
   * DO NOT CALL from outside nsContentUtils.cpp.
 | 
						|
   *
 | 
						|
   * @param aSourceBuffer the string being set as innerHTML
 | 
						|
   * @param aTargetNode the target container
 | 
						|
   * @param aContextLocalName local name of context node
 | 
						|
   * @param aContextNamespace namespace of context node
 | 
						|
   * @param aQuirks true to make <table> not close <p>
 | 
						|
   * @param aPreventScriptExecution true to prevent scripts from executing;
 | 
						|
   * don't set to false when parsing into a target node that has been bound
 | 
						|
   * to tree.
 | 
						|
   * @param aAllowDeclarativeShadowRoots allow the creation of declarative
 | 
						|
   * shadow roots.
 | 
						|
   */
 | 
						|
  nsresult ParseFragment(const nsAString& aSourceBuffer,
 | 
						|
                         nsIContent* aTargetNode, nsAtom* aContextLocalName,
 | 
						|
                         int32_t aContextNamespace, bool aQuirks,
 | 
						|
                         bool aPreventScriptExecution,
 | 
						|
                         bool aAllowDeclarativeShadowRoots);
 | 
						|
 | 
						|
  /**
 | 
						|
   * Parse an entire HTML document from a source string.
 | 
						|
   * DO NOT CALL from outside nsContentUtils.cpp.
 | 
						|
   *
 | 
						|
   */
 | 
						|
  nsresult ParseDocument(const nsAString& aSourceBuffer,
 | 
						|
                         mozilla::dom::Document* aTargetDoc,
 | 
						|
                         bool aScriptingEnabledForNoscriptParsing);
 | 
						|
 | 
						|
 private:
 | 
						|
  virtual ~nsHtml5StringParser();
 | 
						|
 | 
						|
  nsresult Tokenize(const nsAString& aSourceBuffer,
 | 
						|
                    mozilla::dom::Document* aDocument,
 | 
						|
                    bool aScriptingEnabledForNoscriptParsing,
 | 
						|
                    bool aDeclarativeShadowRootsAllowed);
 | 
						|
 | 
						|
  void TryCache();
 | 
						|
  void ClearCaches();
 | 
						|
 | 
						|
  /**
 | 
						|
   * The tree operation executor
 | 
						|
   */
 | 
						|
  RefPtr<nsHtml5OplessBuilder> mBuilder;
 | 
						|
 | 
						|
  /**
 | 
						|
   * The HTML5 tree builder
 | 
						|
   */
 | 
						|
  const mozilla::UniquePtr<nsHtml5TreeBuilder> mTreeBuilder;
 | 
						|
 | 
						|
  /**
 | 
						|
   * The HTML5 tokenizer
 | 
						|
   */
 | 
						|
  const mozilla::UniquePtr<nsHtml5Tokenizer> mTokenizer;
 | 
						|
 | 
						|
  /**
 | 
						|
   * The scoped atom table
 | 
						|
   */
 | 
						|
  nsHtml5AtomTable mAtomTable;
 | 
						|
 | 
						|
  class CacheClearer : public mozilla::Runnable {
 | 
						|
   public:
 | 
						|
    explicit CacheClearer(nsHtml5StringParser* aParser)
 | 
						|
        : Runnable("CacheClearer"), mParser(aParser) {}
 | 
						|
    NS_IMETHOD Run() {
 | 
						|
      if (mParser) {
 | 
						|
        mParser->ClearCaches();
 | 
						|
      }
 | 
						|
      return NS_OK;
 | 
						|
    }
 | 
						|
    void Disconnect() { mParser = nullptr; }
 | 
						|
 | 
						|
   private:
 | 
						|
    nsHtml5StringParser* mParser;
 | 
						|
  };
 | 
						|
 | 
						|
  RefPtr<CacheClearer> mCacheClearer;
 | 
						|
};
 | 
						|
 | 
						|
#endif  // nsHtml5StringParser_h
 |