| Index: Source/platform/mhtml/MHTMLParser.cpp
|
| diff --git a/Source/platform/mhtml/MHTMLParser.cpp b/Source/platform/mhtml/MHTMLParser.cpp
|
| index d3158f4ea53e93f8ac1ee9fff300ef1a36696d7e..e728d6c96bcd6cbfcd3e2a09fe43b1ab445885fc 100644
|
| --- a/Source/platform/mhtml/MHTMLParser.cpp
|
| +++ b/Source/platform/mhtml/MHTMLParser.cpp
|
| @@ -32,6 +32,7 @@
|
| #include "platform/mhtml/MHTMLParser.h"
|
|
|
| #include "platform/MIMETypeRegistry.h"
|
| +#include "platform/mhtml/ArchiveResource.h"
|
| #include "platform/mhtml/MHTMLArchive.h"
|
| #include "platform/network/ParsedContentType.h"
|
| #include "platform/text/QuotedPrintable.h"
|
| @@ -46,8 +47,13 @@
|
| namespace WebCore {
|
|
|
| // This class is a limited MIME parser used to parse the MIME headers of MHTML files.
|
| -class MIMEHeader : public RefCounted<MIMEHeader> {
|
| +class MIMEHeader : public RefCountedWillBeGarbageCollectedFinalized<MIMEHeader> {
|
| public:
|
| + static PassRefPtrWillBeRawPtr<MIMEHeader> create()
|
| + {
|
| + return adoptRefWillBeNoop(new MIMEHeader());
|
| + }
|
| +
|
| enum Encoding {
|
| QuotedPrintable,
|
| Base64,
|
| @@ -57,7 +63,7 @@ public:
|
| Unknown
|
| };
|
|
|
| - static PassRefPtr<MIMEHeader> parseHeader(SharedBufferChunkReader* crLFLineReader);
|
| + static PassRefPtrWillBeRawPtr<MIMEHeader> parseHeader(SharedBufferChunkReader* crLFLineReader);
|
|
|
| bool isMultipart() const { return m_contentType.startsWith("multipart/"); }
|
|
|
| @@ -71,6 +77,8 @@ public:
|
| String endOfPartBoundary() const { return m_endOfPartBoundary; }
|
| String endOfDocumentBoundary() const { return m_endOfDocumentBoundary; }
|
|
|
| + void trace(Visitor*) { }
|
| +
|
| private:
|
| MIMEHeader();
|
|
|
| @@ -123,9 +131,9 @@ static KeyValueMap retrieveKeyValuePairs(WebCore::SharedBufferChunkReader* buffe
|
| return keyValuePairs;
|
| }
|
|
|
| -PassRefPtr<MIMEHeader> MIMEHeader::parseHeader(SharedBufferChunkReader* buffer)
|
| +PassRefPtrWillBeRawPtr<MIMEHeader> MIMEHeader::parseHeader(SharedBufferChunkReader* buffer)
|
| {
|
| - RefPtr<MIMEHeader> mimeHeader = adoptRef(new MIMEHeader);
|
| + RefPtrWillBeRawPtr<MIMEHeader> mimeHeader = MIMEHeader::create();
|
| KeyValueMap keyValuePairs = retrieveKeyValuePairs(buffer);
|
| KeyValueMap::iterator mimeParametersIterator = keyValuePairs.find("content-type");
|
| if (mimeParametersIterator != keyValuePairs.end()) {
|
| @@ -194,24 +202,24 @@ MHTMLParser::MHTMLParser(SharedBuffer* data)
|
| {
|
| }
|
|
|
| -PassRefPtr<MHTMLArchive> MHTMLParser::parseArchive()
|
| +PassRefPtrWillBeRawPtr<MHTMLArchive> MHTMLParser::parseArchive()
|
| {
|
| - RefPtr<MIMEHeader> header = MIMEHeader::parseHeader(&m_lineReader);
|
| + RefPtrWillBeRawPtr<MIMEHeader> header = MIMEHeader::parseHeader(&m_lineReader);
|
| return parseArchiveWithHeader(header.get());
|
| }
|
|
|
| -PassRefPtr<MHTMLArchive> MHTMLParser::parseArchiveWithHeader(MIMEHeader* header)
|
| +PassRefPtrWillBeRawPtr<MHTMLArchive> MHTMLParser::parseArchiveWithHeader(MIMEHeader* header)
|
| {
|
| if (!header) {
|
| WTF_LOG_ERROR("Failed to parse MHTML part: no header.");
|
| return nullptr;
|
| }
|
|
|
| - RefPtr<MHTMLArchive> archive = MHTMLArchive::create();
|
| + RefPtrWillBeRawPtr<MHTMLArchive> archive = MHTMLArchive::create();
|
| if (!header->isMultipart()) {
|
| // With IE a page with no resource is not multi-part.
|
| bool endOfArchiveReached = false;
|
| - RefPtr<ArchiveResource> resource = parseNextPart(*header, String(), String(), endOfArchiveReached);
|
| + RefPtrWillBeRawPtr<ArchiveResource> resource = parseNextPart(*header, String(), String(), endOfArchiveReached);
|
| if (!resource)
|
| return nullptr;
|
| archive->setMainResource(resource);
|
| @@ -223,14 +231,14 @@ PassRefPtr<MHTMLArchive> MHTMLParser::parseArchiveWithHeader(MIMEHeader* header)
|
|
|
| bool endOfArchive = false;
|
| while (!endOfArchive) {
|
| - RefPtr<MIMEHeader> resourceHeader = MIMEHeader::parseHeader(&m_lineReader);
|
| + RefPtrWillBeRawPtr<MIMEHeader> resourceHeader = MIMEHeader::parseHeader(&m_lineReader);
|
| if (!resourceHeader) {
|
| WTF_LOG_ERROR("Failed to parse MHTML, invalid MIME header.");
|
| return nullptr;
|
| }
|
| if (resourceHeader->contentType() == "multipart/alternative") {
|
| // Ignore IE nesting which makes little sense (IE seems to nest only some of the frames).
|
| - RefPtr<MHTMLArchive> subframeArchive = parseArchiveWithHeader(resourceHeader.get());
|
| + RefPtrWillBeRawPtr<MHTMLArchive> subframeArchive = parseArchiveWithHeader(resourceHeader.get());
|
| if (!subframeArchive) {
|
| WTF_LOG_ERROR("Failed to parse MHTML subframe.");
|
| return nullptr;
|
| @@ -244,7 +252,7 @@ PassRefPtr<MHTMLArchive> MHTMLParser::parseArchiveWithHeader(MIMEHeader* header)
|
| continue;
|
| }
|
|
|
| - RefPtr<ArchiveResource> resource = parseNextPart(*resourceHeader, header->endOfPartBoundary(), header->endOfDocumentBoundary(), endOfArchive);
|
| + RefPtrWillBeRawPtr<ArchiveResource> resource = parseNextPart(*resourceHeader, header->endOfPartBoundary(), header->endOfDocumentBoundary(), endOfArchive);
|
| if (!resource) {
|
| WTF_LOG_ERROR("Failed to parse MHTML part.");
|
| return nullptr;
|
| @@ -270,12 +278,12 @@ void MHTMLParser::addResourceToArchive(ArchiveResource* resource, MHTMLArchive*
|
| return;
|
| }
|
|
|
| - RefPtr<MHTMLArchive> subframe = MHTMLArchive::create();
|
| + RefPtrWillBeRawPtr<MHTMLArchive> subframe = MHTMLArchive::create();
|
| subframe->setMainResource(resource);
|
| m_frames.append(subframe);
|
| }
|
|
|
| -PassRefPtr<ArchiveResource> MHTMLParser::parseNextPart(const MIMEHeader& mimeHeader, const String& endOfPartBoundary, const String& endOfDocumentBoundary, bool& endOfArchiveReached)
|
| +PassRefPtrWillBeRawPtr<ArchiveResource> MHTMLParser::parseNextPart(const MIMEHeader& mimeHeader, const String& endOfPartBoundary, const String& endOfDocumentBoundary, bool& endOfArchiveReached)
|
| {
|
| ASSERT(endOfPartBoundary.isEmpty() == endOfDocumentBoundary.isEmpty());
|
|
|
|
|