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

Side by Side Diff: third_party/WebKit/Source/web/WebFrameSerializer.cpp

Issue 1502563004: Save-Page-As-Complete-Html: Each frame links to a distinct local file. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@no-url-deduping-for-frame-and-adding-save-item-id
Patch Set: Addressed feedback from Randy (and apparently accidentally rebased as well...). Created 4 years, 10 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 unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2009 Google Inc. All rights reserved. 2 * Copyright (C) 2009 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
100 String& rewrittenLink) 100 String& rewrittenLink)
101 { 101 {
102 if (!element.isFrameOwnerElement()) 102 if (!element.isFrameOwnerElement())
103 return false; 103 return false;
104 104
105 auto* frameOwnerElement = toHTMLFrameOwnerElement(&element); 105 auto* frameOwnerElement = toHTMLFrameOwnerElement(&element);
106 Frame* frame = frameOwnerElement->contentFrame(); 106 Frame* frame = frameOwnerElement->contentFrame();
107 if (!frame) 107 if (!frame)
108 return false; 108 return false;
109 109
110 WebString contentID = m_webDelegate.getContentID(*WebFrame::fromFrame(frame) ); 110 WebString contentID = m_webDelegate.getContentID(WebFrame::fromFrame(frame)) ;
111 if (contentID.isNull()) 111 if (contentID.isNull())
112 return false; 112 return false;
113 113
114 KURL cidURI = MHTMLParser::convertContentIDToURI(contentID); 114 KURL cidURI = MHTMLParser::convertContentIDToURI(contentID);
115 ASSERT(cidURI.isValid()); 115 ASSERT(cidURI.isValid());
116 116
117 if (isHTMLFrameElementBase(&element)) { 117 if (isHTMLFrameElementBase(&element)) {
118 rewrittenLink = cidURI.string(); 118 rewrittenLink = cidURI.string();
119 return true; 119 return true;
120 } 120 }
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
164 ? MHTMLArchive::EncodingPolicy::UseBinaryEncoding 164 ? MHTMLArchive::EncodingPolicy::UseBinaryEncoding
165 : MHTMLArchive::EncodingPolicy::UseDefaultEncoding; 165 : MHTMLArchive::EncodingPolicy::UseDefaultEncoding;
166 166
167 // Serialize. 167 // Serialize.
168 Vector<SerializedResource> resources; 168 Vector<SerializedResource> resources;
169 MHTMLFrameSerializerDelegate coreDelegate(*webDelegate); 169 MHTMLFrameSerializerDelegate coreDelegate(*webDelegate);
170 FrameSerializer serializer(resources, coreDelegate); 170 FrameSerializer serializer(resources, coreDelegate);
171 serializer.serializeFrame(*frame); 171 serializer.serializeFrame(*frame);
172 172
173 // Get Content-ID for the frame being serialized. 173 // Get Content-ID for the frame being serialized.
174 String frameContentID = webDelegate->getContentID(*webFrame); 174 String frameContentID = webDelegate->getContentID(webFrame);
175 175
176 // Encode serializer's output as MHTML. 176 // Encode serializer's output as MHTML.
177 RefPtr<SharedBuffer> output = SharedBuffer::create(); 177 RefPtr<SharedBuffer> output = SharedBuffer::create();
178 bool isFirstResource = true; 178 bool isFirstResource = true;
179 for (const SerializedResource& resource : resources) { 179 for (const SerializedResource& resource : resources) {
180 // Frame is the 1st resource (see FrameSerializer::serializeFrame doc 180 // Frame is the 1st resource (see FrameSerializer::serializeFrame doc
181 // comment). Frames get a Content-ID header. 181 // comment). Frames get a Content-ID header.
182 String contentID = isFirstResource ? frameContentID : String(); 182 String contentID = isFirstResource ? frameContentID : String();
183 183
184 MHTMLArchive::generateMHTMLPart( 184 MHTMLArchive::generateMHTMLPart(
185 boundary, contentID, encodingPolicy, resource, *output); 185 boundary, contentID, encodingPolicy, resource, *output);
186 186
187 isFirstResource = false; 187 isFirstResource = false;
188 } 188 }
189 return output.release(); 189 return output.release();
190 } 190 }
191 191
192 WebData WebFrameSerializer::generateMHTMLFooter(const WebString& boundary) 192 WebData WebFrameSerializer::generateMHTMLFooter(const WebString& boundary)
193 { 193 {
194 RefPtr<SharedBuffer> buffer = SharedBuffer::create(); 194 RefPtr<SharedBuffer> buffer = SharedBuffer::create();
195 MHTMLArchive::generateMHTMLFooter(boundary, *buffer); 195 MHTMLArchive::generateMHTMLFooter(boundary, *buffer);
196 return buffer.release(); 196 return buffer.release();
197 } 197 }
198 198
199 bool WebFrameSerializer::serialize( 199 bool WebFrameSerializer::serialize(
200 WebLocalFrame* frame, 200 WebLocalFrame* frame,
201 WebFrameSerializerClient* client, 201 WebFrameSerializerClient* client,
202 const WebVector<std::pair<WebURL, WebString>>& urlsToLocalPaths) 202 WebFrameSerializer::LinkRewritingDelegate* delegate)
203 { 203 {
204 WebFrameSerializerImpl serializerImpl(frame, client, urlsToLocalPaths); 204 WebFrameSerializerImpl serializerImpl(frame, client, delegate);
205 return serializerImpl.serialize(); 205 return serializerImpl.serialize();
206 } 206 }
207 207
208 WebString WebFrameSerializer::generateMetaCharsetDeclaration(const WebString& ch arset) 208 WebString WebFrameSerializer::generateMetaCharsetDeclaration(const WebString& ch arset)
209 { 209 {
210 // TODO(yosin) We should call |FrameSerializer::metaCharsetDeclarationOf()|. 210 // TODO(yosin) We should call |FrameSerializer::metaCharsetDeclarationOf()|.
211 String charsetString = "<meta http-equiv=\"Content-Type\" content=\"text/htm l; charset=" + static_cast<const String&>(charset) + "\">"; 211 String charsetString = "<meta http-equiv=\"Content-Type\" content=\"text/htm l; charset=" + static_cast<const String&>(charset) + "\">";
212 return charsetString; 212 return charsetString;
213 } 213 }
214 214
215 WebString WebFrameSerializer::generateMarkOfTheWebDeclaration(const WebURL& url) 215 WebString WebFrameSerializer::generateMarkOfTheWebDeclaration(const WebURL& url)
216 { 216 {
217 StringBuilder builder; 217 StringBuilder builder;
218 builder.append("\n<!-- "); 218 builder.append("\n<!-- ");
219 builder.append(FrameSerializer::markOfTheWebDeclaration(url)); 219 builder.append(FrameSerializer::markOfTheWebDeclaration(url));
220 builder.append(" -->\n"); 220 builder.append(" -->\n");
221 return builder.toString(); 221 return builder.toString();
222 } 222 }
223 223
224 WebString WebFrameSerializer::generateBaseTagDeclaration(const WebString& baseTa rget) 224 WebString WebFrameSerializer::generateBaseTagDeclaration(const WebString& baseTa rget)
225 { 225 {
226 // TODO(yosin) We should call |FrameSerializer::baseTagDeclarationOf()|. 226 // TODO(yosin) We should call |FrameSerializer::baseTagDeclarationOf()|.
227 if (baseTarget.isEmpty()) 227 if (baseTarget.isEmpty())
228 return String("<base href=\".\">"); 228 return String("<base href=\".\">");
229 String baseString = "<base href=\".\" target=\"" + static_cast<const String& >(baseTarget) + "\">"; 229 String baseString = "<base href=\".\" target=\"" + static_cast<const String& >(baseTarget) + "\">";
230 return baseString; 230 return baseString;
231 } 231 }
232 232
233 } // namespace blink 233 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698