void PageSerializer::retrieveResourcesForCSSDeclaration(CSSStyleDeclaration* styleDeclaration) { if (!styleDeclaration) return; if (!styleDeclaration->stylesheet()->isCSSStyleSheet()) return; CSSStyleSheet* cssStyleSheet = static_cast<CSSStyleSheet*>(styleDeclaration->stylesheet()); // The background-image and list-style-image (for ul or ol) are the CSS properties // that make use of images. We iterate to make sure we include any other // image properties there might be. for (unsigned i = 0; i < styleDeclaration->length(); ++i) { // FIXME: It's kind of ridiculous to get the property name and then get // the value out of the name. Ideally we would get the value out of the // property ID, but CSSStyleDeclaration only gives access to property // names, not IDs. RefPtr<CSSValue> cssValue = styleDeclaration->getPropertyCSSValue(styleDeclaration->item(i)); if (!cssValue->isImageValue()) continue; CSSImageValue* imageValue = static_cast<CSSImageValue*>(cssValue.get()); StyleImage* styleImage = imageValue->cachedOrPendingImage(); // Non cached-images are just place-holders and do not contain data. if (!styleImage || !styleImage->isCachedImage()) continue; CachedImage* image = static_cast<StyleCachedImage*>(styleImage)->cachedImage(); KURL url = cssStyleSheet->document()->completeURL(image->url()); addImageToResources(image, url); } }
void PageSerializer::retrieveResourcesForCSSDeclaration(StylePropertySet* styleDeclaration, Document* document) { if (!styleDeclaration) return; // The background-image and list-style-image (for ul or ol) are the CSS properties // that make use of images. We iterate to make sure we include any other // image properties there might be. unsigned propertyCount = styleDeclaration->propertyCount(); for (unsigned i = 0; i < propertyCount; ++i) { RefPtr<CSSValue> cssValue = styleDeclaration->propertyAt(i).value(); if (!cssValue->isImageValue()) continue; CSSImageValue* imageValue = static_cast<CSSImageValue*>(cssValue.get()); StyleImage* styleImage = imageValue->cachedOrPendingImage(); // Non cached-images are just place-holders and do not contain data. if (!styleImage || !styleImage->isCachedImage()) continue; CachedImage* image = static_cast<StyleCachedImage*>(styleImage)->cachedImage(); KURL url = document->completeURL(image->url()); addImageToResources(image, 0, url); } }
void PageSerializer::retrieveResourcesForCSSValue(CSSValue* cssValue, Document* document) { if (cssValue->isImageValue()) { CSSImageValue* imageValue = toCSSImageValue(cssValue); StyleImage* styleImage = imageValue->cachedOrPendingImage(); // Non cached-images are just place-holders and do not contain data. if (!styleImage || !styleImage->isImageResource()) return; addImageToResources(styleImage->cachedImage(), 0, styleImage->cachedImage()->url()); } else if (cssValue->isFontFaceSrcValue()) { CSSFontFaceSrcValue* fontFaceSrcValue = toCSSFontFaceSrcValue(cssValue); if (fontFaceSrcValue->isLocal()) { return; } addFontToResources(fontFaceSrcValue->fetch(document)); } else if (cssValue->isValueList()) { CSSValueList* cssValueList = toCSSValueList(cssValue); for (unsigned i = 0; i < cssValueList->length(); i++) retrieveResourcesForCSSValue(cssValueList->item(i), document); } }