| Differences between
and this patch
- a/Source/WebCore/ChangeLog +16 lines
Lines 1-3 a/Source/WebCore/ChangeLog_sec1
1
2020-09-03  Youenn Fablet  <youenn@apple.com>
2
3
        Safari takes too long to fetch images from memory cache
4
        https://bugs.webkit.org/show_bug.cgi?id=216048
5
        <rdar://problem/68260952>
6
7
        Reviewed by NOBODY (OOPS!).
8
9
        Test: imported/w3c/web-platform-tests/html/dom/elements/images/bypass-cache-revalidation.html
10
11
        * loader/cache/CachedResource.cpp:
12
        (WebCore::CachedResource::makeRevalidationDecision const):
13
        In case of image resource, skip revalidation.
14
        This is in sync with other browsers and is inline with
15
        https://html.spec.whatwg.org/#updating-the-image-data:list-of-available-images
16
1
2020-09-02  Chris Dumez  <cdumez@apple.com>
17
2020-09-02  Chris Dumez  <cdumez@apple.com>
2
18
3
        Choose adequate number of channels for ConvolverNode's output
19
        Choose adequate number of channels for ConvolverNode's output
- a/Source/WebCore/loader/cache/CachedResource.cpp +4 lines
Lines 847-852 bool CachedResource::canUseCacheValidator() const a/Source/WebCore/loader/cache/CachedResource.cpp_sec1
847
847
848
CachedResource::RevalidationDecision CachedResource::makeRevalidationDecision(CachePolicy cachePolicy) const
848
CachedResource::RevalidationDecision CachedResource::makeRevalidationDecision(CachePolicy cachePolicy) const
849
{    
849
{    
850
    // Reuse images even if no-cache should prohibit to do so, following https://html.spec.whatwg.org/#ignore-higher-layer-caching.
851
    if (m_type == Type::ImageResource)
852
        return RevalidationDecision::No;
853
850
    switch (cachePolicy) {
854
    switch (cachePolicy) {
851
    case CachePolicyHistoryBuffer:
855
    case CachePolicyHistoryBuffer:
852
        return RevalidationDecision::No;
856
        return RevalidationDecision::No;
- a/LayoutTests/imported/w3c/ChangeLog +12 lines
Lines 1-3 a/LayoutTests/imported/w3c/ChangeLog_sec1
1
2020-09-03  Youenn Fablet  <youenn@apple.com>
2
3
        Safari takes too long to fetch images from memory cache
4
        https://bugs.webkit.org/show_bug.cgi?id=216048
5
        <rdar://problem/68260952>
6
7
        Reviewed by NOBODY (OOPS!).
8
9
        * web-platform-tests/html/dom/elements/images/bypass-cache-revalidation.html: Added.
10
        * web-platform-tests/html/dom/elements/images/image.py: Added.
11
        (main):
12
1
2020-09-02  Alex Christensen  <achristensen@webkit.org>
13
2020-09-02  Alex Christensen  <achristensen@webkit.org>
2
14
3
        Remove some unused old expectations files
15
        Remove some unused old expectations files
- a/LayoutTests/imported/w3c/web-platform-tests/html/dom/elements/images/bypass-cache-revalidation.html +37 lines
Line 0 a/LayoutTests/imported/w3c/web-platform-tests/html/dom/elements/images/bypass-cache-revalidation.html_sec1
1
<!DOCTYPE html>
2
<title>Cached images can bypass revalidation</title>
3
<script src="/resources/testharness.js"></script>
4
<script src="/resources/testharnessreport.js"></script>
5
<script src="/common/utils.js"></script>
6
<div id="imageDiv1"></div>
7
<div id="imageDiv2"></div>
8
<canvas id="canvas"></canvas>
9
<script>
10
11
function getImagePixel(image)
12
{
13
    canvas.getContext("2d").drawImage(image, 0, 0, 10, 10);
14
    return canvas.getContext("2d").getImageData(0, 0, 1, 1).data;
15
}
16
17
let resolve;
18
promise_test(async (t) => {
19
   const url = "image.py?id=" + token();
20
21
   let promise = new Promise(r => resolve = r);
22
   imageDiv1.innerHTML = `<img src="${url}" onload="resolve()"></img>`;
23
   await promise;
24
25
   const url2 = "image.py?id=" + token();
26
   promise = new Promise(r => resolve = r);
27
   imageDiv1.innerHTML = `<img src="${url2}" onload="resolve()"></img>`;
28
   await promise;
29
30
   promise = new Promise(r => resolve = r);
31
   imageDiv2.innerHTML = `<img id="image2" src="${url}" onload="resolve()"></img>`;
32
   await promise;
33
34
   assert_array_equals(getImagePixel(image2), [0, 255, 0, 255]);
35
}, "Images can bypass no-cache");
36
</script>
37
- a/LayoutTests/imported/w3c/web-platform-tests/html/dom/elements/images/image.py +28 lines
Line 0 a/LayoutTests/imported/w3c/web-platform-tests/html/dom/elements/images/image.py_sec1
1
import os.path
2
3
from wptserve.utils import isomorphic_decode
4
5
def main(request, response):
6
7
    key = request.GET['id']
8
    alreadyServedRequest = False
9
    try:
10
      alreadyServedRequest = request.server.stash.take(key)
11
    except (KeyError, ValueError) as e:
12
      pass
13
14
    if alreadyServedRequest:
15
      body = open(os.path.join(os.path.dirname(isomorphic_decode(__file__)), u"../../../../images/red.png"), u"rb").read()
16
    else:
17
      request.server.stash.put(key, True);
18
      body = open(os.path.join(os.path.dirname(isomorphic_decode(__file__)), u"../../../../images/green.png"), u"rb").read()
19
      pass
20
21
    response.writer.write_status(200)
22
    response.writer.write_header(b"etag", "abcdef")
23
    response.writer.write_header(b"content-length", len(body))
24
    response.writer.write_header(b"content-type", "image/png")
25
    response.writer.write_header(b"cache-control", "public, max-age=31536000, no-cache")
26
    response.writer.end_headers()
27
28
    response.writer.write(body)

Return to Bug 216048