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