- 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)