Diff
Modified: trunk/Source/WebCore/ChangeLog (271413 => 271414)
--- trunk/Source/WebCore/ChangeLog 2021-01-12 21:18:31 UTC (rev 271413)
+++ trunk/Source/WebCore/ChangeLog 2021-01-12 21:59:42 UTC (rev 271414)
@@ -1,3 +1,19 @@
+2021-01-12 Wenson Hsieh <[email protected]>
+
+ REGRESSION (r265044): [macOS] Safari autocorrects text when typing in login field on amazon.com
+ https://bugs.webkit.org/show_bug.cgi?id=220556
+ <rdar://problem/71602937>
+
+ Reviewed by Darin Adler.
+
+ Add an internal testing hook to ask an input element whether it has disabled spellchecking (except for text
+ replacement).
+
+ * testing/Internals.cpp:
+ (WebCore::Internals::isSpellcheckDisabledExceptTextReplacement const):
+ * testing/Internals.h:
+ * testing/Internals.idl:
+
2021-01-12 Jer Noble <[email protected]>
[Cocoa] Support key rotation with HLS-backed encrypted media streams
Modified: trunk/Source/WebCore/testing/Internals.cpp (271413 => 271414)
--- trunk/Source/WebCore/testing/Internals.cpp 2021-01-12 21:18:31 UTC (rev 271413)
+++ trunk/Source/WebCore/testing/Internals.cpp 2021-01-12 21:59:42 UTC (rev 271414)
@@ -2489,6 +2489,11 @@
#endif
}
+bool Internals::isSpellcheckDisabledExceptTextReplacement(const HTMLInputElement& element) const
+{
+ return element.isSpellcheckDisabledExceptTextReplacement();
+}
+
void Internals::handleAcceptedCandidate(const String& candidate, unsigned location, unsigned length)
{
if (!contextDocument() || !contextDocument()->frame())
Modified: trunk/Source/WebCore/testing/Internals.h (271413 => 271414)
--- trunk/Source/WebCore/testing/Internals.h 2021-01-12 21:18:31 UTC (rev 271413)
+++ trunk/Source/WebCore/testing/Internals.h 2021-01-12 21:59:42 UTC (rev 271414)
@@ -368,6 +368,8 @@
void setAutomaticTextReplacementEnabled(bool);
void setAutomaticSpellingCorrectionEnabled(bool);
+ bool isSpellcheckDisabledExceptTextReplacement(const HTMLInputElement&) const;
+
void handleAcceptedCandidate(const String& candidate, unsigned location, unsigned length);
void changeSelectionListType();
void changeBackToReplacedString(const String& replacedString);
Modified: trunk/Source/WebCore/testing/Internals.idl (271413 => 271414)
--- trunk/Source/WebCore/testing/Internals.idl 2021-01-12 21:18:31 UTC (rev 271413)
+++ trunk/Source/WebCore/testing/Internals.idl 2021-01-12 21:59:42 UTC (rev 271414)
@@ -379,6 +379,7 @@
[MayThrowException] unsigned long countFindMatches(DOMString text, sequence<DOMString> findOptions);
[MayThrowException] DOMString autofillFieldName(Element formControlElement);
+ boolean isSpellcheckDisabledExceptTextReplacement(HTMLInputElement inputElement);
[MayThrowException] undefined invalidateControlTints();
Modified: trunk/Source/WebKit/ChangeLog (271413 => 271414)
--- trunk/Source/WebKit/ChangeLog 2021-01-12 21:18:31 UTC (rev 271413)
+++ trunk/Source/WebKit/ChangeLog 2021-01-12 21:59:42 UTC (rev 271414)
@@ -1,5 +1,22 @@
2021-01-12 Wenson Hsieh <[email protected]>
+ REGRESSION (r265044): [macOS] Safari autocorrects text when typing in login field on amazon.com
+ https://bugs.webkit.org/show_bug.cgi?id=220556
+ <rdar://problem/71602937>
+
+ Reviewed by Darin Adler.
+
+ Restores the implementation of `WKBundleNodeHandleSetHTMLInputElementSpellcheckEnabled`, which was removed in
+ r265044, with the reasoning that the code was unused. However, Safari still uses this SPI on macOS to prevent
+ automatic spelling correction from triggering when editing form fields that are AutoFillable.
+
+ Test: WebKit.DisableSpellcheck
+
+ * WebProcess/InjectedBundle/API/c/WKBundleNodeHandle.cpp:
+ (WKBundleNodeHandleSetHTMLInputElementSpellcheckEnabled):
+
+2021-01-12 Wenson Hsieh <[email protected]>
+
ASSERTION FAILED: m_connection under WebKit::WebPageProxy::acceptsFirstMouse()
https://bugs.webkit.org/show_bug.cgi?id=220545
<rdar://problem/73043854>
Modified: trunk/Source/WebKit/WebProcess/InjectedBundle/API/c/WKBundleNodeHandle.cpp (271413 => 271414)
--- trunk/Source/WebKit/WebProcess/InjectedBundle/API/c/WKBundleNodeHandle.cpp 2021-01-12 21:18:31 UTC (rev 271413)
+++ trunk/Source/WebKit/WebProcess/InjectedBundle/API/c/WKBundleNodeHandle.cpp 2021-01-12 21:59:42 UTC (rev 271414)
@@ -115,9 +115,9 @@
WebKit::toImpl(htmlInputElementHandleRef)->setHTMLInputElementValueForUser(WebKit::toWTFString(valueRef));
}
-void WKBundleNodeHandleSetHTMLInputElementSpellcheckEnabled(WKBundleNodeHandleRef, bool)
+void WKBundleNodeHandleSetHTMLInputElementSpellcheckEnabled(WKBundleNodeHandleRef htmlInputElementHandleRef, bool enabled)
{
- // FIXME: Would put ASSERT_NOT_REACHED() here but some compilers are warning the function is "noreturn".
+ WebKit::toImpl(htmlInputElementHandleRef)->setHTMLInputElementSpellcheckEnabled(enabled);
}
bool WKBundleNodeHandleGetHTMLInputElementAutoFilled(WKBundleNodeHandleRef)
Modified: trunk/Tools/ChangeLog (271413 => 271414)
--- trunk/Tools/ChangeLog 2021-01-12 21:18:31 UTC (rev 271413)
+++ trunk/Tools/ChangeLog 2021-01-12 21:59:42 UTC (rev 271414)
@@ -1,3 +1,21 @@
+2021-01-12 Wenson Hsieh <[email protected]>
+
+ REGRESSION (r265044): [macOS] Safari autocorrects text when typing in login field on amazon.com
+ https://bugs.webkit.org/show_bug.cgi?id=220556
+ <rdar://problem/71602937>
+
+ Reviewed by Darin Adler.
+
+ Add an API test that uses WebKit C API (`WKBundleNodeHandleSetHTMLInputElementSpellcheckEnabled`) to disable or
+ enable spellchecking on input elements.
+
+ * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
+ * TestWebKitAPI/Tests/WebKitCocoa/DisableSpellcheck.mm: Added.
+ * TestWebKitAPI/Tests/WebKitCocoa/DisableSpellcheckPlugIn.mm: Added.
+ (-[DisableSpellcheckPlugIn webProcessPlugIn:didCreateBrowserContextController:]):
+ (-[DisableSpellcheckPlugIn webProcessPlugInBrowserContextController:didClearWindowObjectForFrame:inScriptWorld:]):
+ (-[DisableSpellcheckPlugIn webProcessPlugInBrowserContextController:didFinishLoadForFrame:]):
+
2021-01-12 Aakash Jain <[email protected]>
[build.webkit.org] Update force schedulers as per new buildbot
Modified: trunk/Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj (271413 => 271414)
--- trunk/Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj 2021-01-12 21:18:31 UTC (rev 271413)
+++ trunk/Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj 2021-01-12 21:59:42 UTC (rev 271414)
@@ -1182,6 +1182,8 @@
F4A32ECB1F0643370047C544 /* contenteditable-in-iframe.html in Copy Resources */ = {isa = PBXBuildFile; fileRef = F4A32ECA1F0642F40047C544 /* contenteditable-in-iframe.html */; };
F4A9202F1FEE34E900F59590 /* apple-data-url.html in Copy Resources */ = {isa = PBXBuildFile; fileRef = F4A9202E1FEE34C800F59590 /* apple-data-url.html */; };
F4AB578A1F65165400DB0DA1 /* custom-draggable-div.html in Copy Resources */ = {isa = PBXBuildFile; fileRef = F4AB57891F65164B00DB0DA1 /* custom-draggable-div.html */; };
+ F4B0168325AE060F00E445C4 /* DisableSpellcheck.mm in Sources */ = {isa = PBXBuildFile; fileRef = F4B0168225AE060F00E445C4 /* DisableSpellcheck.mm */; };
+ F4B0168425AE08F800E445C4 /* DisableSpellcheckPlugIn.mm in Sources */ = {isa = PBXBuildFile; fileRef = F4B0167F25AE02D600E445C4 /* DisableSpellcheckPlugIn.mm */; };
F4B825D81EF4DBFB006E417F /* compressed-files.zip in Copy Resources */ = {isa = PBXBuildFile; fileRef = F4B825D61EF4DBD4006E417F /* compressed-files.zip */; };
F4B86D4F20BCD5B20099A7E6 /* paint-significant-area-milestone.html in Copy Resources */ = {isa = PBXBuildFile; fileRef = F4B86D4E20BCD5970099A7E6 /* paint-significant-area-milestone.html */; };
F4BC0B142146C849002A0478 /* FocusPreservationTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = F4BC0B132146C849002A0478 /* FocusPreservationTests.mm */; };
@@ -2947,6 +2949,8 @@
F4A32ECA1F0642F40047C544 /* contenteditable-in-iframe.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = "contenteditable-in-iframe.html"; sourceTree = "<group>"; };
F4A9202E1FEE34C800F59590 /* apple-data-url.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = "apple-data-url.html"; sourceTree = "<group>"; };
F4AB57891F65164B00DB0DA1 /* custom-draggable-div.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = "custom-draggable-div.html"; sourceTree = "<group>"; };
+ F4B0167F25AE02D600E445C4 /* DisableSpellcheckPlugIn.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = DisableSpellcheckPlugIn.mm; sourceTree = "<group>"; };
+ F4B0168225AE060F00E445C4 /* DisableSpellcheck.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = DisableSpellcheck.mm; sourceTree = "<group>"; };
F4B825D61EF4DBD4006E417F /* compressed-files.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = "compressed-files.zip"; sourceTree = "<group>"; };
F4B86D4E20BCD5970099A7E6 /* paint-significant-area-milestone.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = "paint-significant-area-milestone.html"; sourceTree = "<group>"; };
F4BC0B132146C849002A0478 /* FocusPreservationTests.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = FocusPreservationTests.mm; sourceTree = "<group>"; };
@@ -3276,6 +3280,8 @@
2D2D13B2229F408B005068AF /* DeviceManagementRestrictions.mm */,
46918EFB2237283500468DFE /* DeviceOrientation.mm */,
CEA7F57B20895F5B0078EF6E /* DidResignInputElementStrongPasswordAppearance.mm */,
+ F4B0168225AE060F00E445C4 /* DisableSpellcheck.mm */,
+ F4B0167F25AE02D600E445C4 /* DisableSpellcheckPlugIn.mm */,
73BD731723A846500020F450 /* DisplayName.mm */,
518EE51A20A78CFB00E024F3 /* DoAfterNextPresentationUpdateAfterCrash.mm */,
2D7FD19222419087007887F1 /* DocumentEditingContext.mm */,
@@ -5514,6 +5520,7 @@
515BE1711D428E4B00DD7C68 /* StoreBlobThenDelete.mm in Sources */,
7CCE7ED01A411A7E00447C4C /* StringByEvaluatingJavaScriptFromString.mm in Sources */,
7CCE7ED11A411A7E00447C4C /* StringTruncator.mm in Sources */,
+ F4B0168325AE060F00E445C4 /* DisableSpellcheck.mm in Sources */,
ECA680CE1E68CC0900731D20 /* StringUtilities.mm in Sources */,
CE4D5DE71F6743BA0072CFC6 /* StringWithDirection.cpp in Sources */,
7CCE7ED21A411A7E00447C4C /* SubresourceErrorCrash.mm in Sources */,
@@ -5697,6 +5704,7 @@
5C4259462266A68A0039AA7A /* BasicProposedCredentialPlugIn.mm in Sources */,
374B7A611DF371CF00ACCB6C /* BundleEditingDelegatePlugIn.mm in Sources */,
7A89BB682331643A0042CB1E /* BundleFormDelegatePlugIn.mm in Sources */,
+ F4B0168425AE08F800E445C4 /* DisableSpellcheckPlugIn.mm in Sources */,
A13EBBB01B87436F00097110 /* BundleParametersPlugIn.mm in Sources */,
37A709AF1E3EA97E00CA5969 /* BundleRangeHandlePlugIn.mm in Sources */,
5C75716122124C5200B9E5AC /* BundleRetainPagePlugIn.mm in Sources */,
Added: trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/DisableSpellcheck.mm (0 => 271414)
--- trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/DisableSpellcheck.mm (rev 0)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/DisableSpellcheck.mm 2021-01-12 21:59:42 UTC (rev 271414)
@@ -0,0 +1,43 @@
+/*
+ * Copyright (C) 2021 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. AND ITS CONTRIBUTORS ``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 ITS 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.
+ */
+
+#import "config.h"
+
+#import "TestWKWebView.h"
+#import "Utilities.h"
+#import "WKWebViewConfigurationExtras.h"
+
+TEST(WebKit, DisableSpellcheck)
+{
+ auto configuration = [WKWebViewConfiguration _test_configurationWithTestPlugInClassName:@"DisableSpellcheckPlugIn" configureJSCForTesting:YES];
+ auto webView = adoptNS([[TestWKWebView alloc] initWithFrame:CGRectMake(0, 0, 800, 600) configuration:configuration]);
+ [webView synchronouslyLoadTestPageNamed:@"simple"];
+
+ BOOL isSpellcheckDisabled = [[webView objectByEvaluatingJavaScript:@"internals.isSpellcheckDisabledExceptTextReplacement(document.getElementById('disabled'))"] boolValue];
+ EXPECT_TRUE(isSpellcheckDisabled);
+
+ isSpellcheckDisabled = [[webView objectByEvaluatingJavaScript:@"internals.isSpellcheckDisabledExceptTextReplacement(document.getElementById('enabled'))"] boolValue];
+ EXPECT_FALSE(isSpellcheckDisabled);
+}
Added: trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/DisableSpellcheckPlugIn.mm (0 => 271414)
--- trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/DisableSpellcheckPlugIn.mm (rev 0)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/DisableSpellcheckPlugIn.mm 2021-01-12 21:59:42 UTC (rev 271414)
@@ -0,0 +1,73 @@
+/*
+ * Copyright (C) 2021 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. AND ITS CONTRIBUTORS ``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 ITS 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.
+ */
+
+#import "config.h"
+
+#import "WebCoreTestSupport.h"
+#import <WebKit/WKBundleNodeHandlePrivate.h>
+#import <WebKit/WKDOMDocument.h>
+#import <WebKit/WKDOMElement.h>
+#import <WebKit/WKDOMNodePrivate.h>
+#import <WebKit/WKWebProcessPlugIn.h>
+#import <WebKit/WKWebProcessPlugInBrowserContextControllerPrivate.h>
+#import <WebKit/WKWebProcessPlugInFrame.h>
+#import <WebKit/WKWebProcessPlugInLoadDelegate.h>
+#import <WebKit/WKWebProcessPlugInNodeHandlePrivate.h>
+#import <WebKit/WKWebProcessPlugInScriptWorld.h>
+
+@interface DisableSpellcheckPlugIn : NSObject <WKWebProcessPlugIn, WKWebProcessPlugInLoadDelegate>
+@end
+
+@implementation DisableSpellcheckPlugIn
+
+- (void)webProcessPlugIn:(WKWebProcessPlugInController *)plugInController didCreateBrowserContextController:(WKWebProcessPlugInBrowserContextController *)browserContextController
+{
+ browserContextController.loadDelegate = self;
+}
+
+- (void)webProcessPlugInBrowserContextController:(WKWebProcessPlugInBrowserContextController *)controller didClearWindowObjectForFrame:(WKWebProcessPlugInFrame *)frame inScriptWorld:(WKWebProcessPlugInScriptWorld *)scriptWorld
+{
+ WebCoreTestSupport::injectInternalsObject([frame jsContextForWorld:scriptWorld].JSGlobalContextRef);
+}
+
+- (void)webProcessPlugInBrowserContextController:(WKWebProcessPlugInBrowserContextController *)controller didFinishLoadForFrame:(WKWebProcessPlugInFrame *)frame
+{
+ auto document = [controller mainFrameDocument];
+ auto inputElement1 = [document createElement:@"input"];
+ [inputElement1 setAttribute:@"id" value:@"disabled"];
+ [document.body appendChild:inputElement1];
+
+ auto inputElement2 = [document createElement:@"input"];
+ [inputElement2 setAttribute:@"id" value:@"enabled"];
+ [document.body appendChild:inputElement2];
+
+ auto inputElementHandle1 = [inputElement1 _copyBundleNodeHandleRef];
+ WKBundleNodeHandleSetHTMLInputElementSpellcheckEnabled(inputElementHandle1, false);
+
+ auto inputElementHandle2 = [inputElement2 _copyBundleNodeHandleRef];
+ WKBundleNodeHandleSetHTMLInputElementSpellcheckEnabled(inputElementHandle2, true);
+}
+
+@end