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

Side by Side Diff: third_party/WebKit/Source/core/css/resolver/ElementStyleResources.cpp

Issue 1896893004: Hook up style invalidation for CSS Paint API. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@css-paint-register
Patch Set: rebase. Created 4 years, 7 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) 1999 Lars Knoll (knoll@kde.org) 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org)
3 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All rights reserved. 3 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All rights reserved.
4 * Copyright (C) 2013 Google Inc. All rights reserved. 4 * Copyright (C) 2013 Google Inc. All rights reserved.
5 * 5 *
6 * This library is free software; you can redistribute it and/or 6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Library General Public 7 * modify it under the terms of the GNU Library General Public
8 * License as published by the Free Software Foundation; either 8 * License as published by the Free Software Foundation; either
9 * version 2 of the License, or (at your option) any later version. 9 * version 2 of the License, or (at your option) any later version.
10 * 10 *
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after
125 DocumentResource* resource = value->load(m_document); 125 DocumentResource* resource = value->load(m_document);
126 if (!resource) 126 if (!resource)
127 continue; 127 continue;
128 128
129 // Stash the DocumentResource on the reference filter. 129 // Stash the DocumentResource on the reference filter.
130 ReferenceFilterBuilder::setDocumentResourceReference(referenceFilter , adoptPtr(new DocumentResourceReference(resource))); 130 ReferenceFilterBuilder::setDocumentResourceReference(referenceFilter , adoptPtr(new DocumentResourceReference(resource)));
131 } 131 }
132 } 132 }
133 } 133 }
134 134
135 StyleImage* ElementStyleResources::loadPendingImage(StylePendingImage* pendingIm age, CrossOriginAttributeValue crossOrigin) 135 StyleImage* ElementStyleResources::loadPendingImage(ComputedStyle* style, StyleP endingImage* pendingImage, CrossOriginAttributeValue crossOrigin)
136 { 136 {
137 if (CSSImageValue* imageValue = pendingImage->cssImageValue()) 137 if (CSSImageValue* imageValue = pendingImage->cssImageValue())
138 return imageValue->cacheImage(m_document, crossOrigin); 138 return imageValue->cacheImage(m_document, crossOrigin);
139 139
140 if (CSSPaintValue* paintValue = pendingImage->cssPaintValue()) {
141 StyleGeneratedImage* image = StyleGeneratedImage::create(*paintValue);
142 style->addPaintImage(image);
143 return image;
144 }
145
140 if (CSSImageGeneratorValue* imageGeneratorValue = pendingImage->cssImageGene ratorValue()) { 146 if (CSSImageGeneratorValue* imageGeneratorValue = pendingImage->cssImageGene ratorValue()) {
141 imageGeneratorValue->loadSubimages(m_document); 147 imageGeneratorValue->loadSubimages(m_document);
142 return StyleGeneratedImage::create(*imageGeneratorValue); 148 return StyleGeneratedImage::create(*imageGeneratorValue);
143 } 149 }
144 150
145 if (CSSCursorImageValue* cursorImageValue = pendingImage->cssCursorImageValu e()) 151 if (CSSCursorImageValue* cursorImageValue = pendingImage->cssCursorImageValu e())
146 return cursorImageValue->cacheImage(m_document, m_deviceScaleFactor); 152 return cursorImageValue->cacheImage(m_document, m_deviceScaleFactor);
147 153
148 if (CSSImageSetValue* imageSetValue = pendingImage->cssImageSetValue()) 154 if (CSSImageSetValue* imageSetValue = pendingImage->cssImageSetValue())
149 return imageSetValue->cacheImage(m_document, m_deviceScaleFactor, crossO rigin); 155 return imageSetValue->cacheImage(m_document, m_deviceScaleFactor, crossO rigin);
(...skipping 20 matching lines...) Expand all
170 // 176 //
171 // If we eagerly loaded the images we'd fetch a.png, even though it's not 177 // If we eagerly loaded the images we'd fetch a.png, even though it's not
172 // used. If we didn't null check below we'd crash since the none actually 178 // used. If we didn't null check below we'd crash since the none actually
173 // removed all background images. 179 // removed all background images.
174 180
175 for (CSSPropertyID property : m_pendingImageProperties) { 181 for (CSSPropertyID property : m_pendingImageProperties) {
176 switch (property) { 182 switch (property) {
177 case CSSPropertyBackgroundImage: { 183 case CSSPropertyBackgroundImage: {
178 for (FillLayer* backgroundLayer = &style->accessBackgroundLayers(); backgroundLayer; backgroundLayer = backgroundLayer->next()) { 184 for (FillLayer* backgroundLayer = &style->accessBackgroundLayers(); backgroundLayer; backgroundLayer = backgroundLayer->next()) {
179 if (backgroundLayer->image() && backgroundLayer->image()->isPend ingImage()) 185 if (backgroundLayer->image() && backgroundLayer->image()->isPend ingImage())
180 backgroundLayer->setImage(loadPendingImage(toStylePendingIma ge(backgroundLayer->image()))); 186 backgroundLayer->setImage(loadPendingImage(style, toStylePen dingImage(backgroundLayer->image())));
181 } 187 }
182 break; 188 break;
183 } 189 }
184 case CSSPropertyContent: { 190 case CSSPropertyContent: {
185 for (ContentData* contentData = const_cast<ContentData*>(style->cont entData()); contentData; contentData = contentData->next()) { 191 for (ContentData* contentData = const_cast<ContentData*>(style->cont entData()); contentData; contentData = contentData->next()) {
186 if (contentData->isImage()) { 192 if (contentData->isImage()) {
187 StyleImage* image = toImageContentData(contentData)->image() ; 193 StyleImage* image = toImageContentData(contentData)->image() ;
188 if (image->isPendingImage()) 194 if (image->isPendingImage())
189 toImageContentData(contentData)->setImage(loadPendingIma ge(toStylePendingImage(image))); 195 toImageContentData(contentData)->setImage(loadPendingIma ge(style, toStylePendingImage(image)));
190 } 196 }
191 } 197 }
192 break; 198 break;
193 } 199 }
194 case CSSPropertyCursor: { 200 case CSSPropertyCursor: {
195 if (CursorList* cursorList = style->cursors()) { 201 if (CursorList* cursorList = style->cursors()) {
196 for (size_t i = 0; i < cursorList->size(); ++i) { 202 for (size_t i = 0; i < cursorList->size(); ++i) {
197 CursorData& currentCursor = cursorList->at(i); 203 CursorData& currentCursor = cursorList->at(i);
198 if (StyleImage* image = currentCursor.image()) { 204 if (StyleImage* image = currentCursor.image()) {
199 if (image->isPendingImage()) 205 if (image->isPendingImage())
200 currentCursor.setImage(loadPendingImage(toStylePendi ngImage(image))); 206 currentCursor.setImage(loadPendingImage(style, toSty lePendingImage(image)));
201 } 207 }
202 } 208 }
203 } 209 }
204 break; 210 break;
205 } 211 }
206 case CSSPropertyListStyleImage: { 212 case CSSPropertyListStyleImage: {
207 if (style->listStyleImage() && style->listStyleImage()->isPendingIma ge()) 213 if (style->listStyleImage() && style->listStyleImage()->isPendingIma ge())
208 style->setListStyleImage(loadPendingImage(toStylePendingImage(st yle->listStyleImage()))); 214 style->setListStyleImage(loadPendingImage(style, toStylePendingI mage(style->listStyleImage())));
209 break; 215 break;
210 } 216 }
211 case CSSPropertyBorderImageSource: { 217 case CSSPropertyBorderImageSource: {
212 if (style->borderImageSource() && style->borderImageSource()->isPend ingImage()) 218 if (style->borderImageSource() && style->borderImageSource()->isPend ingImage())
213 style->setBorderImageSource(loadPendingImage(toStylePendingImage (style->borderImageSource()))); 219 style->setBorderImageSource(loadPendingImage(style, toStylePendi ngImage(style->borderImageSource())));
214 break; 220 break;
215 } 221 }
216 case CSSPropertyWebkitBoxReflect: { 222 case CSSPropertyWebkitBoxReflect: {
217 if (StyleReflection* reflection = style->boxReflect()) { 223 if (StyleReflection* reflection = style->boxReflect()) {
218 const NinePieceImage& maskImage = reflection->mask(); 224 const NinePieceImage& maskImage = reflection->mask();
219 if (maskImage.image() && maskImage.image()->isPendingImage()) { 225 if (maskImage.image() && maskImage.image()->isPendingImage()) {
220 StyleImage* loadedImage = loadPendingImage(toStylePendingIma ge(maskImage.image())); 226 StyleImage* loadedImage = loadPendingImage(style, toStylePen dingImage(maskImage.image()));
221 reflection->setMask(NinePieceImage(loadedImage, maskImage.im ageSlices(), maskImage.fill(), maskImage.borderSlices(), maskImage.outset(), mas kImage.horizontalRule(), maskImage.verticalRule())); 227 reflection->setMask(NinePieceImage(loadedImage, maskImage.im ageSlices(), maskImage.fill(), maskImage.borderSlices(), maskImage.outset(), mas kImage.horizontalRule(), maskImage.verticalRule()));
222 } 228 }
223 } 229 }
224 break; 230 break;
225 } 231 }
226 case CSSPropertyWebkitMaskBoxImageSource: { 232 case CSSPropertyWebkitMaskBoxImageSource: {
227 if (style->maskBoxImageSource() && style->maskBoxImageSource()->isPe ndingImage()) 233 if (style->maskBoxImageSource() && style->maskBoxImageSource()->isPe ndingImage())
228 style->setMaskBoxImageSource(loadPendingImage(toStylePendingImag e(style->maskBoxImageSource()))); 234 style->setMaskBoxImageSource(loadPendingImage(style, toStylePend ingImage(style->maskBoxImageSource())));
229 break; 235 break;
230 } 236 }
231 case CSSPropertyWebkitMaskImage: { 237 case CSSPropertyWebkitMaskImage: {
232 for (FillLayer* maskLayer = &style->accessMaskLayers(); maskLayer; m askLayer = maskLayer->next()) { 238 for (FillLayer* maskLayer = &style->accessMaskLayers(); maskLayer; m askLayer = maskLayer->next()) {
233 if (maskLayer->image() && maskLayer->image()->isPendingImage()) 239 if (maskLayer->image() && maskLayer->image()->isPendingImage())
234 maskLayer->setImage(loadPendingImage(toStylePendingImage(mas kLayer->image()))); 240 maskLayer->setImage(loadPendingImage(style, toStylePendingIm age(maskLayer->image())));
235 } 241 }
236 break; 242 break;
237 } 243 }
238 case CSSPropertyShapeOutside: 244 case CSSPropertyShapeOutside:
239 if (style->shapeOutside() && style->shapeOutside()->image() && style ->shapeOutside()->image()->isPendingImage()) 245 if (style->shapeOutside() && style->shapeOutside()->image() && style ->shapeOutside()->image()->isPendingImage())
240 style->shapeOutside()->setImage(loadPendingImage(toStylePendingI mage(style->shapeOutside()->image()), CrossOriginAttributeAnonymous)); 246 style->shapeOutside()->setImage(loadPendingImage(style, toStyleP endingImage(style->shapeOutside()->image()), CrossOriginAttributeAnonymous));
241 break; 247 break;
242 default: 248 default:
243 ASSERT_NOT_REACHED(); 249 ASSERT_NOT_REACHED();
244 } 250 }
245 } 251 }
246 } 252 }
247 253
248 void ElementStyleResources::loadPendingResources(ComputedStyle* computedStyle) 254 void ElementStyleResources::loadPendingResources(ComputedStyle* computedStyle)
249 { 255 {
250 loadPendingImages(computedStyle); 256 loadPendingImages(computedStyle);
251 loadPendingSVGDocuments(computedStyle); 257 loadPendingSVGDocuments(computedStyle);
252 } 258 }
253 259
254 } // namespace blink 260 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698