Changeset 162467 in webkit


Ignore:
Timestamp:
Jan 21, 2014 1:05:49 PM (10 years ago)
Author:
commit-queue@webkit.org
Message:

Unreviewed, rolling out r162452.
http://trac.webkit.org/changeset/162452
https://bugs.webkit.org/show_bug.cgi?id=127366

broke a few tests on all Mac WebKit1 bots (Requested by
thorton on #webkit).

Source/WebCore:

  • WebCore.exp.in:
  • page/FocusController.cpp:

(WebCore::FocusController::FocusController):
(WebCore::FocusController::setFocused):
(WebCore::FocusController::setActive):
(WebCore::FocusController::setContentIsVisible):

  • page/FocusController.h:

(WebCore::FocusController::isActive):
(WebCore::FocusController::isFocused):

  • page/Page.cpp:

(WebCore::Page::Page):
(WebCore::Page::setIsInWindow):
(WebCore::Page::setIsVisuallyIdle):
(WebCore::Page::setIsVisible):
(WebCore::Page::visibilityState):
(WebCore::Page::hiddenPageCSSAnimationSuspensionStateChanged):

  • page/Page.h:

(WebCore::Page::isVisible):
(WebCore::Page::isInWindow):

Source/WebKit/mac:

  • WebView/WebView.mm:

(-[WebView _windowWillOrderOnScreen:]):
(-[WebView _windowWillOrderOffScreen:]):

Source/WebKit2:

  • WebProcess/WebPage/WebPage.cpp:

(WebKit::WebPage::WebPage):
(WebKit::WebPage::setActive):
(WebKit::WebPage::setViewIsVisible):
(WebKit::WebPage::setFocused):
(WebKit::WebPage::setIsInWindow):
(WebKit::WebPage::setViewStateInternal):
(WebKit::WebPage::setIsVisuallyIdle):

  • WebProcess/WebPage/WebPage.h:
Location:
trunk/Source
Files:
11 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r162466 r162467  
     12014-01-21  Commit Queue  <commit-queue@webkit.org>
     2
     3        Unreviewed, rolling out r162452.
     4        http://trac.webkit.org/changeset/162452
     5        https://bugs.webkit.org/show_bug.cgi?id=127366
     6
     7        broke a few tests on all Mac WebKit1 bots (Requested by
     8        thorton on #webkit).
     9
     10        * WebCore.exp.in:
     11        * page/FocusController.cpp:
     12        (WebCore::FocusController::FocusController):
     13        (WebCore::FocusController::setFocused):
     14        (WebCore::FocusController::setActive):
     15        (WebCore::FocusController::setContentIsVisible):
     16        * page/FocusController.h:
     17        (WebCore::FocusController::isActive):
     18        (WebCore::FocusController::isFocused):
     19        * page/Page.cpp:
     20        (WebCore::Page::Page):
     21        (WebCore::Page::setIsInWindow):
     22        (WebCore::Page::setIsVisuallyIdle):
     23        (WebCore::Page::setIsVisible):
     24        (WebCore::Page::visibilityState):
     25        (WebCore::Page::hiddenPageCSSAnimationSuspensionStateChanged):
     26        * page/Page.h:
     27        (WebCore::Page::isVisible):
     28        (WebCore::Page::isInWindow):
     29
    1302014-01-21  Chris Fleizach  <cfleizach@apple.com>
    231
  • trunk/Source/WebCore/WebCore.exp.in

    r162463 r162467  
    485485__ZN7WebCore15FocusController15setInitialFocusENS_14FocusDirectionEPNS_13KeyboardEventE
    486486__ZN7WebCore15FocusController17setFocusedElementEPNS_7ElementEN3WTF10PassRefPtrINS_5FrameEEENS_14FocusDirectionE
     487__ZN7WebCore15FocusController19setContentIsVisibleEb
    487488__ZN7WebCore15FocusController9setActiveEb
    488489__ZN7WebCore15GraphicsContext10strokeRectERKNS_9FloatRectEf
     
    975976__ZN7WebCore4Page12setGroupNameERKN3WTF6StringE
    976977__ZN7WebCore4Page12setIsVisibleEbb
    977 __ZN7WebCore4Page12setViewStateEjb
    978978__ZN7WebCore4Page13rangeOfStringERKN3WTF6StringEPNS_5RangeEj
    979979__ZN7WebCore4Page13setIsInWindowEb
     
    985985__ZN7WebCore4Page16setCanStartMediaEb
    986986__ZN7WebCore4Page16setDefersLoadingEb
     987__ZN7WebCore4Page17setIsVisuallyIdleEb
    987988__ZN7WebCore4Page18removeSchedulePairEN3WTF10PassRefPtrINS1_12SchedulePairEEE
    988989__ZN7WebCore4Page18setPageScaleFactorEfRKNS_8IntPointE
  • trunk/Source/WebCore/page/FocusController.cpp

    r162452 r162467  
    159159}
    160160
    161 FocusController::FocusController(Page& page, ViewState::Flags viewState)
     161FocusController::FocusController(Page& page)
    162162    : m_page(page)
     163    , m_isActive(false)
     164    , m_isFocused(false)
    163165    , m_isChangingFocusedFrame(false)
    164     , m_viewState(viewState)
     166    , m_contentIsVisible(false)
    165167{
    166168}
     
    204206void FocusController::setFocused(bool focused)
    205207{
    206     m_page.setViewState(focused ? m_viewState | ViewState::IsFocused : m_viewState & ~ViewState::IsFocused);
    207 }
    208 
    209 void FocusController::setFocusedInternal(bool focused)
    210 {
    211     if (!isFocused())
     208    if (isFocused() == focused)
     209        return;
     210   
     211    m_isFocused = focused;
     212
     213    if (!m_isFocused)
    212214        focusedOrMainFrame().eventHandler().stopAutoscrollTimer();
    213215
     
    634636}
    635637
    636 void FocusController::setViewState(ViewState::Flags viewState)
    637 {
    638     ViewState::Flags changed = m_viewState ^ viewState;
    639     m_viewState = viewState;
    640 
    641     if (changed & ViewState::IsFocused)
    642         setFocusedInternal(viewState & ViewState::IsFocused);
    643     if (changed & ViewState::WindowIsActive)
    644         setActiveInternal(viewState & ViewState::WindowIsActive);
    645     if (changed & ViewState::IsVisible)
    646         setIsVisibleInternal(viewState & ViewState::IsVisible);
    647 }
    648 
    649638void FocusController::setActive(bool active)
    650639{
    651     m_page.setViewState(active ? m_viewState | ViewState::WindowIsActive : m_viewState & ~ViewState::WindowIsActive);
    652 }
    653 
    654 void FocusController::setActiveInternal(bool active)
    655 {
     640    if (m_isActive == active)
     641        return;
     642
     643    m_isActive = active;
     644
    656645    if (FrameView* view = m_page.mainFrame().view()) {
    657646        if (!view->platformWidget()) {
     
    675664}
    676665
    677 void FocusController::setIsVisibleInternal(bool contentIsVisible)
    678 {
     666void FocusController::setContentIsVisible(bool contentIsVisible)
     667{
     668    if (m_contentIsVisible == contentIsVisible)
     669        return;
     670
     671    m_contentIsVisible = contentIsVisible;
     672
    679673    FrameView* view = m_page.mainFrame().view();
    680674    if (!view)
  • trunk/Source/WebCore/page/FocusController.h

    r162452 r162467  
    2929#include "FocusDirection.h"
    3030#include "LayoutRect.h"
    31 #include "ViewState.h"
    3231#include <wtf/Forward.h>
    3332#include <wtf/Noncopyable.h>
     
    6463    WTF_MAKE_NONCOPYABLE(FocusController); WTF_MAKE_FAST_ALLOCATED;
    6564public:
    66     explicit FocusController(Page&, ViewState::Flags);
     65    explicit FocusController(Page&);
    6766
    6867    void setFocusedFrame(PassRefPtr<Frame>);
     
    7574    bool setFocusedElement(Element*, PassRefPtr<Frame>, FocusDirection = FocusDirectionNone);
    7675
    77     void setViewState(ViewState::Flags);
    78 
    7976    void setActive(bool);
    80     bool isActive() const { return m_viewState & ViewState::WindowIsActive; }
     77    bool isActive() const { return m_isActive; }
    8178
    8279    void setFocused(bool);
    83     bool isFocused() const { return m_viewState & ViewState::IsFocused; }
     80    bool isFocused() const { return m_isFocused; }
    8481
    85     bool contentIsVisible() const { return m_viewState & ViewState::IsVisible; }
     82    void setContentIsVisible(bool);
    8683
    8784    // These methods are used in WebCore/bindings/objc/DOM.mm.
     
    9087
    9188private:
    92     void setActiveInternal(bool);
    93     void setFocusedInternal(bool);
    94     void setIsVisibleInternal(bool);
    95 
    9689    bool advanceFocusDirectionally(FocusDirection, KeyboardEvent*);
    9790    bool advanceFocusInDocumentOrder(FocusDirection, KeyboardEvent*, bool initialFocus);
     
    119112    Page& m_page;
    120113    RefPtr<Frame> m_focusedFrame;
     114    bool m_isActive;
     115    bool m_isFocused;
    121116    bool m_isChangingFocusedFrame;
    122     ViewState::Flags m_viewState;
     117    bool m_contentIsVisible;
     118
    123119};
    124120
  • trunk/Source/WebCore/page/Page.cpp

    r162452 r162467  
    125125}
    126126
    127 static const ViewState::Flags PageInitialViewState = ViewState::IsVisible | ViewState::IsInWindow;
    128 
    129127Page::Page(PageClients& pageClients)
    130128    : m_chrome(std::make_unique<Chrome>(*this, *pageClients.chromeClient))
     
    133131    , m_dragController(std::make_unique<DragController>(*this, *pageClients.dragClient))
    134132#endif
    135     , m_focusController(std::make_unique<FocusController>(*this, PageInitialViewState))
     133    , m_focusController(std::make_unique<FocusController>(*this))
    136134#if ENABLE(CONTEXT_MENUS)
    137135    , m_contextMenuController(std::make_unique<ContextMenuController>(*this, *pageClients.contextMenuClient))
     
    175173    , m_timerAlignmentInterval(Settings::defaultDOMTimerAlignmentInterval())
    176174    , m_isEditable(false)
     175    , m_isInWindow(true)
     176    , m_isVisible(true)
    177177    , m_isPrerender(false)
    178     , m_viewState(PageInitialViewState)
    179178    , m_requestedLayoutMilestones(0)
    180179    , m_headerHeight(0)
     
    883882void Page::setIsInWindow(bool isInWindow)
    884883{
    885     setViewState(isInWindow ? m_viewState | ViewState::IsInWindow : m_viewState & ~ViewState::IsInWindow);
    886 }
    887 
    888 void Page::setIsInWindowInternal(bool isInWindow)
    889 {
     884    if (m_isInWindow == isInWindow)
     885        return;
     886
     887    m_isInWindow = isInWindow;
     888
    890889    for (Frame* frame = &mainFrame(); frame; frame = frame->tree().traverseNext()) {
    891890        if (FrameView* frameView = frame->view())
     
    915914}
    916915
    917 void Page::setIsVisuallyIdleInternal(bool isVisuallyIdle)
     916void Page::setIsVisuallyIdle(bool isVisuallyIdle)
    918917{
    919918    m_pageThrottler->setIsVisuallyIdle(isVisuallyIdle);
     
    12181217}
    12191218
    1220 void Page::setViewState(ViewState::Flags viewState, bool isInitialState)
    1221 {
    1222     ViewState::Flags changed = m_viewState ^ viewState;
    1223     m_viewState = viewState;
    1224 
    1225     // We want to make sure to update the active state while hidden, so if the view is going
    1226     // to be visible then update the focus controller first (it may currently still be hidden).
    1227     if (changed && (m_viewState & ViewState::IsVisible))
    1228         m_focusController->setViewState(viewState);
    1229 
    1230     if (changed & ViewState::IsVisible)
    1231         setIsVisibleInternal(viewState & ViewState::IsVisible, isInitialState);
    1232     if (changed & ViewState::IsInWindow)
    1233         setIsInWindowInternal(viewState & ViewState::IsInWindow);
    1234     if (changed & ViewState::IsVisuallyIdle)
    1235         setIsVisuallyIdleInternal(viewState & ViewState::IsVisuallyIdle);
    1236 
    1237     if (changed && !(m_viewState & ViewState::IsVisible))
    1238         m_focusController->setViewState(viewState);
    1239 }
    1240 
    12411219void Page::setIsVisible(bool isVisible, bool isInitialState)
    1242 {
    1243     setViewState(isVisible ? m_viewState | ViewState::IsVisible : m_viewState & ~ViewState::IsVisible, isInitialState);
    1244 }
    1245 
    1246 void Page::setIsVisibleInternal(bool isVisible, bool isInitialState)
    12471220{
    12481221    // FIXME: The visibility state should be stored on the top-level document.
    12491222    // https://bugs.webkit.org/show_bug.cgi?id=116769
     1223
     1224    if (m_isVisible == isVisible)
     1225        return;
     1226    m_isVisible = isVisible;
    12501227
    12511228    if (isVisible) {
     
    13101287PageVisibilityState Page::visibilityState() const
    13111288{
    1312     if (isVisible())
     1289    if (m_isVisible)
    13131290        return PageVisibilityStateVisible;
    13141291    if (m_isPrerender)
     
    15721549void Page::hiddenPageCSSAnimationSuspensionStateChanged()
    15731550{
    1574     if (!isVisible()) {
     1551    if (!m_isVisible) {
    15751552        if (m_settings->hiddenPageCSSAnimationSuspensionEnabled())
    15761553            mainFrame().animation().suspendAnimations();
  • trunk/Source/WebCore/page/Page.h

    r162452 r162467  
    3232#include "Region.h"
    3333#include "Supplementable.h"
    34 #include "ViewState.h"
    3534#include "ViewportArguments.h"
    3635#include <wtf/Forward.h>
     
    299298
    300299    // Notifications when the Page starts and stops being presented via a native window.
    301     void setViewState(ViewState::Flags, bool isInitial = false);
    302300    void setIsVisible(bool isVisible, bool isInitial);
    303301    void setIsPrerender();
    304     bool isVisible() const { return m_viewState & ViewState::IsVisible; }
     302    bool isVisible() const { return m_isVisible; }
    305303
    306304    // Notification that this Page was moved into or out of a native window.
    307305    void setIsInWindow(bool);
    308     bool isInWindow() const { return m_viewState & ViewState::IsInWindow; }
     306    bool isInWindow() const { return m_isInWindow; }
    309307
    310308    void suspendScriptedAnimations();
    311309    void resumeScriptedAnimations();
    312310    bool scriptedAnimationsSuspended() const { return m_scriptedAnimationsSuspended; }
     311    void setIsVisuallyIdle(bool);
    313312
    314313    void userStyleSheetLocationChanged();
     
    427426    void initGroup();
    428427
    429     void setIsInWindowInternal(bool);
    430     void setIsVisibleInternal(bool isVisible, bool isInitial);
    431     void setIsVisuallyIdleInternal(bool);
    432 
    433428#if ASSERT_DISABLED
    434429    void checkSubframeCountConsistency() const { }
     
    534529
    535530    bool m_isEditable;
     531    bool m_isInWindow;
     532    bool m_isVisible;
    536533    bool m_isPrerender;
    537     ViewState::Flags m_viewState;
    538534
    539535    LayoutMilestones m_requestedLayoutMilestones;
  • trunk/Source/WebKit/mac/ChangeLog

    r162452 r162467  
     12014-01-21  Commit Queue  <commit-queue@webkit.org>
     2
     3        Unreviewed, rolling out r162452.
     4        http://trac.webkit.org/changeset/162452
     5        https://bugs.webkit.org/show_bug.cgi?id=127366
     6
     7        broke a few tests on all Mac WebKit1 bots (Requested by
     8        thorton on #webkit).
     9
     10        * WebView/WebView.mm:
     11        (-[WebView _windowWillOrderOnScreen:]):
     12        (-[WebView _windowWillOrderOffScreen:]):
     13
    1142014-01-21  Gavin Barraclough  <barraclough@apple.com>
    215
  • trunk/Source/WebKit/mac/WebView/WebView.mm

    r162452 r162467  
    53725372    [self doWindowDidChangeScreen];
    53735373
    5374     if (_private && _private->page)
     5374    if (_private && _private->page) {
    53755375        _private->page->resumeScriptedAnimations();
     5376        _private->page->focusController().setContentIsVisible(true);
     5377    }
    53765378}
    53775379
     
    53835385- (void)_windowWillOrderOffScreen:(NSNotification *)notification
    53845386{
    5385     if (_private && _private->page)
     5387    if (_private && _private->page) {
    53865388        _private->page->suspendScriptedAnimations();
     5389        _private->page->focusController().setContentIsVisible(false);
     5390    }
    53875391}
    53885392
  • trunk/Source/WebKit2/ChangeLog

    r162465 r162467  
     12014-01-21  Commit Queue  <commit-queue@webkit.org>
     2
     3        Unreviewed, rolling out r162452.
     4        http://trac.webkit.org/changeset/162452
     5        https://bugs.webkit.org/show_bug.cgi?id=127366
     6
     7        broke a few tests on all Mac WebKit1 bots (Requested by
     8        thorton on #webkit).
     9
     10        * WebProcess/WebPage/WebPage.cpp:
     11        (WebKit::WebPage::WebPage):
     12        (WebKit::WebPage::setActive):
     13        (WebKit::WebPage::setViewIsVisible):
     14        (WebKit::WebPage::setFocused):
     15        (WebKit::WebPage::setIsInWindow):
     16        (WebKit::WebPage::setViewStateInternal):
     17        (WebKit::WebPage::setIsVisuallyIdle):
     18        * WebProcess/WebPage/WebPage.h:
     19
    1202014-01-21  Martin Hock  <mhock@apple.com>
    221
  • trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp

    r162452 r162467  
    374374    setMemoryCacheMessagesEnabled(parameters.areMemoryCacheClientCallsEnabled);
    375375
    376     m_page->setViewState(m_viewState, true);
    377     updateIsInWindow(true);
     376    setActive(parameters.viewState & ViewState::WindowIsActive);
     377    setFocused(parameters.viewState & ViewState::IsFocused);
     378
     379    // Page defaults to in-window, but setIsInWindow depends on it being a valid indicator of actually having been put into a window.
     380    bool isInWindow = parameters.viewState & ViewState::IsInWindow;
     381    if (!isInWindow)
     382        m_page->setIsInWindow(false);
     383    else
     384        WebProcess::shared().pageDidEnterWindow(m_pageID);
     385
     386    setIsInWindow(isInWindow);
    378387
    379388    setMinimumLayoutSize(parameters.minimumLayoutSize);
     
    419428        WebProcess::shared().eventDispatcher().addScrollingTreeForPage(this);
    420429#endif
     430
     431    m_page->setIsVisible(m_viewState & ViewState::IsVisible, true);
     432    setIsVisuallyIdle(m_viewState & ViewState::IsVisuallyIdle);
    421433}
    422434
     
    19131925}
    19141926
     1927void WebPage::setActive(bool isActive)
     1928{
     1929    m_page->focusController().setActive(isActive);
     1930}
     1931
     1932void WebPage::setViewIsVisible(bool isVisible)
     1933{
     1934    corePage()->focusController().setContentIsVisible(isVisible);
     1935
     1936    m_page->setIsVisible(m_viewState & ViewState::IsVisible, false);
     1937}
     1938
    19151939void WebPage::setDrawsBackground(bool drawsBackground)
    19161940{
     
    19681992}
    19691993
     1994void WebPage::setFocused(bool isFocused)
     1995{
     1996    m_page->focusController().setFocused(isFocused);
     1997}
     1998
    19701999void WebPage::setInitialFocus(bool forward, bool isKeyboardEventValid, const WebKeyboardEvent& event)
    19712000{
     
    20222051}
    20232052
    2024 void WebPage::updateIsInWindow(bool isInitialState)
    2025 {
    2026     bool isInWindow = m_viewState & WebCore::ViewState::IsInWindow;
    2027 
     2053void WebPage::setIsInWindow(bool isInWindow)
     2054{
     2055    bool pageWasInWindow = m_page->isInWindow();
     2056   
    20282057    if (!isInWindow) {
    20292058        m_setCanStartMediaTimer.stop();
    20302059        m_page->setCanStartMedia(false);
    20312060       
    2032         // The WebProcess does not yet know about this page; no need to tell it we're leaving the window.
    2033         if (!isInitialState)
     2061        if (pageWasInWindow)
    20342062            WebProcess::shared().pageWillLeaveWindow(m_pageID);
    20352063    } else {
     
    20402068            m_setCanStartMediaTimer.startOneShot(0);
    20412069
    2042         WebProcess::shared().pageDidEnterWindow(m_pageID);
    2043     }
     2070        if (!pageWasInWindow)
     2071            WebProcess::shared().pageDidEnterWindow(m_pageID);
     2072    }
     2073
     2074    m_page->setIsInWindow(isInWindow);
    20442075
    20452076    if (isInWindow)
     
    20612092
    20622093    m_drawingArea->viewStateDidChange(changed);
    2063     m_page->setViewState(viewState, isInitialState);
     2094
     2095    // We want to make sure to update the active state while hidden, so if the view is hidden then update the active state
     2096    // early (in case it becomes visible), and if the view was visible then update active state later (in case it hides).
     2097    if (changed & ViewState::IsFocused)
     2098        setFocused(viewState & ViewState::IsFocused);
     2099    if (changed & ViewState::WindowIsActive && !(m_viewState & ViewState::IsVisible))
     2100        setActive(viewState & ViewState::WindowIsActive);
     2101    if (changed & ViewState::IsVisible)
     2102        setViewIsVisible(viewState & ViewState::IsVisible);
     2103    if (changed & ViewState::WindowIsActive && m_viewState & ViewState::IsVisible)
     2104        setActive(viewState & ViewState::WindowIsActive);
     2105    if (changed & ViewState::IsInWindow)
     2106         setIsInWindow(viewState & ViewState::IsInWindow);
     2107    if (changed & ViewState::IsVisuallyIdle)
     2108        setIsVisuallyIdle(viewState & ViewState::IsVisuallyIdle);
     2109
    20642110    for (auto* pluginView : m_pluginViews)
    20652111        pluginView->viewStateDidChange(changed);
    2066 
    2067     if (changed & ViewState::IsInWindow)
    2068         updateIsInWindow();
    20692112}
    20702113
     
    36703713}
    36713714
     3715void WebPage::setIsVisuallyIdle(bool isVisuallyIdle)
     3716{
     3717    m_page->setIsVisuallyIdle(isVisuallyIdle);
     3718}
     3719
    36723720void WebPage::setScrollingPerformanceLoggingEnabled(bool enabled)
    36733721{
  • trunk/Source/WebKit2/WebProcess/WebPage/WebPage.h

    r162452 r162467  
    738738    void setInitialFocus(bool forward, bool isKeyboardEventValid, const WebKeyboardEvent&);
    739739    void setWindowResizerSize(const WebCore::IntSize&);
    740     void updateIsInWindow(bool isInitialState = false);
     740    void setIsInWindow(bool);
     741    void setIsVisuallyIdle(bool);
    741742    void setViewState(WebCore::ViewState::Flags, bool wantsDidUpdateViewState);
    742743    void setViewStateInternal(WebCore::ViewState::Flags, bool isInitialState);
Note: See TracChangeset for help on using the changeset viewer.