WebKit Bugzilla
New
Browse
Log In
×
Sign in with GitHub
or
Remember my login
Create Account
·
Forgot Password
Forgotten password account recovery
RESOLVED FIXED
161919
Automatic Text Replacement Testing in WebKit2
https://bugs.webkit.org/show_bug.cgi?id=161919
Summary
Automatic Text Replacement Testing in WebKit2
Jonathan Bedard
Reported
2016-09-13 11:37:56 PDT
Automatic text replacement settings are not properly implemented in a testing environment in WebKit2. This causes a number of tests to fail and, in some cases, cause the failure of other tests.
Attachments
Patch
(14.86 KB, patch)
2016-09-13 12:01 PDT
,
Jonathan Bedard
no flags
Details
Formatted Diff
Diff
Archive of layout-test-results from ews105 for mac-yosemite-wk2
(958.59 KB, application/zip)
2016-09-13 13:00 PDT
,
Build Bot
no flags
Details
Archive of layout-test-results from ews121 for ios-simulator-elcapitan-wk2
(19.28 MB, application/zip)
2016-09-13 13:06 PDT
,
Build Bot
no flags
Details
Patch
(28.01 KB, patch)
2016-09-16 10:40 PDT
,
Jonathan Bedard
no flags
Details
Formatted Diff
Diff
Patch
(28.02 KB, patch)
2016-09-16 10:49 PDT
,
Jonathan Bedard
no flags
Details
Formatted Diff
Diff
Archive of layout-test-results from ews107 for mac-yosemite-wk2
(1.22 MB, application/zip)
2016-09-16 11:53 PDT
,
Build Bot
no flags
Details
Patch
(30.44 KB, patch)
2016-09-16 11:55 PDT
,
Jonathan Bedard
no flags
Details
Formatted Diff
Diff
Archive of layout-test-results from ews107 for mac-yosemite-wk2
(1.28 MB, application/zip)
2016-09-16 12:49 PDT
,
Build Bot
no flags
Details
Patch
(37.26 KB, patch)
2016-09-16 14:16 PDT
,
Jonathan Bedard
no flags
Details
Formatted Diff
Diff
Patch
(37.25 KB, patch)
2016-09-16 15:31 PDT
,
Jonathan Bedard
no flags
Details
Formatted Diff
Diff
Patch
(37.34 KB, patch)
2016-09-16 16:33 PDT
,
Jonathan Bedard
no flags
Details
Formatted Diff
Diff
Patch
(38.12 KB, patch)
2016-09-19 14:32 PDT
,
Jonathan Bedard
no flags
Details
Formatted Diff
Diff
Patch
(44.39 KB, patch)
2016-09-19 15:15 PDT
,
Jonathan Bedard
no flags
Details
Formatted Diff
Diff
Archive of layout-test-results from ews106 for mac-yosemite-wk2
(1.26 MB, application/zip)
2016-09-19 16:14 PDT
,
Build Bot
no flags
Details
Archive of layout-test-results from ews112 for mac-yosemite
(1.56 MB, application/zip)
2016-09-19 16:28 PDT
,
Build Bot
no flags
Details
Patch
(44.48 KB, patch)
2016-09-19 16:37 PDT
,
Jonathan Bedard
no flags
Details
Formatted Diff
Diff
Patch
(51.24 KB, patch)
2016-09-20 13:28 PDT
,
Jonathan Bedard
no flags
Details
Formatted Diff
Diff
Patch
(51.29 KB, patch)
2016-09-22 08:46 PDT
,
Jonathan Bedard
no flags
Details
Formatted Diff
Diff
Show Obsolete
(11)
View All
Add attachment
proposed patch, testcase, etc.
Jonathan Bedard
Comment 1
2016-09-13 12:01:59 PDT
Created
attachment 288711
[details]
Patch
Jonathan Bedard
Comment 2
2016-09-13 12:02:54 PDT
Comment on
attachment 288711
[details]
Patch Note that the uploaded patch will almost certainly fail EWS and is still a work in progress.
Build Bot
Comment 3
2016-09-13 13:00:21 PDT
Comment on
attachment 288711
[details]
Patch
Attachment 288711
[details]
did not pass mac-wk2-ews (mac-wk2): Output:
http://webkit-queues.webkit.org/results/2067359
New failing tests: editing/inserting/typing-space-to-trigger-smart-link.html
Build Bot
Comment 4
2016-09-13 13:00:24 PDT
Created
attachment 288721
[details]
Archive of layout-test-results from ews105 for mac-yosemite-wk2 The attached test failures were seen while running run-webkit-tests on the mac-wk2-ews. Bot: ews105 Port: mac-yosemite-wk2 Platform: Mac OS X 10.10.5
Build Bot
Comment 5
2016-09-13 13:06:32 PDT
Comment on
attachment 288711
[details]
Patch
Attachment 288711
[details]
did not pass ios-sim-ews (ios-simulator-wk2): Output:
http://webkit-queues.webkit.org/results/2067341
New failing tests: editing/spelling/spelling-unified-emulation.html editing/spelling/spellcheck-input-search-crash.html editing/spelling/centering-misspelling-dots.html editing/spelling/context-menu-suggestions.html editing/spelling/misspelling-dots-dont-extend-beyond-words.html editing/spelling/spelling.html
Build Bot
Comment 6
2016-09-13 13:06:35 PDT
Created
attachment 288722
[details]
Archive of layout-test-results from ews121 for ios-simulator-elcapitan-wk2 The attached test failures were seen while running run-webkit-tests on the ios-sim-ews. Bot: ews121 Port: ios-simulator-elcapitan-wk2 Platform: Mac OS X 10.11.5
Ryosuke Niwa
Comment 7
2016-09-13 14:53:54 PDT
Just enabling the feature wouldn't work. WebKitTestRunner needs to create its own NSSpellChecker with its own dictionary with a specific list of words, etc... see code in DumpRenderTree. Also, there is a reason many of these tests are skipped / failing expectations even on WK1. NSSpellChecker learn the user behavior so running these tests repeatedly would result in the test results changing over time.
Jonathan Bedard
Comment 8
2016-09-15 13:10:41 PDT
(In reply to
comment #7
)
> ...
Good to know. I was searching for the tests which used the newly fixed functionality and attempting to run them. Will keep skipping the spelling tests for the time being.
Jonathan Bedard
Comment 9
2016-09-16 10:40:43 PDT
Created
attachment 289072
[details]
Patch
Jonathan Bedard
Comment 10
2016-09-16 10:49:09 PDT
Created
attachment 289075
[details]
Patch
Build Bot
Comment 11
2016-09-16 11:53:08 PDT
Comment on
attachment 289075
[details]
Patch
Attachment 289075
[details]
did not pass mac-wk2-ews (mac-wk2): Output:
http://webkit-queues.webkit.org/results/2089272
New failing tests: editing/inserting/typing-space-to-trigger-smart-link.html
Build Bot
Comment 12
2016-09-16 11:53:10 PDT
Created
attachment 289083
[details]
Archive of layout-test-results from ews107 for mac-yosemite-wk2 The attached test failures were seen while running run-webkit-tests on the mac-wk2-ews. Bot: ews107 Port: mac-yosemite-wk2 Platform: Mac OS X 10.10.5
Jonathan Bedard
Comment 13
2016-09-16 11:55:52 PDT
Created
attachment 289084
[details]
Patch
Alexey Proskuryakov
Comment 14
2016-09-16 12:11:03 PDT
> NSSpellChecker learn the user behavior so running these tests repeatedly would result in the test results changing over time.
Do we have a bug asking for a way to use an empty dictionary for tests?
Build Bot
Comment 15
2016-09-16 12:49:45 PDT
Comment on
attachment 289084
[details]
Patch
Attachment 289084
[details]
did not pass mac-wk2-ews (mac-wk2): Output:
http://webkit-queues.webkit.org/results/2089613
New failing tests: editing/inserting/typing-space-to-trigger-smart-link.html
Build Bot
Comment 16
2016-09-16 12:49:48 PDT
Created
attachment 289096
[details]
Archive of layout-test-results from ews107 for mac-yosemite-wk2 The attached test failures were seen while running run-webkit-tests on the mac-wk2-ews. Bot: ews107 Port: mac-yosemite-wk2 Platform: Mac OS X 10.10.5
Michael Catanzaro
Comment 17
2016-09-16 14:06:07 PDT
Comment on
attachment 289084
[details]
Patch View in context:
https://bugs.webkit.org/attachment.cgi?id=289084&action=review
> Source/WebKit2/UIProcess/efl/TextCheckerEfl.cpp:46 > +const TextCheckerState& TextChecker::mutableState()
Be sure to remove const from the return value here, since you've currently got mutableState() returning a non-mutable state!
Jonathan Bedard
Comment 18
2016-09-16 14:16:45 PDT
Created
attachment 289110
[details]
Patch
Jonathan Bedard
Comment 19
2016-09-16 15:31:22 PDT
Created
attachment 289118
[details]
Patch
Jonathan Bedard
Comment 20
2016-09-16 16:33:38 PDT
Created
attachment 289132
[details]
Patch
Jonathan Bedard
Comment 21
2016-09-16 16:34:47 PDT
Comment on
attachment 289132
[details]
Patch Investigation needs to be done on the WebKit 1 test environment to see if the sandboxing precautions taken in this patch are needed.
Jonathan Bedard
Comment 22
2016-09-19 14:32:12 PDT
Created
attachment 289257
[details]
Patch
Jonathan Bedard
Comment 23
2016-09-19 15:15:30 PDT
Created
attachment 289266
[details]
Patch
Build Bot
Comment 24
2016-09-19 16:14:22 PDT
Comment on
attachment 289266
[details]
Patch
Attachment 289266
[details]
did not pass mac-wk2-ews (mac-wk2): Output:
http://webkit-queues.webkit.org/results/2108135
New failing tests: imported/blink/fast/frames/navigation-in-pagehide.html
Build Bot
Comment 25
2016-09-19 16:14:25 PDT
Created
attachment 289270
[details]
Archive of layout-test-results from ews106 for mac-yosemite-wk2 The attached test failures were seen while running run-webkit-tests on the mac-wk2-ews. Bot: ews106 Port: mac-yosemite-wk2 Platform: Mac OS X 10.10.5
Build Bot
Comment 26
2016-09-19 16:28:17 PDT
Comment on
attachment 289266
[details]
Patch
Attachment 289266
[details]
did not pass mac-debug-ews (mac): Output:
http://webkit-queues.webkit.org/results/2108142
New failing tests: imported/blink/fast/frames/navigation-in-pagehide.html
Build Bot
Comment 27
2016-09-19 16:28:21 PDT
Created
attachment 289277
[details]
Archive of layout-test-results from ews112 for mac-yosemite The attached test failures were seen while running run-webkit-tests on the mac-debug-ews. Bot: ews112 Port: mac-yosemite Platform: Mac OS X 10.10.5
Jonathan Bedard
Comment 28
2016-09-19 16:37:31 PDT
Created
attachment 289279
[details]
Patch
Ryosuke Niwa
Comment 29
2016-09-19 16:59:23 PDT
Comment on
attachment 289279
[details]
Patch View in context:
https://bugs.webkit.org/attachment.cgi?id=289279&action=review
> Source/WebCore/testing/Internals.cpp:1624 > if (!contextDocument() || !contextDocument()->frame()) > - return; > + ASSERT_NOT_REACHED();
This change is not right. It's totally possible for a context document to not have a frame. e.g. the document just got detached from an iframe. r- because of this change.
> Source/WebKit2/UIProcess/WebPageProxy.cpp:5981 > + TextChecker::setTestingMode(true); > + TextChecker::setSmartInsertDeleteEnabled(!TextChecker::isSmartInsertDeleteEnabled());
This creates a new potential security vulnerability surface that any comprised web content process can now force UIProcess to override user defaults related to spellchecking features. r- because of this. I think we need some mechanism for TestRunner to opt-into using such a hook instead of trusting WebContent process to be only sending this IPC while running tests.
Jonathan Bedard
Comment 30
2016-09-19 17:08:46 PDT
Comment on
attachment 289279
[details]
Patch View in context:
https://bugs.webkit.org/attachment.cgi?id=289279&action=review
>> Source/WebKit2/UIProcess/WebPageProxy.cpp:5981 >> + TextChecker::setSmartInsertDeleteEnabled(!TextChecker::isSmartInsertDeleteEnabled()); > > This creates a new potential security vulnerability surface that any comprised web content process can now force UIProcess to override user defaults related to spellchecking features. > r- because of this. > > I think we need some mechanism for TestRunner to opt-into using such a hook instead of trusting WebContent process to be only sending this IPC while running tests.
Actually, the whole point of TextChecker::setTestingMode(true) is that it prevents the setSmartInsertDeleteEnabled from setting user defaults. In testing mode, user defaults are stored locally and propagated between WebKit2 processes, but not actually saved to user defaults. Now, your point still stands. Currently, if a compromised WebContent process were to send this IPC, it would place the UIProcess into a mode where it could never save user defaults, any changes would only effect the current set of WebKit2 processes. I don't think this is a security risk, but I wouldn't describe it as desired behavior either.
Ryosuke Niwa
Comment 31
2016-09-19 17:17:35 PDT
Comment on
attachment 289279
[details]
Patch View in context:
https://bugs.webkit.org/attachment.cgi?id=289279&action=review
>>> Source/WebKit2/UIProcess/WebPageProxy.cpp:5981 >>> + TextChecker::setSmartInsertDeleteEnabled(!TextChecker::isSmartInsertDeleteEnabled()); >> >> This creates a new potential security vulnerability surface that any comprised web content process can now force UIProcess to override user defaults related to spellchecking features. >> r- because of this. >> >> I think we need some mechanism for TestRunner to opt-into using such a hook instead of trusting WebContent process to be only sending this IPC while running tests. > > Actually, the whole point of TextChecker::setTestingMode(true) is that it prevents the setSmartInsertDeleteEnabled from setting user defaults. In testing mode, user defaults are stored locally and propagated between WebKit2 processes, but not actually saved to user defaults. > > Now, your point still stands. Currently, if a compromised WebContent process were to send this IPC, it would place the UIProcess into a mode where it could never save user defaults, any changes would only effect the current set of WebKit2 processes. I don't think this is a security risk, but I wouldn't describe it as desired behavior either.
Oh, I see, that's a good point. That's probably less of an issue then. Please do fix the other issue in internals I pointed out though.
Alexey Proskuryakov
Comment 32
2016-09-19 17:39:01 PDT
> This change is not right. It's totally possible for a context document to not have a frame. > e.g. the document just got detached from an iframe. > r- because of this change.
But do we want the Internals method to be called in this scenario? Given that we don't have any way to implement it when there is no frame, I think that it should crash (but not only in debug - release should crash too).
Ryosuke Niwa
Comment 33
2016-09-20 02:04:30 PDT
(In reply to
comment #32
)
> > This change is not right. It's totally possible for a context document to not have a frame. > > e.g. the document just got detached from an iframe. > > r- because of this change. > > But do we want the Internals method to be called in this scenario?
I don't think it matters whether we want it to be called or not.
> Given that we don't have any way to implement it when there is no frame, I think > that it should crash (but not only in debug - release should crash too).
That's not what we do in any other internals method so we want to change that, I think we should have a discussion on webkit-dev first.
Jonathan Bedard
Comment 34
2016-09-20 07:49:21 PDT
(In reply to
comment #33
)
> (In reply to
comment #32
) > ....
Perhaps these asserts should be in a different patch, then. If this was a change we want, there are a few other places it should be made as well.
Alexey Proskuryakov
Comment 35
2016-09-20 10:46:06 PDT
This is actually what we do normally. Misuse of many testRunner or internals methods results in an assertion failure or a release mode crash. It would be counter-productive to make tests fail silently and mysteriously when we can already tell that the tests are written incorrectly. Do you have a better suggestion for how to handle it in this specific case?
Jonathan Bedard
Comment 36
2016-09-20 13:28:15 PDT
Created
attachment 289393
[details]
Patch
Jonathan Bedard
Comment 37
2016-09-20 13:30:27 PDT
This patch should resolve any bad behavior from a mis-behaiving WebContent process. It also removes the asserts. I think these should be placed in, but I also think that they are conceptually unrelated to this patch and should be done in a later patch.
Ryosuke Niwa
Comment 38
2016-09-22 01:42:15 PDT
(In reply to
comment #35
)
> This is actually what we do normally. Misuse of many testRunner or internals > methods results in an assertion failure or a release mode crash. It would be > counter-productive to make tests fail silently and mysteriously when we can > already tell that the tests are written incorrectly. > > Do you have a better suggestion for how to handle it in this specific case?
Just throw a JS exception. That's a lot better than crashing.
Ryosuke Niwa
Comment 39
2016-09-22 01:53:35 PDT
Comment on
attachment 289393
[details]
Patch View in context:
https://bugs.webkit.org/attachment.cgi?id=289393&action=review
> Source/WebCore/ChangeLog:10 > + editing/inserting/smart-link-when-caret-is-moved-before-URL.html > + editing/inserting/typing-space-to-trigger-smart-link.html
Indentation here is weird. We normally just do: Tests: editing/inserting/smart-link-when-caret-is-moved-before-URL.html editing/inserting/typing-space-to-trigger-smart-link.html If you're going with your current formatting, the test names should be indented by exactly 4 spaces.
> Source/WebCore/ChangeLog:12 > + Implemented test hooks for text replacement for WebKit2. Note that spell checking has not been implemented, so most tests which use text replacement still fail.
We use single space after . Also, please split this into two hard lines.
> Source/WebKit2/ChangeLog:8 > + Implemented test hooks for text replacement for WebKit2. Note that spell checking has not been implemented, so most tests which use text replacement still fail.
Ditto about two spaces after . and splitting this into two hard lines.
> Source/WebKit2/UIProcess/API/C/WKTextChecker.cpp:30 > +#if !defined(__APPLE__)
I think we normally use #if PLATFORM(MAC) || PLATFORM(IOS) for these if-defs.
Jonathan Bedard
Comment 40
2016-09-22 08:17:28 PDT
Comment on
attachment 289393
[details]
Patch View in context:
https://bugs.webkit.org/attachment.cgi?id=289393&action=review
>> Source/WebKit2/UIProcess/API/C/WKTextChecker.cpp:30 >> +#if !defined(__APPLE__) > > I think we normally use #if PLATFORM(MAC) || PLATFORM(IOS) for these if-defs.
We do. But since this is the implementation of functions declared in WKTextChecker.h, which does not include the PLATFORM() macros (and shouldn't, since it is a C API header) I used defined(__APPLE__) instead. Actually, the real issue here is that I am combining two files (which is rarely done in these C API headers). Originally, this should have been named WKWebTextChecker, since other ports define the WebTextChecker and this file provides C API hooks for that header. However, it was instead named WKTextChecker, and excluded from builds on iOS and Mac. Rather than try and rename this header to WKWebTextChecker (which would violate naming conventions on all of the functions in the header and mess up anyone else who was using the API) I simply added the new function to the header with and #ifdef that requires no additional headers.
Jonathan Bedard
Comment 41
2016-09-22 08:46:38 PDT
Created
attachment 289563
[details]
Patch
WebKit Commit Bot
Comment 42
2016-09-22 10:42:07 PDT
Comment on
attachment 289563
[details]
Patch Clearing flags on attachment: 289563 Committed
r206261
: <
http://trac.webkit.org/changeset/206261
>
WebKit Commit Bot
Comment 43
2016-09-22 10:42:14 PDT
All reviewed patches have been landed. Closing bug.
Alexey Proskuryakov
Comment 44
2016-09-22 15:32:24 PDT
> > Do you have a better suggestion for how to handle it in this specific case?
> Just throw a JS exception. That's a lot better than crashing.
You say that it's better, but I don't see in what way this is better. Can you elaborate?
Ryosuke Niwa
Comment 45
2016-09-22 18:26:28 PDT
(In reply to
comment #44
)
> > > Do you have a better suggestion for how to handle it in this specific case? > > > Just throw a JS exception. That's a lot better than crashing. > > You say that it's better, but I don't see in what way this is better. Can > you elaborate?
It doesn't significantly increase the total runtime of layout tests (because crashing WebKitTestRunner and running CrashReporter is VERY slow), and we get the JS stack trace which tells us exactly where a bad internals method call was made.
Alexey Proskuryakov
Comment 46
2016-09-22 18:46:20 PDT
Crashing is better because it will prevent getting the bad test in the tree in the first place. We have a lot of tests that have never been confirmed to work, and fail to verify what they claim to. Failing early and forcefully is much better. I used to think that this was a well known policy for tests, although the last time I remember we discussed that was about ten years ago.
> and we get the JS stack trace which tells us exactly where a bad internals method call was made.
Do we? I think that the observable effect is that the test doesn't run to completion, and if it gets landed that way, no one will ever notice.
Ryosuke Niwa
Comment 47
2016-09-23 01:16:57 PDT
(In reply to
comment #46
)
> Crashing is better because it will prevent getting the bad test in the tree > in the first place.
I disagree. Getting stack trace is a PITA and it increases the test runtime.
> We have a lot of tests that have never been confirmed to work, and fail to > verify what they claim to. Failing early and forcefully is much better.
Unless you have try & catch, throwing an exception would definitively show that something went wrong in the test in CONSOLE: message
> I used to think that this was a well known policy for tests, although the > last time I remember we discussed that was about ten years ago. > > > and we get the JS stack trace which tells us exactly where a bad internals method call was made. > > Do we? I think that the observable effect is that the test doesn't run to > completion, and if it gets landed that way, no one will ever notice.
Exceptions are reported to CONSOLE. Unless someone is calling waitUntilDone and never calling notifyDone when an exception happens, the test will run 'til completion.
Csaba Osztrogonác
Comment 48
2016-09-23 02:43:53 PDT
(In reply to
comment #42
)
> Comment on
attachment 289563
[details]
> Patch > > Clearing flags on attachment: 289563 > > Committed
r206261
: <
http://trac.webkit.org/changeset/206261
>
It broke the Apple Mac cmake build:
https://build.webkit.org/builders/Apple%20El%20Capitan%20CMake%20Debug%20%28Build%29/builds/8570
cc-ing Alex
Alexey Proskuryakov
Comment 49
2016-09-23 09:23:43 PDT
> I disagree. Getting stack trace is a PITA
Can you elaborate?
> and it increases the test runtime.
Why is this a problem when you are only running your new test locally?
> Unless you have try & catch, throwing an exception would definitively show that something went wrong in the test in CONSOLE: message
There is a console message, but not a stack trace. It's very easy to overlook. I do think that Internals and TestRunner misuse should result in as strong a failure as possible. Asserting is what we do in a lot of places, and this is no different.
Jonathan Bedard
Comment 50
2016-09-23 09:42:19 PDT
(In reply to
comment #48
)
> ...
https://bugs.webkit.org/show_bug.cgi?id=162493
has a fix for this issue.
Jeremy Huddleston Sequoia
Comment 51
2016-10-12 11:31:58 PDT
Still seeing build failure fallout from this on current trunk. The previously mentioned fix doesn't seem to have addressed all the issues: Following up in
https://bugs.webkit.org/show_bug.cgi?id=163346
Note
You need to
log in
before you can comment on or make changes to this bug.
Top of Page
Format For Printing
XML
Clone This Bug