Changeset 89321 in webkit


Ignore:
Timestamp:
Jun 20, 2011 5:36:27 PM (13 years ago)
Author:
jcivelli@chromium.org
Message:

2011-06-20 Jay Civelli <jcivelli@chromium.org>

Reviewed by Adam Barth.

Making SharedBufferCRLFLineReader more generic, so it can be used to read MHTML
file with binary parts.
https://bugs.webkit.org/show_bug.cgi?id=62966

  • CMakeLists.txt:
  • GNUmakefile.list.am:
  • WebCore.gypi:
  • WebCore.pro:
  • WebCore.vcproj/WebCore.vcproj:
  • WebCore.xcodeproj/project.pbxproj:
  • loader/archive/mhtml/MHTMLParser.cpp: (WebCore::skipLinesUntilBoundaryFound): (WebCore::MHTMLParser::MHTMLParser): (WebCore::MHTMLParser::parseNextPart):
  • loader/archive/mhtml/MHTMLParser.h:
  • platform/SharedBufferChunkReader.cpp: Renamed from Source/WebCore/platform/SharedBufferCRLFLineReader.cpp. (WebCore::SharedBufferChunkReader::SharedBufferChunkReader): (WebCore::SharedBufferChunkReader::setSeparator): (WebCore::SharedBufferChunkReader::nextChunk):
  • platform/SharedBufferChunkReader.h: Renamed from Source/WebCore/platform/SharedBufferCRLFLineReader.h.
  • platform/network/MIMEHeader.cpp: (WebCore::retrieveKeyValuePairs): (WebCore::MIMEHeader::parseHeader):
  • platform/network/MIMEHeader.h:
Location:
trunk/Source/WebCore
Files:
11 edited
2 moved

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/CMakeLists.txt

    r89220 r89321  
    10431043    platform/ScrollView.cpp
    10441044    platform/SharedBuffer.cpp
    1045     platform/SharedBufferCRLFLineReader.cpp
     1045    platform/SharedBufferChunkReader.cpp
    10461046    platform/SchemeRegistry.cpp
    10471047    platform/ThreadGlobalData.cpp
  • trunk/Source/WebCore/ChangeLog

    r89319 r89321  
     12011-06-20  Jay Civelli  <jcivelli@chromium.org>
     2
     3        Reviewed by Adam Barth.
     4
     5        Making SharedBufferCRLFLineReader more generic, so it can be used to read MHTML
     6        file with binary parts.
     7        https://bugs.webkit.org/show_bug.cgi?id=62966
     8
     9        * CMakeLists.txt:
     10        * GNUmakefile.list.am:
     11        * WebCore.gypi:
     12        * WebCore.pro:
     13        * WebCore.vcproj/WebCore.vcproj:
     14        * WebCore.xcodeproj/project.pbxproj:
     15        * loader/archive/mhtml/MHTMLParser.cpp:
     16        (WebCore::skipLinesUntilBoundaryFound):
     17        (WebCore::MHTMLParser::MHTMLParser):
     18        (WebCore::MHTMLParser::parseNextPart):
     19        * loader/archive/mhtml/MHTMLParser.h:
     20        * platform/SharedBufferChunkReader.cpp: Renamed from Source/WebCore/platform/SharedBufferCRLFLineReader.cpp.
     21        (WebCore::SharedBufferChunkReader::SharedBufferChunkReader):
     22        (WebCore::SharedBufferChunkReader::setSeparator):
     23        (WebCore::SharedBufferChunkReader::nextChunk):
     24        * platform/SharedBufferChunkReader.h: Renamed from Source/WebCore/platform/SharedBufferCRLFLineReader.h.
     25        * platform/network/MIMEHeader.cpp:
     26        (WebCore::retrieveKeyValuePairs):
     27        (WebCore::MIMEHeader::parseHeader):
     28        * platform/network/MIMEHeader.h:
     29
    1302011-06-20  Martin Robinson  <mrobinson@igalia.com>
    231
  • trunk/Source/WebCore/GNUmakefile.list.am

    r89251 r89321  
    27442744        Source/WebCore/platform/SharedBuffer.cpp \
    27452745        Source/WebCore/platform/SharedBuffer.h \
    2746         Source/WebCore/platform/SharedBufferCRLFLineReader.cpp \
    2747         Source/WebCore/platform/SharedBufferCRLFLineReader.h \
     2746        Source/WebCore/platform/SharedBufferChunkReader.cpp \
     2747        Source/WebCore/platform/SharedBufferChunkReader.h \
    27482748        Source/WebCore/platform/SharedTimer.h \
    27492749        Source/WebCore/platform/Sound.h \
  • trunk/Source/WebCore/WebCore.gypi

    r89305 r89321  
    789789            'platform/SearchPopupMenu.h',
    790790            'platform/SharedBuffer.h',
    791             'platform/SharedBufferCRLFLineReader.h',
     791            'platform/SharedBufferChunkReader.h',
    792792            'platform/SystemTime.h',
    793793            'platform/Theme.h',
     
    36713671            'platform/SecureTextInput.h',
    36723672            'platform/SharedBuffer.cpp',
    3673             'platform/SharedBufferCRLFLineReader.cpp',
     3673            'platform/SharedBufferChunkReader.cpp',
    36743674            'platform/SharedTimer.h',
    36753675            'platform/Sound.h',
  • trunk/Source/WebCore/WebCore.pro

    r89253 r89321  
    10621062    platform/text/SegmentedString.cpp \
    10631063    platform/SharedBuffer.cpp \
    1064     platform/SharedBufferCRLFLineReader.cpp \
     1064    platform/SharedBufferChunkReader.cpp \
    10651065    platform/text/String.cpp \
    10661066    platform/text/TextBoundaries.cpp \
     
    20782078    platform/SearchPopupMenu.h \
    20792079    platform/SharedBuffer.h \
    2080     platform/SharedBufferCRLFLineReader.h \
     2080    platform/SharedBufferChunkReader.h \
    20812081    platform/sql/SQLiteDatabase.h \
    20822082    platform/sql/SQLiteFileSystem.h \
  • trunk/Source/WebCore/WebCore.vcproj/WebCore.vcproj

    r89216 r89321  
    2666726667                        </File>
    2666826668                        <File
    26669                                 RelativePath="..\platform\SharedBufferCRLFLineReader.cpp"
    26670                                 >
    26671                         </File>
    26672                         <File
    26673                                 RelativePath="..\platform\SharedBufferCRLFLineReader.h"
     26669                                RelativePath="..\platform\SharedBufferChunkReader.cpp"
     26670                                >
     26671                        </File>
     26672                        <File
     26673                                RelativePath="..\platform\SharedBufferChunkReader.h"
    2667426674                                >
    2667526675                        </File>
  • trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj

    r89292 r89321  
    805805                372C00D9129619F8005C9575 /* FindOptions.h in Headers */ = {isa = PBXBuildFile; fileRef = 372C00D8129619F8005C9575 /* FindOptions.h */; settings = {ATTRIBUTES = (Private, ); }; };
    806806                3744570F0DB05FA500AE0992 /* SVGGlyphMap.h in Headers */ = {isa = PBXBuildFile; fileRef = 3744570E0DB05FA500AE0992 /* SVGGlyphMap.h */; };
     807                37569E0313AF172C00CDBA8E /* SharedBufferChunkReader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 37569E0013AF172C00CDBA8E /* SharedBufferChunkReader.cpp */; };
     808                37569E0513AF172C00CDBA8E /* SharedBufferChunkReader.h in Headers */ = {isa = PBXBuildFile; fileRef = 37569E0213AF172C00CDBA8E /* SharedBufferChunkReader.h */; };
    807809                375CD232119D43C800A2A859 /* Hyphenation.h in Headers */ = {isa = PBXBuildFile; fileRef = 375CD231119D43C800A2A859 /* Hyphenation.h */; };
    808810                375CD23B119D44EA00A2A859 /* HyphenationMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = 375CD239119D44EA00A2A859 /* HyphenationMac.mm */; };
     
    824826                37ACCE420DA2980F0089E602 /* FontRenderingMode.h in Headers */ = {isa = PBXBuildFile; fileRef = 37ACCE410DA2980F0089E602 /* FontRenderingMode.h */; settings = {ATTRIBUTES = (Private, ); }; };
    825827                37ACCF690DA414E70089E602 /* FontDescription.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 37ACCE620DA2AA960089E602 /* FontDescription.cpp */; };
    826                 37AFFDF61370A0B800E895C0 /* SharedBufferCRLFLineReader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 37AFFDF41370A0B800E895C0 /* SharedBufferCRLFLineReader.cpp */; };
    827                 37AFFDF71370A0B800E895C0 /* SharedBufferCRLFLineReader.h in Headers */ = {isa = PBXBuildFile; fileRef = 37AFFDF51370A0B800E895C0 /* SharedBufferCRLFLineReader.h */; };
    828828                37C2360B1097EDED00EF9F72 /* FontComplexTextMac.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 37C2360A1097EDED00EF9F72 /* FontComplexTextMac.cpp */; };
    829829                37C236101097EE7700EF9F72 /* ComplexTextController.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 37C2360E1097EE7700EF9F72 /* ComplexTextController.cpp */; };
     
    72437243                372C00D8129619F8005C9575 /* FindOptions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FindOptions.h; sourceTree = "<group>"; };
    72447244                3744570E0DB05FA500AE0992 /* SVGGlyphMap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGGlyphMap.h; sourceTree = "<group>"; };
     7245                37569E0013AF172C00CDBA8E /* SharedBufferChunkReader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SharedBufferChunkReader.cpp; sourceTree = "<group>"; };
     7246                37569E0213AF172C00CDBA8E /* SharedBufferChunkReader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SharedBufferChunkReader.h; sourceTree = "<group>"; };
    72457247                375CD231119D43C800A2A859 /* Hyphenation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Hyphenation.h; sourceTree = "<group>"; };
    72467248                375CD239119D44EA00A2A859 /* HyphenationMac.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = HyphenationMac.mm; sourceTree = "<group>"; };
     
    72627264                37ACCE410DA2980F0089E602 /* FontRenderingMode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FontRenderingMode.h; sourceTree = "<group>"; };
    72637265                37ACCE620DA2AA960089E602 /* FontDescription.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FontDescription.cpp; sourceTree = "<group>"; };
    7264                 37AFFDF41370A0B800E895C0 /* SharedBufferCRLFLineReader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SharedBufferCRLFLineReader.cpp; sourceTree = "<group>"; };
    7265                 37AFFDF51370A0B800E895C0 /* SharedBufferCRLFLineReader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SharedBufferCRLFLineReader.h; sourceTree = "<group>"; };
    72667266                37C2360A1097EDED00EF9F72 /* FontComplexTextMac.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FontComplexTextMac.cpp; sourceTree = "<group>"; };
    72677267                37C2360E1097EE7700EF9F72 /* ComplexTextController.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ComplexTextController.cpp; sourceTree = "<group>"; };
     
    1885818858                                1A4A954B0B4EDCCB002D8C3C /* SharedBuffer.cpp */,
    1885918859                                1A4A954C0B4EDCCB002D8C3C /* SharedBuffer.h */,
    18860                                 37AFFDF41370A0B800E895C0 /* SharedBufferCRLFLineReader.cpp */,
    18861                                 37AFFDF51370A0B800E895C0 /* SharedBufferCRLFLineReader.h */,
     18860                                37569E0013AF172C00CDBA8E /* SharedBufferChunkReader.cpp */,
     18861                                37569E0213AF172C00CDBA8E /* SharedBufferChunkReader.h */,
    1886218862                                93309EA0099EB78C0056E581 /* SharedTimer.h */,
    1886318863                                4B3043C60AE0370300A82647 /* Sound.h */,
     
    2244222442                                B2AFFC940D00A5DF0030074D /* ShapeArabic.h in Headers */,
    2244322443                                1A4A954E0B4EDCCB002D8C3C /* SharedBuffer.h in Headers */,
    22444                                 37AFFDF71370A0B800E895C0 /* SharedBufferCRLFLineReader.h in Headers */,
    2244522444                                498770EB1242C535002226BA /* SharedGraphicsContext3D.h in Headers */,
    2244622445                                93309EA3099EB78C0056E581 /* SharedTimer.h in Headers */,
     
    2533125330                                1A4A954D0B4EDCCB002D8C3C /* SharedBuffer.cpp in Sources */,
    2533225331                                512DD8E30D91E2B4000F89EE /* SharedBufferCF.cpp in Sources */,
    25333                                 37AFFDF61370A0B800E895C0 /* SharedBufferCRLFLineReader.cpp in Sources */,
    2533425332                                1A4A95520B4EDCFF002D8C3C /* SharedBufferMac.mm in Sources */,
    2533525333                                498770EA1242C535002226BA /* SharedGraphicsContext3D.cpp in Sources */,
  • trunk/Source/WebCore/loader/archive/mhtml/MHTMLParser.cpp

    r87189 r89321  
    4444namespace WebCore {
    4545
    46 static bool skipLinesUntilBoundaryFound(SharedBufferCRLFLineReader& lineReader, const String& boundary)
     46static bool skipLinesUntilBoundaryFound(SharedBufferChunkReader& lineReader, const String& boundary)
    4747{
    4848    String line;
    49     while (!(line = lineReader.nextLine()).isNull()) {
     49    while (!(line = lineReader.nextChunk()).isNull()) {
    5050        if (line == boundary)
    5151            return true;
     
    5555
    5656MHTMLParser::MHTMLParser(SharedBuffer* data)
    57     : m_lineReader(data)
     57    : m_lineReader(data, "\r\n")
    5858{
    5959}
     
    148148    bool endOfPartReached = false;
    149149    String line;
    150     while (!(line = m_lineReader.nextLine()).isNull()) {
     150    while (!(line = m_lineReader.nextChunk()).isNull()) {
    151151        if (checkBoundary && (line == endOfPartBoundary || line == endOfDocumentBoundary)) {
    152152            endOfArchiveReached = (line == endOfDocumentBoundary);
  • trunk/Source/WebCore/loader/archive/mhtml/MHTMLParser.h

    r87189 r89321  
    3333
    3434#if ENABLE(MHTML)
    35 #include "SharedBufferCRLFLineReader.h"
     35#include "SharedBufferChunkReader.h"
    3636#include <wtf/RefPtr.h>
    3737#include <wtf/Vector.h>
     
    6262    void addResourceToArchive(ArchiveResource*, MHTMLArchive*);
    6363
    64     SharedBufferCRLFLineReader m_lineReader;
     64    SharedBufferChunkReader m_lineReader;
    6565    Vector<RefPtr<ArchiveResource> > m_resources;
    6666    Vector<RefPtr<MHTMLArchive> > m_frames;
  • trunk/Source/WebCore/platform/SharedBufferChunkReader.cpp

    r89319 r89321  
    3030
    3131#include "config.h"
    32 #include "SharedBufferCRLFLineReader.h"
     32#include "SharedBufferChunkReader.h"
    3333
    3434#include "SharedBuffer.h"
     
    3737namespace WebCore {
    3838
    39 SharedBufferCRLFLineReader::SharedBufferCRLFLineReader(SharedBuffer* buffer)
     39SharedBufferChunkReader::SharedBufferChunkReader(SharedBuffer* buffer, const String& separator)
    4040    : m_buffer(buffer)
    4141    , m_bufferPosition(0)
     
    4444    , m_segmentIndex(0)
    4545    , m_reachedEndOfFile(false)
     46    , m_separator(separator)
     47    , m_separatorIndex(0)
    4648{
    4749}
    4850
    49 String SharedBufferCRLFLineReader::nextLine()
     51void SharedBufferChunkReader::setSeparator(const String& separator)
     52{
     53    m_separator = separator;
     54}
     55
     56String SharedBufferChunkReader::nextChunk(bool includeSeparator)
    5057{
    5158    if (m_reachedEndOfFile)
    5259        return String();
    5360
    54     bool previousCharacterWasCR = false;
    5561    StringBuilder stringBuilder;
    5662    while (true) {
    57         bool reachedEndOfLine = false;
    5863        while (m_segmentIndex < m_segmentLength) {
    59             reachedEndOfLine = false;
    60             char currentCharacter = m_segment[m_segmentIndex];
    61             if (previousCharacterWasCR) {
    62                 if (currentCharacter == '\n')
    63                     reachedEndOfLine = true;
    64                 else
    65                     stringBuilder.append('\r');
    66             } else if (currentCharacter != '\r')
    67                 stringBuilder.append(currentCharacter);
    68 
    69             previousCharacterWasCR = (currentCharacter == '\r');
    70             m_segmentIndex++;
    71             if (reachedEndOfLine)
    72                 return stringBuilder.toString();
     64            char currentCharacter = m_segment[m_segmentIndex++];
     65            if (currentCharacter != m_separator[m_separatorIndex]) {
     66              if (m_separatorIndex > 0) {
     67                stringBuilder.append(m_separator.substring(0, m_separatorIndex));
     68                m_separatorIndex = 0;
     69              }
     70              stringBuilder.append(currentCharacter);
     71              continue;
     72            }
     73            m_separatorIndex++;
     74            if (m_separatorIndex == m_separator.length()) {
     75              if (includeSeparator)
     76                stringBuilder.append(m_separator);
     77              m_separatorIndex = 0;
     78              return stringBuilder.toString();
     79            }
    7380        }
    7481
     
    7986        if (!m_segmentLength) {
    8087            m_reachedEndOfFile = true;
    81             if (previousCharacterWasCR)
    82                 stringBuilder.append('\r');
    83             String line = stringBuilder.toString();
    84             return (line.isEmpty() && !reachedEndOfLine) ? String() : line;
     88            if (m_separatorIndex > 0)
     89              stringBuilder.append(m_separator.substring(0, m_separatorIndex));
     90            return stringBuilder.length() > 0 ? stringBuilder.toString() : String();
    8591        }
    8692    }
    87     return String();
     93    return String(); // Compiler is unhappy without this.
    8894}
    8995
  • trunk/Source/WebCore/platform/SharedBufferChunkReader.h

    r89319 r89321  
    2929 */
    3030
    31 #ifndef SharedBufferCRLFLineReader_h
    32 #define SharedBufferCRLFLineReader_h
     31#ifndef SharedBufferChunkReader_h
     32#define SharedBufferChunkReader_h
    3333
    3434#include <wtf/text/WTFString.h>
     
    4242class SharedBuffer;
    4343
    44 class SharedBufferCRLFLineReader {
     44class SharedBufferChunkReader {
    4545public:
    46     explicit SharedBufferCRLFLineReader(SharedBuffer*);
     46    SharedBufferChunkReader(SharedBuffer*, const String& separator);
    4747
    48     // Returns the next line read from the buffer.
     48    void setSeparator(const String&);
     49
    4950    // Returns a null string when the end of the buffer has been reached.
    50     String nextLine();
     51    String nextChunk(bool includeSeparator = false);
    5152
    5253private:
     
    5758    size_t m_segmentIndex;
    5859    bool m_reachedEndOfFile;
     60    String m_separator;
     61    size_t m_separatorIndex;
    5962};
    6063
  • trunk/Source/WebCore/platform/network/MIMEHeader.cpp

    r87189 r89321  
    3333
    3434#include "ContentTypeParser.h"
    35 #include "SharedBufferCRLFLineReader.h"
     35#include "SharedBufferChunkReader.h"
    3636#include <wtf/HashMap.h>
    3737#include <wtf/text/CString.h>
     
    4444typedef HashMap<String, String> KeyValueMap;
    4545
    46 static KeyValueMap retrieveKeyValuePairs(WebCore::SharedBufferCRLFLineReader* buffer)
     46static KeyValueMap retrieveKeyValuePairs(WebCore::SharedBufferChunkReader* buffer)
    4747{
    4848    KeyValueMap keyValuePairs;
     
    5050    String key;
    5151    StringBuilder value;
    52     while (!(line = buffer->nextLine()).isNull()) {
     52    while (!(line = buffer->nextChunk()).isNull()) {
    5353        if (line.isEmpty())
    5454            break; // Empty line means end of key/value section.
     
    8080}
    8181
    82 PassRefPtr<MIMEHeader> MIMEHeader::parseHeader(SharedBufferCRLFLineReader* buffer)
     82PassRefPtr<MIMEHeader> MIMEHeader::parseHeader(SharedBufferChunkReader* buffer)
    8383{
    8484    RefPtr<MIMEHeader> mimeHeader = adoptRef(new MIMEHeader);
  • trunk/Source/WebCore/platform/network/MIMEHeader.h

    r87189 r89321  
    3838namespace WebCore {
    3939
    40 class SharedBufferCRLFLineReader;
     40class SharedBufferChunkReader;
    4141
    4242// FIXME: This class is a limited MIME parser used to parse the MIME headers of MHTML files.
     
    5050    };
    5151
    52     static PassRefPtr<MIMEHeader> parseHeader(SharedBufferCRLFLineReader*);
     52    static PassRefPtr<MIMEHeader> parseHeader(SharedBufferChunkReader* crLFLineReader);
    5353
    5454    bool isMultipart() const { return m_contentType.startsWith("multipart/"); }
Note: See TracChangeset for help on using the changeset viewer.