WebKit Bugzilla
Attachment 368362 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-20190426161842.patch (text/plain), 13.19 KB, created by
Devin Rousso
on 2019-04-26 16:18:43 PDT
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
Devin Rousso
Created:
2019-04-26 16:18:43 PDT
Size:
13.19 KB
patch
obsolete
>diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog >index f3fa2a438da8e93427a36bc4442ec781266b603c..42f8702db97577d42a5ba34c3547c05bac185d6e 100644 >--- a/Source/WebCore/ChangeLog >+++ b/Source/WebCore/ChangeLog >@@ -1,3 +1,24 @@ >+2019-04-26 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-04-26 Eric Carlson <eric.carlson@apple.com> > > Create AVFoundationSoftLink.{h,mm} to reduce duplicate code >diff --git a/Source/WebKit/ChangeLog b/Source/WebKit/ChangeLog >index 298bb75867cbc7257c2472fe9e96426c04f7ac8c..d59e5fada6d3c44da57885d3ce759c52f7b72eed 100644 >--- a/Source/WebKit/ChangeLog >+++ b/Source/WebKit/ChangeLog >@@ -1,3 +1,19 @@ >+2019-04-26 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-04-26 Eric Carlson <eric.carlson@apple.com> > > Create AVFoundationSoftLink.{h,mm} to reduce duplicate code >diff --git a/Source/WebCore/inspector/agents/page/PageRuntimeAgent.cpp b/Source/WebCore/inspector/agents/page/PageRuntimeAgent.cpp >index 82d87dc7466d97337d20838d30493eb8b79d1cd6..57cf740c89be43001259994874e78a6cb9a6b46e 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" >@@ -163,7 +165,17 @@ void PageRuntimeAgent::evaluate(ErrorString& errorString, const String& expressi > { > Optional<ProcessingUserGestureState> userGestureState = (emulateUserGesture && *emulateUserGesture) ? Optional<ProcessingUserGestureState>(ProcessingUserGesture) : WTF::nullopt; > UserGestureIndicator gestureIndicator(userGestureState); >+ >+ auto& pageChromeClient = m_inspectedPage.chrome().client(); >+ >+ bool userWasInteracting = pageChromeClient.userIsInteracting(); >+ if (!userWasInteracting) >+ pageChromeClient.setUserIsInteracting(true); >+ > InspectorRuntimeAgent::evaluate(errorString, expression, objectGroup, includeCommandLineAPI, doNotPauseOnExceptionsAndMuteConsole, executionContextId, returnByValue, generatePreview, saveResult, emulateUserGesture, result, wasThrown, savedResultIndex); >+ >+ if (!userWasInteracting && pageChromeClient.userIsInteracting()) >+ pageChromeClient.setUserIsInteracting(false); > } > > } // namespace WebCore >diff --git a/Source/WebCore/page/ChromeClient.h b/Source/WebCore/page/ChromeClient.h >index cddf13cae88930e236e9409f92efc2ffd40bf5d9..a69562abf41ace562d91e2d71cd620c4cf7dc56e 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 /* userIsInteracting */) { } >+ > protected: > virtual ~ChromeClient() = default; > }; >diff --git a/Source/WebCore/testing/Internals.cpp b/Source/WebCore/testing/Internals.cpp >index 64e03d849cb3b8f5ed6551c50e587fe30d1ba755..04ed2834678ca2fd1daa14c5cb33e79d3837fcb3 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" >@@ -4402,6 +4403,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 ee64537d249756c56534ed8169e495cedb58efc2..7862f8724f181076f7b5a3be9504e77c233f83c8 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 f2069efb5ff48c59cb411ff3dcb4fd70b99bde70..3afb3764044812f65b073cffeea84c6ce2f6caa8 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 1f39c4379ee0bc8115ca8ab4f4c6514cb2e42c68..81b50b9d0d0a248bc082f181a7688a5ebe710728 100644 >--- a/Source/WebKit/WebProcess/WebPage/WebPage.h >+++ b/Source/WebKit/WebProcess/WebPage/WebPage.h >@@ -1180,6 +1180,9 @@ public: > > void updateIntrinsicContentSizeIfNeeded(const WebCore::IntSize&); > >+ 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 52b7b788d46ddc52093166a779abaf47d92a7e4c..466a4c4f750c03db7b1d82d61cec2e01280ea9f1 100644 >--- a/LayoutTests/ChangeLog >+++ b/LayoutTests/ChangeLog >@@ -1,3 +1,17 @@ >+2019-04-26 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-04-26 Youenn Fablet <youenn@apple.com> > > Use normal loading path for ping loads >diff --git a/LayoutTests/TestExpectations b/LayoutTests/TestExpectations >index f0c42eb1db265d2682e7f69bd14a6558e872a9e3..7cae204b45442cfbeb9ce911ccad1be5aed469b3 100644 >--- a/LayoutTests/TestExpectations >+++ b/LayoutTests/TestExpectations >@@ -538,6 +538,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..4cc04354b2f1e4a0e5b830151c3764b369a6b6c3 >--- /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 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..4fb90a891968fe7a7a94c61f15ccf2ac7dc61da8 >--- /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