michael@0: /* This Source Code Form is subject to the terms of the Mozilla Public michael@0: * License, v. 2.0. If a copy of the MPL was not distributed with this michael@0: * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ michael@0: michael@0: #ifndef nsHtml5SpeculativeLoad_h michael@0: #define nsHtml5SpeculativeLoad_h michael@0: michael@0: #include "nsString.h" michael@0: michael@0: class nsHtml5TreeOpExecutor; michael@0: michael@0: enum eHtml5SpeculativeLoad { michael@0: #ifdef DEBUG michael@0: eSpeculativeLoadUninitialized, michael@0: #endif michael@0: eSpeculativeLoadBase, michael@0: eSpeculativeLoadImage, michael@0: eSpeculativeLoadScript, michael@0: eSpeculativeLoadScriptFromHead, michael@0: eSpeculativeLoadStyle, michael@0: eSpeculativeLoadManifest, michael@0: eSpeculativeLoadSetDocumentCharset michael@0: }; michael@0: michael@0: class nsHtml5SpeculativeLoad { michael@0: public: michael@0: nsHtml5SpeculativeLoad(); michael@0: ~nsHtml5SpeculativeLoad(); michael@0: michael@0: inline void InitBase(const nsAString& aUrl) michael@0: { michael@0: NS_PRECONDITION(mOpCode == eSpeculativeLoadUninitialized, michael@0: "Trying to reinitialize a speculative load!"); michael@0: mOpCode = eSpeculativeLoadBase; michael@0: mUrl.Assign(aUrl); michael@0: } michael@0: michael@0: inline void InitImage(const nsAString& aUrl, michael@0: const nsAString& aCrossOrigin) michael@0: { michael@0: NS_PRECONDITION(mOpCode == eSpeculativeLoadUninitialized, michael@0: "Trying to reinitialize a speculative load!"); michael@0: mOpCode = eSpeculativeLoadImage; michael@0: mUrl.Assign(aUrl); michael@0: mCrossOrigin.Assign(aCrossOrigin); michael@0: } michael@0: michael@0: inline void InitScript(const nsAString& aUrl, michael@0: const nsAString& aCharset, michael@0: const nsAString& aType, michael@0: const nsAString& aCrossOrigin, michael@0: bool aParserInHead) michael@0: { michael@0: NS_PRECONDITION(mOpCode == eSpeculativeLoadUninitialized, michael@0: "Trying to reinitialize a speculative load!"); michael@0: mOpCode = aParserInHead ? michael@0: eSpeculativeLoadScriptFromHead : eSpeculativeLoadScript; michael@0: mUrl.Assign(aUrl); michael@0: mCharset.Assign(aCharset); michael@0: mTypeOrCharsetSource.Assign(aType); michael@0: mCrossOrigin.Assign(aCrossOrigin); michael@0: } michael@0: michael@0: inline void InitStyle(const nsAString& aUrl, const nsAString& aCharset, michael@0: const nsAString& aCrossOrigin) michael@0: { michael@0: NS_PRECONDITION(mOpCode == eSpeculativeLoadUninitialized, michael@0: "Trying to reinitialize a speculative load!"); michael@0: mOpCode = eSpeculativeLoadStyle; michael@0: mUrl.Assign(aUrl); michael@0: mCharset.Assign(aCharset); michael@0: mCrossOrigin.Assign(aCrossOrigin); michael@0: } michael@0: michael@0: /** michael@0: * "Speculative" manifest loads aren't truly speculative--if a manifest michael@0: * gets loaded, we are committed to it. There can never be a