Bug 1529847 - Move the Changes Front initialization to the Promise.all. r=rcaliman
[gecko.git] / parser / htmlparser / CParserContext.cpp
blobba8ae984dcb6f3763844a6b24aed9bb5d857b7ea
1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* vim: set ts=2 sw=2 et tw=80: */
3 /* This Source Code Form is subject to the terms of the Mozilla Public
4 * License, v. 2.0. If a copy of the MPL was not distributed with this
5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
7 #include "nsAtom.h"
8 #include "CParserContext.h"
9 #include "prenv.h"
10 #include "nsIHTMLContentSink.h"
11 #include "nsHTMLTokenizer.h"
12 #include "nsMimeTypes.h"
13 #include "nsHTMLTokenizer.h"
15 CParserContext::CParserContext(CParserContext* aPrevContext,
16 nsScanner* aScanner, void* aKey,
17 eParserCommands aCommand,
18 nsIRequestObserver* aListener,
19 eAutoDetectResult aStatus, bool aCopyUnused)
20 : mListener(aListener),
21 mKey(aKey),
22 mPrevContext(aPrevContext),
23 mScanner(aScanner),
24 mDTDMode(eDTDMode_unknown),
25 mDocType(static_cast<eParserDocType>(0)),
26 mStreamListenerState(eNone),
27 mContextType(eCTNone),
28 mAutoDetectStatus(aStatus),
29 mParserCommand(aCommand),
30 mMultipart(true),
31 mCopyUnused(aCopyUnused) {
32 MOZ_COUNT_CTOR(CParserContext);
35 CParserContext::~CParserContext() {
36 // It's ok to simply ingore the PrevContext.
37 MOZ_COUNT_DTOR(CParserContext);
40 void CParserContext::SetMimeType(const nsACString& aMimeType) {
41 mMimeType.Assign(aMimeType);
43 mDocType = ePlainText;
45 if (mMimeType.EqualsLiteral(TEXT_HTML))
46 mDocType = eHTML_Strict;
47 else if (mMimeType.EqualsLiteral(TEXT_XML) ||
48 mMimeType.EqualsLiteral(APPLICATION_XML) ||
49 mMimeType.EqualsLiteral(APPLICATION_XHTML_XML) ||
50 mMimeType.EqualsLiteral(TEXT_XUL) ||
51 mMimeType.EqualsLiteral(IMAGE_SVG_XML) ||
52 mMimeType.EqualsLiteral(APPLICATION_MATHML_XML) ||
53 mMimeType.EqualsLiteral(APPLICATION_RDF_XML) ||
54 mMimeType.EqualsLiteral(APPLICATION_WAPXHTML_XML) ||
55 mMimeType.EqualsLiteral(TEXT_RDF))
56 mDocType = eXML;
59 nsresult CParserContext::GetTokenizer(nsIDTD* aDTD, nsIContentSink* aSink,
60 nsITokenizer*& aTokenizer) {
61 nsresult result = NS_OK;
62 int32_t type = aDTD ? aDTD->GetType() : NS_IPARSER_FLAG_HTML;
64 if (!mTokenizer) {
65 if (type == NS_IPARSER_FLAG_HTML || mParserCommand == eViewSource) {
66 mTokenizer = new nsHTMLTokenizer;
67 } else if (type == NS_IPARSER_FLAG_XML) {
68 mTokenizer = do_QueryInterface(aDTD, &result);
72 aTokenizer = mTokenizer;
74 return result;