From 5d1ebb6a1c7e447d5f55efd600c468877f78b30a Mon Sep 17 00:00:00 2001 From: "commit-queue@webkit.org" Date: Wed, 4 Apr 2012 13:10:28 +0000 Subject: [PATCH] [WK2] Add Page Visibility API support https://bugs.webkit.org/show_bug.cgi?id=81154 Patch by Jesus Sanchez-Palencia on 2012-04-04 Reviewed by Kenneth Rohde Christiansen. Use WebPageProxy::viewStateDidChange to correctly define the page's visibilityState and then set it to the WebProcess. The WebKit2's based ports just need to implement the related PageClient functions in order to get this API enabled and working properly. * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::WebPageProxy): (WebKit::WebPageProxy::initializeWebPage): (WebKit::WebPageProxy::viewStateDidChange): * WebProcess/WebPage/WebPage.cpp: (WebKit): (WebKit::WebPage::setVisibilityState): * WebProcess/WebPage/WebPage.h: (WebPage): * WebProcess/WebPage/WebPage.messages.in: git-svn-id: http://svn.webkit.org/repository/webkit/trunk@113181 268f45cc-cd09-0410-ab3c-d52691b4dbfc --- Source/WebKit2/ChangeLog | 23 ++++++++++++++++++++++ Source/WebKit2/UIProcess/WebPageProxy.cpp | 19 ++++++++++++++++++ Source/WebKit2/UIProcess/WebPageProxy.h | 4 ++++ Source/WebKit2/WebProcess/WebPage/WebPage.cpp | 9 +++++++++ Source/WebKit2/WebProcess/WebPage/WebPage.h | 6 +++++- .../WebKit2/WebProcess/WebPage/WebPage.messages.in | 4 ++++ 6 files changed, 64 insertions(+), 1 deletion(-) diff --git a/Source/WebKit2/ChangeLog b/Source/WebKit2/ChangeLog index 4857b03..71b9867 100644 --- a/Source/WebKit2/ChangeLog +++ b/Source/WebKit2/ChangeLog @@ -1,3 +1,26 @@ +2012-04-04 Jesus Sanchez-Palencia + + [WK2] Add Page Visibility API support + https://bugs.webkit.org/show_bug.cgi?id=81154 + + Reviewed by Kenneth Rohde Christiansen. + + Use WebPageProxy::viewStateDidChange to correctly define the page's + visibilityState and then set it to the WebProcess. The WebKit2's based + ports just need to implement the related PageClient functions in order + to get this API enabled and working properly. + + * UIProcess/WebPageProxy.cpp: + (WebKit::WebPageProxy::WebPageProxy): + (WebKit::WebPageProxy::initializeWebPage): + (WebKit::WebPageProxy::viewStateDidChange): + * WebProcess/WebPage/WebPage.cpp: + (WebKit): + (WebKit::WebPage::setVisibilityState): + * WebProcess/WebPage/WebPage.h: + (WebPage): + * WebProcess/WebPage/WebPage.messages.in: + 2012-04-04 Kenneth Rohde Christiansen [Qt] Further improvements of the tap gesture recognizer diff --git a/Source/WebKit2/UIProcess/WebPageProxy.cpp b/Source/WebKit2/UIProcess/WebPageProxy.cpp index c453672..c07d047 100644 --- a/Source/WebKit2/UIProcess/WebPageProxy.cpp +++ b/Source/WebKit2/UIProcess/WebPageProxy.cpp @@ -204,6 +204,9 @@ WebPageProxy::WebPageProxy(PageClient* pageClient, PassRefPtr p , m_renderTreeSize(0) , m_shouldSendEventsSynchronously(false) , m_mediaVolume(1) +#if ENABLE(PAGE_VISIBILITY_API) + , m_visibilityState(PageVisibilityStateVisible) +#endif { #ifndef NDEBUG webPageProxyCounter.increment(); @@ -345,6 +348,10 @@ void WebPageProxy::initializeWebPage() #endif process()->send(Messages::WebProcess::CreateWebPage(m_pageID, creationParameters()), 0); + +#if ENABLE(PAGE_VISIBILITY_API) + process()->send(Messages::WebPage::SetVisibilityState(m_visibilityState, /* isInitialState */ true), m_pageID); +#endif } void WebPageProxy::close() @@ -792,6 +799,18 @@ void WebPageProxy::viewStateDidChange(ViewStateFlags flags) } } +#if ENABLE(PAGE_VISIBILITY_API) + PageVisibilityState visibilityState = PageVisibilityStateHidden; + + if (m_pageClient->isViewVisible()) + visibilityState = PageVisibilityStateVisible; + + if (visibilityState != m_visibilityState) { + m_visibilityState = visibilityState; + process()->send(Messages::WebPage::SetVisibilityState(visibilityState, false), m_pageID); + } +#endif + updateBackingStoreDiscardableState(); } diff --git a/Source/WebKit2/UIProcess/WebPageProxy.h b/Source/WebKit2/UIProcess/WebPageProxy.h index abe803e..36423e2 100644 --- a/Source/WebKit2/UIProcess/WebPageProxy.h +++ b/Source/WebKit2/UIProcess/WebPageProxy.h @@ -1056,6 +1056,10 @@ private: #if PLATFORM(QT) WTF::HashSet > m_applicationSchemeRequests; #endif + +#if ENABLE(PAGE_VISIBILITY_API) + WebCore::PageVisibilityState m_visibilityState; +#endif }; } // namespace WebKit diff --git a/Source/WebKit2/WebProcess/WebPage/WebPage.cpp b/Source/WebKit2/WebProcess/WebPage/WebPage.cpp index b2c6c3a..9c37347 100644 --- a/Source/WebKit2/WebProcess/WebPage/WebPage.cpp +++ b/Source/WebKit2/WebProcess/WebPage/WebPage.cpp @@ -3157,4 +3157,13 @@ FrameView* WebPage::mainFrameView() const return 0; } +#if ENABLE(PAGE_VISIBILITY_API) +void WebPage::setVisibilityState(int visibilityState, bool isInitialState) +{ + if (!m_page) + return; + m_page->setVisibilityState(static_cast(visibilityState), isInitialState); +} +#endif + } // namespace WebKit diff --git a/Source/WebKit2/WebProcess/WebPage/WebPage.h b/Source/WebKit2/WebProcess/WebPage/WebPage.h index a9ad99d..badf56b 100644 --- a/Source/WebKit2/WebProcess/WebPage/WebPage.h +++ b/Source/WebKit2/WebProcess/WebPage/WebPage.h @@ -512,7 +512,11 @@ public: void recomputeShortCircuitHorizontalWheelEventsState(); bool willGoToBackForwardItemCallbackEnabled() const { return m_willGoToBackForwardItemCallbackEnabled; } - + +#if ENABLE(PAGE_VISIBILITY_API) + void setVisibilityState(int visibilityState, bool isInitialState); +#endif + private: WebPage(uint64_t pageID, const WebPageCreationParameters&); diff --git a/Source/WebKit2/WebProcess/WebPage/WebPage.messages.in b/Source/WebKit2/WebProcess/WebPage/WebPage.messages.in index 3515aa7..a640589 100644 --- a/Source/WebKit2/WebProcess/WebPage/WebPage.messages.in +++ b/Source/WebKit2/WebProcess/WebPage/WebPage.messages.in @@ -260,4 +260,8 @@ messages -> WebPage { #if PLATFORM(MAC) && !defined(BUILDING_ON_SNOW_LEOPARD) HandleAlternativeTextUIResult(String result) #endif + +#if ENABLE(PAGE_VISIBILITY_API) + SetVisibilityState(int visibilityState, bool isInitialState); +#endif } -- 2.7.4