Branch: refs/heads/safari-7615.1.16.1-branch
  Home:   https://github.com/WebKit/WebKit
  Commit: 84f259c3d8371e4dde443c830ddb8f196045b914
      
https://github.com/WebKit/WebKit/commit/84f259c3d8371e4dde443c830ddb8f196045b914
  Author: Tim Horton <[email protected]>
  Date:   2023-01-13 (Fri, 13 Jan 2023)

  Changed paths:
    M Source/WebCore/platform/graphics/BifurcatedGraphicsContext.cpp
    M Source/WebCore/platform/graphics/BifurcatedGraphicsContext.h
    M Source/WebCore/platform/graphics/GraphicsContext.h
    M Source/WebCore/platform/graphics/cg/GraphicsContextCG.cpp
    M Source/WebCore/platform/graphics/cg/GraphicsContextCG.h
    M Source/WebCore/platform/graphics/cg/ImageBufferIOSurfaceBackend.cpp
    M Source/WebKit/Shared/RemoteLayerTree/CGDisplayListImageBufferBackend.mm

  Log Message:
  -----------
  Cherry-pick 258586@main (7d40f6d46408). rdar://98798050

    Canvases painted into CG display list image buffers don't ever update
    https://bugs.webkit.org/show_bug.cgi?id=250196
    rdar://98798050

    Reviewed by Simon Fraser and Dean Jackson.

    WebKit has long accidentally depended on the combination of two somewhat
    unusual behavioral quirks in CGIOSurfaceContext:

    1) (Source) If you make a CGImageRef from one CGIOSurfaceContext via
    CGIOSurfaceContextCreateImage, and mutate the original IOSurface under the 
hood
    (or in a different process) in a way that CGIOSurfaceContext does not know,
    CGIOSurfaceContextCreateImage will return the same CGImageRef when called 
later.

    2) (Destination) If you make a CGImageRef from one CGIOSurfaceContext via
    CGIOSurfaceContextCreateImage, paint it into a different CGIOSurfaceContext,
    then mutate the original IOSurface, and paint the same CGImageRef again,
    the updated IOSurface contents will be used the second time.

    The second quirk has never worked with unaccelerated CoreGraphics bitmap 
context
    destinations. Instead, in the unaccelerated case, the CGImageRef acts as a
    snapshot of the surface at the time it was created.

    We've long had code to handle this, forcing CGIOSurfaceContextCreateImage to
    re-create the CGImageRef each time we paint it (by drawing an empty rect 
into
    the CGIOSurfaceContext), working around quirk #1 and thus bypassing quirk 
#2,
    if we're painting into an unaccelerated backing store.

    It turns out our CG display list backing store implementation behaves like a
    CG bitmap context (without quirk #2), and so currently any IOSurfaces 
painted into
    CG display list backing store from a CGImageRef created by 
CGIOSurfaceContextCreateImage
    (but not -CreateImageReference) become stale if painted multiple times.

    To avoid this, extend the workaround to apply to any destination context 
that
    claims that it needs the workaround, and use it whenever painting an 
IOSurface
    into anything other than a CGIOSurfaceContext.

    * Source/WebCore/platform/graphics/BifurcatedGraphicsContext.cpp:
    
(WebCore::BifurcatedGraphicsContext::needsCachedNativeImageInvalidationWorkaround):
    * Source/WebCore/platform/graphics/BifurcatedGraphicsContext.h:
    Make BifurcatedGraphicsContext assume the more conservative mode of its two 
children.

    * Source/WebCore/platform/graphics/GraphicsContext.h:
    (WebCore::GraphicsContext::needsCachedNativeImageInvalidationWorkaround):
    Assume that by default, GraphicsContexts need the workaround.

    * Source/WebCore/platform/graphics/cg/GraphicsContextCG.cpp:
    (WebCore::GraphicsContextCG::needsCachedNativeImageInvalidationWorkaround):
    * Source/WebCore/platform/graphics/cg/GraphicsContextCG.h:
    GraphicsContextCG needs the workaround, except in the IOSurface->IOSurface 
case.

    * Source/WebCore/platform/graphics/cg/ImageBufferIOSurfaceBackend.cpp:
    (WebCore::ImageBufferIOSurfaceBackend::finalizeDrawIntoContext):
    Confer with the GraphicsContext about its need for the workaround
    instead of hardcoding the behavior here.

    * Source/WebKit/Shared/RemoteLayerTree/CGDisplayListImageBufferBackend.mm:
    CG display list graphics contexts need the workaround.

    Canonical link: https://commits.webkit.org/258586@main

Canonical link: https://commits.webkit.org/[email protected]


  Commit: 2b6ca2a2e4687b85347e33eb9eb0b113d3e5586b
      
https://github.com/WebKit/WebKit/commit/2b6ca2a2e4687b85347e33eb9eb0b113d3e5586b
  Author: Tim Horton <[email protected]>
  Date:   2023-01-13 (Fri, 13 Jan 2023)

  Changed paths:
    M Source/WebKit/UIProcess/API/ios/WKWebViewIOS.mm

  Log Message:
  -----------
  Cherry-pick 258521@main (1a1e7ad8f8a7). rdar://96702143

    Live-ish resize sometimes pops to unexpected scroll position even if layout 
width doesn't change
    https://bugs.webkit.org/show_bug.cgi?id=250153
    rdar://96702143

    Reviewed by Wenson Hsieh.

    * Source/WebKit/UIProcess/API/ios/WKWebViewIOS.mm:
    (-[WKWebView _updateScrollViewForTransaction:]):
    By default, UIScrollView pins the center of the view when you change 
zoomScale.
    When doing a live resize with a fixed layout width, the zoomScale changes on
    every resize. Resizes normally pin the top edge of the content (or rather,
    don't try to adjust the content offset -- at least until scroll anchoring
    comes along), so this leads to surprising jumps. To fix this, when
    web-process-originated scale changes occur, pin the vertical scroll position
    to the top edge of the content, instead of the center. I don't expect any
    clients are depending on the existing behavior, and hope that this
    will be purely an improvement.

    (-[WKWebView _didCommitLayerTree:]):
    Like animated resize, bail from updating scroll view parameters and various
    other incoming-commit-related things until *after* the live resize finishes.
    This avoids us calling _updateScrollViewForTransaction and adjusting 
zoomScale
    while the resize animation view is installed, which results in our scroll 
view
    thinking that the current zoomScale is 1, and throwing all the math off, 
causing
    further unexpected scrolling.

    (-[WKWebView _updateVisibleContentRects]):
    Fix this logging to indicate whether whether we're deferring geometry 
updates
    for any reason; an earlier patch changed the condition but not the log.

    Canonical link: https://commits.webkit.org/258521@main

Canonical link: https://commits.webkit.org/[email protected]


  Commit: 68ba9383acdc717014d07c34c6dd3e189ed72d12
      
https://github.com/WebKit/WebKit/commit/68ba9383acdc717014d07c34c6dd3e189ed72d12
  Author: Tim Horton <[email protected]>
  Date:   2023-01-13 (Fri, 13 Jan 2023)

  Changed paths:
    M Source/WebKit/UIProcess/API/ios/WKWebViewIOS.mm

  Log Message:
  -----------
  Cherry-pick 258687@main (6e41546bc076). rdar://103977580

    REGRESSION (258521@main): Can end up scrolled to an invalid offset, blank 
space above page
    https://bugs.webkit.org/show_bug.cgi?id=250335
    rdar://103977580

    Reviewed by Dean Jackson and Megan Gardner.

    * Source/WebKit/UIProcess/API/ios/WKWebViewIOS.mm:
    (-[WKWebView _updateScrollViewForTransaction:]):
    Ensure that we don't scroll to an invalid offset, the same way we do 
elsewhere.

    Canonical link: https://commits.webkit.org/258687@main

Canonical link: https://commits.webkit.org/[email protected]


Compare: https://github.com/WebKit/WebKit/compare/b04e12775477...68ba9383acdc
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to