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

Unified Diff: Source/core/css/resolver/StyleResourceLoader.cpp

Issue 1308953009: Move Image ownership out of CSSValue (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 5 years, 3 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « Source/core/css/resolver/StyleResourceLoader.h ('k') | Source/core/dom/Element.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/css/resolver/StyleResourceLoader.cpp
diff --git a/Source/core/css/resolver/StyleResourceLoader.cpp b/Source/core/css/resolver/StyleResourceLoader.cpp
index 7c780c44c896744730f382e59debb7f7d84c223f..792cb0d8854618bfa3e3c4b64121f1ad8daddfa3 100644
--- a/Source/core/css/resolver/StyleResourceLoader.cpp
+++ b/Source/core/css/resolver/StyleResourceLoader.cpp
@@ -77,20 +77,20 @@ void StyleResourceLoader::loadPendingSVGDocuments(ComputedStyle* computedStyle,
elementStyleResources.clearPendingSVGDocuments();
}
-static PassRefPtrWillBeRawPtr<StyleImage> doLoadPendingImage(Document* document, StylePendingImage* pendingImage, float deviceScaleFactor, const ResourceLoaderOptions& options)
+static PassRefPtrWillBeRawPtr<StyleImage> doLoadPendingImage(Document* document, CSSStyleImageMap& imageMap, StylePendingImage* pendingImage, float deviceScaleFactor, const ResourceLoaderOptions& options)
{
if (CSSImageValue* imageValue = pendingImage->cssImageValue())
- return imageValue->cachedImage(document, options);
+ return imageValue->cachedImage(document, options, imageMap);
if (CSSImageGeneratorValue* imageGeneratorValue
= pendingImage->cssImageGeneratorValue()) {
- imageGeneratorValue->loadSubimages(document);
+ imageGeneratorValue->loadSubimages(document, imageMap);
return StyleGeneratedImage::create(imageGeneratorValue);
}
if (CSSCursorImageValue* cursorImageValue
= pendingImage->cssCursorImageValue())
- return cursorImageValue->cachedImage(document, deviceScaleFactor);
+ return cursorImageValue->cachedImage(document, imageMap, deviceScaleFactor);
if (CSSImageSetValue* imageSetValue = pendingImage->cssImageSetValue())
return imageSetValue->cachedImageSet(document, deviceScaleFactor, options);
@@ -98,12 +98,12 @@ static PassRefPtrWillBeRawPtr<StyleImage> doLoadPendingImage(Document* document,
return nullptr;
}
-PassRefPtrWillBeRawPtr<StyleImage> StyleResourceLoader::loadPendingImage(StylePendingImage* pendingImage, float deviceScaleFactor)
+PassRefPtrWillBeRawPtr<StyleImage> StyleResourceLoader::loadPendingImage(CSSStyleImageMap& imageMap, StylePendingImage* pendingImage, float deviceScaleFactor)
{
- return doLoadPendingImage(m_document, pendingImage, deviceScaleFactor, ResourceFetcher::defaultResourceOptions());
+ return doLoadPendingImage(m_document, imageMap, pendingImage, deviceScaleFactor, ResourceFetcher::defaultResourceOptions());
}
-void StyleResourceLoader::loadPendingShapeImage(ComputedStyle* computedStyle, ShapeValue* shapeValue, float deviceScaleFactor)
+void StyleResourceLoader::loadPendingShapeImage(ComputedStyle* computedStyle, CSSStyleImageMap& imageMap, ShapeValue* shapeValue, float deviceScaleFactor)
{
if (!shapeValue)
return;
@@ -117,7 +117,7 @@ void StyleResourceLoader::loadPendingShapeImage(ComputedStyle* computedStyle, Sh
options.credentialsRequested = ClientDidNotRequestCredentials;
options.corsEnabled = IsCORSEnabled;
- shapeValue->setImage(doLoadPendingImage(m_document, toStylePendingImage(image), deviceScaleFactor, options));
+ shapeValue->setImage(doLoadPendingImage(m_document, imageMap, toStylePendingImage(image), deviceScaleFactor, options));
}
void StyleResourceLoader::loadPendingImages(ComputedStyle* style, ElementStyleResources& elementStyleResources)
@@ -128,12 +128,13 @@ void StyleResourceLoader::loadPendingImages(ComputedStyle* style, ElementStyleRe
PendingImagePropertyMap::const_iterator::Keys end = elementStyleResources.pendingImageProperties().end().keys();
for (PendingImagePropertyMap::const_iterator::Keys it = elementStyleResources.pendingImageProperties().begin().keys(); it != end; ++it) {
CSSPropertyID currentProperty = *it;
+ CSSStyleImageMap& imageMap = elementStyleResources.mutableCssImages();
switch (currentProperty) {
case CSSPropertyBackgroundImage: {
for (FillLayer* backgroundLayer = &style->accessBackgroundLayers(); backgroundLayer; backgroundLayer = backgroundLayer->next()) {
if (backgroundLayer->image() && backgroundLayer->image()->isPendingImage())
- backgroundLayer->setImage(loadPendingImage(toStylePendingImage(backgroundLayer->image()), elementStyleResources.deviceScaleFactor()));
+ backgroundLayer->setImage(loadPendingImage(imageMap, toStylePendingImage(backgroundLayer->image()), elementStyleResources.deviceScaleFactor()));
}
break;
}
@@ -142,7 +143,7 @@ void StyleResourceLoader::loadPendingImages(ComputedStyle* style, ElementStyleRe
if (contentData->isImage()) {
StyleImage* image = toImageContentData(contentData)->image();
if (image->isPendingImage()) {
- RefPtrWillBeRawPtr<StyleImage> loadedImage = loadPendingImage(toStylePendingImage(image), elementStyleResources.deviceScaleFactor());
+ RefPtrWillBeRawPtr<StyleImage> loadedImage = loadPendingImage(imageMap, toStylePendingImage(image), elementStyleResources.deviceScaleFactor());
if (loadedImage)
toImageContentData(contentData)->setImage(loadedImage.release());
}
@@ -156,7 +157,7 @@ void StyleResourceLoader::loadPendingImages(ComputedStyle* style, ElementStyleRe
CursorData& currentCursor = cursorList->at(i);
if (StyleImage* image = currentCursor.image()) {
if (image->isPendingImage())
- currentCursor.setImage(loadPendingImage(toStylePendingImage(image), elementStyleResources.deviceScaleFactor()));
+ currentCursor.setImage(loadPendingImage(imageMap, toStylePendingImage(image), elementStyleResources.deviceScaleFactor()));
}
}
}
@@ -164,19 +165,19 @@ void StyleResourceLoader::loadPendingImages(ComputedStyle* style, ElementStyleRe
}
case CSSPropertyListStyleImage: {
if (style->listStyleImage() && style->listStyleImage()->isPendingImage())
- style->setListStyleImage(loadPendingImage(toStylePendingImage(style->listStyleImage()), elementStyleResources.deviceScaleFactor()));
+ style->setListStyleImage(loadPendingImage(imageMap, toStylePendingImage(style->listStyleImage()), elementStyleResources.deviceScaleFactor()));
break;
}
case CSSPropertyBorderImageSource: {
if (style->borderImageSource() && style->borderImageSource()->isPendingImage())
- style->setBorderImageSource(loadPendingImage(toStylePendingImage(style->borderImageSource()), elementStyleResources.deviceScaleFactor()));
+ style->setBorderImageSource(loadPendingImage(imageMap, toStylePendingImage(style->borderImageSource()), elementStyleResources.deviceScaleFactor()));
break;
}
case CSSPropertyWebkitBoxReflect: {
if (StyleReflection* reflection = style->boxReflect()) {
const NinePieceImage& maskImage = reflection->mask();
if (maskImage.image() && maskImage.image()->isPendingImage()) {
- RefPtrWillBeRawPtr<StyleImage> loadedImage = loadPendingImage(toStylePendingImage(maskImage.image()), elementStyleResources.deviceScaleFactor());
+ RefPtrWillBeRawPtr<StyleImage> loadedImage = loadPendingImage(imageMap, toStylePendingImage(maskImage.image()), elementStyleResources.deviceScaleFactor());
reflection->setMask(NinePieceImage(loadedImage.release(), maskImage.imageSlices(), maskImage.fill(), maskImage.borderSlices(), maskImage.outset(), maskImage.horizontalRule(), maskImage.verticalRule()));
}
}
@@ -184,18 +185,18 @@ void StyleResourceLoader::loadPendingImages(ComputedStyle* style, ElementStyleRe
}
case CSSPropertyWebkitMaskBoxImageSource: {
if (style->maskBoxImageSource() && style->maskBoxImageSource()->isPendingImage())
- style->setMaskBoxImageSource(loadPendingImage(toStylePendingImage(style->maskBoxImageSource()), elementStyleResources.deviceScaleFactor()));
+ style->setMaskBoxImageSource(loadPendingImage(imageMap, toStylePendingImage(style->maskBoxImageSource()), elementStyleResources.deviceScaleFactor()));
break;
}
case CSSPropertyWebkitMaskImage: {
for (FillLayer* maskLayer = &style->accessMaskLayers(); maskLayer; maskLayer = maskLayer->next()) {
if (maskLayer->image() && maskLayer->image()->isPendingImage())
- maskLayer->setImage(loadPendingImage(toStylePendingImage(maskLayer->image()), elementStyleResources.deviceScaleFactor()));
+ maskLayer->setImage(loadPendingImage(imageMap, toStylePendingImage(maskLayer->image()), elementStyleResources.deviceScaleFactor()));
}
break;
}
case CSSPropertyShapeOutside:
- loadPendingShapeImage(style, style->shapeOutside(), elementStyleResources.deviceScaleFactor());
+ loadPendingShapeImage(style, imageMap, style->shapeOutside(), elementStyleResources.deviceScaleFactor());
break;
default:
ASSERT_NOT_REACHED();
@@ -203,6 +204,7 @@ void StyleResourceLoader::loadPendingImages(ComputedStyle* style, ElementStyleRe
}
elementStyleResources.clearPendingImageProperties();
+ elementStyleResources.clearCSSImages();
}
void StyleResourceLoader::loadPendingResources(ComputedStyle* computedStyle, ElementStyleResources& elementStyleResources)
« no previous file with comments | « Source/core/css/resolver/StyleResourceLoader.h ('k') | Source/core/dom/Element.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698