Changeset 249367 in webkit
- Timestamp:
- Sep 1, 2019 11:28:35 AM (5 years ago)
- Location:
- trunk
- Files:
-
- 3 added
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r249364 r249367 1 2019-09-01 Said Abou-Hallawa <sabouhallawa@apple.com> 2 3 HTMLImageElement::decode() should return a resolved promise for decoding non bitmap images 4 https://bugs.webkit.org/show_bug.cgi?id=201243 5 6 Reviewed by Youenn Fablet. 7 8 * fast/images/decode-non-bitmap-image-resolve-expected.txt: Added. 9 * fast/images/decode-non-bitmap-image-resolve.html: Added. 10 * fast/images/resources/green-100x100.svg: Added. 11 1 12 2019-08-31 Said Abou-Hallawa <sabouhallawa@apple.com> 2 13 -
trunk/LayoutTests/imported/w3c/ChangeLog
r249361 r249367 1 2019-09-01 Said Abou-Hallawa <sabouhallawa@apple.com> 2 3 HTMLImageElement::decode() should return a resolved promise for decoding non bitmap images 4 https://bugs.webkit.org/show_bug.cgi?id=201243 5 6 Reviewed by Youenn Fablet. 7 8 * web-platform-tests/html/semantics/embedded-content/the-img-element/decode/image-decode-picture-expected.txt: 9 1 10 2019-08-31 Rob Buis <rbuis@igalia.com> 2 11 -
trunk/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/the-img-element/decode/image-decode-picture-expected.txt
r242595 r249367 4 4 PASS HTMLImageElement.prototype.decode(), picture tests. Image with multiple sources decodes with undefined. 5 5 PASS HTMLImageElement.prototype.decode(), picture tests. Image with PNG data URL source decodes with undefined. 6 FAIL HTMLImageElement.prototype.decode(), picture tests. Image with SVG source decodes with undefined. promise_test: Unhandled rejection with value: object "EncodingError: Invalid image type." 6 PASS HTMLImageElement.prototype.decode(), picture tests. Image with SVG source decodes with undefined. 7 7 PASS HTMLImageElement.prototype.decode(), picture tests. Non-existent source fails decode. 8 8 PASS HTMLImageElement.prototype.decode(), picture tests. Corrupt image in src fails decode. -
trunk/Source/WebCore/ChangeLog
r249366 r249367 1 2019-09-01 Said Abou-Hallawa <sabouhallawa@apple.com> 2 3 HTMLImageElement::decode() should return a resolved promise for decoding non bitmap images 4 https://bugs.webkit.org/show_bug.cgi?id=201243 5 6 Reviewed by Youenn Fablet. 7 8 The specs: https://html.spec.whatwg.org/multipage/embedded-content.html#dom-img-decode 9 states that, decode() should resolve the pending promise if the decoding 10 was requested for a non bitmap image. 11 12 Test: fast/images/decode-non-bitmap-image-resolve.html 13 14 * loader/ImageLoader.cpp: 15 (WebCore::resolveDecodePromises): 16 (WebCore::rejectDecodePromises): 17 (WebCore::ImageLoader::notifyFinished): 18 (WebCore::ImageLoader::decode): 19 (WebCore::ImageLoader::decodeError): Deleted. 20 * loader/ImageLoader.h: 21 (WebCore::ImageLoader::hasPendingDecodePromises const): 22 1 23 2019-08-30 Brent Fulgham <bfulgham@apple.com> 2 24 -
trunk/Source/WebCore/loader/ImageLoader.cpp
r246490 r249367 276 276 } 277 277 278 static inline void resolveDecodePromises(Vector<RefPtr<DeferredPromise>>&& promises) 279 { 280 ASSERT(!promises.isEmpty()); 281 for (auto& promise : promises) 282 promise->resolve(); 283 } 284 285 static inline void rejectDecodePromises(Vector<RefPtr<DeferredPromise>>&& promises, const char* message) 286 { 287 ASSERT(!promises.isEmpty()); 288 for (auto& promise : promises) 289 promise->reject(Exception { EncodingError, message }); 290 } 291 278 292 void ImageLoader::notifyFinished(CachedResource& resource) 279 293 { … … 300 314 301 315 if (hasPendingDecodePromises()) 302 decodeError("Access control error.");316 rejectDecodePromises(WTFMove(m_decodingPromises), "Access control error."); 303 317 304 318 ASSERT(!m_hasPendingLoadEvent); … … 312 326 if (m_image->wasCanceled()) { 313 327 if (hasPendingDecodePromises()) 314 decodeError("Loading was canceled.");328 rejectDecodePromises(WTFMove(m_decodingPromises), "Loading was canceled."); 315 329 m_hasPendingLoadEvent = false; 316 330 // Only consider updating the protection ref-count of the Element immediately before returning … … 387 401 { 388 402 m_decodingPromises.append(WTFMove(promise)); 389 403 390 404 if (!element().document().domWindow()) { 391 decodeError("Inactive document.");392 return; 393 } 394 405 rejectDecodePromises(WTFMove(m_decodingPromises), "Inactive document."); 406 return; 407 } 408 395 409 AtomString attr = element().imageSourceURL(); 396 410 if (stripLeadingAndTrailingHTMLSpaces(attr).isEmpty()) { 397 decodeError("Missing source URL.");398 return; 399 } 400 411 rejectDecodePromises(WTFMove(m_decodingPromises), "Missing source URL."); 412 return; 413 } 414 401 415 if (m_imageComplete) 402 416 decode(); 403 }404 405 void ImageLoader::decodeError(const char* message)406 {407 ASSERT(hasPendingDecodePromises());408 for (auto& promise : m_decodingPromises)409 promise->reject(Exception { EncodingError, message });410 m_decodingPromises.clear();411 417 } 412 418 … … 416 422 417 423 if (!element().document().domWindow()) { 418 decodeError("Inactive document.");424 rejectDecodePromises(WTFMove(m_decodingPromises), "Inactive document."); 419 425 return; 420 426 } 421 427 422 428 if (!m_image || !m_image->image() || m_image->errorOccurred()) { 423 decodeError("Loading error.");429 rejectDecodePromises(WTFMove(m_decodingPromises), "Loading error."); 424 430 return; 425 431 } … … 427 433 Image* image = m_image->image(); 428 434 if (!is<BitmapImage>(image)) { 429 decodeError("Invalid image type.");435 resolveDecodePromises(WTFMove(m_decodingPromises)); 430 436 return; 431 437 } … … 433 439 auto& bitmapImage = downcast<BitmapImage>(*image); 434 440 bitmapImage.decode([promises = WTFMove(m_decodingPromises)]() mutable { 435 for (auto& promise : promises) 436 promise->resolve(); 441 resolveDecodePromises(WTFMove(promises)); 437 442 }); 438 443 } -
trunk/Source/WebCore/loader/ImageLoader.h
r246490 r249367 96 96 97 97 bool hasPendingDecodePromises() const { return !m_decodingPromises.isEmpty(); } 98 void decodeError(const char*);99 98 void decode(); 100 99 … … 106 105 RefPtr<Element> m_protectedElement; 107 106 AtomString m_failedLoadURL; 108 Vector<RefPtr<DeferredPromise> , 1> m_decodingPromises;107 Vector<RefPtr<DeferredPromise>> m_decodingPromises; 109 108 bool m_hasPendingBeforeLoadEvent : 1; 110 109 bool m_hasPendingLoadEvent : 1;
Note: See TracChangeset
for help on using the changeset viewer.