haikuwebkit/Source/WebCore/platform/PlatformKeyboardEvent.cpp

42 lines
1.7 KiB
C++
Raw Permalink Normal View History

REGRESSION (r230523): Caps lock indicator not shown in password field https://bugs.webkit.org/show_bug.cgi?id=190056 Reviewed by Ryosuke Niwa. Source/WebCore: When WindowServer access is blocked, GetCurrentModifiers() always returns 0. Instead of calling GetCurrentModifiers(), store the current modifiers from the key event argument in the method WebKit::WebPage::keyEvent, and use the stored value to detect if Caps lock is on. Additionally, the modifiers needs to be updated when the window becomes active. Test: fast/events/detect-caps-lock.html * Sources.txt: * platform/PlatformKeyboardEvent.h: * platform/graphics/FontTaggedSettings.cpp: * platform/mac/KeyEventMac.mm: (WebCore::PlatformKeyboardEvent::currentCapsLockState): (WebCore::PlatformKeyboardEvent::getCurrentModifierState): * testing/Internals.cpp: (WebCore::Internals::capsLockIsOn): * testing/Internals.h: * testing/Internals.idl: Source/WebKit: Update cached modifier state in the WebProcess when WebKit::WebPage::keyEvent is called, and when the window becomes active. * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::dispatchActivityStateChange): (WebKit::WebPageProxy::updateCurrentModifierState): * UIProcess/WebPageProxy.h: * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::keyEvent): (WebKit::WebPage::updateCurrentModifierState): * WebProcess/WebPage/WebPage.h: * WebProcess/WebPage/WebPage.messages.in: Tools: * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl: * WebKitTestRunner/InjectedBundle/TestRunner.cpp: (WTR::TestRunner::toggleCapsLock): * WebKitTestRunner/InjectedBundle/TestRunner.h: * WebKitTestRunner/TestController.h: * WebKitTestRunner/TestInvocation.cpp: (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle): * WebKitTestRunner/cocoa/TestControllerCocoa.mm: (WTR::TestController::toggleCapsLock): LayoutTests: * TestExpectations: * fast/events/detect-caps-lock-expected.txt: Added. * fast/events/detect-caps-lock.html: Added. * platform/mac/TestExpectations: Canonical link: https://commits.webkit.org/206129@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@237886 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2018-11-06 21:58:29 +00:00
/*
* Copyright (C) 2018 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "config.h"
#include "PlatformKeyboardEvent.h"
#include <wtf/MainThread.h>
namespace WebCore {
Remove WTF::Optional synonym for std::optional, using that class template directly instead https://bugs.webkit.org/show_bug.cgi?id=226433 Reviewed by Chris Dumez. Source/JavaScriptCore: * <many files>: Let the do-webcore-rename script rename Optional<> to std::optional<>. * inspector/scripts/codegen/generate_objc_protocol_types_implementation.py: (ObjCProtocolTypesImplementationGenerator._generate_init_method_for_payload): Use auto instead of Optional<>. Also use * instead of value() and nest the definition of the local inside an if statement in the case where it's an optional. * inspector/scripts/tests/expected/*: Regenerated these results. Source/WebCore: * <many files>: Let the do-webcore-rename script rename Optional<> to std::optional<>. Source/WebCore/PAL: * <many files>: Let the do-webcore-rename script rename Optional<> to std::optional<>. Source/WebDriver: * <many files>: Let the do-webcore-rename script rename Optional<> to std::optional<>. Source/WebKit: * <many files>: Let the do-webcore-rename script rename Optional<> to std::optional<>. * Scripts/webkit/tests: Regenerated expected results, by running the command "python Scripts/webkit/messages_unittest.py -r". (How am I supposed to know to do that?) Source/WebKitLegacy/ios: * WebCoreSupport/WebChromeClientIOS.h: Let the do-webcore-rename script rename Optional<> to std::optional<>. Source/WebKitLegacy/mac: * <many files>: Let the do-webcore-rename script rename Optional<> to std::optional<>. Source/WebKitLegacy/win: * <many files>: Let the do-webcore-rename script rename Optional<> to std::optional<>. Source/WTF: * <many files>: Let the do-webcore-rename script rename Optional<> to std::optional<>. * wtf/Optional.h: Remove WTF::Optional. Tools: * <many files>: Let the do-webcore-rename script rename Optional<> to std::optional<>. Canonical link: https://commits.webkit.org/238290@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@278253 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2021-05-30 16:11:40 +00:00
std::optional<OptionSet<PlatformEvent::Modifier>> PlatformKeyboardEvent::s_currentModifiers;
REGRESSION (r230523): Caps lock indicator not shown in password field https://bugs.webkit.org/show_bug.cgi?id=190056 Reviewed by Ryosuke Niwa. Source/WebCore: When WindowServer access is blocked, GetCurrentModifiers() always returns 0. Instead of calling GetCurrentModifiers(), store the current modifiers from the key event argument in the method WebKit::WebPage::keyEvent, and use the stored value to detect if Caps lock is on. Additionally, the modifiers needs to be updated when the window becomes active. Test: fast/events/detect-caps-lock.html * Sources.txt: * platform/PlatformKeyboardEvent.h: * platform/graphics/FontTaggedSettings.cpp: * platform/mac/KeyEventMac.mm: (WebCore::PlatformKeyboardEvent::currentCapsLockState): (WebCore::PlatformKeyboardEvent::getCurrentModifierState): * testing/Internals.cpp: (WebCore::Internals::capsLockIsOn): * testing/Internals.h: * testing/Internals.idl: Source/WebKit: Update cached modifier state in the WebProcess when WebKit::WebPage::keyEvent is called, and when the window becomes active. * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::dispatchActivityStateChange): (WebKit::WebPageProxy::updateCurrentModifierState): * UIProcess/WebPageProxy.h: * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::keyEvent): (WebKit::WebPage::updateCurrentModifierState): * WebProcess/WebPage/WebPage.h: * WebProcess/WebPage/WebPage.messages.in: Tools: * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl: * WebKitTestRunner/InjectedBundle/TestRunner.cpp: (WTR::TestRunner::toggleCapsLock): * WebKitTestRunner/InjectedBundle/TestRunner.h: * WebKitTestRunner/TestController.h: * WebKitTestRunner/TestInvocation.cpp: (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle): * WebKitTestRunner/cocoa/TestControllerCocoa.mm: (WTR::TestController::toggleCapsLock): LayoutTests: * TestExpectations: * fast/events/detect-caps-lock-expected.txt: Added. * fast/events/detect-caps-lock.html: Added. * platform/mac/TestExpectations: Canonical link: https://commits.webkit.org/206129@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@237886 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2018-11-06 21:58:29 +00:00
void PlatformKeyboardEvent::setCurrentModifierState(OptionSet<Modifier> modifiers)
{
ASSERT(isMainThread());
s_currentModifiers = modifiers;
}
}