Changeset 229641 in webkit


Ignore:
Timestamp:
Mar 15, 2018 1:50:03 PM (6 years ago)
Author:
Wenson Hsieh
Message:

[iOS WK2] Hit-testing fails when specifying a large top content inset
https://bugs.webkit.org/show_bug.cgi?id=183648
<rdar://problem/38421894>

Reviewed by Tim Horton.

Source/WebKit:

Currently, in the process of computing unobscured content rect in the UI process on iOS, we subtract away parts
of the view that are obscured by insets (e.g. MobileSafari's chrome). The helper method -[WKWebView
_computeContentInset] is intended to compute these obscuring insets around the view, but it takes scroll view
insets into account. This means that if WKWebView's inner scroll view has content insets, we'll end up shrinking
the unobscured content rect as if the insetted region obscures the viewport; this causes visible content on the
page to be uninteractible, since WKWebView erroneously thinks it's obscured.

To address this, we rename _computeContentInset to _computeObscuredInset, and make it _not_ affected by the
scroll view's content insets. From code inspection and testing, all but one of the former call sites of
_computeContentInset really need the obscured inset instead (see below). The one exception, -[WKWebView
_adjustedContentOffset:], takes a scroll position from the page and maps it to a content offset in the inner
UIScrollView (see below for more details).

Tests: ScrollViewInsetTests.InnerHeightWithLargeTopContentInset

ScrollViewInsetTests.InnerHeightWithLargeBottomContentInset
ScrollViewInsetTests.RestoreInitialContentOffsetAfterCrash
ScrollViewInsetTests.RestoreInitialContentOffsetAfterNavigation

  • UIProcess/API/Cocoa/WKWebView.mm:

(-[WKWebView _setHasCustomContentView:loadedMIMEType:]):
(-[WKWebView _initialContentOffsetForScrollView]):

See -_contentOffsetAdjustedForObscuredInset: below.

(-[WKWebView _contentOffsetAdjustedForObscuredInset:]):

Formerly -_adjustedContentOffset:. -_contentOffsetAdjustedForObscuredInset: no longer takes scroll view content
inset into account, and only cares about insets that obscure the view. This means that the scroll position
(0, 0) in the document now maps to the content offset in the inner UIScrollView, such that the top of the page
is aligned with the top of the viewport.

However, many call sites of -_adjustedContentOffset: were intended to compute the initial, top-left-most content
offset in the scroll view to scroll to when resetting the web view (i.e., they pass in CGPointZero for the
scroll position). An example of this is the scroll position to jump to after web content process termination, or
the scroll position after main frame navigation. In these cases, we actually want to jump to the top of the
scroll view, so we do want to use the version of the computed content insets that accounts for scroll view
insets.

Since these cases are limited to finding the top-left-most scroll position, we pull this out into a separate
helper method (-_initialContentOffsetForScrollView) and replace calls to
-[self _adjustedContentOffset:CGPointZero] with this instead.

(-[WKWebView _computedObscuredInset]):

A version of -_computeContentInset that doesn't care about scroll view insets. Used whereever we need to account
for obscured insets rather than the combination of content insets and unobscured insets (e.g.
-_initialContentOffsetForScrollView).

(-[WKWebView _processDidExit]):
(-[WKWebView _didCommitLayerTree:]):
(-[WKWebView _dynamicViewportUpdateChangedTargetToScale:position:nextValidLayerTreeTransactionID:]):
(-[WKWebView _scrollToContentScrollPosition:scrollOrigin:]):
(-[WKWebView scrollViewWillEndDragging:withVelocity:targetContentOffset:]):
(-[WKWebView _updateVisibleContentRects]):
(-[WKWebView _navigationGestureDidBegin]):

In all these places where we inset the view bounds to compute the unobscured region of the viewport, it doesn't
make sense to additionally inset by the scroll view's content insets, since (1) the scroll view's content insets
don't obscure the viewport, and (2) it's perfectly valid for the inner scroll view to have arbitrarily large
content insets.

(-[WKWebView _adjustedContentOffset:]): Deleted.

Renamed to -_contentOffsetAdjustedForObscuredInset:.

  • UIProcess/API/Cocoa/WKWebViewInternal.h:
  • UIProcess/ios/WKPDFView.mm:

(-[WKPDFView _offsetForPageNumberIndicator]):

Similar to -_scrollToFragment: (see below).

(-[WKPDFView _scrollToFragment:]):

This helper figures out which content offset to scroll to, given the y-origin of a page in a PDF document. If
insets are added to the scroll view, we end up scrolling to the wrong content offset since we'll add the height
of the top content inset (imagine that the top content inset is enormous — then we'll scroll an amount equal to
the top content inset _past_ the point where the y-origin of the page is at the top of the viewport).

Tools:

Adds four new API tests to verify that adding top or bottom content insets to the WKWebView's scroll view does
not cause the DOMWindow's innerHeight to shrink. Currently, doing so would cause the innerHeight to be reported
as (viewHeight - inset.top) or (viewHeight - inset.bottom).

See WebKit ChangeLog for more details.

  • TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
  • TestWebKitAPI/Tests/ios/ScrollViewInsetTests.mm: Added.

(TestWebKitAPI::TEST):

Location:
trunk
Files:
1 added
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit/ChangeLog

    r229638 r229641  
     12018-03-15  Wenson Hsieh  <wenson_hsieh@apple.com>
     2
     3        [iOS WK2] Hit-testing fails when specifying a large top content inset
     4        https://bugs.webkit.org/show_bug.cgi?id=183648
     5        <rdar://problem/38421894>
     6
     7        Reviewed by Tim Horton.
     8
     9        Currently, in the process of computing unobscured content rect in the UI process on iOS, we subtract away parts
     10        of the view that are obscured by insets (e.g. MobileSafari's chrome). The helper method -[WKWebView
     11        _computeContentInset] is intended to compute these obscuring insets around the view, but it takes scroll view
     12        insets into account. This means that if WKWebView's inner scroll view has content insets, we'll end up shrinking
     13        the unobscured content rect as if the insetted region obscures the viewport; this causes visible content on the
     14        page to be uninteractible, since WKWebView erroneously thinks it's obscured.
     15
     16        To address this, we rename _computeContentInset to _computeObscuredInset, and make it _not_ affected by the
     17        scroll view's content insets. From code inspection and testing, all but one of the former call sites of
     18        _computeContentInset really need the obscured inset instead (see below). The one exception, -[WKWebView
     19        _adjustedContentOffset:], takes a scroll position from the page and maps it to a content offset in the inner
     20        UIScrollView (see below for more details).
     21
     22        Tests:  ScrollViewInsetTests.InnerHeightWithLargeTopContentInset
     23                ScrollViewInsetTests.InnerHeightWithLargeBottomContentInset
     24                ScrollViewInsetTests.RestoreInitialContentOffsetAfterCrash
     25                ScrollViewInsetTests.RestoreInitialContentOffsetAfterNavigation
     26
     27        * UIProcess/API/Cocoa/WKWebView.mm:
     28        (-[WKWebView _setHasCustomContentView:loadedMIMEType:]):
     29        (-[WKWebView _initialContentOffsetForScrollView]):
     30
     31        See -_contentOffsetAdjustedForObscuredInset: below.
     32
     33        (-[WKWebView _contentOffsetAdjustedForObscuredInset:]):
     34
     35        Formerly -_adjustedContentOffset:. -_contentOffsetAdjustedForObscuredInset: no longer takes scroll view content
     36        inset into account, and only cares about insets that obscure the view. This means that the scroll position
     37        (0, 0) in the document now maps to the content offset in the inner UIScrollView, such that the top of the page
     38        is aligned with the top of the viewport.
     39
     40        However, many call sites of -_adjustedContentOffset: were intended to compute the initial, top-left-most content
     41        offset in the scroll view to scroll to when resetting the web view (i.e., they pass in CGPointZero for the
     42        scroll position). An example of this is the scroll position to jump to after web content process termination, or
     43        the scroll position after main frame navigation. In these cases, we actually want to jump to the top of the
     44        scroll view, so we do want to use the version of the computed content insets that accounts for scroll view
     45        insets.
     46
     47        Since these cases are limited to finding the top-left-most scroll position, we pull this out into a separate
     48        helper method (-_initialContentOffsetForScrollView) and replace calls to
     49        `-[self _adjustedContentOffset:CGPointZero]` with this instead.
     50
     51        (-[WKWebView _computedObscuredInset]):
     52
     53        A version of -_computeContentInset that doesn't care about scroll view insets. Used whereever we need to account
     54        for obscured insets rather than the combination of content insets and unobscured insets (e.g.
     55        -_initialContentOffsetForScrollView).
     56
     57        (-[WKWebView _processDidExit]):
     58        (-[WKWebView _didCommitLayerTree:]):
     59        (-[WKWebView _dynamicViewportUpdateChangedTargetToScale:position:nextValidLayerTreeTransactionID:]):
     60        (-[WKWebView _scrollToContentScrollPosition:scrollOrigin:]):
     61        (-[WKWebView scrollViewWillEndDragging:withVelocity:targetContentOffset:]):
     62        (-[WKWebView _updateVisibleContentRects]):
     63        (-[WKWebView _navigationGestureDidBegin]):
     64
     65        In all these places where we inset the view bounds to compute the unobscured region of the viewport, it doesn't
     66        make sense to additionally inset by the scroll view's content insets, since (1) the scroll view's content insets
     67        don't obscure the viewport, and (2) it's perfectly valid for the inner scroll view to have arbitrarily large
     68        content insets.
     69
     70        (-[WKWebView _adjustedContentOffset:]): Deleted.
     71
     72        Renamed to -_contentOffsetAdjustedForObscuredInset:.
     73
     74        * UIProcess/API/Cocoa/WKWebViewInternal.h:
     75        * UIProcess/ios/WKPDFView.mm:
     76        (-[WKPDFView _offsetForPageNumberIndicator]):
     77
     78        Similar to -_scrollToFragment: (see below).
     79
     80        (-[WKPDFView _scrollToFragment:]):
     81
     82        This helper figures out which content offset to scroll to, given the y-origin of a page in a PDF document. If
     83        insets are added to the scroll view, we end up scrolling to the wrong content offset since we'll add the height
     84        of the top content inset (imagine that the top content inset is enormous — then we'll scroll an amount equal to
     85        the top content inset _past_ the point where the y-origin of the page is at the top of the viewport).
     86
    1872018-03-15  Brent Fulgham  <bfulgham@apple.com>
    288
  • trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm

    r229511 r229641  
    14621462
    14631463        _scrollViewBackgroundColor = WebCore::Color();
    1464         [_scrollView setContentOffset:[self _adjustedContentOffset:CGPointZero]];
     1464        [_scrollView setContentOffset:[self _initialContentOffsetForScrollView]];
    14651465
    14661466        [self _setAvoidsUnsafeArea:NO];
     
    15821582}
    15831583
    1584 - (CGPoint)_adjustedContentOffset:(CGPoint)point
     1584- (CGPoint)_initialContentOffsetForScrollView
     1585{
     1586    auto combinedUnobscuredAndScrollViewInset = [self _computedContentInset];
     1587    return CGPointMake(-combinedUnobscuredAndScrollViewInset.left, -combinedUnobscuredAndScrollViewInset.top);
     1588}
     1589
     1590- (CGPoint)_contentOffsetAdjustedForObscuredInset:(CGPoint)point
    15851591{
    15861592    CGPoint result = point;
    1587     UIEdgeInsets contentInset = [self _computedContentInset];
     1593    UIEdgeInsets contentInset = [self _computedObscuredInset];
    15881594
    15891595    result.x -= contentInset.left;
     
    15981604        return UIRectEdgeAll;
    15991605    return _obscuredInsetEdgesAffectedBySafeArea;
     1606}
     1607
     1608- (UIEdgeInsets)_computedObscuredInset
     1609{
     1610    if (_haveSetObscuredInsets)
     1611        return _obscuredInsets;
     1612
     1613#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 110000
     1614    if (self._safeAreaShouldAffectObscuredInsets)
     1615        return UIEdgeInsetsAdd(UIEdgeInsetsZero, self._scrollViewSystemContentInset, self._effectiveObscuredInsetEdgesAffectedBySafeArea);
     1616#endif
     1617
     1618    return UIEdgeInsetsZero;
    16001619}
    16011620
     
    16421661    [_contentView setFrame:self.bounds];
    16431662    [_scrollView setBackgroundColor:[UIColor whiteColor]];
    1644     [_scrollView setContentOffset:[self _adjustedContentOffset:CGPointZero]];
     1663    [_scrollView setContentOffset:[self _initialContentOffsetForScrollView]];
    16451664    [_scrollView setZoomScale:1];
    16461665
     
    17791798    if (_needsResetViewStateAfterCommitLoadForMainFrame && layerTreeTransaction.transactionID() >= _firstPaintAfterCommitLoadTransactionID) {
    17801799        _needsResetViewStateAfterCommitLoadForMainFrame = NO;
    1781         [_scrollView setContentOffset:[self _adjustedContentOffset:CGPointZero]];
     1800        [_scrollView setContentOffset:[self _initialContentOffsetForScrollView]];
    17821801        if (_observedRenderingProgressEvents & _WKRenderingProgressEventFirstPaint)
    17831802            _navigationState->didFirstPaint();
     
    18481867        _resizeAnimationTransformAdjustments = CATransform3DMakeScale(scale, scale, 1);
    18491868
    1850         CGPoint newContentOffset = [self _adjustedContentOffset:CGPointMake(newScrollPosition.x * newScale, newScrollPosition.y * newScale)];
     1869        CGPoint newContentOffset = [self _contentOffsetAdjustedForObscuredInset:CGPointMake(newScrollPosition.x * newScale, newScrollPosition.y * newScale)];
    18511870        CGPoint currentContentOffset = [_scrollView contentOffset];
    18521871
     
    20072026    scaledOffset.scale(zoomScale);
    20082027
    2009     CGPoint contentOffsetInScrollViewCoordinates = [self _adjustedContentOffset:scaledOffset];
     2028    CGPoint contentOffsetInScrollViewCoordinates = [self _contentOffsetAdjustedForObscuredInset:scaledOffset];
    20102029    contentOffsetInScrollViewCoordinates = contentOffsetBoundedInValidRange(_scrollView.get(), contentOffsetInScrollViewCoordinates);
    20112030
     
    23742393        CGSize maxScrollOffsets = CGSizeMake(scrollView.contentSize.width - scrollView.bounds.size.width, scrollView.contentSize.height - scrollView.bounds.size.height);
    23752394
    2376         CGRect fullViewRect = self.bounds;
    2377 
    2378         UIEdgeInsets contentInset;
     2395        UIEdgeInsets obscuredInset;
    23792396
    23802397        id<WKUIDelegatePrivate> uiDelegatePrivate = static_cast<id <WKUIDelegatePrivate>>([self UIDelegate]);
    23812398        if ([uiDelegatePrivate respondsToSelector:@selector(_webView:finalObscuredInsetsForScrollView:withVelocity:targetContentOffset:)])
    2382             contentInset = [uiDelegatePrivate _webView:self finalObscuredInsetsForScrollView:scrollView withVelocity:velocity targetContentOffset:targetContentOffset];
     2399            obscuredInset = [uiDelegatePrivate _webView:self finalObscuredInsetsForScrollView:scrollView withVelocity:velocity targetContentOffset:targetContentOffset];
    23832400        else
    2384             contentInset = [self _computedContentInset];
    2385 
    2386         CGRect unobscuredRect = UIEdgeInsetsInsetRect(fullViewRect, contentInset);
     2401            obscuredInset = [self _computedObscuredInset];
     2402
     2403        CGRect unobscuredRect = UIEdgeInsetsInsetRect(self.bounds, obscuredInset);
    23872404
    23882405        coordinator->adjustTargetContentOffsetForSnapping(maxScrollOffsets, velocity, unobscuredRect.origin.y, targetContentOffset);
     
    27512768        return;
    27522769
    2753     CGRect fullViewRect = self.bounds;
    27542770    CGRect visibleRectInContentCoordinates = [self _visibleContentRect];
    27552771
    2756     UIEdgeInsets computedContentInsetUnadjustedForKeyboard = [self _computedContentInset];
     2772    UIEdgeInsets computedContentInsetUnadjustedForKeyboard = [self _computedObscuredInset];
    27572773    if (!_haveSetObscuredInsets)
    27582774        computedContentInsetUnadjustedForKeyboard.bottom -= _totalScrollViewBottomInsetAdjustmentForKeyboard;
     
    27602776    CGFloat scaleFactor = contentZoomScale(self);
    27612777
    2762     CGRect unobscuredRect = UIEdgeInsetsInsetRect(fullViewRect, computedContentInsetUnadjustedForKeyboard);
     2778    CGRect unobscuredRect = UIEdgeInsetsInsetRect(self.bounds, computedContentInsetUnadjustedForKeyboard);
    27632779    CGRect unobscuredRectInContentCoordinates = _frozenUnobscuredContentRect ? _frozenUnobscuredContentRect.value() : [self convertRect:unobscuredRect toView:_contentView.get()];
    27642780    unobscuredRectInContentCoordinates = CGRectIntersection(unobscuredRectInContentCoordinates, [self _contentBoundsExtendedForRubberbandingWithScale:scaleFactor]);
     
    27682784        WebKit::RemoteScrollingCoordinatorProxy* coordinator = _page->scrollingCoordinatorProxy();
    27692785        if (coordinator && coordinator->hasActiveSnapPoint()) {
    2770             CGRect unobscuredRect = UIEdgeInsetsInsetRect(fullViewRect, computedContentInsetUnadjustedForKeyboard);
    2771 
    27722786            CGPoint currentPoint = [_scrollView contentOffset];
    27732787            CGPoint activePoint = coordinator->nearestActiveContentInsetAdjustedSnapPoint(unobscuredRect.origin.y, currentPoint);
     
    29492963    // frozen rects during swipes.
    29502964    CGRect fullViewRect = self.bounds;
    2951     CGRect unobscuredRect = UIEdgeInsetsInsetRect(fullViewRect, [self _computedContentInset]);
     2965    CGRect unobscuredRect = UIEdgeInsetsInsetRect(fullViewRect, [self _computedObscuredInset]);
    29522966
    29532967    _frozenVisibleContentRect = [self convertRect:fullViewRect toView:_contentView.get()];
  • trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebViewInternal.h

    r229485 r229641  
    146146
    147147@property (nonatomic, readonly) BOOL _allowsDoubleTapGestures;
    148 @property (nonatomic, readonly) UIEdgeInsets _computedContentInset;
     148@property (nonatomic, readonly) UIEdgeInsets _computedObscuredInset;
    149149@property (nonatomic, readonly) UIEdgeInsets _computedUnobscuredSafeAreaInset;
    150150#endif
  • trunk/Source/WebKit/UIProcess/ios/WKPDFView.mm

    r229182 r229641  
    309309- (CGPoint)_offsetForPageNumberIndicator
    310310{
    311     UIEdgeInsets insets = UIEdgeInsetsAdd(_webView._computedUnobscuredSafeAreaInset, _webView._computedContentInset, UIRectEdgeAll);
     311    UIEdgeInsets insets = UIEdgeInsetsAdd(_webView._computedUnobscuredSafeAreaInset, _webView._computedObscuredInset, UIRectEdgeAll);
    312312    return CGPointMake(insets.left, insets.top + _overlaidAccessoryViewsInset.height);
    313313}
     
    367367
    368368    // Ensure that the page margin is visible below the content inset.
    369     const CGFloat verticalOffset = _pages[pageIndex].frame.origin.y - _webView._computedContentInset.top - pdfPageMargin;
     369    const CGFloat verticalOffset = _pages[pageIndex].frame.origin.y - _webView._computedObscuredInset.top - pdfPageMargin;
    370370    [_scrollView setContentOffset:CGPointMake(_scrollView.contentOffset.x, verticalOffset) animated:NO];
    371371
  • trunk/Tools/ChangeLog

    r229630 r229641  
     12018-03-15  Wenson Hsieh  <wenson_hsieh@apple.com>
     2
     3        [iOS WK2] Hit-testing fails when specifying a large top content inset
     4        https://bugs.webkit.org/show_bug.cgi?id=183648
     5        <rdar://problem/38421894>
     6
     7        Reviewed by Tim Horton.
     8
     9        Adds four new API tests to verify that adding top or bottom content insets to the WKWebView's scroll view does
     10        not cause the DOMWindow's innerHeight to shrink. Currently, doing so would cause the innerHeight to be reported
     11        as (viewHeight - inset.top) or (viewHeight - inset.bottom).
     12
     13        See WebKit ChangeLog for more details.
     14
     15        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
     16        * TestWebKitAPI/Tests/ios/ScrollViewInsetTests.mm: Added.
     17        (TestWebKitAPI::TEST):
     18
    1192018-03-15  Aakash Jain  <aakash_jain@apple.com>
    220
  • trunk/Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj

    r229589 r229641  
    769769                F4BFA68E1E4AD08000154298 /* DragAndDropPasteboardTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = F4BFA68C1E4AD08000154298 /* DragAndDropPasteboardTests.mm */; };
    770770                F4C2AB221DD6D95E00E06D5B /* enormous-video-with-sound.html in Copy Resources */ = {isa = PBXBuildFile; fileRef = F4C2AB211DD6D94100E06D5B /* enormous-video-with-sound.html */; };
     771                F4C8797F2059D8D3009CD00B /* ScrollViewInsetTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = F4C8797E2059D8D3009CD00B /* ScrollViewInsetTests.mm */; };
    771772                F4D4F3B61E4E2BCB00BB2767 /* DataInteractionSimulator.mm in Sources */ = {isa = PBXBuildFile; fileRef = F4D4F3B41E4E2BCB00BB2767 /* DataInteractionSimulator.mm */; };
    772773                F4D4F3B91E4E36E400BB2767 /* DataInteractionTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = F4D4F3B71E4E36E400BB2767 /* DataInteractionTests.mm */; };
     
    854855                        dstSubfolderSpec = 7;
    855856                        files = (
    856                                 CD758A6F20572EA00071834A /* video-with-paused-audio-and-playing-muted.html in Copy Resources */,
    857857                                1A9E52C913E65EF4006917F5 /* 18-characters.html in Copy Resources */,
    858858                                379028B914FAC24C007E6B43 /* acceptsFirstMouse.html in Copy Resources */,
     
    10891089                                CD321B041E3A85FA00EB21C8 /* video-with-muted-audio-and-webaudio.html in Copy Resources */,
    10901090                                CDB4115A1E0B00DB00EAD352 /* video-with-muted-audio.html in Copy Resources */,
     1091                                CD758A6F20572EA00071834A /* video-with-paused-audio-and-playing-muted.html in Copy Resources */,
    10911092                                CDC8E4961BC6F10800594FEC /* video-without-audio.html in Copy Resources */,
    10921093                                CDC8E4971BC6F10800594FEC /* video-without-audio.mp4 in Copy Resources */,
     
    19081909                F4BFA68C1E4AD08000154298 /* DragAndDropPasteboardTests.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = DragAndDropPasteboardTests.mm; sourceTree = "<group>"; };
    19091910                F4C2AB211DD6D94100E06D5B /* enormous-video-with-sound.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = "enormous-video-with-sound.html"; sourceTree = "<group>"; };
     1911                F4C8797E2059D8D3009CD00B /* ScrollViewInsetTests.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = ScrollViewInsetTests.mm; sourceTree = "<group>"; };
    19101912                F4D4F3B41E4E2BCB00BB2767 /* DataInteractionSimulator.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = DataInteractionSimulator.mm; sourceTree = "<group>"; };
    19111913                F4D4F3B51E4E2BCB00BB2767 /* DataInteractionSimulator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DataInteractionSimulator.h; sourceTree = "<group>"; };
     
    23202322                                F4D4F3B71E4E36E400BB2767 /* DataInteractionTests.mm */,
    23212323                                7560917719259C59009EF06E /* MemoryCacheAddImageToCacheIOS.mm */,
     2324                                F4C8797E2059D8D3009CD00B /* ScrollViewInsetTests.mm */,
    23222325                                F46849BD1EEF58E400B937FE /* UIPasteboardTests.mm */,
    23232326                                2E1B881E2040EE5300FFF6A9 /* ViewportSizingTests.mm */,
     
    31083111                                CDC8E48A1BC5C96200594FEC /* video-with-audio.mp4 */,
    31093112                                CD321B031E3A84B700EB21C8 /* video-with-muted-audio-and-webaudio.html */,
     3113                                CDB411591E09DA8E00EAD352 /* video-with-muted-audio.html */,
    31103114                                CD758A6E20572D540071834A /* video-with-paused-audio-and-playing-muted.html */,
    3111                                 CDB411591E09DA8E00EAD352 /* video-with-muted-audio.html */,
    31123115                                CDC8E48B1BC5C96200594FEC /* video-without-audio.html */,
    31133116                                CDC8E48C1BC5C96200594FEC /* video-without-audio.mp4 */,
     
    36383641                                CDCFA7AA1E45183200C2433D /* SampleMap.cpp in Sources */,
    36393642                                7CCE7F121A411AE600447C4C /* ScrollPinningBehaviors.cpp in Sources */,
     3643                                F4C8797F2059D8D3009CD00B /* ScrollViewInsetTests.mm in Sources */,
    36403644                                CE06DF9B1E1851F200E570C9 /* SecurityOrigin.cpp in Sources */,
    36413645                                5769C50B1D9B0002000847FB /* SerializedCryptoKeyWrap.mm in Sources */,
Note: See TracChangeset for help on using the changeset viewer.