Coverage Report

Created: 2018-09-25 14:53

/src/mozilla-central/parser/htmlparser/CParserContext.cpp
Line
Count
Source (jump to first uncovered line)
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/. */
6
7
8
#include "nsAtom.h"
9
#include "CParserContext.h"
10
#include "prenv.h"
11
#include "nsIHTMLContentSink.h"
12
#include "nsHTMLTokenizer.h"
13
#include "nsMimeTypes.h"
14
#include "nsHTMLTokenizer.h"
15
16
CParserContext::CParserContext(CParserContext* aPrevContext,
17
                               nsScanner* aScanner,
18
                               void *aKey,
19
                               eParserCommands aCommand,
20
                               nsIRequestObserver* aListener,
21
                               eAutoDetectResult aStatus,
22
                               bool aCopyUnused)
23
  : mListener(aListener)
24
  , mKey(aKey)
25
  , mPrevContext(aPrevContext)
26
  , mScanner(aScanner)
27
  , mDTDMode(eDTDMode_unknown)
28
  , mDocType(static_cast<eParserDocType>(0))
29
  , mStreamListenerState(eNone)
30
  , mContextType(eCTNone)
31
  , mAutoDetectStatus(aStatus)
32
  , mParserCommand(aCommand)
33
  , mMultipart(true)
34
  , mCopyUnused(aCopyUnused)
35
0
{
36
0
  MOZ_COUNT_CTOR(CParserContext);
37
0
}
38
39
CParserContext::~CParserContext()
40
0
{
41
0
  // It's ok to simply ingore the PrevContext.
42
0
  MOZ_COUNT_DTOR(CParserContext);
43
0
}
44
45
void
46
CParserContext::SetMimeType(const nsACString& aMimeType)
47
0
{
48
0
  mMimeType.Assign(aMimeType);
49
0
50
0
  mDocType = ePlainText;
51
0
52
0
  if (mMimeType.EqualsLiteral(TEXT_HTML))
53
0
    mDocType = eHTML_Strict;
54
0
  else if (mMimeType.EqualsLiteral(TEXT_XML)              ||
55
0
           mMimeType.EqualsLiteral(APPLICATION_XML)       ||
56
0
           mMimeType.EqualsLiteral(APPLICATION_XHTML_XML) ||
57
0
           mMimeType.EqualsLiteral(TEXT_XUL)              ||
58
0
           mMimeType.EqualsLiteral(IMAGE_SVG_XML)         ||
59
0
           mMimeType.EqualsLiteral(APPLICATION_MATHML_XML) ||
60
0
           mMimeType.EqualsLiteral(APPLICATION_RDF_XML)   ||
61
0
           mMimeType.EqualsLiteral(APPLICATION_WAPXHTML_XML) ||
62
0
           mMimeType.EqualsLiteral(TEXT_RDF))
63
0
    mDocType = eXML;
64
0
}
65
66
nsresult
67
CParserContext::GetTokenizer(nsIDTD* aDTD,
68
                             nsIContentSink* aSink,
69
                             nsITokenizer*& aTokenizer)
70
0
{
71
0
  nsresult result = NS_OK;
72
0
  int32_t type = aDTD ? aDTD->GetType() : NS_IPARSER_FLAG_HTML;
73
0
74
0
  if (!mTokenizer) {
75
0
    if (type == NS_IPARSER_FLAG_HTML || mParserCommand == eViewSource) {
76
0
      mTokenizer = new nsHTMLTokenizer;
77
0
    }
78
0
    else if (type == NS_IPARSER_FLAG_XML) {
79
0
      mTokenizer = do_QueryInterface(aDTD, &result);
80
0
    }
81
0
  }
82
0
83
0
  aTokenizer = mTokenizer;
84
0
85
0
  return result;
86
0
}