Title: [260684] trunk/Source
Revision
260684
Author
[email protected]
Date
2020-04-24 17:51:20 -0700 (Fri, 24 Apr 2020)

Log Message

[iOS] Unable to sign up on twitter.com
https://bugs.webkit.org/show_bug.cgi?id=211003
<rdar://problem/58804852>

Reviewed by Darin Adler.

Source/WebCore:

This is similar to the bug we had on nytimes.com and that was fixed in
r258767. However, instead of a 'resize' event, it is a 'change' event
on a MediaQueryList that is getting twitter.com in a bad state.

The issue is that when we home out of Safari, SpringBoard takes does
a snapshot sequence at various sizes / orientations and this causes
many JS events to get fired (e.g. 'resize', 'orientationchange',
'change', ...), which can get some sites in a bad state. To address
the issue, we now prevent firing of ALL JS events during the
SpringBoard snapshot, instead of merely preventing the 'resize' ones.

* dom/EventTarget.cpp:
(WebCore::EventTarget::fireEventListeners):
* page/FrameView.cpp:
(WebCore::FrameView::sendResizeEventIfNeeded):
* page/Page.h:
(WebCore::Page::shouldFireEvents const):
(WebCore::Page::setShouldFireEvents):
(WebCore::Page::shouldFireResizeEvents const): Deleted.
(WebCore::Page::setShouldFireResizeEvents): Deleted.

Source/WebKit:

* UIProcess/WebPageProxy.cpp:
* UIProcess/WebPageProxy.h:
* UIProcess/ios/WKApplicationStateTrackingView.mm:
(-[WKApplicationStateTrackingView _willBeginSnapshotSequence]):
(-[WKApplicationStateTrackingView _didCompleteSnapshotSequence]):
* WebProcess/WebPage/WebPage.cpp:
(WebKit::WebPage::setShouldFireEvents):
(WebKit::WebPage::setShouldFireResizeEvents): Deleted.
* WebProcess/WebPage/WebPage.h:
* WebProcess/WebPage/WebPage.messages.in:

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (260683 => 260684)


--- trunk/Source/WebCore/ChangeLog	2020-04-25 00:34:59 UTC (rev 260683)
+++ trunk/Source/WebCore/ChangeLog	2020-04-25 00:51:20 UTC (rev 260684)
@@ -1,3 +1,32 @@
+2020-04-24  Chris Dumez  <[email protected]>
+
+        [iOS] Unable to sign up on twitter.com
+        https://bugs.webkit.org/show_bug.cgi?id=211003
+        <rdar://problem/58804852>
+
+        Reviewed by Darin Adler.
+
+        This is similar to the bug we had on nytimes.com and that was fixed in
+        r258767. However, instead of a 'resize' event, it is a 'change' event
+        on a MediaQueryList that is getting twitter.com in a bad state.
+
+        The issue is that when we home out of Safari, SpringBoard takes does
+        a snapshot sequence at various sizes / orientations and this causes
+        many JS events to get fired (e.g. 'resize', 'orientationchange',
+        'change', ...), which can get some sites in a bad state. To address
+        the issue, we now prevent firing of ALL JS events during the
+        SpringBoard snapshot, instead of merely preventing the 'resize' ones.
+
+        * dom/EventTarget.cpp:
+        (WebCore::EventTarget::fireEventListeners):
+        * page/FrameView.cpp:
+        (WebCore::FrameView::sendResizeEventIfNeeded):
+        * page/Page.h:
+        (WebCore::Page::shouldFireEvents const):
+        (WebCore::Page::setShouldFireEvents):
+        (WebCore::Page::shouldFireResizeEvents const): Deleted.
+        (WebCore::Page::setShouldFireResizeEvents): Deleted.
+
 2020-04-24  Saam Barati  <[email protected]>
 
         Return BigInt32 whenever we can

Modified: trunk/Source/WebCore/dom/EventTarget.cpp (260683 => 260684)


--- trunk/Source/WebCore/dom/EventTarget.cpp	2020-04-25 00:34:59 UTC (rev 260683)
+++ trunk/Source/WebCore/dom/EventTarget.cpp	2020-04-25 00:51:20 UTC (rev 260684)
@@ -40,6 +40,7 @@
 #include "InspectorInstrumentation.h"
 #include "JSEventListener.h"
 #include "JSLazyEventListener.h"
+#include "Logging.h"
 #include "Quirks.h"
 #include "ScriptController.h"
 #include "ScriptDisallowedScope.h"
@@ -251,6 +252,15 @@
     if (!data)
         return;
 
+    // FIXME: Remove once <rdar://problem/62344280> is fixed.
+    if (is<Document>(scriptExecutionContext())) {
+        auto* page = downcast<Document>(*scriptExecutionContext()).page();
+        if (page && !page->shouldFireEvents()) {
+            RELEASE_LOG_IF(page->isAlwaysOnLoggingAllowed(), Events, "%p - EventTarget::fireEventListeners: Not firing %{public}s event because events are temporarily disabled for this page", this, event.type().string().utf8().data());
+            return;
+        }
+    }
+
     SetForScope<bool> firingEventListenersScope(data->isFiringEventListeners, true);
 
     if (auto* listenersVector = data->eventListenerMap.find(event.type())) {

Modified: trunk/Source/WebCore/page/FrameView.cpp (260683 => 260684)


--- trunk/Source/WebCore/page/FrameView.cpp	2020-04-25 00:34:59 UTC (rev 260683)
+++ trunk/Source/WebCore/page/FrameView.cpp	2020-04-25 00:51:20 UTC (rev 260684)
@@ -3376,11 +3376,6 @@
     }
 #endif
 
-    if (page && !page->shouldFireResizeEvents()) {
-        FRAMEVIEW_RELEASE_LOG_IF_ALLOWED(Events, "sendResizeEventIfNeeded: Not firing resize events because they are temporarily disabled for this page");
-        return;
-    }
-
     LOG_WITH_STREAM(Events, stream << "FrameView" << this << "sendResizeEventIfNeeded scheduling resize event for document" << frame().document() << ", size " << currentSize);
     frame().document()->setNeedsDOMWindowResizeEvent();
 

Modified: trunk/Source/WebCore/page/Page.h (260683 => 260684)


--- trunk/Source/WebCore/page/Page.h	2020-04-25 00:34:59 UTC (rev 260683)
+++ trunk/Source/WebCore/page/Page.h	2020-04-25 00:51:20 UTC (rev 260684)
@@ -744,8 +744,8 @@
     WEBCORE_EXPORT void injectUserStyleSheet(UserStyleSheet&);
     WEBCORE_EXPORT void removeInjectedUserStyleSheet(UserStyleSheet&);
 
-    bool shouldFireResizeEvents() const { return m_shouldFireResizeEvents; }
-    void setShouldFireResizeEvents(bool shouldFireResizeEvents) { m_shouldFireResizeEvents = shouldFireResizeEvents; }
+    bool shouldFireEvents() const { return m_shouldFireEvents; }
+    void setShouldFireEvents(bool shouldFireEvents) { m_shouldFireEvents = shouldFireEvents; }
 
     bool hasBeenNotifiedToInjectUserScripts() const { return m_hasBeenNotifiedToInjectUserScripts; }
     WEBCORE_EXPORT void notifyToInjectUserScripts();
@@ -1033,7 +1033,7 @@
 
     Vector<UserContentURLPattern> m_corsDisablingPatterns;
     Vector<UserStyleSheet> m_userStyleSheetsPendingInjection;
-    bool m_shouldFireResizeEvents { true };
+    bool m_shouldFireEvents { true };
     bool m_loadsSubresources { true };
     bool m_loadsFromNetwork { true };
     bool m_hasBeenNotifiedToInjectUserScripts { false };

Modified: trunk/Source/WebKit/ChangeLog (260683 => 260684)


--- trunk/Source/WebKit/ChangeLog	2020-04-25 00:34:59 UTC (rev 260683)
+++ trunk/Source/WebKit/ChangeLog	2020-04-25 00:51:20 UTC (rev 260684)
@@ -1,3 +1,22 @@
+2020-04-24  Chris Dumez  <[email protected]>
+
+        [iOS] Unable to sign up on twitter.com
+        https://bugs.webkit.org/show_bug.cgi?id=211003
+        <rdar://problem/58804852>
+
+        Reviewed by Darin Adler.
+
+        * UIProcess/WebPageProxy.cpp:
+        * UIProcess/WebPageProxy.h:
+        * UIProcess/ios/WKApplicationStateTrackingView.mm:
+        (-[WKApplicationStateTrackingView _willBeginSnapshotSequence]):
+        (-[WKApplicationStateTrackingView _didCompleteSnapshotSequence]):
+        * WebProcess/WebPage/WebPage.cpp:
+        (WebKit::WebPage::setShouldFireEvents):
+        (WebKit::WebPage::setShouldFireResizeEvents): Deleted.
+        * WebProcess/WebPage/WebPage.h:
+        * WebProcess/WebPage/WebPage.messages.in:
+
 2020-04-24  Christopher Reid  <[email protected]>
 
         [Win] Bundle Inspector Resources in Release builds

Modified: trunk/Source/WebKit/UIProcess/WebPageProxy.cpp (260683 => 260684)


--- trunk/Source/WebKit/UIProcess/WebPageProxy.cpp	2020-04-25 00:34:59 UTC (rev 260683)
+++ trunk/Source/WebKit/UIProcess/WebPageProxy.cpp	2020-04-25 00:51:20 UTC (rev 260684)
@@ -10104,9 +10104,9 @@
     send(Messages::WebPage::SetOverriddenMediaType(mediaType));
 }
 
-void WebPageProxy::setShouldFireResizeEvents(bool shouldFireResizeEvents)
+void WebPageProxy::setShouldFireEvents(bool shouldFireEvents)
 {
-    send(Messages::WebPage::SetShouldFireResizeEvents(shouldFireResizeEvents));
+    send(Messages::WebPage::SetShouldFireEvents(shouldFireEvents));
 }
 
 void WebPageProxy::setNeedsDOMWindowResizeEvent()

Modified: trunk/Source/WebKit/UIProcess/WebPageProxy.h (260683 => 260684)


--- trunk/Source/WebKit/UIProcess/WebPageProxy.h	2020-04-25 00:34:59 UTC (rev 260683)
+++ trunk/Source/WebKit/UIProcess/WebPageProxy.h	2020-04-25 00:51:20 UTC (rev 260684)
@@ -1731,7 +1731,7 @@
     void grantAccessToPreferenceService();
 #endif
 
-    void setShouldFireResizeEvents(bool);
+    void setShouldFireEvents(bool);
     void setNeedsDOMWindowResizeEvent();
 
     void isNavigatingToAppBoundDomainTesting(CompletionHandler<void(bool)>&&);

Modified: trunk/Source/WebKit/UIProcess/ios/WKApplicationStateTrackingView.mm (260683 => 260684)


--- trunk/Source/WebKit/UIProcess/ios/WKApplicationStateTrackingView.mm	2020-04-25 00:34:59 UTC (rev 260683)
+++ trunk/Source/WebKit/UIProcess/ios/WKApplicationStateTrackingView.mm	2020-04-25 00:51:20 UTC (rev 260684)
@@ -109,7 +109,7 @@
     if (!page)
         return;
 
-    page->setShouldFireResizeEvents(false);
+    page->setShouldFireEvents(false);
 }
 
 - (void)_didCompleteSnapshotSequence
@@ -118,7 +118,7 @@
     if (!page)
         return;
 
-    page->setShouldFireResizeEvents(true);
+    page->setShouldFireEvents(true);
 }
 
 - (BOOL)isBackground

Modified: trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp (260683 => 260684)


--- trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp	2020-04-25 00:34:59 UTC (rev 260683)
+++ trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp	2020-04-25 00:51:20 UTC (rev 260684)
@@ -3307,12 +3307,12 @@
     send(Messages::WebPageProxy::ShowPage());
 }
 
-void WebPage::setShouldFireResizeEvents(bool shouldFireResizeEvents)
+void WebPage::setShouldFireEvents(bool shouldFireEvents)
 {
-    RELEASE_LOG_IF_ALLOWED(Resize, "setShouldFireResizeEvents(%d)", shouldFireResizeEvents);
+    RELEASE_LOG_IF_ALLOWED(Resize, "setShouldFireEvents(%d)", shouldFireEvents);
 
     if (m_page)
-        m_page->setShouldFireResizeEvents(shouldFireResizeEvents);
+        m_page->setShouldFireEvents(shouldFireEvents);
 }
 
 void WebPage::setNeedsDOMWindowResizeEvent()

Modified: trunk/Source/WebKit/WebProcess/WebPage/WebPage.h (260683 => 260684)


--- trunk/Source/WebKit/WebProcess/WebPage/WebPage.h	2020-04-25 00:34:59 UTC (rev 260683)
+++ trunk/Source/WebKit/WebProcess/WebPage/WebPage.h	2020-04-25 00:51:20 UTC (rev 260684)
@@ -1706,7 +1706,7 @@
     void urlSchemeTaskDidReceiveData(uint64_t handlerIdentifier, uint64_t taskIdentifier, const IPC::SharedBufferDataReference&);
     void urlSchemeTaskDidComplete(uint64_t handlerIdentifier, uint64_t taskIdentifier, const WebCore::ResourceError&);
 
-    void setShouldFireResizeEvents(bool);
+    void setShouldFireEvents(bool);
     void setNeedsDOMWindowResizeEvent();
 
     void setIsSuspended(bool);

Modified: trunk/Source/WebKit/WebProcess/WebPage/WebPage.messages.in (260683 => 260684)


--- trunk/Source/WebKit/WebProcess/WebPage/WebPage.messages.in	2020-04-25 00:34:59 UTC (rev 260683)
+++ trunk/Source/WebKit/WebProcess/WebPage/WebPage.messages.in	2020-04-25 00:51:20 UTC (rev 260684)
@@ -602,7 +602,7 @@
     SetOverriddenMediaType(String mediaType)
     GetProcessDisplayName() -> (String displayName) Async
 
-    SetShouldFireResizeEvents(bool shouldFireResizeEvents)
+    SetShouldFireEvents(bool shouldFireEvents)
     SetNeedsDOMWindowResizeEvent()
 
     SetHasResourceLoadClient(bool has)
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to