summaryrefslogtreecommitdiffstats
path: root/parser/html/nsHtml5Tokenizer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'parser/html/nsHtml5Tokenizer.cpp')
-rw-r--r--parser/html/nsHtml5Tokenizer.cpp21
1 files changed, 19 insertions, 2 deletions
diff --git a/parser/html/nsHtml5Tokenizer.cpp b/parser/html/nsHtml5Tokenizer.cpp
index 5092bf4bf6..127c0a77fc 100644
--- a/parser/html/nsHtml5Tokenizer.cpp
+++ b/parser/html/nsHtml5Tokenizer.cpp
@@ -126,6 +126,7 @@ nsHtml5Tokenizer::nsHtml5Tokenizer(nsHtml5TreeBuilder* tokenHandler,
: nullptr),
newAttributesEachTime(!tokenHandler->HasBuilder()),
shouldSuspend(false),
+ keepBuffer(false),
confident(false),
line(0),
attributeLine(0),
@@ -146,6 +147,18 @@ void nsHtml5Tokenizer::initLocation(nsHtml5String newPublicId,
bool nsHtml5Tokenizer::isViewingXmlSource() { return viewingXmlSource; }
+void nsHtml5Tokenizer::setKeepBuffer(bool keepBuffer) {
+ this->keepBuffer = keepBuffer;
+}
+
+bool nsHtml5Tokenizer::dropBufferIfLongerThan(int32_t length) {
+ if (strBuf.length > length) {
+ strBuf = nullptr;
+ return true;
+ }
+ return false;
+}
+
void nsHtml5Tokenizer::setState(int32_t specialTokenizerState) {
this->stateSave = specialTokenizerState;
this->endTagExpectation = nullptr;
@@ -5022,7 +5035,9 @@ void nsHtml5Tokenizer::emitOrAppendOne(const char16_t* val,
}
void nsHtml5Tokenizer::end() {
- strBuf = nullptr;
+ if (!keepBuffer) {
+ strBuf = nullptr;
+ }
doctypeName = nullptr;
if (systemIdentifier) {
systemIdentifier.Release();
@@ -5148,7 +5163,9 @@ void nsHtml5Tokenizer::loadState(nsHtml5Tokenizer* other) {
void nsHtml5Tokenizer::initializeWithoutStarting() {
confident = false;
- strBuf = nullptr;
+ if (!keepBuffer) {
+ strBuf = nullptr;
+ }
line = 1;
attributeLine = 1;
resetToDataState();