Changeset 89321 in webkit
- Timestamp:
- Jun 20, 2011 5:36:27 PM (13 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 11 edited
- 2 moved
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/CMakeLists.txt
r89220 r89321 1043 1043 platform/ScrollView.cpp 1044 1044 platform/SharedBuffer.cpp 1045 platform/SharedBufferC RLFLineReader.cpp1045 platform/SharedBufferChunkReader.cpp 1046 1046 platform/SchemeRegistry.cpp 1047 1047 platform/ThreadGlobalData.cpp -
trunk/Source/WebCore/ChangeLog
r89319 r89321 1 2011-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 1 30 2011-06-20 Martin Robinson <mrobinson@igalia.com> 2 31 -
trunk/Source/WebCore/GNUmakefile.list.am
r89251 r89321 2744 2744 Source/WebCore/platform/SharedBuffer.cpp \ 2745 2745 Source/WebCore/platform/SharedBuffer.h \ 2746 Source/WebCore/platform/SharedBufferC RLFLineReader.cpp \2747 Source/WebCore/platform/SharedBufferC RLFLineReader.h \2746 Source/WebCore/platform/SharedBufferChunkReader.cpp \ 2747 Source/WebCore/platform/SharedBufferChunkReader.h \ 2748 2748 Source/WebCore/platform/SharedTimer.h \ 2749 2749 Source/WebCore/platform/Sound.h \ -
trunk/Source/WebCore/WebCore.gypi
r89305 r89321 789 789 'platform/SearchPopupMenu.h', 790 790 'platform/SharedBuffer.h', 791 'platform/SharedBufferC RLFLineReader.h',791 'platform/SharedBufferChunkReader.h', 792 792 'platform/SystemTime.h', 793 793 'platform/Theme.h', … … 3671 3671 'platform/SecureTextInput.h', 3672 3672 'platform/SharedBuffer.cpp', 3673 'platform/SharedBufferC RLFLineReader.cpp',3673 'platform/SharedBufferChunkReader.cpp', 3674 3674 'platform/SharedTimer.h', 3675 3675 'platform/Sound.h', -
trunk/Source/WebCore/WebCore.pro
r89253 r89321 1062 1062 platform/text/SegmentedString.cpp \ 1063 1063 platform/SharedBuffer.cpp \ 1064 platform/SharedBufferC RLFLineReader.cpp \1064 platform/SharedBufferChunkReader.cpp \ 1065 1065 platform/text/String.cpp \ 1066 1066 platform/text/TextBoundaries.cpp \ … … 2078 2078 platform/SearchPopupMenu.h \ 2079 2079 platform/SharedBuffer.h \ 2080 platform/SharedBufferC RLFLineReader.h \2080 platform/SharedBufferChunkReader.h \ 2081 2081 platform/sql/SQLiteDatabase.h \ 2082 2082 platform/sql/SQLiteFileSystem.h \ -
trunk/Source/WebCore/WebCore.vcproj/WebCore.vcproj
r89216 r89321 26667 26667 </File> 26668 26668 <File 26669 RelativePath="..\platform\SharedBufferC RLFLineReader.cpp"26670 > 26671 </File> 26672 <File 26673 RelativePath="..\platform\SharedBufferC RLFLineReader.h"26669 RelativePath="..\platform\SharedBufferChunkReader.cpp" 26670 > 26671 </File> 26672 <File 26673 RelativePath="..\platform\SharedBufferChunkReader.h" 26674 26674 > 26675 26675 </File> -
trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj
r89292 r89321 805 805 372C00D9129619F8005C9575 /* FindOptions.h in Headers */ = {isa = PBXBuildFile; fileRef = 372C00D8129619F8005C9575 /* FindOptions.h */; settings = {ATTRIBUTES = (Private, ); }; }; 806 806 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 */; }; 807 809 375CD232119D43C800A2A859 /* Hyphenation.h in Headers */ = {isa = PBXBuildFile; fileRef = 375CD231119D43C800A2A859 /* Hyphenation.h */; }; 808 810 375CD23B119D44EA00A2A859 /* HyphenationMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = 375CD239119D44EA00A2A859 /* HyphenationMac.mm */; }; … … 824 826 37ACCE420DA2980F0089E602 /* FontRenderingMode.h in Headers */ = {isa = PBXBuildFile; fileRef = 37ACCE410DA2980F0089E602 /* FontRenderingMode.h */; settings = {ATTRIBUTES = (Private, ); }; }; 825 827 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 */; };828 828 37C2360B1097EDED00EF9F72 /* FontComplexTextMac.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 37C2360A1097EDED00EF9F72 /* FontComplexTextMac.cpp */; }; 829 829 37C236101097EE7700EF9F72 /* ComplexTextController.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 37C2360E1097EE7700EF9F72 /* ComplexTextController.cpp */; }; … … 7243 7243 372C00D8129619F8005C9575 /* FindOptions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FindOptions.h; sourceTree = "<group>"; }; 7244 7244 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>"; }; 7245 7247 375CD231119D43C800A2A859 /* Hyphenation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Hyphenation.h; sourceTree = "<group>"; }; 7246 7248 375CD239119D44EA00A2A859 /* HyphenationMac.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = HyphenationMac.mm; sourceTree = "<group>"; }; … … 7262 7264 37ACCE410DA2980F0089E602 /* FontRenderingMode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FontRenderingMode.h; sourceTree = "<group>"; }; 7263 7265 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>"; };7266 7266 37C2360A1097EDED00EF9F72 /* FontComplexTextMac.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FontComplexTextMac.cpp; sourceTree = "<group>"; }; 7267 7267 37C2360E1097EE7700EF9F72 /* ComplexTextController.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ComplexTextController.cpp; sourceTree = "<group>"; }; … … 18858 18858 1A4A954B0B4EDCCB002D8C3C /* SharedBuffer.cpp */, 18859 18859 1A4A954C0B4EDCCB002D8C3C /* SharedBuffer.h */, 18860 37 AFFDF41370A0B800E895C0 /* SharedBufferCRLFLineReader.cpp */,18861 37 AFFDF51370A0B800E895C0 /* SharedBufferCRLFLineReader.h */,18860 37569E0013AF172C00CDBA8E /* SharedBufferChunkReader.cpp */, 18861 37569E0213AF172C00CDBA8E /* SharedBufferChunkReader.h */, 18862 18862 93309EA0099EB78C0056E581 /* SharedTimer.h */, 18863 18863 4B3043C60AE0370300A82647 /* Sound.h */, … … 22442 22442 B2AFFC940D00A5DF0030074D /* ShapeArabic.h in Headers */, 22443 22443 1A4A954E0B4EDCCB002D8C3C /* SharedBuffer.h in Headers */, 22444 37AFFDF71370A0B800E895C0 /* SharedBufferCRLFLineReader.h in Headers */,22445 22444 498770EB1242C535002226BA /* SharedGraphicsContext3D.h in Headers */, 22446 22445 93309EA3099EB78C0056E581 /* SharedTimer.h in Headers */, … … 25331 25330 1A4A954D0B4EDCCB002D8C3C /* SharedBuffer.cpp in Sources */, 25332 25331 512DD8E30D91E2B4000F89EE /* SharedBufferCF.cpp in Sources */, 25333 37AFFDF61370A0B800E895C0 /* SharedBufferCRLFLineReader.cpp in Sources */,25334 25332 1A4A95520B4EDCFF002D8C3C /* SharedBufferMac.mm in Sources */, 25335 25333 498770EA1242C535002226BA /* SharedGraphicsContext3D.cpp in Sources */, -
trunk/Source/WebCore/loader/archive/mhtml/MHTMLParser.cpp
r87189 r89321 44 44 namespace WebCore { 45 45 46 static bool skipLinesUntilBoundaryFound(SharedBufferC RLFLineReader& lineReader, const String& boundary)46 static bool skipLinesUntilBoundaryFound(SharedBufferChunkReader& lineReader, const String& boundary) 47 47 { 48 48 String line; 49 while (!(line = lineReader.next Line()).isNull()) {49 while (!(line = lineReader.nextChunk()).isNull()) { 50 50 if (line == boundary) 51 51 return true; … … 55 55 56 56 MHTMLParser::MHTMLParser(SharedBuffer* data) 57 : m_lineReader(data )57 : m_lineReader(data, "\r\n") 58 58 { 59 59 } … … 148 148 bool endOfPartReached = false; 149 149 String line; 150 while (!(line = m_lineReader.next Line()).isNull()) {150 while (!(line = m_lineReader.nextChunk()).isNull()) { 151 151 if (checkBoundary && (line == endOfPartBoundary || line == endOfDocumentBoundary)) { 152 152 endOfArchiveReached = (line == endOfDocumentBoundary); -
trunk/Source/WebCore/loader/archive/mhtml/MHTMLParser.h
r87189 r89321 33 33 34 34 #if ENABLE(MHTML) 35 #include "SharedBufferC RLFLineReader.h"35 #include "SharedBufferChunkReader.h" 36 36 #include <wtf/RefPtr.h> 37 37 #include <wtf/Vector.h> … … 62 62 void addResourceToArchive(ArchiveResource*, MHTMLArchive*); 63 63 64 SharedBufferC RLFLineReader m_lineReader;64 SharedBufferChunkReader m_lineReader; 65 65 Vector<RefPtr<ArchiveResource> > m_resources; 66 66 Vector<RefPtr<MHTMLArchive> > m_frames; -
trunk/Source/WebCore/platform/SharedBufferChunkReader.cpp
r89319 r89321 30 30 31 31 #include "config.h" 32 #include "SharedBufferC RLFLineReader.h"32 #include "SharedBufferChunkReader.h" 33 33 34 34 #include "SharedBuffer.h" … … 37 37 namespace WebCore { 38 38 39 SharedBufferC RLFLineReader::SharedBufferCRLFLineReader(SharedBuffer* buffer)39 SharedBufferChunkReader::SharedBufferChunkReader(SharedBuffer* buffer, const String& separator) 40 40 : m_buffer(buffer) 41 41 , m_bufferPosition(0) … … 44 44 , m_segmentIndex(0) 45 45 , m_reachedEndOfFile(false) 46 , m_separator(separator) 47 , m_separatorIndex(0) 46 48 { 47 49 } 48 50 49 String SharedBufferCRLFLineReader::nextLine() 51 void SharedBufferChunkReader::setSeparator(const String& separator) 52 { 53 m_separator = separator; 54 } 55 56 String SharedBufferChunkReader::nextChunk(bool includeSeparator) 50 57 { 51 58 if (m_reachedEndOfFile) 52 59 return String(); 53 60 54 bool previousCharacterWasCR = false;55 61 StringBuilder stringBuilder; 56 62 while (true) { 57 bool reachedEndOfLine = false;58 63 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 } 73 80 } 74 81 … … 79 86 if (!m_segmentLength) { 80 87 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(); 85 91 } 86 92 } 87 return String(); 93 return String(); // Compiler is unhappy without this. 88 94 } 89 95 -
trunk/Source/WebCore/platform/SharedBufferChunkReader.h
r89319 r89321 29 29 */ 30 30 31 #ifndef SharedBufferC RLFLineReader_h32 #define SharedBufferC RLFLineReader_h31 #ifndef SharedBufferChunkReader_h 32 #define SharedBufferChunkReader_h 33 33 34 34 #include <wtf/text/WTFString.h> … … 42 42 class SharedBuffer; 43 43 44 class SharedBufferC RLFLineReader {44 class SharedBufferChunkReader { 45 45 public: 46 explicit SharedBufferCRLFLineReader(SharedBuffer*);46 SharedBufferChunkReader(SharedBuffer*, const String& separator); 47 47 48 // Returns the next line read from the buffer. 48 void setSeparator(const String&); 49 49 50 // Returns a null string when the end of the buffer has been reached. 50 String next Line();51 String nextChunk(bool includeSeparator = false); 51 52 52 53 private: … … 57 58 size_t m_segmentIndex; 58 59 bool m_reachedEndOfFile; 60 String m_separator; 61 size_t m_separatorIndex; 59 62 }; 60 63 -
trunk/Source/WebCore/platform/network/MIMEHeader.cpp
r87189 r89321 33 33 34 34 #include "ContentTypeParser.h" 35 #include "SharedBufferC RLFLineReader.h"35 #include "SharedBufferChunkReader.h" 36 36 #include <wtf/HashMap.h> 37 37 #include <wtf/text/CString.h> … … 44 44 typedef HashMap<String, String> KeyValueMap; 45 45 46 static KeyValueMap retrieveKeyValuePairs(WebCore::SharedBufferC RLFLineReader* buffer)46 static KeyValueMap retrieveKeyValuePairs(WebCore::SharedBufferChunkReader* buffer) 47 47 { 48 48 KeyValueMap keyValuePairs; … … 50 50 String key; 51 51 StringBuilder value; 52 while (!(line = buffer->next Line()).isNull()) {52 while (!(line = buffer->nextChunk()).isNull()) { 53 53 if (line.isEmpty()) 54 54 break; // Empty line means end of key/value section. … … 80 80 } 81 81 82 PassRefPtr<MIMEHeader> MIMEHeader::parseHeader(SharedBufferC RLFLineReader* buffer)82 PassRefPtr<MIMEHeader> MIMEHeader::parseHeader(SharedBufferChunkReader* buffer) 83 83 { 84 84 RefPtr<MIMEHeader> mimeHeader = adoptRef(new MIMEHeader); -
trunk/Source/WebCore/platform/network/MIMEHeader.h
r87189 r89321 38 38 namespace WebCore { 39 39 40 class SharedBufferC RLFLineReader;40 class SharedBufferChunkReader; 41 41 42 42 // FIXME: This class is a limited MIME parser used to parse the MIME headers of MHTML files. … … 50 50 }; 51 51 52 static PassRefPtr<MIMEHeader> parseHeader(SharedBufferC RLFLineReader*);52 static PassRefPtr<MIMEHeader> parseHeader(SharedBufferChunkReader* crLFLineReader); 53 53 54 54 bool isMultipart() const { return m_contentType.startsWith("multipart/"); }
Note: See TracChangeset
for help on using the changeset viewer.