Commit b99a653
committed
Add support for HTMLImageElement's sizes attribute
https://bugs.webkit.org/show_bug.cgi?id=133620
Reviewed by Dean Jackson.
.:
Added an ENABLE_PICTURE_SIZES compile flag.
* Source/cmake/WebKitFeatures.cmake:
* Source/cmakeconfig.h.cmake:
Source/JavaScriptCore:
Added an ENABLE_PICTURE_SIZES compile flag.
* Configurations/FeatureDefines.xcconfig:
Source/WebCore:
Tests: fast/dom/HTMLImageElement/sizes/image-sizes-1x.html
fast/dom/HTMLImageElement/sizes/image-sizes-2x.html
fast/dom/HTMLImageElement/sizes/image-sizes-js-change.html
fast/dom/HTMLImageElement/sizes/image-sizes-js-innerhtml.html
http/tests/loading/sizes/preload-image-sizes-2x.html
http/tests/loading/sizes/preload-image-sizes.html
This patch adds support for HTMLImageElement's sizes attribute and the
related srcset extended syntax as defined in
http://picture.responsiveimages.org/.
This sizes attribute syntax is added to the CSSGrammar and parsed by
the CSSParser.
The SourceSizeList class is generated by the parser, and used to get
the final source size.
HTMLImageElement and HTMLPreloadScanner send this value to
HTMLSrcsetParser.
HTMLSrcsetParser uses this value in order to pick the right resource.
* CMakeLists.txt: Added css/SourceSizeList.cpp.
* Configurations/FeatureDefines.xcconfig: Added the PICTURE_SIZES flag.
* WebCore.vcxproj/WebCore.vcxproj: Added css/SourceSizeList.*.
* WebCore.vcxproj/WebCore.vcxproj.filters: Added css/SourceSizeList.*.
* WebCore.xcodeproj/project.pbxproj: Added css/SourceSizeList.*.
* css/CSSGrammar.y.in: Added 4 grammar rules that define a Media condition,
Source size list, Source size length and source size.
* css/CSSParser.cpp:
(WebCore::CSSParser::parseSizesAttribute): Parse the sizes attribute.
(WebCore::CSSParser::detectAtToken): Set the token to SIZESATTR.
* css/CSSParser.h:
* css/SourceSizeList.cpp: Added. Defined the SourceSize and SourceSizeList classes.
(WebCore::SourceSize::match):
(WebCore::computeLength):
(WebCore::defaultValue):
(WebCore::SourceSize::length):
(WebCore::SourceSizeList::parseSizesAttribute):
(WebCore::SourceSizeList::getEffectiveSize):
* css/SourceSizeList.h: Added.
(WebCore::SourceSize::SourceSize):
(WebCore::SourceSizeList::append):
* html/HTMLImageElement.cpp: Integrated sizes attribute parsing and added currentSrc.
(WebCore::HTMLImageElement::setBestFitURLAndDPRFromImageCandidate):
(WebCore::HTMLImageElement::parseAttribute):
(WebCore::HTMLImageElement::currentSrc):
* html/HTMLImageElement.h:
* html/HTMLImageElement.idl:
* html/parser/HTMLDocumentParser.cpp: Added information required for sizes parsing to
HTMLPreloadScanner calls.
(WebCore::HTMLDocumentParser::pumpTokenizer):
(WebCore::HTMLDocumentParser::insert):
(WebCore::HTMLDocumentParser::append):
(WebCore::HTMLDocumentParser::appendCurrentInputStreamToPreloadScannerAndScan):
* html/parser/HTMLPreloadScanner.cpp: Integrated sizes attribute parsing.
(WebCore::TokenPreloadScanner::StartTagScanner::processAttributes):
(WebCore::TokenPreloadScanner::StartTagScanner::processAttribute):
(WebCore::TokenPreloadScanner::scan):
(WebCore::HTMLPreloadScanner::scan):
* html/parser/HTMLPreloadScanner.h:
* html/parser/HTMLSrcsetParser.cpp: Added 'w' descriptor parsing sizes based normalization.
(WebCore::parseDescriptors):
(WebCore::pickBestImageCandidate):
(WebCore::bestFitSourceForImageAttributes):
* html/parser/HTMLSrcsetParser.h:
Source/WebKit/mac:
Added an ENABLE_PICTURE_SIZES compile flag.
* Configurations/FeatureDefines.xcconfig:
Source/WebKit2:
Added an ENABLE_PICTURE_SIZES compile flag.
* Configurations/FeatureDefines.xcconfig:
Tools:
Added an ENABLE_PICTURE_SIZES compile flag.
* Scripts/webkitperl/FeatureList.pm:
LayoutTests:
These layout tests check that the sizes attribute and the related
srcset syntax are well supported, that the right resource is displayed,
that the currentSrc attribute is well supported and also that the right
resource is preloaded.
* fast/dom/HTMLImageElement/resources/currentSrcHelper.js: Added.
(fileName):
(currentSrcFileName):
* fast/dom/HTMLImageElement/resources/image-set-4x.png: Added.
* fast/dom/HTMLImageElement/sizes/image-sizes-1x-expected.txt: Added.
* fast/dom/HTMLImageElement/sizes/image-sizes-1x.html: Added.
* fast/dom/HTMLImageElement/sizes/image-sizes-2x-expected.txt: Added.
* fast/dom/HTMLImageElement/sizes/image-sizes-2x.html: Added.
* fast/dom/HTMLImageElement/sizes/image-sizes-js-change-expected.txt: Added.
* fast/dom/HTMLImageElement/sizes/image-sizes-js-change.html: Added.
* fast/dom/HTMLImageElement/sizes/image-sizes-js-innerhtml-expected.txt: Added.
* fast/dom/HTMLImageElement/sizes/image-sizes-js-innerhtml.html: Added.
* http/tests/loading/sizes/preload-image-sizes-2x-expected.txt: Added.
* http/tests/loading/sizes/preload-image-sizes-2x.html: Added.
* http/tests/loading/sizes/preload-image-sizes-expected.txt: Added.
* http/tests/loading/sizes/preload-image-sizes.html: Added.
Canonical link: https://commits.webkit.org/152413@main
git-svn-id: https://svn.webkit.org/repository/webkit/trunk@170576 268f45cc-cd09-0410-ab3c-d52691b4dbfc1 parent 229615c commit b99a653
47 files changed
Lines changed: 1080 additions & 26 deletions
File tree
- LayoutTests
- fast/dom/HTMLImageElement
- resources
- sizes
- http/tests/loading/sizes
- resources
- Source
- JavaScriptCore
- Configurations
- WebCore
- Configurations
- WebCore.vcxproj
- WebCore.xcodeproj
- css
- html
- parser
- WebKit2
- Configurations
- WebKit/mac
- Configurations
- cmake
- Tools
- Scripts/webkitperl
Some content is hidden
Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
1 | 13 | | |
2 | 14 | | |
3 | 15 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
1 | 30 | | |
2 | 31 | | |
3 | 32 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
126 | 126 | | |
127 | 127 | | |
128 | 128 | | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
Lines changed: 9 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
Lines changed: 33 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
Lines changed: 58 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
Lines changed: 28 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
Lines changed: 54 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
Lines changed: 9 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
0 commit comments