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

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

Issue 2613253002: MHTML generation: safely serialize image documents (Closed)
Patch Set: Add regression unit test Created 3 years, 11 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
« no previous file with comments | « no previous file | third_party/WebKit/Source/web/tests/WebFrameSerializerTest.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 276 matching lines...) Expand 10 before | Expand all | Expand 10 after
287 TRACE_EVENT_BEGIN0("page-serialization", 287 TRACE_EVENT_BEGIN0("page-serialization",
288 "WebFrameSerializer::generateMHTMLParts serializing"); 288 "WebFrameSerializer::generateMHTMLParts serializing");
289 Deque<SerializedResource> resources; 289 Deque<SerializedResource> resources;
290 { 290 {
291 SCOPED_BLINK_UMA_HISTOGRAM_TIMER( 291 SCOPED_BLINK_UMA_HISTOGRAM_TIMER(
292 "PageSerialization.MhtmlGeneration.SerializationTime.SingleFrame"); 292 "PageSerialization.MhtmlGeneration.SerializationTime.SingleFrame");
293 MHTMLFrameSerializerDelegate coreDelegate(*webDelegate); 293 MHTMLFrameSerializerDelegate coreDelegate(*webDelegate);
294 FrameSerializer serializer(resources, coreDelegate); 294 FrameSerializer serializer(resources, coreDelegate);
295 serializer.serializeFrame(*frame); 295 serializer.serializeFrame(*frame);
296 } 296 }
297
298 // There was an error serializing the frame (e.g. of an image resource).
299 if (resources.isEmpty())
300 return WebThreadSafeData();
carlosk 2017/01/06 23:26:36 To keep tracing logic consistent this should be mo
Charlie Harrison 2017/01/07 02:31:25 Good catch, will fix this in a follow up.
301
297 TRACE_EVENT_END1("page-serialization", 302 TRACE_EVENT_END1("page-serialization",
298 "WebFrameSerializer::generateMHTMLParts serializing", 303 "WebFrameSerializer::generateMHTMLParts serializing",
299 "resource count", 304 "resource count",
300 static_cast<unsigned long long>(resources.size())); 305 static_cast<unsigned long long>(resources.size()));
301 306
302 // Encode serialized resources as MHTML. 307 // Encode serialized resources as MHTML.
303 RefPtr<RawData> output = RawData::create(); 308 RefPtr<RawData> output = RawData::create();
304 { 309 {
305 DCHECK(!resources.isEmpty());
306 SCOPED_BLINK_UMA_HISTOGRAM_TIMER( 310 SCOPED_BLINK_UMA_HISTOGRAM_TIMER(
307 "PageSerialization.MhtmlGeneration.EncodingTime.SingleFrame"); 311 "PageSerialization.MhtmlGeneration.EncodingTime.SingleFrame");
308 // Frame is the 1st resource (see FrameSerializer::serializeFrame doc 312 // Frame is the 1st resource (see FrameSerializer::serializeFrame doc
309 // comment). Frames get a Content-ID header. 313 // comment). Frames get a Content-ID header.
310 MHTMLArchive::generateMHTMLPart( 314 MHTMLArchive::generateMHTMLPart(
311 boundary, webDelegate->getContentID(webFrame), encodingPolicy, 315 boundary, webDelegate->getContentID(webFrame), encodingPolicy,
312 resources.takeFirst(), *output->mutableData()); 316 resources.takeFirst(), *output->mutableData());
313 while (!resources.isEmpty()) { 317 while (!resources.isEmpty()) {
314 TRACE_EVENT0("page-serialization", 318 TRACE_EVENT0("page-serialization",
315 "WebFrameSerializer::generateMHTMLParts encoding"); 319 "WebFrameSerializer::generateMHTMLParts encoding");
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
359 const WebString& baseTarget) { 363 const WebString& baseTarget) {
360 // TODO(yosin) We should call |FrameSerializer::baseTagDeclarationOf()|. 364 // TODO(yosin) We should call |FrameSerializer::baseTagDeclarationOf()|.
361 if (baseTarget.isEmpty()) 365 if (baseTarget.isEmpty())
362 return String("<base href=\".\">"); 366 return String("<base href=\".\">");
363 String baseString = "<base href=\".\" target=\"" + 367 String baseString = "<base href=\".\" target=\"" +
364 static_cast<const String&>(baseTarget) + "\">"; 368 static_cast<const String&>(baseTarget) + "\">";
365 return baseString; 369 return baseString;
366 } 370 }
367 371
368 } // namespace blink 372 } // namespace blink
OLDNEW
« no previous file with comments | « no previous file | third_party/WebKit/Source/web/tests/WebFrameSerializerTest.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698