Changeset 273305 in webkit
- Timestamp:
- Feb 23, 2021, 6:34:38 AM (6 years ago)
- Location:
- trunk/Source/WebKit
- Files:
-
- 1 added
- 8 edited
- 1 copied
-
ChangeLog (modified) (1 diff)
-
SourcesCocoa.txt (modified) (1 diff)
-
UIProcess/ios/GestureRecognizerConsistencyEnforcer.h (copied) (copied from trunk/Source/WebKit/UIProcess/ios/WKDeferringGestureRecognizer.h ) (2 diffs)
-
UIProcess/ios/GestureRecognizerConsistencyEnforcer.mm (added)
-
UIProcess/ios/WKContentViewInteraction.h (modified) (4 diffs)
-
UIProcess/ios/WKContentViewInteraction.mm (modified) (12 diffs)
-
UIProcess/ios/WKDeferringGestureRecognizer.h (modified) (2 diffs)
-
UIProcess/ios/WKDeferringGestureRecognizer.mm (modified) (2 diffs)
-
UIProcess/mac/WKPrintingView.h (modified) (1 diff)
-
WebKit.xcodeproj/project.pbxproj (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit/ChangeLog
r273304 r273305 1 2021-02-23 Wenson Hsieh <wenson_hsieh@apple.com> 2 3 [iOS] Add a watchdog timer to forcibly reset deferring gesture recognizers 4 https://bugs.webkit.org/show_bug.cgi?id=222216 5 6 Reviewed by Simon Fraser. 7 8 Add a mechanism to detect and resolve situations where at least one deferring gesture recognizer 9 (`WKDeferringGestureRecognizer`) is stuck in Possible state after ending touches, but the touch event gesture 10 recognizer is unable to be reset (i.e. neither possible or recognizing). This state is indicative of a general 11 class of bugs regarding native gesture deferral, wherein our "gesture gates" never end up being lifted after 12 ending all touches in the view. One such example of this type of bug was fixed in r272584, where all interaction 13 (touch events, scrolling, tapping) due to the touch end deferrers never exiting Possible state after long 14 pressing to present a context menu. 15 16 To make these kinds of bugs both easier to diagnose and less fatal in the future, we introduce a watchdog timer 17 that dispatches after ending all touches on the content view, and checks the consistency of deferring gesture 18 recognizers in the view; if we detect stuck deferring gestures, we handle this by forcibly resetting the stuck 19 deferring gestures and logging a fault message. 20 21 I manually verified this change by reverting my fix for the aforementioned bug (r272584), and observing both (1) 22 a system log fault message, and (2) that interactions continued to work even without the fix in r272584, after 23 the watchdog timer fired. See below for more details. 24 25 * SourcesCocoa.txt: 26 * UIProcess/ios/GestureRecognizerConsistencyEnforcer.h: Copied from Source/WebKit/UIProcess/ios/WKDeferringGestureRecognizer.h. 27 * UIProcess/ios/GestureRecognizerConsistencyEnforcer.mm: Added. 28 (WebKit::GestureRecognizerConsistencyEnforcer::GestureRecognizerConsistencyEnforcer): 29 (WebKit::GestureRecognizerConsistencyEnforcer::beginTracking): 30 (WebKit::GestureRecognizerConsistencyEnforcer::endTracking): 31 (WebKit::GestureRecognizerConsistencyEnforcer::reset): 32 (WebKit::GestureRecognizerConsistencyEnforcer::timerFired): 33 34 Add a helper class that wraps a `RunLoop::Timer` for the main runloop, and schedules a 1 second timer after all 35 deferring gestures have ended; assuming no new touches begin after this timer is scheduled, we'll perform a 36 consistency check over the content view's gestures and perform a log fault and force deferring gestures to end 37 if needed. 38 39 * UIProcess/ios/WKContentViewInteraction.h: 40 * UIProcess/ios/WKContentViewInteraction.mm: 41 (-[WKContentView setUpInteraction]): 42 (-[WKContentView cleanUpInteraction]): 43 44 Make sure that we reset any extant `GestureRecognizerConsistencyEnforcer` if the web process crashes. 45 46 (-[WKContentView _removeDefaultGestureRecognizers]): 47 (-[WKContentView _addDefaultGestureRecognizers]): 48 (-[WKContentView _webTouchEventsRecognized:]): 49 50 Adjust a few compile-time guards so that deferring gesture recognizers exist on the view, even if 51 `ENABLE_IOS_TOUCH_EVENTS` is off. This makes some of the gesture deferral code throughout this file easier to 52 reason about in non-internal iOS builds, since we don't need to sprinkle as many `ENABLE(IOS_TOUCH_EVENTS)` 53 checks throughout this class. 54 55 (-[WKContentView touchEventGestureRecognizer]): 56 (-[WKContentView gestureRecognizerConsistencyEnforcer]): 57 (-[WKContentView deferringGestures]): 58 (-[WKContentView gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:]): 59 (-[WKContentView deferringGestureRecognizer:willBeginTouchesWithEvent:]): 60 61 Refactor `-deferringGestureRecognizer:shouldDeferGesturesAfterBeginningTouchesWithEvent:` so that it returns an 62 enum flag indicating whether the given gesture should be allowed to begin deferring native gestures; by making 63 this `-deferringGestureRecognizer:willBeginTouchesWithEvent:`, we can now put state management logic here that's 64 responsible for updating the `GestureRecognizerConsistencyEnforcer`. 65 66 (-[WKContentView deferringGestureRecognizer:didTransitionToState:]): 67 (-[WKContentView deferringGestureRecognizer:didEndTouchesWithEvent:]): 68 (-[WKContentView _deferringGestures]): Deleted. 69 70 Rename this to `-deferringGestures` and expose it as a readonly property, for use by the 71 `GestureRecognizerConsistencyEnforcer`. 72 73 (-[WKContentView deferringGestureRecognizer:shouldDeferGesturesAfterBeginningTouchesWithEvent:]): Deleted. 74 * UIProcess/ios/WKDeferringGestureRecognizer.h: 75 * UIProcess/ios/WKDeferringGestureRecognizer.mm: 76 (-[WKDeferringGestureRecognizer touchesBegan:withEvent:]): 77 (-[WKDeferringGestureRecognizer setState:]): 78 79 Add a delegate hook to inform `WKContentView` when the gesture recognizer state changes. 80 81 (-[WKDeferringGestureRecognizer deferringGestureDelegate]): Deleted. 82 * UIProcess/mac/WKPrintingView.h: 83 84 Fix a missing include that results in a build failure due to changed unified sources. 85 86 * WebKit.xcodeproj/project.pbxproj: 87 1 88 2021-02-23 Per Arne Vollan <pvollan@apple.com> 2 89 -
trunk/Source/WebKit/SourcesCocoa.txt
r273013 r273305 459 459 UIProcess/ios/AppKitSoftLink.mm 460 460 UIProcess/ios/DragDropInteractionState.mm 461 UIProcess/ios/GestureRecognizerConsistencyEnforcer.mm 461 462 UIProcess/ios/InputViewUpdateDeferrer.mm 462 463 UIProcess/ios/PageClientImplIOS.mm -
trunk/Source/WebKit/UIProcess/ios/GestureRecognizerConsistencyEnforcer.h
r273304 r273305 1 1 /* 2 * Copyright (C) 20 19Apple Inc. All rights reserved.2 * Copyright (C) 2021 Apple Inc. All rights reserved. 3 3 * 4 4 * Redistribution and use in source and binary forms, with or without … … 24 24 */ 25 25 26 #pragma once 27 26 28 #if PLATFORM(IOS_FAMILY) 27 29 28 #import <UIKit/UIKit.h> 30 #import <wtf/FastMalloc.h> 31 #import <wtf/Noncopyable.h> 32 #import <wtf/RetainPtr.h> 33 #import <wtf/RunLoop.h> 34 #import <wtf/WeakObjCPtr.h> 29 35 36 @class WKContentView; 30 37 @class WKDeferringGestureRecognizer; 31 38 32 @protocol WKDeferringGestureRecognizerDelegate 33 - (BOOL)deferringGestureRecognizer:(WKDeferringGestureRecognizer *)deferringGestureRecognizer shouldDeferGesturesAfterBeginningTouchesWithEvent:(UIEvent *)event; 34 - (BOOL)deferringGestureRecognizer:(WKDeferringGestureRecognizer *)deferringGestureRecognizer didEndTouchesWithEvent:(UIEvent *)event; 35 - (BOOL)deferringGestureRecognizer:(WKDeferringGestureRecognizer *)deferringGestureRecognizer shouldDeferOtherGestureRecognizer:(UIGestureRecognizer *)gestureRecognizer; 36 @end 39 namespace WebKit { 37 40 38 @interface WKDeferringGestureRecognizer : UIGestureRecognizer 41 class GestureRecognizerConsistencyEnforcer { 42 WTF_MAKE_FAST_ALLOCATED; 43 WTF_MAKE_NONCOPYABLE(GestureRecognizerConsistencyEnforcer); 44 public: 45 GestureRecognizerConsistencyEnforcer(WKContentView *); 46 ~GestureRecognizerConsistencyEnforcer(); 39 47 40 - (instancetype)initWithDeferringGestureDelegate:(id <WKDeferringGestureRecognizerDelegate>)deferringGestureDelegate; 41 - (void)setDefaultPrevented:(BOOL)defaultPrevented; 42 - (BOOL)shouldDeferGestureRecognizer:(UIGestureRecognizer *)gestureRecognizer; 48 void beginTracking(WKDeferringGestureRecognizer *); 49 void endTracking(WKDeferringGestureRecognizer *); 43 50 44 @property (nonatomic, weak, readonly) id <WKDeferringGestureRecognizerDelegate> deferringGestureDelegate;51 void reset(); 45 52 46 @end 53 private: 54 void timerFired(); 55 56 WeakObjCPtr<WKContentView> m_view; 57 RunLoop::Timer<GestureRecognizerConsistencyEnforcer> m_timer; 58 HashSet<RetainPtr<WKDeferringGestureRecognizer>> m_deferringGestureRecognizersWithTouches; 59 }; 60 61 } // namespace WebKit 47 62 48 63 #endif // PLATFORM(IOS_FAMILY) -
trunk/Source/WebKit/UIProcess/ios/WKContentViewInteraction.h
r273184 r273305 36 36 #import "FocusedElementInformation.h" 37 37 #import "FrameInfoData.h" 38 #import "GestureRecognizerConsistencyEnforcer.h" 38 39 #import "GestureTypes.h" 39 40 #import "InteractionInformationAtPosition.h" … … 256 257 257 258 @interface WKContentView () { 258 #if ENABLE(IOS_TOUCH_EVENTS)259 259 RetainPtr<WKDeferringGestureRecognizer> _touchStartDeferringGestureRecognizerForImmediatelyResettableGestures; 260 260 RetainPtr<WKDeferringGestureRecognizer> _touchStartDeferringGestureRecognizerForDelayedResettableGestures; … … 263 263 RetainPtr<WKDeferringGestureRecognizer> _touchEndDeferringGestureRecognizerForDelayedResettableGestures; 264 264 RetainPtr<WKDeferringGestureRecognizer> _touchEndDeferringGestureRecognizerForSyntheticTapGestures; 265 #endif 265 std::unique_ptr<WebKit::GestureRecognizerConsistencyEnforcer> _gestureRecognizerConsistencyEnforcer; 266 266 RetainPtr<UIWebTouchEventsGestureRecognizer> _touchEventGestureRecognizer; 267 267 … … 526 526 @property (nonatomic, readonly) BOOL preventsPanningInXAxis; 527 527 @property (nonatomic, readonly) BOOL preventsPanningInYAxis; 528 @property (nonatomic, readonly) UIWebTouchEventsGestureRecognizer *touchEventGestureRecognizer; 529 @property (nonatomic, readonly) NSArray<WKDeferringGestureRecognizer *> *deferringGestures; 530 @property (nonatomic, readonly) WebKit::GestureRecognizerConsistencyEnforcer& gestureRecognizerConsistencyEnforcer; 528 531 529 532 #if ENABLE(DATALIST_ELEMENT) -
trunk/Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm
r273276 r273305 774 774 [self addGestureRecognizer:_touchActionDownSwipeGestureRecognizer.get()]; 775 775 776 #if ENABLE(IOS_TOUCH_EVENTS)777 776 _touchStartDeferringGestureRecognizerForImmediatelyResettableGestures = adoptNS([[WKDeferringGestureRecognizer alloc] initWithDeferringGestureDelegate:self]); 778 777 [_touchStartDeferringGestureRecognizerForImmediatelyResettableGestures setName:@"Touch start deferrer (immediate reset)"]; … … 793 792 [_touchEndDeferringGestureRecognizerForSyntheticTapGestures setName:@"Touch end deferrer (synthetic tap)"]; 794 793 795 for (WKDeferringGestureRecognizer *gesture in self. _deferringGestures) {794 for (WKDeferringGestureRecognizer *gesture in self.deferringGestures) { 796 795 gesture.delegate = self; 797 796 [self addGestureRecognizer:gesture]; 798 797 } 799 #endif // ENABLE(IOS_TOUCH_EVENTS) 798 799 if (_gestureRecognizerConsistencyEnforcer) 800 _gestureRecognizerConsistencyEnforcer->reset(); 800 801 801 802 _touchEventGestureRecognizer = adoptNS([[UIWebTouchEventsGestureRecognizer alloc] initWithTarget:self action:@selector(_webTouchEventsRecognized:) touchDelegate:self]); … … 968 969 [self removeGestureRecognizer:_touchEventGestureRecognizer.get()]; 969 970 970 #if ENABLE(IOS_TOUCH_EVENTS) 971 for (WKDeferringGestureRecognizer *gesture in self._deferringGestures) { 971 for (WKDeferringGestureRecognizer *gesture in self.deferringGestures) { 972 972 gesture.delegate = nil; 973 973 [self removeGestureRecognizer:gesture]; 974 974 } 975 #endif 975 976 if (_gestureRecognizerConsistencyEnforcer) 977 _gestureRecognizerConsistencyEnforcer->reset(); 976 978 977 979 #if HAVE(UIKIT_WITH_MOUSE_SUPPORT) … … 1099 1101 - (void)_removeDefaultGestureRecognizers 1100 1102 { 1101 #if ENABLE(IOS_TOUCH_EVENTS) 1102 for (WKDeferringGestureRecognizer *gesture in self._deferringGestures) 1103 for (WKDeferringGestureRecognizer *gesture in self.deferringGestures) 1103 1104 [self removeGestureRecognizer:gesture]; 1104 #endif1105 1105 [self removeGestureRecognizer:_touchEventGestureRecognizer.get()]; 1106 1106 [self removeGestureRecognizer:_singleTapGestureRecognizer.get()]; … … 1126 1126 - (void)_addDefaultGestureRecognizers 1127 1127 { 1128 #if ENABLE(IOS_TOUCH_EVENTS) 1129 for (WKDeferringGestureRecognizer *gesture in self._deferringGestures) 1128 for (WKDeferringGestureRecognizer *gesture in self.deferringGestures) 1130 1129 [self addGestureRecognizer:gesture]; 1131 #endif1132 1130 [self addGestureRecognizer:_touchEventGestureRecognizer.get()]; 1133 1131 [self addGestureRecognizer:_singleTapGestureRecognizer.get()]; … … 1565 1563 [self.window makeKeyWindow]; 1566 1564 1567 #if ENABLE(IOS_TOUCH_EVENTS)1568 1565 auto stopDeferringNativeGesturesIfNeeded = [] (NSArray<WKDeferringGestureRecognizer *> *deferringGestures) { 1569 1566 for (WKDeferringGestureRecognizer *gesture in deferringGestures) { … … 1578 1575 if (!_page->isHandlingPreventableTouchEnd()) 1579 1576 stopDeferringNativeGesturesIfNeeded(self._touchEndDeferringGestures); 1580 #endif // ENABLE(IOS_TOUCH_EVENTS)1581 1577 } 1582 1578 #endif // ENABLE(TOUCH_EVENTS) … … 1756 1752 #endif 1757 1753 1758 #if ENABLE(IOS_TOUCH_EVENTS) 1759 1760 - (NSArray<WKDeferringGestureRecognizer *> *)_deferringGestures 1754 - (UIWebTouchEventsGestureRecognizer *)touchEventGestureRecognizer 1755 { 1756 return _touchEventGestureRecognizer.get(); 1757 } 1758 1759 - (WebKit::GestureRecognizerConsistencyEnforcer&)gestureRecognizerConsistencyEnforcer 1760 { 1761 if (!_gestureRecognizerConsistencyEnforcer) 1762 _gestureRecognizerConsistencyEnforcer = makeUnique<WebKit::GestureRecognizerConsistencyEnforcer>(self); 1763 1764 return *_gestureRecognizerConsistencyEnforcer; 1765 } 1766 1767 - (NSArray<WKDeferringGestureRecognizer *> *)deferringGestures 1761 1768 { 1762 1769 auto gestures = [NSMutableArray arrayWithCapacity:6]; … … 1817 1824 || gesture == _touchEndDeferringGestureRecognizerForDelayedResettableGestures; 1818 1825 } 1819 1820 #endif // ENABLE(IOS_TOUCH_EVENTS)1821 1826 1822 1827 static NSValue *nsSizeForTapHighlightBorderRadius(WebCore::IntSize borderRadius, CGFloat borderRadiusScale) … … 2222 2227 - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer*)otherGestureRecognizer 2223 2228 { 2224 #if ENABLE(IOS_TOUCH_EVENTS) 2225 for (WKDeferringGestureRecognizer *gesture in self._deferringGestures) { 2229 for (WKDeferringGestureRecognizer *gesture in self.deferringGestures) { 2226 2230 if (isSamePair(gestureRecognizer, otherGestureRecognizer, _touchEventGestureRecognizer.get(), gesture)) 2227 2231 return YES; 2228 2232 } 2229 #endif2230 2233 2231 2234 if ([gestureRecognizer isKindOfClass:WKDeferringGestureRecognizer.class] && [otherGestureRecognizer isKindOfClass:WKDeferringGestureRecognizer.class]) … … 7555 7558 #pragma mark - WKDeferringGestureRecognizerDelegate 7556 7559 7557 - (BOOL)deferringGestureRecognizer:(WKDeferringGestureRecognizer *)deferringGestureRecognizer shouldDeferGesturesAfterBeginningTouchesWithEvent:(UIEvent *)event 7558 { 7559 return ![self gestureRecognizer:deferringGestureRecognizer isInterruptingMomentumScrollingWithEvent:event]; 7560 - (WebKit::ShouldDeferGestures)deferringGestureRecognizer:(WKDeferringGestureRecognizer *)deferringGestureRecognizer willBeginTouchesWithEvent:(UIEvent *)event 7561 { 7562 self.gestureRecognizerConsistencyEnforcer.beginTracking(deferringGestureRecognizer); 7563 7564 return [self gestureRecognizer:deferringGestureRecognizer isInterruptingMomentumScrollingWithEvent:event] ? WebKit::ShouldDeferGestures::No : WebKit::ShouldDeferGestures::Yes; 7565 } 7566 7567 - (void)deferringGestureRecognizer:(WKDeferringGestureRecognizer *)deferringGestureRecognizer didTransitionToState:(UIGestureRecognizerState)state 7568 { 7569 if (state == UIGestureRecognizerStateEnded || state == UIGestureRecognizerStateFailed || state == UIGestureRecognizerStateCancelled) 7570 self.gestureRecognizerConsistencyEnforcer.endTracking(deferringGestureRecognizer); 7560 7571 } 7561 7572 7562 7573 - (void)deferringGestureRecognizer:(WKDeferringGestureRecognizer *)deferringGestureRecognizer didEndTouchesWithEvent:(UIEvent *)event 7563 7574 { 7575 self.gestureRecognizerConsistencyEnforcer.endTracking(deferringGestureRecognizer); 7576 7564 7577 if (deferringGestureRecognizer.state != UIGestureRecognizerStatePossible) 7565 7578 return; 7566 7579 7567 #if ENABLE(IOS_TOUCH_EVENTS)7568 7580 if (_page->isHandlingPreventableTouchStart() && [self _isTouchStartDeferringGesture:deferringGestureRecognizer]) 7569 7581 return; … … 7571 7583 if (_page->isHandlingPreventableTouchEnd() && [self _isTouchEndDeferringGesture:deferringGestureRecognizer]) 7572 7584 return; 7573 #endif7574 7585 7575 7586 if ([_touchEventGestureRecognizer state] == UIGestureRecognizerStatePossible) -
trunk/Source/WebKit/UIProcess/ios/WKDeferringGestureRecognizer.h
r272584 r273305 28 28 #import <UIKit/UIKit.h> 29 29 30 namespace WebKit { 31 32 enum class ShouldDeferGestures : bool { No, Yes }; 33 34 } // namespace WebKit 35 30 36 @class WKDeferringGestureRecognizer; 31 37 32 38 @protocol WKDeferringGestureRecognizerDelegate 33 - (BOOL)deferringGestureRecognizer:(WKDeferringGestureRecognizer *)deferringGestureRecognizer shouldDeferGesturesAfterBeginningTouchesWithEvent:(UIEvent *)event;34 - (BOOL)deferringGestureRecognizer:(WKDeferringGestureRecognizer *)deferringGestureRecognizer didEndTouchesWithEvent:(UIEvent *)event;35 39 - (BOOL)deferringGestureRecognizer:(WKDeferringGestureRecognizer *)deferringGestureRecognizer shouldDeferOtherGestureRecognizer:(UIGestureRecognizer *)gestureRecognizer; 40 - (WebKit::ShouldDeferGestures)deferringGestureRecognizer:(WKDeferringGestureRecognizer *)deferringGestureRecognizer willBeginTouchesWithEvent:(UIEvent *)event; 41 - (void)deferringGestureRecognizer:(WKDeferringGestureRecognizer *)deferringGestureRecognizer didEndTouchesWithEvent:(UIEvent *)event; 42 - (void)deferringGestureRecognizer:(WKDeferringGestureRecognizer *)deferringGestureRecognizer didTransitionToState:(UIGestureRecognizerState)state; 36 43 @end 37 44 … … 42 49 - (BOOL)shouldDeferGestureRecognizer:(UIGestureRecognizer *)gestureRecognizer; 43 50 44 @property (nonatomic, weak, readonly) id <WKDeferringGestureRecognizerDelegate> deferringGestureDelegate;45 46 51 @end 47 52 -
trunk/Source/WebKit/UIProcess/ios/WKDeferringGestureRecognizer.mm
r272584 r273305 42 42 } 43 43 44 - (id <WKDeferringGestureRecognizerDelegate>)deferringGestureDelegate45 {46 return _deferringGestureDelegate.get().get();47 }48 49 44 - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event 50 45 { 46 auto shouldDeferGestures = [_deferringGestureDelegate deferringGestureRecognizer:self willBeginTouchesWithEvent:event]; 51 47 [super touchesBegan:touches withEvent:event]; 52 if ([_deferringGestureDelegate deferringGestureRecognizer:self shouldDeferGesturesAfterBeginningTouchesWithEvent:event])53 return;54 48 55 self.state = UIGestureRecognizerStateFailed; 49 if (shouldDeferGestures == WebKit::ShouldDeferGestures::No) 50 self.state = UIGestureRecognizerStateFailed; 56 51 } 57 52 … … 87 82 } 88 83 84 - (void)setState:(UIGestureRecognizerState)state 85 { 86 auto previousState = self.state; 87 [super setState:state]; 88 89 if (previousState != self.state) 90 [_deferringGestureDelegate deferringGestureRecognizer:self didTransitionToState:state]; 91 } 92 89 93 @end 90 94 -
trunk/Source/WebKit/UIProcess/mac/WKPrintingView.h
r271384 r273305 33 33 #import <wtf/RetainPtr.h> 34 34 #import <wtf/Vector.h> 35 #import <wtf/WeakObjCPtr.h> 35 36 36 37 @class WKPrintingViewData; -
trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj
r273288 r273305 2007 2007 F4BA33F225757E89000A3CE8 /* WKImageExtractionGestureRecognizer.h in Headers */ = {isa = PBXBuildFile; fileRef = F4BA33F025757E89000A3CE8 /* WKImageExtractionGestureRecognizer.h */; }; 2008 2008 F4CB09E5225D5A0900891487 /* WebsiteMediaSourcePolicy.h in Headers */ = {isa = PBXBuildFile; fileRef = F4CB09E4225D5A0300891487 /* WebsiteMediaSourcePolicy.h */; }; 2009 F4CF1E9D25E40DCC000F9D73 /* GestureRecognizerConsistencyEnforcer.h in Headers */ = {isa = PBXBuildFile; fileRef = F4CF1E9B25E40DCC000F9D73 /* GestureRecognizerConsistencyEnforcer.h */; }; 2009 2010 F4D5F51D206087A10038BBA8 /* WKTextInputListViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = F4D5F519206087A00038BBA8 /* WKTextInputListViewController.h */; }; 2010 2011 F4D5F51F206087A10038BBA8 /* WKQuickboardListViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = F4D5F51B206087A10038BBA8 /* WKQuickboardListViewController.h */; }; … … 5885 5886 F4BA33F125757E89000A3CE8 /* WKImageExtractionGestureRecognizer.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = WKImageExtractionGestureRecognizer.mm; path = ios/WKImageExtractionGestureRecognizer.mm; sourceTree = "<group>"; }; 5886 5887 F4CB09E4225D5A0300891487 /* WebsiteMediaSourcePolicy.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = WebsiteMediaSourcePolicy.h; sourceTree = "<group>"; }; 5888 F4CF1E9B25E40DCC000F9D73 /* GestureRecognizerConsistencyEnforcer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GestureRecognizerConsistencyEnforcer.h; path = ios/GestureRecognizerConsistencyEnforcer.h; sourceTree = "<group>"; }; 5889 F4CF1E9C25E40DCC000F9D73 /* GestureRecognizerConsistencyEnforcer.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = GestureRecognizerConsistencyEnforcer.mm; path = ios/GestureRecognizerConsistencyEnforcer.mm; sourceTree = "<group>"; }; 5887 5890 F4D5F519206087A00038BBA8 /* WKTextInputListViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WKTextInputListViewController.h; path = ios/forms/WKTextInputListViewController.h; sourceTree = "<group>"; }; 5888 5891 F4D5F51A206087A10038BBA8 /* WKTextInputListViewController.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = WKTextInputListViewController.mm; path = ios/forms/WKTextInputListViewController.mm; sourceTree = "<group>"; }; … … 7580 7583 CDCDC99B248FE8DA00A69522 /* EndowmentStateTracker.h */, 7581 7584 CDCDC99C248FE8DA00A69522 /* EndowmentStateTracker.mm */, 7585 F4CF1E9B25E40DCC000F9D73 /* GestureRecognizerConsistencyEnforcer.h */, 7586 F4CF1E9C25E40DCC000F9D73 /* GestureRecognizerConsistencyEnforcer.mm */, 7582 7587 2DD45ADC1E5F8972006C355F /* InputViewUpdateDeferrer.h */, 7583 7588 2DD45ADD1E5F8972006C355F /* InputViewUpdateDeferrer.mm */, … … 11745 11750 BC06F44A12DBD1F5002D78DE /* GeolocationPermissionRequestManagerProxy.h in Headers */, 11746 11751 BC06F43A12DBCCFB002D78DE /* GeolocationPermissionRequestProxy.h in Headers */, 11752 F4CF1E9D25E40DCC000F9D73 /* GestureRecognizerConsistencyEnforcer.h in Headers */, 11747 11753 2DA944A41884E4F000ED86DB /* GestureTypes.h in Headers */, 11748 11754 4614F13225DED875007006E7 /* GPUProcessConnectionParameters.h in Headers */,
Note:
See TracChangeset
for help on using the changeset viewer.