Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(719)

Unified Diff: sky/engine/core/html/parser/HTMLInputStream.h

Issue 683693002: Simplify HTMLInputStream (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: sky/engine/core/html/parser/HTMLInputStream.h
diff --git a/sky/engine/core/html/parser/HTMLInputStream.h b/sky/engine/core/html/parser/HTMLInputStream.h
index 762bfefddb8348ffeed07f4fd0569ba2c0f0cc64..8c0ff13e6523a5dea885f2058aa888344e1689da 100644
--- a/sky/engine/core/html/parser/HTMLInputStream.h
+++ b/sky/engine/core/html/parser/HTMLInputStream.h
@@ -1,27 +1,6 @@
-/*
- * Copyright (C) 2010 Google, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
#ifndef HTMLInputStream_h
#define HTMLInputStream_h
@@ -31,127 +10,27 @@
namespace blink {
-// The InputStream is made up of a sequence of SegmentedStrings:
-//
-// [--current--][--next--][--next--] ... [--next--]
-// /\ (also called m_last)
-// L_ current insertion point
-//
-// The current segmented string is stored in InputStream. Each of the
-// afterInsertionPoint buffers are stored in InsertionPointRecords on the
-// stack.
-//
-// We remove characters from the "current" string in the InputStream.
-// document.write() will add characters at the current insertion point,
-// which appends them to the "current" string.
-//
-// m_last is a pointer to the last of the afterInsertionPoint strings.
-// The network adds data at the end of the InputStream, which appends
-// them to the "last" string.
class HTMLInputStream {
WTF_MAKE_NONCOPYABLE(HTMLInputStream);
public:
- HTMLInputStream()
- : m_last(&m_first)
- {
- }
+ HTMLInputStream() { }
void appendToEnd(const SegmentedString& string)
{
- m_last->append(string);
- }
-
- void insertAtCurrentInsertionPoint(const SegmentedString& string)
- {
- m_first.append(string);
- }
-
- bool hasInsertionPoint() const
- {
- return &m_first != m_last;
+ m_string.append(string);
}
void markEndOfFile()
{
- m_last->append(SegmentedString(String(&kEndOfFileMarker, 1)));
- m_last->close();
- }
-
- void closeWithoutMarkingEndOfFile()
- {
- m_last->close();
- }
-
- bool haveSeenEndOfFile() const
- {
- return m_last->isClosed();
- }
-
- SegmentedString& current() { return m_first; }
- const SegmentedString& current() const { return m_first; }
-
- void splitInto(SegmentedString& next)
- {
- next = m_first;
- m_first = SegmentedString();
- if (m_last == &m_first) {
- // We used to only have one SegmentedString in the InputStream
- // but now we have two. That means m_first is no longer also
- // the m_last string, |next| is now the last one.
- m_last = &next;
- }
- }
-
- void mergeFrom(SegmentedString& next)
- {
- m_first.append(next);
- if (m_last == &next) {
- // The string |next| used to be the last SegmentedString in
- // the InputStream. Now that it's been merged into m_first,
- // that makes m_first the last one.
- m_last = &m_first;
- }
- if (next.isClosed()) {
- // We also need to merge the "closed" state from next to
- // m_first. Arguably, this work could be done in append().
- m_first.close();
- }
+ m_string.append(SegmentedString(String(&kEndOfFileMarker, 1)));
+ m_string.close();
}
-private:
- SegmentedString m_first;
- SegmentedString* m_last;
-};
-
-class InsertionPointRecord {
- WTF_MAKE_NONCOPYABLE(InsertionPointRecord);
-public:
- explicit InsertionPointRecord(HTMLInputStream& inputStream)
- : m_inputStream(&inputStream)
- {
- m_line = m_inputStream->current().currentLine();
- m_column = m_inputStream->current().currentColumn();
- m_inputStream->splitInto(m_next);
- // We 'fork' current position and use it for the generated script part.
- // This is a bit weird, because generated part does not have positions within an HTML document.
- m_inputStream->current().setCurrentPosition(m_line, m_column, 0);
- }
-
- ~InsertionPointRecord()
- {
- // Some inserted text may have remained in input stream. E.g. if script has written "&amp" or "<table",
- // it stays in buffer because it cannot be properly tokenized before we see next part.
- int unparsedRemainderLength = m_inputStream->current().length();
- m_inputStream->mergeFrom(m_next);
- // We restore position for the character that goes right after unparsed remainder.
- m_inputStream->current().setCurrentPosition(m_line, m_column, unparsedRemainderLength);
- }
+ SegmentedString& current() { return m_string; }
+ const SegmentedString& current() const { return m_string; }
private:
- HTMLInputStream* m_inputStream;
- SegmentedString m_next;
- OrdinalNumber m_line;
- OrdinalNumber m_column;
+ SegmentedString m_string;
};
}
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698