Chromium Code Reviews| Index: third_party/WebKit/Source/web/WebPageSerializer.cpp |
| diff --git a/third_party/WebKit/Source/web/WebPageSerializer.cpp b/third_party/WebKit/Source/web/WebPageSerializer.cpp |
| index 48441a08048fc1b8d2bdb290acef211b75a00590..e7accb0a4097120297b886122be577436d3a8df5 100644 |
| --- a/third_party/WebKit/Source/web/WebPageSerializer.cpp |
| +++ b/third_party/WebKit/Source/web/WebPageSerializer.cpp |
| @@ -70,28 +70,21 @@ namespace blink { |
| namespace { |
| -using ContentIDMap = WillBeHeapHashMap<RawPtrWillBeMember<Frame>, String>; |
| - |
| -class MHTMLPageSerializerDelegate final : |
| - public NoBaseWillBeGarbageCollected<MHTMLPageSerializerDelegate>, |
| - public PageSerializer::Delegate { |
| +class MHTMLPageSerializerDelegate final : public PageSerializer::Delegate { |
| WTF_MAKE_NONCOPYABLE(MHTMLPageSerializerDelegate); |
| public: |
| - MHTMLPageSerializerDelegate(const ContentIDMap& frameToContentID); |
| + MHTMLPageSerializerDelegate(WebPageSerializer::MHTMLPartsGenerationDelegate&); |
|
dcheng
2015/12/22 01:01:45
explicit
Łukasz Anforowicz
2015/12/22 21:06:46
Oops. Done.
|
| bool shouldIgnoreAttribute(const Attribute&) override; |
| bool rewriteLink(const Element&, String& rewrittenLink) override; |
| - |
| -#if ENABLE(OILPAN) |
| - void trace(Visitor* visitor) { visitor->trace(m_frameToContentID); } |
| -#endif |
| + bool shouldSkipResource(const KURL&) override; |
| private: |
| - const ContentIDMap& m_frameToContentID; |
| + WebPageSerializer::MHTMLPartsGenerationDelegate& m_webDelegate; |
| }; |
| MHTMLPageSerializerDelegate::MHTMLPageSerializerDelegate( |
| - const ContentIDMap& frameToContentID) |
| - : m_frameToContentID(frameToContentID) |
| + WebPageSerializer::MHTMLPartsGenerationDelegate& webDelegate) |
| + : m_webDelegate(webDelegate) |
| { |
| } |
| @@ -115,7 +108,8 @@ bool MHTMLPageSerializerDelegate::rewriteLink( |
| if (!frame) |
| return false; |
| - KURL cidURI = MHTMLParser::convertContentIDToURI(m_frameToContentID.get(frame)); |
| + WebString contentID = m_webDelegate.getContentID(*WebFrame::fromFrame(frame)); |
| + KURL cidURI = MHTMLParser::convertContentIDToURI(contentID); |
| ASSERT(cidURI.isValid()); |
| if (isHTMLFrameElementBase(&element)) { |
| @@ -136,20 +130,9 @@ bool MHTMLPageSerializerDelegate::rewriteLink( |
| return false; |
| } |
| -ContentIDMap createFrameToContentIDMap( |
| - const WebVector<std::pair<WebFrame*, WebString>>& webFrameToContentID) |
| +bool MHTMLPageSerializerDelegate::shouldSkipResource(const KURL& url) |
| { |
| - ContentIDMap result; |
| - for (const auto& it : webFrameToContentID) { |
| - WebFrame* webFrame = it.first; |
| - const WebString& webContentID = it.second; |
| - |
| - Frame* frame = webFrame->toImplBase()->frame(); |
| - String contentID(webContentID); |
| - |
| - result.add(frame, contentID); |
| - } |
| - return result; |
| + return m_webDelegate.shouldSkipResource(url); |
| } |
| } // namespace |
| @@ -168,28 +151,31 @@ WebData WebPageSerializer::generateMHTMLHeader( |
| WebData WebPageSerializer::generateMHTMLParts( |
| const WebString& boundary, WebLocalFrame* webFrame, bool useBinaryEncoding, |
| - const WebVector<std::pair<WebFrame*, WebString>>& webFrameToContentID) |
| + MHTMLPartsGenerationDelegate& webDelegate) |
| { |
| // Translate arguments from public to internal blink APIs. |
| LocalFrame* frame = toWebLocalFrameImpl(webFrame)->frame(); |
| MHTMLArchive::EncodingPolicy encodingPolicy = useBinaryEncoding |
| ? MHTMLArchive::EncodingPolicy::UseBinaryEncoding |
| : MHTMLArchive::EncodingPolicy::UseDefaultEncoding; |
| - ContentIDMap frameToContentID = createFrameToContentIDMap(webFrameToContentID); |
| // Serialize. |
| Vector<SerializedResource> resources; |
| - MHTMLPageSerializerDelegate delegate(frameToContentID); |
| - PageSerializer serializer(resources, &delegate); |
| + MHTMLPageSerializerDelegate coreDelegate(webDelegate); |
| + PageSerializer serializer(resources, &coreDelegate); |
| serializer.serializeFrame(*frame); |
| + // Get Content-ID for the frame being serialized. |
| + String frameContentID = webDelegate.getContentID(*webFrame); |
| + ASSERT(!frameContentID.isEmpty()); |
| + |
| // Encode serializer's output as MHTML. |
| RefPtr<SharedBuffer> output = SharedBuffer::create(); |
| bool isFirstResource = true; |
| for (const SerializedResource& resource : resources) { |
| // Frame is the 1st resource (see PageSerializer::serializeFrame doc |
| - // comment). Frames need a Content-ID header. |
| - String contentID = isFirstResource ? frameToContentID.get(frame) : String(); |
| + // comment). Frames get a Content-ID header. |
| + String contentID = isFirstResource ? frameContentID : String(); |
| MHTMLArchive::generateMHTMLPart( |
| boundary, contentID, encodingPolicy, resource, *output); |