haikuwebkit/LayoutTests/fast/device-orientation/device-motion-request-permi...

31 lines
781 B
HTML
Raw Permalink Normal View History

Add support for Device Orientation / Motion permission API https://bugs.webkit.org/show_bug.cgi?id=195329 <rdar://problem/47645367> Reviewed by Geoffrey Garen. Source/WebCore: Add support for Device Orientation / Motion permission API: - https://github.com/w3c/deviceorientation/issues/57 Pages can add event listeners for 'deviceorientation' / 'devicemotion' events but such events will not be fired until the page's JavaScript calls DeviceOrientationEvent.requestPermission() / DeviceMotionEvent.requestPermission() and the user grants the request. The feature is currently behind an experimental feature flag, off by default. Tests: fast/device-orientation/device-motion-request-permission-denied.html fast/device-orientation/device-motion-request-permission-granted.html fast/device-orientation/device-motion-request-permission-user-gesture.html fast/device-orientation/device-orientation-request-permission-denied.html fast/device-orientation/device-orientation-request-permission-granted.html fast/device-orientation/device-orientation-request-permission-user-gesture.html * CMakeLists.txt: * DerivedSources-input.xcfilelist: * DerivedSources-output.xcfilelist: * DerivedSources.make: * Sources.txt: * WebCore.xcodeproj/project.pbxproj: * dom/DeviceMotionEvent.h: * dom/DeviceMotionEvent.idl: * dom/DeviceOrientationAndMotionAccessController.cpp: Added. (WebCore::DeviceOrientationAndMotionAccessController::DeviceOrientationAndMotionAccessController): (WebCore::DeviceOrientationAndMotionAccessController::shouldAllowAccess): (WebCore::DeviceOrientationAndMotionAccessController::setAccessState): * dom/DeviceOrientationAndMotionAccessController.h: Added. (WebCore::DeviceOrientationAndMotionAccessController::accessState const): * dom/DeviceOrientationEvent.h: * dom/DeviceOrientationEvent.idl: * dom/DeviceOrientationOrMotionEvent.cpp: Added. (WebCore::DeviceOrientationOrMotionEvent::requestPermission): * dom/DeviceOrientationOrMotionEvent.h: Added. * dom/DeviceOrientationOrMotionEvent.idl: Added. * dom/DeviceOrientationOrMotionPermissionState.h: Added. * dom/DeviceOrientationOrMotionPermissionState.idl: Added. * dom/Document.cpp: (WebCore::Document::deviceOrientationAndMotionAccessController): * dom/Document.h: * dom/Event.cpp: * dom/MessagePort.cpp: * dom/Microtasks.cpp: * page/ChromeClient.h: * page/DOMWindow.cpp: (WebCore::DOMWindow::addEventListener): (WebCore::DOMWindow::deviceOrientationController const): (WebCore::DOMWindow::deviceMotionController const): (WebCore::DOMWindow::isAllowedToUseDeviceMotionOrientation const): (WebCore::DOMWindow::isAllowedToAddDeviceMotionOrientationListener const): (WebCore::DOMWindow::startListeningForDeviceOrientationIfNecessary): (WebCore::DOMWindow::stopListeningForDeviceOrientationIfNecessary): (WebCore::DOMWindow::startListeningForDeviceMotionIfNecessary): (WebCore::DOMWindow::stopListeningForDeviceMotionIfNecessary): (WebCore::DOMWindow::removeEventListener): (WebCore::DOMWindow::removeAllEventListeners): * page/DOMWindow.h: * page/DeviceController.cpp: (WebCore::DeviceController::hasDeviceEventListener const): * page/DeviceController.h: * page/Settings.yaml: Source/WebKit: Add support for Device Orientation / Motion permission API: - https://github.com/w3c/deviceorientation/issues/57 This adds new SPI to WKUIDelegatePrivate, until we can make this API. * Shared/WebPreferences.yaml: * UIProcess/API/APIUIClient.h: (API::UIClient::shouldAllowDeviceOrientationAndMotionAccess): * UIProcess/API/C/WKPage.cpp: (WKPageSetPageUIClient): * UIProcess/API/C/WKPageUIClient.h: * UIProcess/API/Cocoa/WKUIDelegate.h: * UIProcess/API/Cocoa/WKUIDelegatePrivate.h: * UIProcess/Cocoa/UIDelegate.h: * UIProcess/Cocoa/UIDelegate.mm: (WebKit::UIDelegate::setDelegate): (WebKit::UIDelegate::UIClient::shouldAllowDeviceOrientationAndMotionAccess): * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::requestDeviceOrientationAndMotionAccess): * UIProcess/WebPageProxy.h: * UIProcess/WebPageProxy.messages.in: * WebProcess/WebCoreSupport/WebChromeClient.cpp: (WebKit::WebChromeClient::shouldAllowDeviceOrientationAndMotionAccess): * WebProcess/WebCoreSupport/WebChromeClient.h: * WebProcess/WebPage/WebPage.cpp: (WebKit::nextDeviceOrientationAndMotionPermissionCallbackID): (WebKit::WebPage::shouldAllowDeviceOrientationAndMotionAccess): (WebKit::WebPage::didReceiveDeviceOrientationAndMotionAccessDecision): * WebProcess/WebPage/WebPage.h: * WebProcess/WebPage/WebPage.messages.in: Tools: Add test infrastructure to help test the Device Orientation / Motion permission API. * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl: * WebKitTestRunner/InjectedBundle/TestRunner.cpp: (WTR::TestRunner::setShouldAllowDeviceOrientationAndMotionAccess): * WebKitTestRunner/InjectedBundle/TestRunner.h: * WebKitTestRunner/TestController.cpp: (WTR::shouldAllowDeviceOrientationAndMotionAccess): (WTR::TestController::createWebViewWithOptions): (WTR::TestController::resetStateToConsistentValues): (WTR::TestController::handleDeviceOrientationAndMotionAccessRequest): * WebKitTestRunner/TestController.h: (WTR::TestController::setShouldAllowDeviceOrientationAndMotionAccess): * WebKitTestRunner/TestInvocation.cpp: (WTR::TestInvocation::didReceiveMessageFromInjectedBundle): LayoutTests: Add layout test coverage. * TestExpectations: * fast/device-orientation/device-motion-request-permission-denied-expected.txt: Added. * fast/device-orientation/device-motion-request-permission-denied.html: Added. * fast/device-orientation/device-motion-request-permission-granted-expected.txt: Added. * fast/device-orientation/device-motion-request-permission-granted.html: Added. * fast/device-orientation/device-motion-request-permission-user-gesture-expected.txt: Added. * fast/device-orientation/device-motion-request-permission-user-gesture.html: Added. * fast/device-orientation/device-orientation-request-permission-denied-expected.txt: Added. * fast/device-orientation/device-orientation-request-permission-denied.html: Added. * fast/device-orientation/device-orientation-request-permission-granted-expected.txt: Added. * fast/device-orientation/device-orientation-request-permission-granted.html: Added. * fast/device-orientation/device-orientation-request-permission-user-gesture-expected.txt: Added. * fast/device-orientation/device-orientation-request-permission-user-gesture.html: Added. * http/tests/events/device-orientation-motion-non-secure-context.html: * http/tests/events/device-orientation-motion-secure-context-expected.txt: * http/tests/events/device-orientation-motion-secure-context.html: * platform/ios-wk2/TestExpectations: * platform/ios/http/tests/events/device-orientation-motion-non-secure-context-expected.txt: * platform/ios/http/tests/events/device-orientation-motion-secure-context-expected.txt: Canonical link: https://commits.webkit.org/209800@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@242664 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2019-03-09 00:30:45 +00:00
<!DOCTYPE html>
<html>
<body>
<script src="../../resources/js-test.js"></script>
<script>
description("Basic testing for DeviceMotionEvent.requestPermission().");
jsTestIsAsync = true;
if (window.testRunner)
testRunner.setShouldAllowDeviceOrientationAndMotionAccess(false);
addEventListener("devicemotion", () => {});
internals.withUserGesture(() => {
DeviceMotionEvent.requestPermission().then((_result) => {
result = _result;
shouldBeEqualToString("result", "denied");
addEventListener("devicemotion", () => {});
Device orientation's permission should only require a user gesture to prompt the user https://bugs.webkit.org/show_bug.cgi?id=195731 Reviewed by Geoffrey Garen. Source/WebCore: Device orientation's permission should only require a user gesture to prompt the user. If the user already made a decision, we should resolve the promise with this decision, even without user gesture. This is useful for JS to figure out if they are access to device orientation or not because showing UI for the user to give permission. No new tests, updated existing tests. * dom/DeviceOrientationAndMotionAccessController.cpp: (WebCore::DeviceOrientationAndMotionAccessController::shouldAllowAccess): * dom/DeviceOrientationAndMotionAccessController.h: * dom/DeviceOrientationOrMotionEvent.cpp: (WebCore::DeviceOrientationOrMotionEvent::requestPermission): LayoutTests: Update layout tests accordingly. * fast/device-orientation/device-motion-request-permission-denied.html: * fast/device-orientation/device-motion-request-permission-granted.html: * fast/device-orientation/device-motion-request-permission-user-gesture-expected.txt: * fast/device-orientation/device-orientation-request-permission-denied.html: * fast/device-orientation/device-orientation-request-permission-granted.html: * fast/device-orientation/device-orientation-request-permission-user-gesture-expected.txt: Canonical link: https://commits.webkit.org/210041@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@242951 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2019-03-14 18:57:58 +00:00
DeviceMotionEvent.requestPermission().then((_result) => {
result = _result;
shouldBeEqualToString("result", "denied");
finishJSTest();
Add support for Device Orientation / Motion permission API https://bugs.webkit.org/show_bug.cgi?id=195329 <rdar://problem/47645367> Reviewed by Geoffrey Garen. Source/WebCore: Add support for Device Orientation / Motion permission API: - https://github.com/w3c/deviceorientation/issues/57 Pages can add event listeners for 'deviceorientation' / 'devicemotion' events but such events will not be fired until the page's JavaScript calls DeviceOrientationEvent.requestPermission() / DeviceMotionEvent.requestPermission() and the user grants the request. The feature is currently behind an experimental feature flag, off by default. Tests: fast/device-orientation/device-motion-request-permission-denied.html fast/device-orientation/device-motion-request-permission-granted.html fast/device-orientation/device-motion-request-permission-user-gesture.html fast/device-orientation/device-orientation-request-permission-denied.html fast/device-orientation/device-orientation-request-permission-granted.html fast/device-orientation/device-orientation-request-permission-user-gesture.html * CMakeLists.txt: * DerivedSources-input.xcfilelist: * DerivedSources-output.xcfilelist: * DerivedSources.make: * Sources.txt: * WebCore.xcodeproj/project.pbxproj: * dom/DeviceMotionEvent.h: * dom/DeviceMotionEvent.idl: * dom/DeviceOrientationAndMotionAccessController.cpp: Added. (WebCore::DeviceOrientationAndMotionAccessController::DeviceOrientationAndMotionAccessController): (WebCore::DeviceOrientationAndMotionAccessController::shouldAllowAccess): (WebCore::DeviceOrientationAndMotionAccessController::setAccessState): * dom/DeviceOrientationAndMotionAccessController.h: Added. (WebCore::DeviceOrientationAndMotionAccessController::accessState const): * dom/DeviceOrientationEvent.h: * dom/DeviceOrientationEvent.idl: * dom/DeviceOrientationOrMotionEvent.cpp: Added. (WebCore::DeviceOrientationOrMotionEvent::requestPermission): * dom/DeviceOrientationOrMotionEvent.h: Added. * dom/DeviceOrientationOrMotionEvent.idl: Added. * dom/DeviceOrientationOrMotionPermissionState.h: Added. * dom/DeviceOrientationOrMotionPermissionState.idl: Added. * dom/Document.cpp: (WebCore::Document::deviceOrientationAndMotionAccessController): * dom/Document.h: * dom/Event.cpp: * dom/MessagePort.cpp: * dom/Microtasks.cpp: * page/ChromeClient.h: * page/DOMWindow.cpp: (WebCore::DOMWindow::addEventListener): (WebCore::DOMWindow::deviceOrientationController const): (WebCore::DOMWindow::deviceMotionController const): (WebCore::DOMWindow::isAllowedToUseDeviceMotionOrientation const): (WebCore::DOMWindow::isAllowedToAddDeviceMotionOrientationListener const): (WebCore::DOMWindow::startListeningForDeviceOrientationIfNecessary): (WebCore::DOMWindow::stopListeningForDeviceOrientationIfNecessary): (WebCore::DOMWindow::startListeningForDeviceMotionIfNecessary): (WebCore::DOMWindow::stopListeningForDeviceMotionIfNecessary): (WebCore::DOMWindow::removeEventListener): (WebCore::DOMWindow::removeAllEventListeners): * page/DOMWindow.h: * page/DeviceController.cpp: (WebCore::DeviceController::hasDeviceEventListener const): * page/DeviceController.h: * page/Settings.yaml: Source/WebKit: Add support for Device Orientation / Motion permission API: - https://github.com/w3c/deviceorientation/issues/57 This adds new SPI to WKUIDelegatePrivate, until we can make this API. * Shared/WebPreferences.yaml: * UIProcess/API/APIUIClient.h: (API::UIClient::shouldAllowDeviceOrientationAndMotionAccess): * UIProcess/API/C/WKPage.cpp: (WKPageSetPageUIClient): * UIProcess/API/C/WKPageUIClient.h: * UIProcess/API/Cocoa/WKUIDelegate.h: * UIProcess/API/Cocoa/WKUIDelegatePrivate.h: * UIProcess/Cocoa/UIDelegate.h: * UIProcess/Cocoa/UIDelegate.mm: (WebKit::UIDelegate::setDelegate): (WebKit::UIDelegate::UIClient::shouldAllowDeviceOrientationAndMotionAccess): * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::requestDeviceOrientationAndMotionAccess): * UIProcess/WebPageProxy.h: * UIProcess/WebPageProxy.messages.in: * WebProcess/WebCoreSupport/WebChromeClient.cpp: (WebKit::WebChromeClient::shouldAllowDeviceOrientationAndMotionAccess): * WebProcess/WebCoreSupport/WebChromeClient.h: * WebProcess/WebPage/WebPage.cpp: (WebKit::nextDeviceOrientationAndMotionPermissionCallbackID): (WebKit::WebPage::shouldAllowDeviceOrientationAndMotionAccess): (WebKit::WebPage::didReceiveDeviceOrientationAndMotionAccessDecision): * WebProcess/WebPage/WebPage.h: * WebProcess/WebPage/WebPage.messages.in: Tools: Add test infrastructure to help test the Device Orientation / Motion permission API. * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl: * WebKitTestRunner/InjectedBundle/TestRunner.cpp: (WTR::TestRunner::setShouldAllowDeviceOrientationAndMotionAccess): * WebKitTestRunner/InjectedBundle/TestRunner.h: * WebKitTestRunner/TestController.cpp: (WTR::shouldAllowDeviceOrientationAndMotionAccess): (WTR::TestController::createWebViewWithOptions): (WTR::TestController::resetStateToConsistentValues): (WTR::TestController::handleDeviceOrientationAndMotionAccessRequest): * WebKitTestRunner/TestController.h: (WTR::TestController::setShouldAllowDeviceOrientationAndMotionAccess): * WebKitTestRunner/TestInvocation.cpp: (WTR::TestInvocation::didReceiveMessageFromInjectedBundle): LayoutTests: Add layout test coverage. * TestExpectations: * fast/device-orientation/device-motion-request-permission-denied-expected.txt: Added. * fast/device-orientation/device-motion-request-permission-denied.html: Added. * fast/device-orientation/device-motion-request-permission-granted-expected.txt: Added. * fast/device-orientation/device-motion-request-permission-granted.html: Added. * fast/device-orientation/device-motion-request-permission-user-gesture-expected.txt: Added. * fast/device-orientation/device-motion-request-permission-user-gesture.html: Added. * fast/device-orientation/device-orientation-request-permission-denied-expected.txt: Added. * fast/device-orientation/device-orientation-request-permission-denied.html: Added. * fast/device-orientation/device-orientation-request-permission-granted-expected.txt: Added. * fast/device-orientation/device-orientation-request-permission-granted.html: Added. * fast/device-orientation/device-orientation-request-permission-user-gesture-expected.txt: Added. * fast/device-orientation/device-orientation-request-permission-user-gesture.html: Added. * http/tests/events/device-orientation-motion-non-secure-context.html: * http/tests/events/device-orientation-motion-secure-context-expected.txt: * http/tests/events/device-orientation-motion-secure-context.html: * platform/ios-wk2/TestExpectations: * platform/ios/http/tests/events/device-orientation-motion-non-secure-context-expected.txt: * platform/ios/http/tests/events/device-orientation-motion-secure-context-expected.txt: Canonical link: https://commits.webkit.org/209800@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@242664 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2019-03-09 00:30:45 +00:00
});
});
});
</script>
</body>
</html>