Title: [161226] trunk/Source/WebKit2
Revision
161226
Author
[email protected]
Date
2014-01-02 14:20:05 -0800 (Thu, 02 Jan 2014)

Log Message

Refactor ViewState handling for drawing area / plugins
https://bugs.webkit.org/show_bug.cgi?id=126272

Reviewed by Tim Horton.

Instead of all ViewState changes being handled by the WebPage, notify the DrawingArea & PluginView to better encapsulate.

* WebProcess/Plugins/PluginView.cpp:
(WebKit::PluginView::viewStateDidChange):
(WebKit::PluginView::platformViewStateDidChange):
    - added, handle changes in ViewState relevant to PluginView.
(WebKit::PluginView::didInitializePlugin):
    - helper function removed.
* WebProcess/Plugins/PluginView.h:
    - added/removed function declarations.
* WebProcess/WebPage/DrawingArea.h:
(WebKit::DrawingArea::viewStateDidChange):
    - declare viewStateDidChange.
* WebProcess/WebPage/WebPage.cpp:
(WebKit::WebPage::setActive):
    - no need to notify plugin.
(WebKit::WebPage::setViewIsVisible):
    - no need to notify drawing area.
(WebKit::WebPage::setViewState):
    - send viewStateDidChange to drawing area / plugin.
(WebKit::WebPage::setWindowIsVisible):
    - no need to notify plugin.
* WebProcess/WebPage/WebPage.h:
(WebKit::WebPage::layerHostingMode):
    - removed setLayerHostingMode.
* WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h:
    - declare viewStateDidChange.
* WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
(WebKit::TiledCoreAnimationDrawingArea::viewStateDidChange):
    - added, handle changes in ViewState relevant to DrawingArea.

Modified Paths

Diff

Modified: trunk/Source/WebKit2/ChangeLog (161225 => 161226)


--- trunk/Source/WebKit2/ChangeLog	2014-01-02 22:16:59 UTC (rev 161225)
+++ trunk/Source/WebKit2/ChangeLog	2014-01-02 22:20:05 UTC (rev 161226)
@@ -1,3 +1,41 @@
+2014-01-02  Gavin Barraclough  <[email protected]>
+
+        Refactor ViewState handling for drawing area / plugins
+        https://bugs.webkit.org/show_bug.cgi?id=126272
+
+        Reviewed by Tim Horton.
+
+        Instead of all ViewState changes being handled by the WebPage, notify the DrawingArea & PluginView to better encapsulate.
+
+        * WebProcess/Plugins/PluginView.cpp:
+        (WebKit::PluginView::viewStateDidChange):
+        (WebKit::PluginView::platformViewStateDidChange):
+            - added, handle changes in ViewState relevant to PluginView.
+        (WebKit::PluginView::didInitializePlugin):
+            - helper function removed.
+        * WebProcess/Plugins/PluginView.h:
+            - added/removed function declarations.
+        * WebProcess/WebPage/DrawingArea.h:
+        (WebKit::DrawingArea::viewStateDidChange):
+            - declare viewStateDidChange.
+        * WebProcess/WebPage/WebPage.cpp:
+        (WebKit::WebPage::setActive):
+            - no need to notify plugin.
+        (WebKit::WebPage::setViewIsVisible):
+            - no need to notify drawing area.
+        (WebKit::WebPage::setViewState):
+            - send viewStateDidChange to drawing area / plugin.
+        (WebKit::WebPage::setWindowIsVisible):
+            - no need to notify plugin.
+        * WebProcess/WebPage/WebPage.h:
+        (WebKit::WebPage::layerHostingMode):
+            - removed setLayerHostingMode.
+        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h:
+            - declare viewStateDidChange.
+        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
+        (WebKit::TiledCoreAnimationDrawingArea::viewStateDidChange):
+            - added, handle changes in ViewState relevant to DrawingArea.
+
 2014-01-02  Alexey Proskuryakov  <[email protected]>
 
         Merge didMoveOnscreen / page visibility to isVisible

Modified: trunk/Source/WebKit2/WebProcess/Plugins/PluginView.cpp (161225 => 161226)


--- trunk/Source/WebKit2/WebProcess/Plugins/PluginView.cpp	2014-01-02 22:16:59 UTC (rev 161225)
+++ trunk/Source/WebKit2/WebProcess/Plugins/PluginView.cpp	2014-01-02 22:20:05 UTC (rev 161226)
@@ -481,21 +481,34 @@
     m_webPage = 0;
 }
 
-#if PLATFORM(MAC)    
-void PluginView::setWindowIsVisible(bool windowIsVisible)
+void PluginView::viewStateDidChange(ViewState::Flags changed)
 {
-    if (!m_isInitialized || !m_plugin)
-        return;
-
-    m_plugin->windowVisibilityChanged(windowIsVisible);
+#if PLATFORM(MAC)
+    platformViewStateDidChange(changed);
+#endif
 }
 
-void PluginView::setWindowIsFocused(bool windowIsFocused)
+#if PLATFORM(MAC)
+void PluginView::platformViewStateDidChange(ViewState::Flags changed)
 {
-    if (!m_isInitialized || !m_plugin)
+    if (!m_plugin)
         return;
 
-    m_plugin->windowFocusChanged(windowIsFocused);    
+    if (!m_isInitialized) {
+#if HAVE(LAYER_HOSTING_IN_WINDOW_SERVER)
+        m_parameters.layerHostingMode = m_webPage->layerHostingMode();
+#endif
+        return;
+    }
+
+    if (changed & ViewState::WindowIsVisible)
+        m_plugin->windowVisibilityChanged(m_webPage->windowIsVisible());
+    if (changed & ViewState::WindowIsActive)
+        m_plugin->windowFocusChanged(m_webPage->windowIsFocused());
+#if HAVE(LAYER_HOSTING_IN_WINDOW_SERVER)
+    if (changed & ViewState::IsLayerWindowServerHosted)
+        m_plugin->setLayerHostingMode(m_webPage->layerHostingMode());
+#endif
 }
 
 void PluginView::setDeviceScaleFactor(float scaleFactor)
@@ -526,19 +539,6 @@
     return true;
 }
 
-void PluginView::setLayerHostingMode(LayerHostingMode layerHostingMode)
-{
-    if (!m_plugin)
-        return;
-
-    if (!m_isInitialized) {
-        m_parameters.layerHostingMode = layerHostingMode;
-        return;
-    }
-
-    m_plugin->setLayerHostingMode(layerHostingMode);
-}
-    
 NSObject *PluginView::accessibilityObject() const
 {
     if (!m_isInitialized || !m_plugin)
@@ -624,8 +624,8 @@
             m_pluginElement->dispatchPendingMouseClick();
     }
 
-    setWindowIsVisible(m_webPage->windowIsVisible());
-    setWindowIsFocused(m_webPage->windowIsFocused());
+    m_plugin->windowVisibilityChanged(m_webPage->windowIsVisible());
+    m_plugin->windowFocusChanged(m_webPage->windowIsFocused());
 #endif
 
     if (wantsWheelEvents()) {

Modified: trunk/Source/WebKit2/WebProcess/Plugins/PluginView.h (161225 => 161226)


--- trunk/Source/WebKit2/WebProcess/Plugins/PluginView.h	2014-01-02 22:16:59 UTC (rev 161225)
+++ trunk/Source/WebKit2/WebProcess/Plugins/PluginView.h	2014-01-02 22:20:05 UTC (rev 161226)
@@ -29,6 +29,7 @@
 #include "NPRuntimeObjectMap.h"
 #include "Plugin.h"
 #include "PluginController.h"
+#include "ViewState.h"
 #include "WebFrame.h"
 #include <WebCore/FindOptions.h>
 #include <WebCore/Image.h>
@@ -68,13 +69,13 @@
     void manualLoadDidFinishLoading();
     void manualLoadDidFail(const WebCore::ResourceError&);
 
+    void viewStateDidChange(ViewState::Flags changed);
+
 #if PLATFORM(MAC)
-    void setWindowIsVisible(bool);
-    void setWindowIsFocused(bool);
+    void platformViewStateDidChange(ViewState::Flags changed);
     void setDeviceScaleFactor(float);
     void windowAndViewFramesChanged(const WebCore::FloatRect& windowFrameInScreenCoordinates, const WebCore::FloatRect& viewFrameInWindowCoordinates);
     bool sendComplexTextInput(uint64_t pluginComplexTextInputIdentifier, const String& textInput);
-    void setLayerHostingMode(LayerHostingMode);
     RetainPtr<PDFDocument> pdfDocumentForPrinting() const { return m_plugin->pdfDocumentForPrinting(); }
     NSObject *accessibilityObject() const;
 #endif

Modified: trunk/Source/WebKit2/WebProcess/WebPage/DrawingArea.h (161225 => 161226)


--- trunk/Source/WebKit2/WebProcess/WebPage/DrawingArea.h	2014-01-02 22:16:59 UTC (rev 161225)
+++ trunk/Source/WebKit2/WebProcess/WebPage/DrawingArea.h	2014-01-02 22:20:05 UTC (rev 161226)
@@ -28,6 +28,7 @@
 
 #include "DrawingAreaInfo.h"
 #include "LayerTreeContext.h"
+#include "ViewState.h"
 #include <WebCore/FloatPoint.h>
 #include <WebCore/IntRect.h>
 #include <wtf/Forward.h>
@@ -105,9 +106,7 @@
 
     virtual void dispatchAfterEnsuringUpdatedScrollPosition(const Function<void ()>&);
 
-    virtual void suspendPainting() { }
-    virtual void resumePainting() { }
-    virtual void setLayerHostingMode(LayerHostingMode) { }
+    virtual void viewStateDidChange(ViewState::Flags changed) { }
 
 protected:
     DrawingArea(DrawingAreaType, WebPage*);

Modified: trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp (161225 => 161226)


--- trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp	2014-01-02 22:16:59 UTC (rev 161225)
+++ trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp	2014-01-02 22:20:05 UTC (rev 161226)
@@ -1912,21 +1912,10 @@
 void WebPage::setActive(bool isActive)
 {
     m_page->focusController().setActive(isActive);
-
-#if PLATFORM(MAC)    
-    // Tell all our plug-in views that the window focus changed.
-    for (auto* pluginView : m_pluginViews)
-        pluginView->setWindowIsFocused(isActive);
-#endif
 }
 
 void WebPage::setViewIsVisible(bool isVisible)
 {
-    if (isVisible)
-        m_drawingArea->resumePainting();
-    else
-        m_drawingArea->suspendPainting();
-
     m_page->setIsVisible(m_viewState & ViewState::IsVisible, false);
 }
 
@@ -2076,6 +2065,8 @@
     ViewState::Flags changed = m_viewState ^ viewState;
     m_viewState = viewState;
 
+    m_drawingArea->viewStateDidChange(changed);
+
     // We want to make sure to update the active state while hidden, so if the view is hidden then update the active state
     // early (in case it becomes visible), and if the view was visible then update active state later (in case it hides).
     if (changed & ViewState::WindowIsVisible)
@@ -2090,11 +2081,10 @@
         setActive(viewState & ViewState::WindowIsActive);
     if (changed & ViewState::IsInWindow)
         setIsInWindow(viewState & ViewState::IsInWindow);
-#if HAVE(LAYER_HOSTING_IN_WINDOW_SERVER)
-    if (changed & ViewState::IsLayerWindowServerHosted)
-        setLayerHostingMode(layerHostingMode());
-#endif
 
+    for (auto* pluginView : m_pluginViews)
+        pluginView->viewStateDidChange(changed);
+
     if (wantsDidUpdateViewState)
         m_sendDidUpdateViewStateTimer.startOneShot(0);
 }
@@ -3052,23 +3042,9 @@
     m_windowIsVisible = windowIsVisible;
 
     corePage()->focusController().setContainingWindowIsVisible(windowIsVisible);
-
-#if PLATFORM(MAC)
-    // Tell all our plug-in views that the window visibility changed.
-    for (auto* pluginView : m_pluginViews)
-        pluginView->setWindowIsVisible(windowIsVisible);
-#endif
 }
 
 #if PLATFORM(MAC)
-void WebPage::setLayerHostingMode(LayerHostingMode layerHostingMode)
-{
-    for (auto* pluginView : m_pluginViews)
-        pluginView->setLayerHostingMode(layerHostingMode);
-
-    m_drawingArea->setLayerHostingMode(layerHostingMode);
-}
-
 void WebPage::windowAndViewFramesChanged(const FloatRect& windowFrameInScreenCoordinates, const FloatRect& windowFrameInUnflippedScreenCoordinates, const FloatRect& viewFrameInWindowCoordinates, const FloatPoint& accessibilityViewCoordinates)
 {
     m_windowFrameInScreenCoordinates = windowFrameInScreenCoordinates;

Modified: trunk/Source/WebKit2/WebProcess/WebPage/WebPage.h (161225 => 161226)


--- trunk/Source/WebKit2/WebProcess/WebPage/WebPage.h	2014-01-02 22:16:59 UTC (rev 161225)
+++ trunk/Source/WebKit2/WebProcess/WebPage/WebPage.h	2014-01-02 22:20:05 UTC (rev 161226)
@@ -347,6 +347,7 @@
     void removePluginView(PluginView*);
 
     bool windowIsVisible() const { return m_windowIsVisible; }
+    bool isVisible() const { return m_viewState & ViewState::IsVisible; }
 
 #if PLATFORM(MAC)
     LayerHostingMode layerHostingMode() const
@@ -357,7 +358,6 @@
         return LayerHostingModeDefault;
 #endif
     }
-    void setLayerHostingMode(LayerHostingMode);
 
     void updatePluginsActiveAndFocusedState();
     const WebCore::FloatRect& windowFrameInScreenCoordinates() const { return m_windowFrameInScreenCoordinates; }

Modified: trunk/Source/WebKit2/WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h (161225 => 161226)


--- trunk/Source/WebKit2/WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h	2014-01-02 22:16:59 UTC (rev 161225)
+++ trunk/Source/WebKit2/WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h	2014-01-02 22:20:05 UTC (rev 161226)
@@ -55,8 +55,7 @@
     TiledCoreAnimationDrawingArea(WebPage*, const WebPageCreationParameters&);
     virtual ~TiledCoreAnimationDrawingArea();
 
-    virtual void suspendPainting() OVERRIDE;
-    virtual void resumePainting() OVERRIDE;
+    virtual void viewStateDidChange(ViewState::Flags changed) OVERRIDE;
 
 private:
     // DrawingArea
@@ -101,7 +100,9 @@
     // Message handlers.
     virtual void updateGeometry(const WebCore::IntSize& viewSize, const WebCore::IntSize& layerPosition) OVERRIDE;
     virtual void setDeviceScaleFactor(float) OVERRIDE;
-    virtual void setLayerHostingMode(LayerHostingMode) OVERRIDE;
+    void suspendPainting();
+    void resumePainting();
+    void setLayerHostingMode(LayerHostingMode);
     virtual void setColorSpace(const ColorSpaceData&) OVERRIDE;
 
     virtual void adjustTransientZoom(double scale, WebCore::FloatPoint origin) OVERRIDE;

Modified: trunk/Source/WebKit2/WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm (161225 => 161226)


--- trunk/Source/WebKit2/WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm	2014-01-02 22:16:59 UTC (rev 161225)
+++ trunk/Source/WebKit2/WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm	2014-01-02 22:20:05 UTC (rev 161226)
@@ -389,6 +389,21 @@
     return returnValue;
 }
 
+void TiledCoreAnimationDrawingArea::viewStateDidChange(ViewState::Flags changed)
+{
+    if (changed & ViewState::IsVisible) {
+        if (m_webPage->isVisible())
+            resumePainting();
+        else
+            suspendPainting();
+    }
+
+#if HAVE(LAYER_HOSTING_IN_WINDOW_SERVER)
+    if (changed & ViewState::IsLayerWindowServerHosted)
+        setLayerHostingMode(m_webPage->layerHostingMode());
+#endif
+}
+
 void TiledCoreAnimationDrawingArea::suspendPainting()
 {
     ASSERT(!m_isPaintingSuspended);
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to