Changeset 260684 in webkit


Ignore:
Timestamp:
Apr 24, 2020 5:51:20 PM (4 years ago)
Author:
Chris Dumez
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:
Location:
trunk/Source
Files:
11 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r260683 r260684  
     12020-04-24  Chris Dumez  <cdumez@apple.com>
     2
     3        [iOS] Unable to sign up on twitter.com
     4        https://bugs.webkit.org/show_bug.cgi?id=211003
     5        <rdar://problem/58804852>
     6
     7        Reviewed by Darin Adler.
     8
     9        This is similar to the bug we had on nytimes.com and that was fixed in
     10        r258767. However, instead of a 'resize' event, it is a 'change' event
     11        on a MediaQueryList that is getting twitter.com in a bad state.
     12
     13        The issue is that when we home out of Safari, SpringBoard takes does
     14        a snapshot sequence at various sizes / orientations and this causes
     15        many JS events to get fired (e.g. 'resize', 'orientationchange',
     16        'change', ...), which can get some sites in a bad state. To address
     17        the issue, we now prevent firing of ALL JS events during the
     18        SpringBoard snapshot, instead of merely preventing the 'resize' ones.
     19
     20        * dom/EventTarget.cpp:
     21        (WebCore::EventTarget::fireEventListeners):
     22        * page/FrameView.cpp:
     23        (WebCore::FrameView::sendResizeEventIfNeeded):
     24        * page/Page.h:
     25        (WebCore::Page::shouldFireEvents const):
     26        (WebCore::Page::setShouldFireEvents):
     27        (WebCore::Page::shouldFireResizeEvents const): Deleted.
     28        (WebCore::Page::setShouldFireResizeEvents): Deleted.
     29
    1302020-04-24  Saam Barati  <sbarati@apple.com>
    231
  • trunk/Source/WebCore/dom/EventTarget.cpp

    r259009 r260684  
    4141#include "JSEventListener.h"
    4242#include "JSLazyEventListener.h"
     43#include "Logging.h"
    4344#include "Quirks.h"
    4445#include "ScriptController.h"
     
    252253        return;
    253254
     255    // FIXME: Remove once <rdar://problem/62344280> is fixed.
     256    if (is<Document>(scriptExecutionContext())) {
     257        auto* page = downcast<Document>(*scriptExecutionContext()).page();
     258        if (page && !page->shouldFireEvents()) {
     259            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());
     260            return;
     261        }
     262    }
     263
    254264    SetForScope<bool> firingEventListenersScope(data->isFiringEventListeners, true);
    255265
  • trunk/Source/WebCore/page/FrameView.cpp

    r260171 r260684  
    33773377#endif
    33783378
    3379     if (page && !page->shouldFireResizeEvents()) {
    3380         FRAMEVIEW_RELEASE_LOG_IF_ALLOWED(Events, "sendResizeEventIfNeeded: Not firing resize events because they are temporarily disabled for this page");
    3381         return;
    3382     }
    3383 
    33843379    LOG_WITH_STREAM(Events, stream << "FrameView" << this << "sendResizeEventIfNeeded scheduling resize event for document" << frame().document() << ", size " << currentSize);
    33853380    frame().document()->setNeedsDOMWindowResizeEvent();
  • trunk/Source/WebCore/page/Page.h

    r260643 r260684  
    745745    WEBCORE_EXPORT void removeInjectedUserStyleSheet(UserStyleSheet&);
    746746
    747     bool shouldFireResizeEvents() const { return m_shouldFireResizeEvents; }
    748     void setShouldFireResizeEvents(bool shouldFireResizeEvents) { m_shouldFireResizeEvents = shouldFireResizeEvents; }
     747    bool shouldFireEvents() const { return m_shouldFireEvents; }
     748    void setShouldFireEvents(bool shouldFireEvents) { m_shouldFireEvents = shouldFireEvents; }
    749749
    750750    bool hasBeenNotifiedToInjectUserScripts() const { return m_hasBeenNotifiedToInjectUserScripts; }
     
    10341034    Vector<UserContentURLPattern> m_corsDisablingPatterns;
    10351035    Vector<UserStyleSheet> m_userStyleSheetsPendingInjection;
    1036     bool m_shouldFireResizeEvents { true };
     1036    bool m_shouldFireEvents { true };
    10371037    bool m_loadsSubresources { true };
    10381038    bool m_loadsFromNetwork { true };
  • trunk/Source/WebKit/ChangeLog

    r260672 r260684  
     12020-04-24  Chris Dumez  <cdumez@apple.com>
     2
     3        [iOS] Unable to sign up on twitter.com
     4        https://bugs.webkit.org/show_bug.cgi?id=211003
     5        <rdar://problem/58804852>
     6
     7        Reviewed by Darin Adler.
     8
     9        * UIProcess/WebPageProxy.cpp:
     10        * UIProcess/WebPageProxy.h:
     11        * UIProcess/ios/WKApplicationStateTrackingView.mm:
     12        (-[WKApplicationStateTrackingView _willBeginSnapshotSequence]):
     13        (-[WKApplicationStateTrackingView _didCompleteSnapshotSequence]):
     14        * WebProcess/WebPage/WebPage.cpp:
     15        (WebKit::WebPage::setShouldFireEvents):
     16        (WebKit::WebPage::setShouldFireResizeEvents): Deleted.
     17        * WebProcess/WebPage/WebPage.h:
     18        * WebProcess/WebPage/WebPage.messages.in:
     19
    1202020-04-24  Christopher Reid  <chris.reid@sony.com>
    221
  • trunk/Source/WebKit/UIProcess/WebPageProxy.cpp

    r260658 r260684  
    1010510105}
    1010610106
    10107 void WebPageProxy::setShouldFireResizeEvents(bool shouldFireResizeEvents)
    10108 {
    10109     send(Messages::WebPage::SetShouldFireResizeEvents(shouldFireResizeEvents));
     10107void WebPageProxy::setShouldFireEvents(bool shouldFireEvents)
     10108{
     10109    send(Messages::WebPage::SetShouldFireEvents(shouldFireEvents));
    1011010110}
    1011110111
  • trunk/Source/WebKit/UIProcess/WebPageProxy.h

    r260658 r260684  
    17321732#endif
    17331733
    1734     void setShouldFireResizeEvents(bool);
     1734    void setShouldFireEvents(bool);
    17351735    void setNeedsDOMWindowResizeEvent();
    17361736
  • trunk/Source/WebKit/UIProcess/ios/WKApplicationStateTrackingView.mm

    r258767 r260684  
    110110        return;
    111111
    112     page->setShouldFireResizeEvents(false);
     112    page->setShouldFireEvents(false);
    113113}
    114114
     
    119119        return;
    120120
    121     page->setShouldFireResizeEvents(true);
     121    page->setShouldFireEvents(true);
    122122}
    123123
  • trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp

    r260652 r260684  
    33083308}
    33093309
    3310 void WebPage::setShouldFireResizeEvents(bool shouldFireResizeEvents)
    3311 {
    3312     RELEASE_LOG_IF_ALLOWED(Resize, "setShouldFireResizeEvents(%d)", shouldFireResizeEvents);
     3310void WebPage::setShouldFireEvents(bool shouldFireEvents)
     3311{
     3312    RELEASE_LOG_IF_ALLOWED(Resize, "setShouldFireEvents(%d)", shouldFireEvents);
    33133313
    33143314    if (m_page)
    3315         m_page->setShouldFireResizeEvents(shouldFireResizeEvents);
     3315        m_page->setShouldFireEvents(shouldFireEvents);
    33163316}
    33173317
  • trunk/Source/WebKit/WebProcess/WebPage/WebPage.h

    r260652 r260684  
    17071707    void urlSchemeTaskDidComplete(uint64_t handlerIdentifier, uint64_t taskIdentifier, const WebCore::ResourceError&);
    17081708
    1709     void setShouldFireResizeEvents(bool);
     1709    void setShouldFireEvents(bool);
    17101710    void setNeedsDOMWindowResizeEvent();
    17111711
  • trunk/Source/WebKit/WebProcess/WebPage/WebPage.messages.in

    r260652 r260684  
    603603    GetProcessDisplayName() -> (String displayName) Async
    604604
    605     SetShouldFireResizeEvents(bool shouldFireResizeEvents)
     605    SetShouldFireEvents(bool shouldFireEvents)
    606606    SetNeedsDOMWindowResizeEvent()
    607607
Note: See TracChangeset for help on using the changeset viewer.