void WebPage::reinitializeWebPage(WebPageCreationParameters&& parameters)
{
- if (!m_drawingArea) {
+ ASSERT(m_drawingArea);
+
+ if (m_shouldResetDrawingArea) {
+ // Make sure we destroy the previous drawing area before constructing the new one as DrawingArea registers / unregisters
+ // itself as an IPC::MesssageReceiver in its constructor / destructor.
+ m_drawingArea = nullptr;
+ m_shouldResetDrawingArea = false;
+
m_drawingArea = DrawingArea::create(*this, parameters);
m_drawingArea->setPaintingEnabled(false);
m_drawingArea->setShouldScaleViewToFitDocument(parameters.shouldScaleViewToFitDocument);
void WebPage::exitAcceleratedCompositingMode()
{
- if (m_drawingArea)
- m_drawingArea->setRootCompositingLayer(0);
+ m_drawingArea->setRootCompositingLayer(0);
}
void WebPage::close()
m_isSuspended = suspended;
- setLayerTreeStateIsFrozen(true);
-}
-
-void WebPage::tearDownDrawingAreaForSuspend()
-{
if (!m_isSuspended)
- return;
- m_drawingArea = nullptr;
+ m_shouldResetDrawingArea = true;
+
+ setLayerTreeStateIsFrozen(true);
}
void WebPage::frameBecameRemote(uint64_t frameID, GlobalFrameIdentifier&& remoteFrameIdentifier, GlobalWindowIdentifier&& remoteWindowIdentifier)