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

Side by Side Diff: third_party/WebKit/Source/core/frame/FrameSerializer.cpp

Issue 2469873002: [ImageResource 4] Split ImageResource into Resource and Image parts (Closed)
Patch Set: style Created 4 years 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) 2011 Google Inc. All rights reserved. 2 * Copyright (C) 2011 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 29 matching lines...) Expand all
40 #include "core/css/CSSStyleDeclaration.h" 40 #include "core/css/CSSStyleDeclaration.h"
41 #include "core/css/CSSStyleRule.h" 41 #include "core/css/CSSStyleRule.h"
42 #include "core/css/CSSValueList.h" 42 #include "core/css/CSSValueList.h"
43 #include "core/css/StylePropertySet.h" 43 #include "core/css/StylePropertySet.h"
44 #include "core/css/StyleRule.h" 44 #include "core/css/StyleRule.h"
45 #include "core/css/StyleSheetContents.h" 45 #include "core/css/StyleSheetContents.h"
46 #include "core/dom/Document.h" 46 #include "core/dom/Document.h"
47 #include "core/dom/Element.h" 47 #include "core/dom/Element.h"
48 #include "core/dom/Text.h" 48 #include "core/dom/Text.h"
49 #include "core/editing/serializers/MarkupAccumulator.h" 49 #include "core/editing/serializers/MarkupAccumulator.h"
50 #include "core/fetch/ImageResource.h" 50 #include "core/fetch/ImageResourceContent.h"
51 #include "core/frame/LocalFrame.h" 51 #include "core/frame/LocalFrame.h"
52 #include "core/html/HTMLFrameElementBase.h" 52 #include "core/html/HTMLFrameElementBase.h"
53 #include "core/html/HTMLImageElement.h" 53 #include "core/html/HTMLImageElement.h"
54 #include "core/html/HTMLInputElement.h" 54 #include "core/html/HTMLInputElement.h"
55 #include "core/html/HTMLLinkElement.h" 55 #include "core/html/HTMLLinkElement.h"
56 #include "core/html/HTMLMetaElement.h" 56 #include "core/html/HTMLMetaElement.h"
57 #include "core/html/HTMLStyleElement.h" 57 #include "core/html/HTMLStyleElement.h"
58 #include "core/html/ImageDocument.h" 58 #include "core/html/ImageDocument.h"
59 #include "core/loader/resource/FontResource.h" 59 #include "core/loader/resource/FontResource.h"
60 #include "core/style/StyleFetchedImage.h" 60 #include "core/style/StyleFetchedImage.h"
(...skipping 250 matching lines...) Expand 10 before | Expand all | Expand 10 after
311 if (element.isStyledElement()) { 311 if (element.isStyledElement()) {
312 retrieveResourcesForProperties(element.inlineStyle(), document); 312 retrieveResourcesForProperties(element.inlineStyle(), document);
313 retrieveResourcesForProperties(element.presentationAttributeStyle(), 313 retrieveResourcesForProperties(element.presentationAttributeStyle(),
314 document); 314 document);
315 } 315 }
316 316
317 if (isHTMLImageElement(element)) { 317 if (isHTMLImageElement(element)) {
318 HTMLImageElement& imageElement = toHTMLImageElement(element); 318 HTMLImageElement& imageElement = toHTMLImageElement(element);
319 KURL url = 319 KURL url =
320 document.completeURL(imageElement.getAttribute(HTMLNames::srcAttr)); 320 document.completeURL(imageElement.getAttribute(HTMLNames::srcAttr));
321 ImageResource* cachedImage = imageElement.cachedImage(); 321 ImageResourceContent* cachedImage = imageElement.cachedImage();
322 addImageToResources(cachedImage, url); 322 addImageToResources(cachedImage, url);
323 } else if (isHTMLInputElement(element)) { 323 } else if (isHTMLInputElement(element)) {
324 HTMLInputElement& inputElement = toHTMLInputElement(element); 324 HTMLInputElement& inputElement = toHTMLInputElement(element);
325 if (inputElement.type() == InputTypeNames::image && 325 if (inputElement.type() == InputTypeNames::image &&
326 inputElement.imageLoader()) { 326 inputElement.imageLoader()) {
327 KURL url = inputElement.src(); 327 KURL url = inputElement.src();
328 ImageResource* cachedImage = inputElement.imageLoader()->image(); 328 ImageResourceContent* cachedImage = inputElement.imageLoader()->image();
329 addImageToResources(cachedImage, url); 329 addImageToResources(cachedImage, url);
330 } 330 }
331 } else if (isHTMLLinkElement(element)) { 331 } else if (isHTMLLinkElement(element)) {
332 HTMLLinkElement& linkElement = toHTMLLinkElement(element); 332 HTMLLinkElement& linkElement = toHTMLLinkElement(element);
333 if (CSSStyleSheet* sheet = linkElement.sheet()) { 333 if (CSSStyleSheet* sheet = linkElement.sheet()) {
334 KURL url = 334 KURL url =
335 document.completeURL(linkElement.getAttribute(HTMLNames::hrefAttr)); 335 document.completeURL(linkElement.getAttribute(HTMLNames::hrefAttr));
336 serializeCSSStyleSheet(*sheet, url); 336 serializeCSSStyleSheet(*sheet, url);
337 } 337 }
338 } else if (isHTMLStyleElement(element)) { 338 } else if (isHTMLStyleElement(element)) {
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
452 case CSSRule::kViewportRule: 452 case CSSRule::kViewportRule:
453 break; 453 break;
454 } 454 }
455 } 455 }
456 456
457 bool FrameSerializer::shouldAddURL(const KURL& url) { 457 bool FrameSerializer::shouldAddURL(const KURL& url) {
458 return url.isValid() && !m_resourceURLs.contains(url) && 458 return url.isValid() && !m_resourceURLs.contains(url) &&
459 !url.protocolIsData() && !m_delegate.shouldSkipResourceWithURL(url); 459 !url.protocolIsData() && !m_delegate.shouldSkipResourceWithURL(url);
460 } 460 }
461 461
462 void FrameSerializer::addToResources(const Resource& resource, 462 void FrameSerializer::addToResources(
463 PassRefPtr<const SharedBuffer> data, 463 const String& mimeType,
464 const KURL& url) { 464 ResourceHasCacheControlNoStoreHeader hasCacheControlNoStoreHeader,
465 if (m_delegate.shouldSkipResource(resource)) 465 PassRefPtr<const SharedBuffer> data,
466 const KURL& url) {
467 if (m_delegate.shouldSkipResource(hasCacheControlNoStoreHeader))
466 return; 468 return;
467 469
468 if (!data) { 470 if (!data) {
469 DLOG(ERROR) << "No data for resource " << url.getString(); 471 DLOG(ERROR) << "No data for resource " << url.getString();
470 return; 472 return;
471 } 473 }
472 474
473 String mimeType = resource.response().mimeType();
474 m_resources->append(SerializedResource(url, mimeType, std::move(data))); 475 m_resources->append(SerializedResource(url, mimeType, std::move(data)));
475 m_resourceURLs.add(url); 476 m_resourceURLs.add(url);
476 } 477 }
477 478
478 void FrameSerializer::addImageToResources(ImageResource* image, 479 void FrameSerializer::addImageToResources(ImageResourceContent* image,
479 const KURL& url) { 480 const KURL& url) {
480 if (!image || !image->hasImage() || image->errorOccurred() || 481 if (!image || !image->hasImage() || image->errorOccurred() ||
481 !shouldAddURL(url)) 482 !shouldAddURL(url))
482 return; 483 return;
483 484
484 TRACE_EVENT2("page-serialization", "FrameSerializer::addImageToResources", 485 TRACE_EVENT2("page-serialization", "FrameSerializer::addImageToResources",
485 "type", "image", "url", url.elidedString().utf8().data()); 486 "type", "image", "url", url.elidedString().utf8().data());
486 double imageStartTime = monotonicallyIncreasingTime(); 487 double imageStartTime = monotonicallyIncreasingTime();
487 488
488 RefPtr<const SharedBuffer> data = image->getImage()->data(); 489 RefPtr<const SharedBuffer> data = image->getImage()->data();
489 addToResources(*image, data, url); 490 addToResources(image->response().mimeType(),
491 image->hasCacheControlNoStoreHeader()
492 ? HasCacheControlNoStoreHeader
493 : NoCacheControlNoStoreHeader,
494 data, url);
490 495
491 // If we're already reporting time for CSS serialization don't report it for 496 // If we're already reporting time for CSS serialization don't report it for
492 // this image to avoid reporting the same time twice. 497 // this image to avoid reporting the same time twice.
493 if (!m_isSerializingCss) { 498 if (!m_isSerializingCss) {
494 DEFINE_STATIC_LOCAL(CustomCountHistogram, imageHistogram, 499 DEFINE_STATIC_LOCAL(CustomCountHistogram, imageHistogram,
495 ("PageSerialization.SerializationTime.ImageElement", 0, 500 ("PageSerialization.SerializationTime.ImageElement", 0,
496 maxSerializationTimeUmaMicroseconds, 50)); 501 maxSerializationTimeUmaMicroseconds, 50));
497 imageHistogram.count( 502 imageHistogram.count(
498 static_cast<int64_t>((monotonicallyIncreasingTime() - imageStartTime) * 503 static_cast<int64_t>((monotonicallyIncreasingTime() - imageStartTime) *
499 secondsToMicroseconds)); 504 secondsToMicroseconds));
500 } 505 }
501 } 506 }
502 507
503 void FrameSerializer::addFontToResources(FontResource* font) { 508 void FrameSerializer::addFontToResources(FontResource* font) {
504 if (!font || !font->isLoaded() || !font->resourceBuffer() || 509 if (!font || !font->isLoaded() || !font->resourceBuffer() ||
505 !shouldAddURL(font->url())) 510 !shouldAddURL(font->url()))
506 return; 511 return;
507 512
508 RefPtr<const SharedBuffer> data(font->resourceBuffer()); 513 RefPtr<const SharedBuffer> data(font->resourceBuffer());
509 514
510 addToResources(*font, data, font->url()); 515 addToResources(font->response().mimeType(),
516 font->hasCacheControlNoStoreHeader()
517 ? HasCacheControlNoStoreHeader
518 : NoCacheControlNoStoreHeader,
519 data, font->url());
511 } 520 }
512 521
513 void FrameSerializer::retrieveResourcesForProperties( 522 void FrameSerializer::retrieveResourcesForProperties(
514 const StylePropertySet* styleDeclaration, 523 const StylePropertySet* styleDeclaration,
515 Document& document) { 524 Document& document) {
516 if (!styleDeclaration) 525 if (!styleDeclaration)
517 return; 526 return;
518 527
519 // The background-image and list-style-image (for ul or ol) are the CSS 528 // The background-image and list-style-image (for ul or ol) are the CSS
520 // properties that make use of images. We iterate to make sure we include any 529 // properties that make use of images. We iterate to make sure we include any
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
570 emitsMinus = ch == '-'; 579 emitsMinus = ch == '-';
571 builder.append(ch); 580 builder.append(ch);
572 } 581 }
573 CString escapedUrl = builder.toString().ascii(); 582 CString escapedUrl = builder.toString().ascii();
574 return String::format("saved from url=(%04d)%s", 583 return String::format("saved from url=(%04d)%s",
575 static_cast<int>(escapedUrl.length()), 584 static_cast<int>(escapedUrl.length()),
576 escapedUrl.data()); 585 escapedUrl.data());
577 } 586 }
578 587
579 } // namespace blink 588 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/frame/FrameSerializer.h ('k') | third_party/WebKit/Source/core/frame/ImageBitmapTest.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698