diff options
Diffstat (limited to 'dom/base/nsIScriptElement.h')
-rw-r--r-- | dom/base/nsIScriptElement.h | 329 |
1 files changed, 0 insertions, 329 deletions
diff --git a/dom/base/nsIScriptElement.h b/dom/base/nsIScriptElement.h deleted file mode 100644 index 470d51c948..0000000000 --- a/dom/base/nsIScriptElement.h +++ /dev/null @@ -1,329 +0,0 @@ -/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* vim: set ts=8 sts=2 et sw=2 tw=80: */ -/* 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 nsIScriptElement_h___ -#define nsIScriptElement_h___ - -#include "nsISupports.h" -#include "nsIURI.h" -#include "nsCOMPtr.h" -#include "nsIScriptLoaderObserver.h" -#include "nsWeakPtr.h" -#include "nsIParser.h" -#include "nsContentCreatorFunctions.h" -#include "nsIDOMHTMLScriptElement.h" -#include "mozilla/CORSMode.h" - -#define NS_ISCRIPTELEMENT_IID \ -{ 0xe60fca9b, 0x1b96, 0x4e4e, \ - { 0xa9, 0xb4, 0xdc, 0x98, 0x4f, 0x88, 0x3f, 0x9c } } - -/** - * Internal interface implemented by script elements - */ -class nsIScriptElement : public nsIScriptLoaderObserver { -public: - NS_DECLARE_STATIC_IID_ACCESSOR(NS_ISCRIPTELEMENT_IID) - - explicit nsIScriptElement(mozilla::dom::FromParser aFromParser) - : mLineNumber(1), - mAlreadyStarted(false), - mMalformed(false), - mDoneAddingChildren(aFromParser == mozilla::dom::NOT_FROM_PARSER || - aFromParser == mozilla::dom::FROM_PARSER_FRAGMENT), - mForceAsync(aFromParser == mozilla::dom::NOT_FROM_PARSER || - aFromParser == mozilla::dom::FROM_PARSER_FRAGMENT), - mFrozen(false), - mDefer(false), - mAsync(false), - mExternal(false), - mParserCreated(aFromParser == mozilla::dom::FROM_PARSER_FRAGMENT ? - mozilla::dom::NOT_FROM_PARSER : aFromParser), - // Fragment parser-created scripts (if executable) - // behave like script-created scripts. - mCreatorParser(nullptr) - { - } - - /** - * Content type identifying the scripting language. Can be empty, in - * which case javascript will be assumed. - * Return false if type attribute is not found. - */ - virtual bool GetScriptType(nsAString& type) = 0; - - /** - * Location of script source text. Can return null, in which case - * this is assumed to be an inline script element. - */ - nsIURI* GetScriptURI() - { - NS_PRECONDITION(mFrozen, "Not ready for this call yet!"); - return mUri; - } - - /** - * Script source text for inline script elements. - */ - virtual void GetScriptText(nsAString& text) = 0; - - virtual void GetScriptCharset(nsAString& charset) = 0; - - /** - * Freezes the return values of GetScriptDeferred(), GetScriptAsync() and - * GetScriptURI() so that subsequent modifications to the attributes don't - * change execution behavior. - */ - virtual void FreezeUriAsyncDefer() = 0; - - /** - * Is the script deferred. Currently only supported by HTML scripts. - */ - bool GetScriptDeferred() - { - NS_PRECONDITION(mFrozen, "Not ready for this call yet!"); - return mDefer; - } - - /** - * Is the script async. Currently only supported by HTML scripts. - */ - bool GetScriptAsync() - { - NS_PRECONDITION(mFrozen, "Not ready for this call yet!"); - return mAsync; - } - - /** - * Is the script an external script? - */ - bool GetScriptExternal() - { - NS_PRECONDITION(mFrozen, "Not ready for this call yet!"); - return mExternal; - } - - /** - * Returns how the element was created. - */ - mozilla::dom::FromParser GetParserCreated() - { - return mParserCreated; - } - - void SetScriptLineNumber(uint32_t aLineNumber) - { - mLineNumber = aLineNumber; - } - uint32_t GetScriptLineNumber() - { - return mLineNumber; - } - - void SetIsMalformed() - { - mMalformed = true; - } - bool IsMalformed() - { - return mMalformed; - } - - void PreventExecution() - { - mAlreadyStarted = true; - } - - void LoseParserInsertedness() - { - mFrozen = false; - mUri = nullptr; - mCreatorParser = nullptr; - mParserCreated = mozilla::dom::NOT_FROM_PARSER; - bool async = false; - nsCOMPtr<nsIDOMHTMLScriptElement> htmlScript = do_QueryInterface(this); - if (htmlScript) { - htmlScript->GetAsync(&async); - } - mForceAsync = !async; - } - - void SetCreatorParser(nsIParser* aParser) - { - mCreatorParser = do_GetWeakReference(aParser); - } - - /** - * Unblocks the creator parser - */ - void UnblockParser() - { - nsCOMPtr<nsIParser> parser = do_QueryReferent(mCreatorParser); - if (parser) { - parser->UnblockParser(); - } - } - - /** - * Attempts to resume parsing asynchronously - */ - void ContinueParserAsync() - { - nsCOMPtr<nsIParser> parser = do_QueryReferent(mCreatorParser); - if (parser) { - parser->ContinueInterruptedParsingAsync(); - } - } - - /** - * Informs the creator parser that the evaluation of this script is starting - */ - void BeginEvaluating() - { - nsCOMPtr<nsIParser> parser = do_QueryReferent(mCreatorParser); - if (parser) { - parser->PushDefinedInsertionPoint(); - } - } - - /** - * Informs the creator parser that the evaluation of this script is ending - */ - void EndEvaluating() - { - nsCOMPtr<nsIParser> parser = do_QueryReferent(mCreatorParser); - if (parser) { - parser->PopDefinedInsertionPoint(); - } - } - - /** - * Retrieves a pointer to the creator parser if this has one or null if not - */ - already_AddRefed<nsIParser> GetCreatorParser() - { - nsCOMPtr<nsIParser> parser = do_QueryReferent(mCreatorParser); - return parser.forget(); - } - - /** - * This method is called when the parser finishes creating the script - * element's children, if any are present. - * - * @return whether the parser will be blocked while this script is being - * loaded - */ - bool AttemptToExecute() - { - mDoneAddingChildren = true; - bool block = MaybeProcessScript(); - if (!mAlreadyStarted) { - // Need to lose parser-insertedness here to allow another script to cause - // execution later. - LoseParserInsertedness(); - } - return block; - } - - /** - * Get the CORS mode of the script element - */ - virtual mozilla::CORSMode GetCORSMode() const - { - /* Default to no CORS */ - return mozilla::CORS_NONE; - } - - /** - * Fire an error event - */ - virtual nsresult FireErrorEvent() = 0; - -protected: - /** - * Processes the script if it's in the document-tree and links to or - * contains a script. Once it has been evaluated there is no way to make it - * reevaluate the script, you'll have to create a new element. This also means - * that when adding a src attribute to an element that already contains an - * inline script, the script referenced by the src attribute will not be - * loaded. - * - * In order to be able to use multiple childNodes, or to use the - * fallback mechanism of using both inline script and linked script you have - * to add all attributes and childNodes before adding the element to the - * document-tree. - * - * @return whether the parser will be blocked while this script is being - * loaded - */ - virtual bool MaybeProcessScript() = 0; - - /** - * The start line number of the script. - */ - uint32_t mLineNumber; - - /** - * The "already started" flag per HTML5. - */ - bool mAlreadyStarted; - - /** - * The script didn't have an end tag. - */ - bool mMalformed; - - /** - * False if parser-inserted but the parser hasn't triggered running yet. - */ - bool mDoneAddingChildren; - - /** - * If true, the .async property returns true instead of reflecting the - * content attribute. - */ - bool mForceAsync; - - /** - * Whether src, defer and async are frozen. - */ - bool mFrozen; - - /** - * The effective deferredness. - */ - bool mDefer; - - /** - * The effective asyncness. - */ - bool mAsync; - - /** - * The effective externalness. A script can be external with mUri being null - * if the src attribute contained an invalid URL string. - */ - bool mExternal; - - /** - * Whether this element was parser-created. - */ - mozilla::dom::FromParser mParserCreated; - - /** - * The effective src (or null if no src). - */ - nsCOMPtr<nsIURI> mUri; - - /** - * The creator parser of a non-defer, non-async parser-inserted script. - */ - nsWeakPtr mCreatorParser; -}; - -NS_DEFINE_STATIC_IID_ACCESSOR(nsIScriptElement, NS_ISCRIPTELEMENT_IID) - -#endif // nsIScriptElement_h___ |