Changeset 259315 in webkit
- Timestamp:
- Mar 31, 2020 3:09:46 PM (4 years ago)
- Location:
- trunk/Source
- Files:
-
- 12 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r259313 r259315 1 2020-03-31 Chris Dumez <cdumez@apple.com> 2 3 Regression(r253357) DeviceMotionEvent acceleration and rotationRate are null 4 https://bugs.webkit.org/show_bug.cgi?id=209831 5 <rdar://problem/60720953> 6 7 Reviewed by Darin Adler. 8 9 The issue was that DeviceMotionClientIOS::motionChanged() would only initialize the 10 acceleration and rotationRate if [m_motionManager gyroAvailable] returned YES. After 11 r253357, m_motionManager is nil because we get motion data from the UIProcess so 12 [m_motionManager gyroAvailable] would always resolve to NO. 13 14 To address the issue, I made the rotationRate parameters to motionChanged() optional 15 and we rely on them being set to know if gyro data is available. Note that I did not 16 make the acceleration optional because according to [1], all devices have an 17 accelerometer. 18 19 [1] https://developer.apple.com/documentation/coremotion/cmmotionmanager/1616094-devicemotionavailable?language=objc 20 21 * platform/ios/DeviceMotionClientIOS.h: 22 * platform/ios/DeviceMotionClientIOS.mm: 23 (WebCore::DeviceMotionClientIOS::motionChanged): 24 * platform/ios/DeviceOrientationUpdateProvider.h: 25 * platform/ios/MotionManagerClient.h: 26 (WebCore::MotionManagerClient::motionChanged): 27 * platform/ios/WebCoreMotionManager.mm: 28 (-[WebCoreMotionManager sendAccelerometerData:]): 29 1 30 2020-03-31 Antoine Quint <graouts@apple.com> 2 31 -
trunk/Source/WebCore/platform/ios/DeviceMotionClientIOS.h
r253357 r259315 49 49 void deviceMotionControllerDestroyed() override; 50 50 51 void motionChanged(double, double, double, double, double, double, double, double, double) override;51 void motionChanged(double, double, double, double, double, double, Optional<double>, Optional<double>, Optional<double>) override; 52 52 53 53 private: -
trunk/Source/WebCore/platform/ios/DeviceMotionClientIOS.mm
r253357 r259315 92 92 } 93 93 94 void DeviceMotionClientIOS::motionChanged(double xAcceleration, double yAcceleration, double zAcceleration, double xAccelerationIncludingGravity, double yAccelerationIncludingGravity, double zAccelerationIncludingGravity, double xRotationRate, double yRotationRate, doublezRotationRate)94 void DeviceMotionClientIOS::motionChanged(double xAcceleration, double yAcceleration, double zAcceleration, double xAccelerationIncludingGravity, double yAccelerationIncludingGravity, double zAccelerationIncludingGravity, Optional<double> xRotationRate, Optional<double> yRotationRate, Optional<double> zRotationRate) 95 95 { 96 96 if (!m_updating) … … 114 114 auto accelerationIncludingGravity = DeviceMotionData::Acceleration::create(xAccelerationIncludingGravity, yAccelerationIncludingGravity, zAccelerationIncludingGravity); 115 115 116 RefPtr<DeviceMotionData::Acceleration> acceleration ;116 RefPtr<DeviceMotionData::Acceleration> acceleration = DeviceMotionData::Acceleration::create(xAcceleration, yAcceleration, zAcceleration); 117 117 RefPtr<DeviceMotionData::RotationRate> rotationRate; 118 if ([m_motionManager gyroAvailable]) { 119 acceleration = DeviceMotionData::Acceleration::create(xAcceleration, yAcceleration, zAcceleration); 120 rotationRate = DeviceMotionData::RotationRate::create(xRotationRate, yRotationRate, zRotationRate); 121 } 118 // Not all devices have a gyroscope. 119 if (xRotationRate && yRotationRate && zRotationRate) 120 rotationRate = DeviceMotionData::RotationRate::create(*xRotationRate, *yRotationRate, *zRotationRate); 122 121 #endif // PLATFORM(IOS_FAMILY_SIMULATOR) 123 122 -
trunk/Source/WebCore/platform/ios/DeviceOrientationUpdateProvider.h
r253357 r259315 45 45 46 46 virtual void deviceOrientationChanged(double, double, double, double, double) = 0; 47 virtual void deviceMotionChanged(double, double, double, double, double, double, double, double, double) = 0;47 virtual void deviceMotionChanged(double, double, double, double, double, double, Optional<double>, Optional<double>, Optional<double>) = 0; 48 48 49 49 protected: -
trunk/Source/WebCore/platform/ios/MotionManagerClient.h
r253357 r259315 37 37 38 38 virtual void orientationChanged(double, double, double, double, double) { } 39 virtual void motionChanged(double, double, double, double, double, double, double, double, double) { }39 virtual void motionChanged(double, double, double, double, double, double, Optional<double>, Optional<double>, Optional<double>) { } 40 40 }; 41 41 -
trunk/Source/WebCore/platform/ios/WebCoreMotionManager.mm
r253357 r259315 233 233 for (auto& client : motionClients) { 234 234 if (client) 235 client->motionChanged(0, 0, 0, accel.x * kGravity, accel.y * kGravity, accel.z * kGravity, 0, 0, 0);235 client->motionChanged(0, 0, 0, accel.x * kGravity, accel.y * kGravity, accel.z * kGravity, WTF::nullopt, WTF::nullopt, WTF::nullopt); 236 236 } 237 237 }); -
trunk/Source/WebKit/ChangeLog
r259307 r259315 1 2020-03-31 Chris Dumez <cdumez@apple.com> 2 3 Regression(r253357) DeviceMotionEvent acceleration and rotationRate are null 4 https://bugs.webkit.org/show_bug.cgi?id=209831 5 <rdar://problem/60720953> 6 7 Reviewed by Darin Adler. 8 9 * UIProcess/ios/WebDeviceOrientationUpdateProviderProxy.h: 10 * UIProcess/ios/WebDeviceOrientationUpdateProviderProxy.mm: 11 (WebKit::WebDeviceOrientationUpdateProviderProxy::motionChanged): 12 * WebProcess/WebCoreSupport/WebDeviceOrientationUpdateProvider.cpp: 13 (WebKit::WebDeviceOrientationUpdateProvider::deviceMotionChanged): 14 * WebProcess/WebCoreSupport/WebDeviceOrientationUpdateProvider.h: 15 * WebProcess/WebCoreSupport/WebDeviceOrientationUpdateProvider.messages.in: 16 1 17 2020-03-31 Alex Christensen <achristensen@webkit.org> 2 18 -
trunk/Source/WebKit/UIProcess/ios/WebDeviceOrientationUpdateProviderProxy.h
r253357 r259315 50 50 // WebCore::WebCoreMotionManagerClient 51 51 void orientationChanged(double, double, double, double, double) final; 52 void motionChanged(double, double, double, double, double, double, double, double, double) final;52 void motionChanged(double, double, double, double, double, double, Optional<double>, Optional<double>, Optional<double>) final; 53 53 54 54 // IPC::MessageReceiver -
trunk/Source/WebKit/UIProcess/ios/WebDeviceOrientationUpdateProviderProxy.mm
r253357 r259315 73 73 } 74 74 75 void WebDeviceOrientationUpdateProviderProxy::motionChanged(double xAcceleration, double yAcceleration, double zAcceleration, double xAccelerationIncludingGravity, double yAccelerationIncludingGravity, double zAccelerationIncludingGravity, double xRotationRate, double yRotationRate, doublezRotationRate)75 void WebDeviceOrientationUpdateProviderProxy::motionChanged(double xAcceleration, double yAcceleration, double zAcceleration, double xAccelerationIncludingGravity, double yAccelerationIncludingGravity, double zAccelerationIncludingGravity, Optional<double> xRotationRate, Optional<double> yRotationRate, Optional<double> zRotationRate) 76 76 { 77 77 m_page.send(Messages::WebDeviceOrientationUpdateProvider::DeviceMotionChanged(xAcceleration, yAcceleration, zAcceleration, xAccelerationIncludingGravity, yAccelerationIncludingGravity, zAccelerationIncludingGravity, xRotationRate, yRotationRate, zRotationRate)); -
trunk/Source/WebKit/WebProcess/WebCoreSupport/WebDeviceOrientationUpdateProvider.cpp
r253357 r259315 94 94 } 95 95 96 void WebDeviceOrientationUpdateProvider::deviceMotionChanged(double xAcceleration, double yAcceleration, double zAcceleration, double xAccelerationIncludingGravity, double yAccelerationIncludingGravity, double zAccelerationIncludingGravity, double xRotationRate, double yRotationRate, doublezRotationRate)96 void WebDeviceOrientationUpdateProvider::deviceMotionChanged(double xAcceleration, double yAcceleration, double zAcceleration, double xAccelerationIncludingGravity, double yAccelerationIncludingGravity, double zAccelerationIncludingGravity, Optional<double> xRotationRate, Optional<double> yRotationRate, Optional<double> zRotationRate) 97 97 { 98 98 Vector<WeakPtr<WebCore::MotionManagerClient>> clients; -
trunk/Source/WebKit/WebProcess/WebCoreSupport/WebDeviceOrientationUpdateProvider.h
r253357 r259315 52 52 void stopUpdatingDeviceMotion(WebCore::MotionManagerClient&) final; 53 53 void deviceOrientationChanged(double, double, double, double, double) final; 54 void deviceMotionChanged(double, double, double, double, double, double, double, double, double) final;54 void deviceMotionChanged(double, double, double, double, double, double, Optional<double>, Optional<double>, Optional<double>) final; 55 55 56 56 // IPC::MessageReceiver. -
trunk/Source/WebKit/WebProcess/WebCoreSupport/WebDeviceOrientationUpdateProvider.messages.in
r253357 r259315 24 24 messages -> WebDeviceOrientationUpdateProvider { 25 25 DeviceOrientationChanged(double alpha, double beta, double gamma, double compassHeading, double compassAccuracy) 26 DeviceMotionChanged(double xAcceleration, double yAcceleration, double zAcceleration, double xAccelerationIncludingGravity, double yAccelerationIncludingGravity, double zAccelerationIncludingGravity, double xRotationRate, double yRotationRate, doublezRotationRate)26 DeviceMotionChanged(double xAcceleration, double yAcceleration, double zAcceleration, double xAccelerationIncludingGravity, double yAccelerationIncludingGravity, double zAccelerationIncludingGravity, Optional<double> xRotationRate, Optional<double> yRotationRate, Optional<double> zRotationRate) 27 27 } 28 28 #endif
Note: See TracChangeset
for help on using the changeset viewer.