Changeset 268384 in webkit
- Timestamp:
- Oct 12, 2020 7:15:00 PM (3 years ago)
- Location:
- trunk
- Files:
-
- 2 added
- 17 edited
- 1 copied
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit/ChangeLog
r268383 r268384 1 2020-10-12 Devin Rousso <drousso@apple.com> 2 3 CSS "any-pointer:fine" media query false on iPad/Pencil 4 https://bugs.webkit.org/show_bug.cgi?id=212580 5 <rdar://problem/63813283> 6 7 Reviewed by Wenson Hsieh. 8 9 Use `+[UIScribbleInteraction isPencilInputExpected]` as a proxy for the presence of stylus 10 devices as there's no way of directly querying for connected stylus devices (especially if 11 there is no active connection). When the value is changed to `YES`, notify all WebProcess 12 immediately. When the value is changed to `NO`, use an `NSTimer` to delay notifying all 13 WebProcess for 10min in case the user starts using their stylus again. 14 15 For live-on/tweaking purposes this 10min timeout can be adjusted before the UIProcess is 16 created with the `WKStylusDeviceObserverChangeTimeInterval` key in `NSUserDefaults`. 17 18 * UIProcess/ios/WKStylusDeviceObserver.h: Added. 19 * UIProcess/ios/WKStylusDeviceObserver.mm: Added. 20 (+[WKStylusDeviceObserver sharedInstance]): 21 (-[WKStylusDeviceObserver init]): 22 (-[WKStylusDeviceObserver setHasStylusDevice:]): 23 (-[WKStylusDeviceObserver start]): 24 (-[WKStylusDeviceObserver stop]): 25 (-[WKStylusDeviceObserver observeValueForKeyPath:ofObject:change:context:]): 26 (-[WKStylusDeviceObserver startChangeTimer:]): 27 (-[WKStylusDeviceObserver changeTimerFired:]): 28 Use ObjC KVO to listen for changes to `+[UIScribbleInteraction isPencilInputExpected]`. 29 30 * UIProcess/WebProcessProxy.h: 31 * UIProcess/WebProcessProxy.cpp: 32 (WebKit::WebProcessProxy::notifyHasStylusDeviceChanged): Added. 33 * UIProcess/ios/WebProcessProxyIOS.mm: 34 (WebKit::WebProcessProxy::platformInitialize): 35 (WebKit::WebProcessProxy::platformDestroy): 36 Tell the shared `WKStylusDeviceObserver` to start listening when creating the WebProcess. 37 38 * UIProcess/Cocoa/WebProcessPoolCocoa.mm: 39 (WebKit::WebProcessPool::platformInitializeWebProcess): 40 * Shared/WebProcessCreationParameters.h: 41 * Shared/WebProcessCreationParameters.cpp: 42 (WebKit::WebProcessCreationParameters::encode const): 43 (WebKit::WebProcessCreationParameters::decode): 44 Use the current state of the shared `WKStylusDeviceObserver` when creating WebProcess 45 instead of sending a `SetHasStylusDevice` message immediately after the WebProcess is 46 created. 47 48 * WebProcess/WebProcess.messages.in: 49 * WebProcess/WebProcess.h: 50 (WebKit::WebProcess::hasStylusDevice const): Added. 51 * WebProcess/WebProcess.cpp: 52 (WebKit::WebProcess::setHasStylusDevice): Added. 53 (WebKit::WebProcess::initializeWebProcess): 54 Update style (including `any-pointer`) whenever stylus devices change. 55 56 * WebProcess/WebPage/ios/WebPageIOS.mm: 57 (WebKit::hasStylusDevice): Added. 58 (WebKit::WebPage::pointerCharacteristicsOfAllAvailablePointingDevices const): 59 Include `fine` when there is a stylus device. 60 61 * UIProcess/ios/WKMouseDeviceObserver.h: 62 * UIProcess/ios/WKMouseDeviceObserver.mm: 63 (-[WKMouseDeviceObserver start]): 64 (-[WKMouseDeviceObserver stop]): 65 (-[WKMouseDeviceObserver dealloc]): Removed. 66 Drive-by: use a count of `start`/`stop` instead of `WebProcessProxy::allProcesses` size. 67 68 * SourcesCocoa.txt: 69 * WebKit.xcodeproj/project.pbxproj: 70 1 71 2020-10-12 Darin Adler <darin@apple.com> 2 72 -
trunk/Source/WebKit/Shared/WebProcessCreationParameters.cpp
r268086 r268384 89 89 encoder << hasMouseDevice; 90 90 #endif 91 encoder << hasStylusDevice; 91 92 encoder << defaultRequestTimeoutInterval; 92 93 encoder << backForwardCacheCapacity; … … 302 303 return false; 303 304 #endif 305 if (!decoder.decode(parameters.hasStylusDevice)) 306 return false; 304 307 if (!decoder.decode(parameters.defaultRequestTimeoutInterval)) 305 308 return false; -
trunk/Source/WebKit/Shared/WebProcessCreationParameters.h
r268086 r268384 121 121 bool hasMouseDevice { false }; 122 122 #endif 123 bool hasStylusDevice { false }; 123 124 bool memoryCacheDisabled { false }; 124 125 bool attrStyleEnabled { false }; -
trunk/Source/WebKit/SourcesCocoa.txt
r268086 r268384 467 467 UIProcess/ios/WKPDFView.mm 468 468 UIProcess/ios/WKScrollView.mm 469 UIProcess/ios/WKStylusDeviceObserver.mm 469 470 UIProcess/ios/WKSyntheticFlagsChangedWebEvent.mm 470 471 UIProcess/ios/WKSyntheticTapGestureRecognizer.mm -
trunk/Source/WebKit/UIProcess/Cocoa/WebProcessPoolCocoa.mm
r268278 r268384 42 42 #import "WKBrowsingContextControllerInternal.h" 43 43 #import "WKMouseDeviceObserver.h" 44 #import "WKStylusDeviceObserver.h" 44 45 #import "WebBackForwardCache.h" 45 46 #import "WebMemoryPressureHandler.h" … … 517 518 parameters.hasMouseDevice = [[WKMouseDeviceObserver sharedInstance] hasMouseDevice]; 518 519 #endif 520 521 #if HAVE(PENCILKIT_TEXT_INPUT) 522 parameters.hasStylusDevice = [[WKStylusDeviceObserver sharedInstance] hasStylusDevice]; 523 #endif 519 524 } 520 525 -
trunk/Source/WebKit/UIProcess/WebProcessProxy.cpp
r268243 r268384 1148 1148 } 1149 1149 1150 void WebProcessProxy::notifyHasStylusDeviceChanged(bool hasStylusDevice) 1151 { 1152 for (auto* webProcessProxy : WebProcessProxy::allProcesses().values()) 1153 webProcessProxy->send(Messages::WebProcess::SetHasStylusDevice(hasStylusDevice), 0); 1154 } 1155 1150 1156 void WebProcessProxy::fetchWebsiteData(PAL::SessionID sessionID, OptionSet<WebsiteDataType> dataTypes, CompletionHandler<void(WebsiteData)>&& completionHandler) 1151 1157 { -
trunk/Source/WebKit/UIProcess/WebProcessProxy.h
r268270 r268384 216 216 #endif 217 217 218 static void notifyHasStylusDeviceChanged(bool hasStylusDevice); 219 218 220 void fetchWebsiteData(PAL::SessionID, OptionSet<WebsiteDataType>, CompletionHandler<void(WebsiteData)>&&); 219 221 void deleteWebsiteData(PAL::SessionID, OptionSet<WebsiteDataType>, WallTime modifiedSince, CompletionHandler<void()>&&); -
trunk/Source/WebKit/UIProcess/ios/WKMouseDeviceObserver.h
r268086 r268384 35 35 36 36 + (WKMouseDeviceObserver *)sharedInstance; 37 + (instancetype)new NS_UNAVAILABLE; 38 - (instancetype)init NS_UNAVAILABLE; 37 39 38 40 - (void)start; -
trunk/Source/WebKit/UIProcess/ios/WKMouseDeviceObserver.mm
r268086 r268384 34 34 @implementation WKMouseDeviceObserver { 35 35 BOOL _hasMouseDevice; 36 size_t _startCount; 36 37 RetainPtr<id<BSInvalidatable>> _token; 37 38 } … … 45 46 } 46 47 47 - (void)dealloc48 {49 [self stop];50 51 [super dealloc];52 }53 54 48 #pragma mark - BKSMousePointerDeviceObserver state 55 49 56 50 - (void)start 57 51 { 58 if ( _token)52 if (++_startCount > 1) 59 53 return; 60 54 55 ASSERT(!_token); 61 56 _token = [[BKSMousePointerService sharedInstance] addPointerDeviceObserver:self]; 62 57 } … … 64 59 - (void)stop 65 60 { 66 if (!_token) 61 ASSERT(_startCount > 1); 62 if (--_startCount) 67 63 return; 68 64 65 ASSERT(_token); 69 66 [_token invalidate]; 70 67 _token = nil; -
trunk/Source/WebKit/UIProcess/ios/WKStylusDeviceObserver.h
r268383 r268384 24 24 */ 25 25 26 #if HAVE( UIKIT_WITH_MOUSE_SUPPORT) && PLATFORM(IOS)26 #if HAVE(PENCILKIT_TEXT_INPUT) 27 27 28 #import "BackBoardServicesSPI.h" 28 @interface WKStylusDeviceObserver : NSObject 29 29 30 namespace WebKit { 31 class WebProcessProxy; 32 } 33 34 @interface WKMouseDeviceObserver : NSObject<BKSMousePointerDeviceObserver> 35 36 + (WKMouseDeviceObserver *)sharedInstance; 30 + (WKStylusDeviceObserver *)sharedInstance; 31 + (instancetype)new NS_UNAVAILABLE; 32 - (instancetype)init NS_UNAVAILABLE; 37 33 38 34 - (void)start; 39 35 - (void)stop; 40 36 41 @property (nonatomic, readonly) BOOL hasMouseDevice; 42 43 - (void)_setHasMouseDeviceForTesting:(BOOL)hasMouseDevice; 37 @property (nonatomic, readonly) BOOL hasStylusDevice; 44 38 45 39 @end 46 40 47 #endif // HAVE( UIKIT_WITH_MOUSE_SUPPORT) && PLATFORM(IOS)41 #endif // HAVE(PENCILKIT_TEXT_INPUT) -
trunk/Source/WebKit/UIProcess/ios/WebProcessProxyIOS.mm
r268086 r268384 32 32 #import "WKFullKeyboardAccessWatcher.h" 33 33 #import "WKMouseDeviceObserver.h" 34 #import "WKStylusDeviceObserver.h" 34 35 #import "WebProcessMessages.h" 35 36 … … 39 40 { 40 41 #if HAVE(UIKIT_WITH_MOUSE_SUPPORT) && PLATFORM(IOS) 41 if (WebProcessProxy::allProcesses().size() == 1) 42 [[WKMouseDeviceObserver sharedInstance] start]; 42 [[WKMouseDeviceObserver sharedInstance] start]; 43 #endif 44 #if HAVE(PENCILKIT_TEXT_INPUT) 45 [[WKStylusDeviceObserver sharedInstance] start]; 43 46 #endif 44 47 } … … 47 50 { 48 51 #if HAVE(UIKIT_WITH_MOUSE_SUPPORT) && PLATFORM(IOS) 49 if (WebProcessProxy::allProcesses().isEmpty()) 50 [[WKMouseDeviceObserver sharedInstance] stop]; 52 [[WKMouseDeviceObserver sharedInstance] stop]; 53 #endif 54 #if HAVE(PENCILKIT_TEXT_INPUT) 55 [[WKStylusDeviceObserver sharedInstance] stop]; 51 56 #endif 52 57 } -
trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj
r268372 r268384 1387 1387 93F549B41E3174B7000E7239 /* WKSnapshotConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = 93F549B31E3174B7000E7239 /* WKSnapshotConfiguration.h */; settings = {ATTRIBUTES = (Public, ); }; }; 1388 1388 950F2880252414EA00B74F1C /* WKMouseDeviceObserver.h in Headers */ = {isa = PBXBuildFile; fileRef = 950F287E252414E900B74F1C /* WKMouseDeviceObserver.h */; }; 1389 9593675F252E5E3100D3F0A0 /* WKStylusDeviceObserver.h in Headers */ = {isa = PBXBuildFile; fileRef = 9593675D252E5E3000D3F0A0 /* WKStylusDeviceObserver.h */; }; 1389 1390 95C943912523C0D00054F3D5 /* BaseBoardSPI.h in Headers */ = {isa = PBXBuildFile; fileRef = 95C943902523C0D00054F3D5 /* BaseBoardSPI.h */; }; 1390 1391 99036AE223A949CF0000B06A /* _WKInspectorDebuggableInfoInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 99036AE123A949CE0000B06A /* _WKInspectorDebuggableInfoInternal.h */; }; … … 4463 4464 950F287E252414E900B74F1C /* WKMouseDeviceObserver.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WKMouseDeviceObserver.h; path = ios/WKMouseDeviceObserver.h; sourceTree = "<group>"; }; 4464 4465 950F287F252414EA00B74F1C /* WKMouseDeviceObserver.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = WKMouseDeviceObserver.mm; path = ios/WKMouseDeviceObserver.mm; sourceTree = "<group>"; }; 4466 9593675D252E5E3000D3F0A0 /* WKStylusDeviceObserver.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WKStylusDeviceObserver.h; path = ios/WKStylusDeviceObserver.h; sourceTree = "<group>"; }; 4467 9593675E252E5E3100D3F0A0 /* WKStylusDeviceObserver.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = WKStylusDeviceObserver.mm; path = ios/WKStylusDeviceObserver.mm; sourceTree = "<group>"; }; 4465 4468 95C943902523C0D00054F3D5 /* BaseBoardSPI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BaseBoardSPI.h; sourceTree = "<group>"; }; 4466 4469 99036AE123A949CE0000B06A /* _WKInspectorDebuggableInfoInternal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _WKInspectorDebuggableInfoInternal.h; sourceTree = "<group>"; }; … … 7089 7092 0FCB4E4418BBE044000FCFC9 /* WKScrollView.h */, 7090 7093 0FCB4E4518BBE044000FCFC9 /* WKScrollView.mm */, 7094 9593675D252E5E3000D3F0A0 /* WKStylusDeviceObserver.h */, 7095 9593675E252E5E3100D3F0A0 /* WKStylusDeviceObserver.mm */, 7091 7096 CE5B4C8621B73D870022E64F /* WKSyntheticFlagsChangedWebEvent.h */, 7092 7097 CE5B4C8721B73D870022E64F /* WKSyntheticFlagsChangedWebEvent.mm */, … … 11814 11819 BC40761A124FF0370068F20A /* WKStringCF.h in Headers */, 11815 11820 BC9099801256A98200083756 /* WKStringPrivate.h in Headers */, 11821 9593675F252E5E3100D3F0A0 /* WKStylusDeviceObserver.h in Headers */, 11816 11822 CE5B4C8821B73D870022E64F /* WKSyntheticFlagsChangedWebEvent.h in Headers */, 11817 11823 26F10BE819187E2E001D0E68 /* WKSyntheticTapGestureRecognizer.h in Headers */, -
trunk/Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm
r268116 r268384 4019 4019 { 4020 4020 OptionSet<PointerCharacteristics> result(PointerCharacteristics::Coarse); 4021 if (hasMouseDevice() )4021 if (hasMouseDevice() || WebProcess::singleton().hasStylusDevice()) 4022 4022 result.add(PointerCharacteristics::Fine); 4023 4023 return result; -
trunk/Source/WebKit/WebProcess/WebProcess.cpp
r268086 r268384 407 407 m_fullKeyboardAccessEnabled = parameters.fullKeyboardAccessEnabled; 408 408 409 m_hasStylusDevice = parameters.hasStylusDevice; 410 409 411 for (auto& scheme : parameters.urlSchemesRegisteredAsEmptyDocument) 410 412 registerURLSchemeAsEmptyDocument(scheme); … … 1064 1066 1065 1067 #endif // HAVE(UIKIT_WITH_MOUSE_SUPPORT) && PLATFORM(IOS) 1068 1069 void WebProcess::setHasStylusDevice(bool hasStylusDevice) 1070 { 1071 if (hasStylusDevice == m_hasStylusDevice) 1072 return; 1073 1074 m_hasStylusDevice = hasStylusDevice; 1075 1076 Page::updateStyleForAllPagesAfterGlobalChangeInEnvironment(); 1077 } 1066 1078 1067 1079 #if ENABLE(GAMEPAD) -
trunk/Source/WebKit/WebProcess/WebProcess.h
r268086 r268384 193 193 #endif 194 194 195 bool hasStylusDevice() const { return m_hasStylusDevice; } 196 void setHasStylusDevice(bool); 197 195 198 WebFrame* webFrame(WebCore::FrameIdentifier) const; 196 199 Vector<WebFrame*> webFrames() const; … … 564 567 #endif 565 568 569 bool m_hasStylusDevice { false }; 570 566 571 HashMap<WebCore::FrameIdentifier, WebFrame*> m_frameMap; 567 572 -
trunk/Source/WebKit/WebProcess/WebProcess.messages.in
r268086 r268384 56 56 SetHasMouseDevice(bool hasMouseDevice) 57 57 #endif 58 59 SetHasStylusDevice(bool hasStylusDevice) 58 60 59 61 # Plug-ins. -
trunk/Tools/ChangeLog
r268373 r268384 1 2020-10-12 Devin Rousso <drousso@apple.com> 2 3 CSS "any-pointer:fine" media query false on iPad/Pencil 4 https://bugs.webkit.org/show_bug.cgi?id=212580 5 <rdar://problem/63813283> 6 7 Reviewed by Wenson Hsieh. 8 9 * TestWebKitAPI/Tests/WebKitCocoa/iOSStylusSupport.mm: Added. 10 (iOSStylusSupport.StylusInitiallyDisconnected): 11 (iOSStylusSupport.StylusInitiallyConnected): 12 (iOSStylusSupport.StylusLaterDisconnected): 13 (iOSStylusSupport.StylusLaterConnected): 14 (iOSStylusSupport.StylusDisconnectedTimeout): 15 16 * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: 17 1 18 2020-10-12 Jonathan Bedard <jbedard@apple.com> 2 19 -
trunk/Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj
r268239 r268384 830 830 93F56DA91E5F919D003EDE84 /* WKWebViewSnapshot.mm in Sources */ = {isa = PBXBuildFile; fileRef = 93F56DA81E5F9181003EDE84 /* WKWebViewSnapshot.mm */; }; 831 831 93F7E86F14DC8E5C00C84A99 /* NewFirstVisuallyNonEmptyLayoutFrames_Bundle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 93F7E86E14DC8E5B00C84A99 /* NewFirstVisuallyNonEmptyLayoutFrames_Bundle.cpp */; }; 832 950E4CC1252E75240071659F /* iOSStylusSupport.mm in Sources */ = {isa = PBXBuildFile; fileRef = 950E4CC0252E75230071659F /* iOSStylusSupport.mm */; }; 832 833 95B6B3B7251EBF2F00FC4382 /* MediaDocument.mm in Sources */ = {isa = PBXBuildFile; fileRef = 95B6B3B6251EBF2F00FC4382 /* MediaDocument.mm */; }; 833 834 9984FACC1CFFAF60008D198C /* WKWebViewTextInput.mm in Sources */ = {isa = PBXBuildFile; fileRef = 9984FACA1CFFAEEE008D198C /* WKWebViewTextInput.mm */; }; … … 2440 2441 93F7E86B14DC8E4D00C84A99 /* NewFirstVisuallyNonEmptyLayoutFrames.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = NewFirstVisuallyNonEmptyLayoutFrames.cpp; sourceTree = "<group>"; }; 2441 2442 93F7E86E14DC8E5B00C84A99 /* NewFirstVisuallyNonEmptyLayoutFrames_Bundle.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = NewFirstVisuallyNonEmptyLayoutFrames_Bundle.cpp; sourceTree = "<group>"; }; 2443 950E4CC0252E75230071659F /* iOSStylusSupport.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = iOSStylusSupport.mm; sourceTree = "<group>"; }; 2442 2444 95B6B3B6251EBF2F00FC4382 /* MediaDocument.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MediaDocument.mm; sourceTree = "<group>"; }; 2443 2445 9984FACA1CFFAEEE008D198C /* WKWebViewTextInput.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WKWebViewTextInput.mm; sourceTree = "<group>"; }; … … 3273 3275 2DB0232E1E4E871800707123 /* InteractionDeadlockAfterCrash.mm */, 3274 3276 2D116E1223E0CB3900208900 /* iOSMouseSupport.mm */, 3277 950E4CC0252E75230071659F /* iOSStylusSupport.mm */, 3275 3278 9B6D9FF8252EFDE500A51640 /* IPCTestingAPI.mm */, 3276 3279 5C69BDD41F82A7EB000F4F4B /* JavaScriptDuringNavigation.mm */, … … 5230 5233 7A909A831D877480007E10F8 /* IntSizeTests.cpp in Sources */, 5231 5234 2D116E1323E0CB3A00208900 /* iOSMouseSupport.mm in Sources */, 5235 950E4CC1252E75240071659F /* iOSStylusSupport.mm in Sources */, 5232 5236 9B6D9FF9252EFDE500A51640 /* IPCTestingAPI.mm in Sources */, 5233 5237 5C0BF8931DD599BD00B00328 /* IsNavigationActionTrusted.mm in Sources */,
Note: See TracChangeset
for help on using the changeset viewer.