WebKit Bugzilla
Attachment 369037 Details for
Bug 197269
: Web Inspector: user gesture toggle should also force user interaction flag
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Patch
bug-197269-20190503193643.patch (text/plain), 14.01 KB, created by
Devin Rousso
on 2019-05-03 19:36:44 PDT
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
Devin Rousso
Created:
2019-05-03 19:36:44 PDT
Size:
14.01 KB
patch
obsolete
>diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog >index 5bcf7c4065aeac11d4432e0027407933aa3af51a..590d225b416be02555ec18fc739a50014a714e1b 100644 >--- a/Source/WebCore/ChangeLog >+++ b/Source/WebCore/ChangeLog >@@ -1,3 +1,24 @@ >+2019-05-03 Devin Rousso <drousso@apple.com> >+ >+ Web Inspector: user gesture toggle should also force user interaction flag >+ https://bugs.webkit.org/show_bug.cgi?id=197269 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ Test: inspector/runtime/evaluate-userGestureEmulation-userIsInteracting.html >+ >+ * inspector/agents/page/PageRuntimeAgent.cpp: >+ (WebCore::PageRuntimeAgent::evaluate): >+ >+ * page/ChromeClient.h: >+ (WebCore::ChromeClient::userIsInteracting const): Added. >+ (WebCore::ChromeClient::setUserIsInteracting): Added. >+ >+ * testing/Internals.idl: >+ * testing/Internals.h: >+ * testing/Internals.cpp: >+ (WebCore::Internals::userIsInteracting): Added. >+ > 2019-05-02 Jiewen Tan <jiewen_tan@apple.com> > > [WebAuthN] A focused document should be required >diff --git a/Source/WebKit/ChangeLog b/Source/WebKit/ChangeLog >index dce1b4f002946f33e69d79fc09af50be207c6403..e285c790414b2f4ff66c1936eeea5c9e4a247a01 100644 >--- a/Source/WebKit/ChangeLog >+++ b/Source/WebKit/ChangeLog >@@ -1,3 +1,19 @@ >+2019-05-03 Devin Rousso <drousso@apple.com> >+ >+ Web Inspector: user gesture toggle should also force user interaction flag >+ https://bugs.webkit.org/show_bug.cgi?id=197269 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ * WebProcess/WebCoreSupport/WebChromeClient.h: >+ * WebProcess/WebCoreSupport/WebChromeClient.cpp: >+ (WebKit::WebChromeClient::userIsInteracting const): Added. >+ (WebKit::WebChromeClient::setUserIsInteracting): Added. >+ >+ * WebProcess/WebPage/WebPage.h: >+ (WebKit::WebPage::userIsInteracting const): Added. >+ (WebKit::WebPage::setUserIsInteracting): Added. >+ > 2019-05-03 Chris Dumez <cdumez@apple.com> > > Unresponsive Service Worker processes should get killed >diff --git a/Source/WebCore/inspector/agents/page/PageRuntimeAgent.cpp b/Source/WebCore/inspector/agents/page/PageRuntimeAgent.cpp >index 82d87dc7466d97337d20838d30493eb8b79d1cd6..33d7a12d5bcbed49c61df6d21e0fe2bc1926b020 100644 >--- a/Source/WebCore/inspector/agents/page/PageRuntimeAgent.cpp >+++ b/Source/WebCore/inspector/agents/page/PageRuntimeAgent.cpp >@@ -32,6 +32,8 @@ > #include "config.h" > #include "PageRuntimeAgent.h" > >+#include "Chrome.h" >+#include "ChromeClient.h" > #include "Document.h" > #include "Frame.h" > #include "InspectorPageAgent.h" >@@ -161,9 +163,24 @@ void PageRuntimeAgent::notifyContextCreated(const String& frameId, JSC::ExecStat > > void PageRuntimeAgent::evaluate(ErrorString& errorString, const String& expression, const String* objectGroup, const bool* includeCommandLineAPI, const bool* doNotPauseOnExceptionsAndMuteConsole, const int* executionContextId, const bool* returnByValue, const bool* generatePreview, const bool* saveResult, const bool* emulateUserGesture, RefPtr<Inspector::Protocol::Runtime::RemoteObject>& result, Optional<bool>& wasThrown, Optional<int>& savedResultIndex) > { >- Optional<ProcessingUserGestureState> userGestureState = (emulateUserGesture && *emulateUserGesture) ? Optional<ProcessingUserGestureState>(ProcessingUserGesture) : WTF::nullopt; >+ auto& pageChromeClient = m_inspectedPage.chrome().client(); >+ >+ auto shouldEmulateUserGesture = emulateUserGesture && *emulateUserGesture; >+ >+ Optional<ProcessingUserGestureState> userGestureState = shouldEmulateUserGesture ? Optional<ProcessingUserGestureState>(ProcessingUserGesture) : WTF::nullopt; > UserGestureIndicator gestureIndicator(userGestureState); >+ >+ bool userWasInteracting = false; >+ if (shouldEmulateUserGesture) { >+ userWasInteracting = pageChromeClient.userIsInteracting(); >+ if (!userWasInteracting) >+ pageChromeClient.setUserIsInteracting(true); >+ } >+ > InspectorRuntimeAgent::evaluate(errorString, expression, objectGroup, includeCommandLineAPI, doNotPauseOnExceptionsAndMuteConsole, executionContextId, returnByValue, generatePreview, saveResult, emulateUserGesture, result, wasThrown, savedResultIndex); >+ >+ if (shouldEmulateUserGesture && !userWasInteracting && pageChromeClient.userIsInteracting()) >+ pageChromeClient.setUserIsInteracting(false); > } > > } // namespace WebCore >diff --git a/Source/WebCore/page/ChromeClient.h b/Source/WebCore/page/ChromeClient.h >index cddf13cae88930e236e9409f92efc2ffd40bf5d9..736b5c6ff8f5ac7b0a8dcf1fff6631f23b9c855b 100644 >--- a/Source/WebCore/page/ChromeClient.h >+++ b/Source/WebCore/page/ChromeClient.h >@@ -503,6 +503,9 @@ public: > > virtual void configureLoggingChannel(const String&, WTFLogChannelState, WTFLogLevel) { } > >+ virtual bool userIsInteracting() const { return false; } >+ virtual void setUserIsInteracting(bool) { } >+ > protected: > virtual ~ChromeClient() = default; > }; >diff --git a/Source/WebCore/testing/Internals.cpp b/Source/WebCore/testing/Internals.cpp >index d4cd40b7eb8d64ca8a3792240d1bc2029fe709c8..ca2875cf3e65e8c76431d2e3bf01a891390dd8ea 100644 >--- a/Source/WebCore/testing/Internals.cpp >+++ b/Source/WebCore/testing/Internals.cpp >@@ -47,6 +47,7 @@ > #include "CachedResourceLoader.h" > #include "CertificateInfo.h" > #include "Chrome.h" >+#include "ChromeClient.h" > #include "ClientOrigin.h" > #include "ComposedTreeIterator.h" > #include "CookieJar.h" >@@ -4404,6 +4405,15 @@ void Internals::withUserGesture(RefPtr<VoidCallback>&& callback) > callback->handleEvent(); > } > >+bool Internals::userIsInteracting() >+{ >+ if (auto* document = contextDocument()) { >+ if (auto* page = document->page()) >+ return page->chrome().client().userIsInteracting(); >+ } >+ return false; >+} >+ > double Internals::lastHandledUserGestureTimestamp() > { > Document* document = contextDocument(); >diff --git a/Source/WebCore/testing/Internals.h b/Source/WebCore/testing/Internals.h >index 491197a86d177680ebe7d589c840ca913d760b90..50f121a8eeb722d60398238c85e784677f54c303 100644 >--- a/Source/WebCore/testing/Internals.h >+++ b/Source/WebCore/testing/Internals.h >@@ -653,6 +653,8 @@ public: > > void withUserGesture(RefPtr<VoidCallback>&&); > >+ bool userIsInteracting(); >+ > RefPtr<GCObservation> observeGC(JSC::JSValue); > > enum class UserInterfaceLayoutDirection : uint8_t { LTR, RTL }; >diff --git a/Source/WebCore/testing/Internals.idl b/Source/WebCore/testing/Internals.idl >index 78d4b88a65182158a35c78b5bcd2ddec4551e39d..bc249e0985098d622d828894464b8330b4ceeec1 100644 >--- a/Source/WebCore/testing/Internals.idl >+++ b/Source/WebCore/testing/Internals.idl >@@ -636,6 +636,8 @@ enum CompositingPolicy { > > void withUserGesture(VoidCallback callback); > >+ boolean userIsInteracting(); >+ > GCObservation? observeGC(any observed); > > void setUserInterfaceLayoutDirection(UserInterfaceLayoutDirection userInterfaceLayoutDirection); >diff --git a/Source/WebKit/WebProcess/WebCoreSupport/WebChromeClient.cpp b/Source/WebKit/WebProcess/WebCoreSupport/WebChromeClient.cpp >index 9baa84d38ae0801118a12b81e204ea2e8f0e9ef4..ada3c730835374d7f08c0dbd092e7337f92f66a8 100644 >--- a/Source/WebKit/WebProcess/WebCoreSupport/WebChromeClient.cpp >+++ b/Source/WebKit/WebProcess/WebCoreSupport/WebChromeClient.cpp >@@ -1336,4 +1336,14 @@ void WebChromeClient::configureLoggingChannel(const String& channelName, WTFLogC > m_page.configureLoggingChannel(channelName, state, level); > } > >+bool WebChromeClient::userIsInteracting() const >+{ >+ return m_page.userIsInteracting(); >+} >+ >+void WebChromeClient::setUserIsInteracting(bool userIsInteracting) >+{ >+ m_page.setUserIsInteracting(userIsInteracting); >+} >+ > } // namespace WebKit >diff --git a/Source/WebKit/WebProcess/WebCoreSupport/WebChromeClient.h b/Source/WebKit/WebProcess/WebCoreSupport/WebChromeClient.h >index 705b25e9fc912a63b5b4577ef2b8d5e0717a3540..bcc901bbce72df71a24da20fc36a02baacf2eaaa 100644 >--- a/Source/WebKit/WebProcess/WebCoreSupport/WebChromeClient.h >+++ b/Source/WebKit/WebProcess/WebCoreSupport/WebChromeClient.h >@@ -373,6 +373,9 @@ private: > > void configureLoggingChannel(const String&, WTFLogChannelState, WTFLogLevel) final; > >+ bool userIsInteracting() const final; >+ void setUserIsInteracting(bool) final; >+ > String m_cachedToolTip; > mutable RefPtr<WebFrame> m_cachedFrameSetLargestFrame; > mutable bool m_cachedMainFrameHasHorizontalScrollbar { false }; >diff --git a/Source/WebKit/WebProcess/WebPage/WebPage.h b/Source/WebKit/WebProcess/WebPage/WebPage.h >index a719ae0a788c5a1f76969e3c1d5c6d79ba9cb208..84dd5ec66d1db4316b4418f18e926ab93f5eac32 100644 >--- a/Source/WebKit/WebProcess/WebPage/WebPage.h >+++ b/Source/WebKit/WebProcess/WebPage/WebPage.h >@@ -1185,6 +1185,9 @@ public: > void updateIntrinsicContentSizeIfNeeded(const WebCore::IntSize&); > void scheduleFullEditorStateUpdate(); > >+ bool userIsInteracting() const { return m_userIsInteracting; } >+ void setUserIsInteracting(bool userIsInteracting) { m_userIsInteracting = userIsInteracting; } >+ > private: > WebPage(uint64_t pageID, WebPageCreationParameters&&); > >diff --git a/LayoutTests/ChangeLog b/LayoutTests/ChangeLog >index db50337bf1fc1eb2e63ba6da004d866925c7643d..ca1169f752bc2fd306d371e4d3c64ff72adcbdcc 100644 >--- a/LayoutTests/ChangeLog >+++ b/LayoutTests/ChangeLog >@@ -1,3 +1,17 @@ >+2019-05-03 Devin Rousso <drousso@apple.com> >+ >+ Web Inspector: user gesture toggle should also force user interaction flag >+ https://bugs.webkit.org/show_bug.cgi?id=197269 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ * inspector/runtime/evaluate-userGestureEmulation-userIsInteracting.html: Added. >+ * inspector/runtime/evaluate-userGestureEmulation-userIsInteracting-expected.txt: Added. >+ >+ * TestExpectations: >+ * platform/wk2/TestExpectations: >+ Only enable the above test on WK2, as the user interaction state is only supported by WK2. >+ > 2019-05-03 Jiewen Tan <jiewen_tan@apple.com> > > [WebAuthN] A focused document should be required >diff --git a/LayoutTests/TestExpectations b/LayoutTests/TestExpectations >index 101446844d438e28c51fc7166154999e569128ec..0857949b16255ae845df01de18a0c57f54bea70f 100644 >--- a/LayoutTests/TestExpectations >+++ b/LayoutTests/TestExpectations >@@ -539,6 +539,9 @@ webkit.org/b/142208 inspector/timeline/exception-in-injected-script-while-record > # Debugger stepping tests can timeout if they run slowly due to a short timer scheduled in the frontend. > webkit.org/b/161951 [ Debug ] inspector/debugger/paused-scopes.html [ Skip ] > >+# User interaction is a WK2 concept. >+inspector/runtime/evaluate-userGestureEmulation-userIsInteracting.html [ Skip ] >+ > # These conformance tests are no longer in sync with the latest specification > # and expect compareDocumentPosition() to return: > # DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC | DOCUMENT_POSITION_DISCONNECTED >diff --git a/LayoutTests/inspector/runtime/evaluate-userGestureEmulation-userIsInteracting-expected.txt b/LayoutTests/inspector/runtime/evaluate-userGestureEmulation-userIsInteracting-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..de8d12bf15d963ee551109827d368d937e9b0d2e >--- /dev/null >+++ b/LayoutTests/inspector/runtime/evaluate-userGestureEmulation-userIsInteracting-expected.txt >@@ -0,0 +1,9 @@ >+Tests for Runtime emulateUserGesture option. >+ >+ >+== Running test suite: Runtime.evaluateUserGestureEmulation.userIsInteracting >+-- Running test case: EvaluateWithoutEmulatingUserGesture.userIsInteracting >+User is NOT Interacting >+-- Running test case: EvaluateWithEmulatingUserGesture.userIsInteracting >+User is Interacting >+ >diff --git a/LayoutTests/inspector/runtime/evaluate-userGestureEmulation-userIsInteracting.html b/LayoutTests/inspector/runtime/evaluate-userGestureEmulation-userIsInteracting.html >new file mode 100644 >index 0000000000000000000000000000000000000000..007f1f28f94206898196d840cc6acc81b5b90ca3 >--- /dev/null >+++ b/LayoutTests/inspector/runtime/evaluate-userGestureEmulation-userIsInteracting.html >@@ -0,0 +1,46 @@ >+<!DOCTYPE html> >+<html> >+<head> >+<script src="../../http/tests/inspector/resources/inspector-test.js"></script> >+<script> >+ >+function load() { >+ document.getElementById("test").addEventListener("click", (event) => { >+ if (!window.internals) >+ return; >+ >+ TestPage.addResult(window.internals.userIsInteracting() ? "User is Interacting" : "User is NOT Interacting"); >+ }); >+ >+ runTest(); >+} >+ >+function test() >+{ >+ let suite = InspectorTest.createAsyncSuite("Runtime.evaluateUserGestureEmulation.userIsInteracting"); >+ >+ suite.addTestCase({ >+ name: "EvaluateWithoutEmulatingUserGesture.userIsInteracting", >+ description: "Check that the evaluation is not considered a user interaction when emulateUserGesture is false.", >+ async test() { >+ await RuntimeAgent.evaluate.invoke({expression: `document.getElementById("test").click()`, emulateUserGesture: false}); >+ }, >+ }); >+ >+ suite.addTestCase({ >+ name: "EvaluateWithEmulatingUserGesture.userIsInteracting", >+ description: "Check that the evaluation is considered a user interaction when emulateUserGesture is true.", >+ async test() { >+ await RuntimeAgent.evaluate.invoke({expression: `document.getElementById("test").click()`, emulateUserGesture: true}); >+ }, >+ }); >+ >+ suite.runTestCasesAndFinish(); >+} >+</script> >+</head> >+<body onload="load()"> >+ <p>Tests for Runtime emulateUserGesture option.</p> >+ <a id="test"></a> >+</body> >+</html> >diff --git a/LayoutTests/platform/wk2/TestExpectations b/LayoutTests/platform/wk2/TestExpectations >index 527eb13321098d220f3bb421d4d6c85f9e68a28b..6283b883d5a6083cc63d6d016f9c86a5efd8eef6 100644 >--- a/LayoutTests/platform/wk2/TestExpectations >+++ b/LayoutTests/platform/wk2/TestExpectations >@@ -502,6 +502,9 @@ http/tests/security/feed-urls-from-remote.html > # First two lines are reversed when test is flaky. > fast/preloader/document-write-2.html [ Pass Failure ] > >+# User interaction is a WK2 concept. >+inspector/runtime/evaluate-userGestureEmulation-userIsInteracting.html [ Skip ] >+ > ### END OF (3) Unclassified failures > ######################################## >
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 197269
:
368209
|
368214
|
368216
|
368362
| 369037 |
369046