Diff
Modified: trunk/Source/WebKit/ChangeLog (241987 => 241988)
--- trunk/Source/WebKit/ChangeLog 2019-02-23 05:14:34 UTC (rev 241987)
+++ trunk/Source/WebKit/ChangeLog 2019-02-23 05:30:19 UTC (rev 241988)
@@ -1,3 +1,88 @@
+2019-02-22 Chris Dumez <cdu...@apple.com>
+
+ Give DrawingAreas their own identifiers
+ https://bugs.webkit.org/show_bug.cgi?id=194969
+ <rdar://problem/48154508>
+
+ Reviewed by Geoffrey Garen.
+
+ Give DrawingAreas their own identifiers instead of using the pageID. It will make the IPC more robust now that a
+ WebPageProxy can have several drawing areas with PSON.
+
+ * Shared/DrawingAreaInfo.h:
+ * Shared/WebPageCreationParameters.cpp:
+ (WebKit::WebPageCreationParameters::encode const):
+ (WebKit::WebPageCreationParameters::decode):
+ * Shared/WebPageCreationParameters.h:
+ * UIProcess/AcceleratedDrawingAreaProxy.cpp:
+ (WebKit::AcceleratedDrawingAreaProxy::sendUpdateBackingStoreState):
+ (WebKit::AcceleratedDrawingAreaProxy::waitForAndDispatchDidUpdateBackingStoreState):
+ (WebKit::AcceleratedDrawingAreaProxy::setNativeSurfaceHandleForCompositing):
+ (WebKit::AcceleratedDrawingAreaProxy::destroyNativeSurfaceHandleForCompositing):
+ * UIProcess/DrawingAreaProxy.cpp:
+ (WebKit::DrawingAreaProxy::DrawingAreaProxy):
+ (WebKit::DrawingAreaProxy::~DrawingAreaProxy):
+ (WebKit::DrawingAreaProxy::messageSenderConnection const):
+ (WebKit::DrawingAreaProxy::sendMessage):
+ (WebKit::DrawingAreaProxy::viewExposedRectChangedTimerFired):
+ * UIProcess/DrawingAreaProxy.h:
+ (WebKit::DrawingAreaProxy::identifier const):
+ (WebKit::DrawingAreaProxy::process const):
+ * UIProcess/DrawingAreaProxyImpl.cpp:
+ (WebKit::DrawingAreaProxyImpl::update):
+ * UIProcess/ProvisionalPageProxy.cpp:
+ (WebKit::ProvisionalPageProxy::initializeWebPage):
+ * UIProcess/RemoteLayerTree/RemoteLayerTreeDrawingAreaProxy.mm:
+ (WebKit::RemoteLayerTreeDrawingAreaProxy::RemoteLayerTreeDrawingAreaProxy):
+ (WebKit::RemoteLayerTreeDrawingAreaProxy::~RemoteLayerTreeDrawingAreaProxy):
+ (WebKit::RemoteLayerTreeDrawingAreaProxy::deviceScaleFactorDidChange):
+ (WebKit::RemoteLayerTreeDrawingAreaProxy::sendUpdateGeometry):
+ (WebKit::RemoteLayerTreeDrawingAreaProxy::acceleratedAnimationDidStart):
+ (WebKit::RemoteLayerTreeDrawingAreaProxy::acceleratedAnimationDidEnd):
+ (WebKit::RemoteLayerTreeDrawingAreaProxy::didRefreshDisplay):
+ (WebKit::RemoteLayerTreeDrawingAreaProxy::waitForDidUpdateActivityState):
+ (WebKit::RemoteLayerTreeDrawingAreaProxy::dispatchAfterEnsuringDrawing):
+ * UIProcess/WebPageProxy.cpp:
+ (WebKit::WebPageProxy::initializeWebPage):
+ (WebKit::WebPageProxy::createNewPage):
+ (WebKit::WebPageProxy::creationParameters):
+ * UIProcess/WebPageProxy.h:
+ * UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.mm:
+ (WebKit::TiledCoreAnimationDrawingAreaProxy::deviceScaleFactorDidChange):
+ (WebKit::TiledCoreAnimationDrawingAreaProxy::colorSpaceDidChange):
+ (WebKit::TiledCoreAnimationDrawingAreaProxy::waitForDidUpdateActivityState):
+ (WebKit::TiledCoreAnimationDrawingAreaProxy::sendUpdateGeometry):
+ (WebKit::TiledCoreAnimationDrawingAreaProxy::adjustTransientZoom):
+ (WebKit::TiledCoreAnimationDrawingAreaProxy::commitTransientZoom):
+ (WebKit::TiledCoreAnimationDrawingAreaProxy::dispatchAfterEnsuringDrawing):
+ * WebProcess/WebPage/AcceleratedDrawingArea.cpp:
+ (WebKit::AcceleratedDrawingArea::AcceleratedDrawingArea):
+ (WebKit::AcceleratedDrawingArea::layerHostDidFlushLayers):
+ (WebKit::AcceleratedDrawingArea::sendDidUpdateBackingStoreState):
+ * WebProcess/WebPage/DrawingArea.cpp:
+ (WebKit::DrawingArea::DrawingArea):
+ (WebKit::DrawingArea::removeMessageReceiverIfNeeded):
+ * WebProcess/WebPage/DrawingArea.h:
+ (WebKit::DrawingArea::identifier const):
+ (WebKit::DrawingArea::send):
+ * WebProcess/WebPage/DrawingAreaImpl.cpp:
+ (WebKit::DrawingAreaImpl::sendDidUpdateBackingStoreState):
+ (WebKit::DrawingAreaImpl::exitAcceleratedCompositingMode):
+ (WebKit::DrawingAreaImpl::display):
+ * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm:
+ (WebKit::RemoteLayerTreeDrawingArea::RemoteLayerTreeDrawingArea):
+ (WebKit::RemoteLayerTreeDrawingArea::updateGeometry):
+ (WebKit::RemoteLayerTreeDrawingArea::flushLayers):
+ * WebProcess/WebPage/WebPage.cpp:
+ (WebKit::WebPage::reinitializeWebPage):
+ * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
+ (WebKit::TiledCoreAnimationDrawingArea::TiledCoreAnimationDrawingArea):
+ (WebKit::TiledCoreAnimationDrawingArea::sendEnterAcceleratedCompositingModeIfNeeded):
+ (WebKit::TiledCoreAnimationDrawingArea::updateIntrinsicContentSizeIfNeeded):
+ (WebKit::TiledCoreAnimationDrawingArea::flushLayers):
+ (WebKit::TiledCoreAnimationDrawingArea::updateGeometry):
+ (WebKit::TiledCoreAnimationDrawingArea::setLayerHostingMode):
+
2019-02-22 Andy Estes <aes...@apple.com>
[Cocoa] Do not suppress deprecation warnings when calling sandbox_extension_issue_file
Modified: trunk/Source/WebKit/Shared/DrawingAreaInfo.h (241987 => 241988)
--- trunk/Source/WebKit/Shared/DrawingAreaInfo.h 2019-02-23 05:14:34 UTC (rev 241987)
+++ trunk/Source/WebKit/Shared/DrawingAreaInfo.h 2019-02-23 05:30:19 UTC (rev 241988)
@@ -25,6 +25,8 @@
#pragma once
+#include <wtf/ObjectIdentifier.h>
+
namespace WebKit {
enum DrawingAreaType {
@@ -43,4 +45,7 @@
};
typedef uint64_t ActivityStateChangeID;
+enum DrawingAreaIdentifierType { };
+using DrawingAreaIdentifier = ObjectIdentifier<DrawingAreaIdentifierType>;
+
} // namespace WebKit
Modified: trunk/Source/WebKit/Shared/WebPageCreationParameters.cpp (241987 => 241988)
--- trunk/Source/WebKit/Shared/WebPageCreationParameters.cpp 2019-02-23 05:14:34 UTC (rev 241987)
+++ trunk/Source/WebKit/Shared/WebPageCreationParameters.cpp 2019-02-23 05:30:19 UTC (rev 241988)
@@ -37,6 +37,7 @@
encoder << store;
encoder.encodeEnum(drawingAreaType);
+ encoder << drawingAreaIdentifier;
encoder << pageGroupData;
encoder << drawsBackground;
encoder << isEditable;
@@ -138,6 +139,11 @@
return WTF::nullopt;
if (!decoder.decodeEnum(parameters.drawingAreaType))
return WTF::nullopt;
+ Optional<DrawingAreaIdentifier> drawingAreaIdentifier;
+ decoder >> drawingAreaIdentifier;
+ if (!drawingAreaIdentifier)
+ return WTF::nullopt;
+ parameters.drawingAreaIdentifier = *drawingAreaIdentifier;
Optional<WebPageGroupData> pageGroupData;
decoder >> pageGroupData;
if (!pageGroupData)
Modified: trunk/Source/WebKit/Shared/WebPageCreationParameters.h (241987 => 241988)
--- trunk/Source/WebKit/Shared/WebPageCreationParameters.h 2019-02-23 05:14:34 UTC (rev 241987)
+++ trunk/Source/WebKit/Shared/WebPageCreationParameters.h 2019-02-23 05:30:19 UTC (rev 241988)
@@ -71,6 +71,7 @@
WebPreferencesStore store;
DrawingAreaType drawingAreaType;
+ DrawingAreaIdentifier drawingAreaIdentifier;
WebPageGroupData pageGroupData;
bool drawsBackground;
Modified: trunk/Source/WebKit/UIProcess/AcceleratedDrawingAreaProxy.cpp (241987 => 241988)
--- trunk/Source/WebKit/UIProcess/AcceleratedDrawingAreaProxy.cpp 2019-02-23 05:14:34 UTC (rev 241987)
+++ trunk/Source/WebKit/UIProcess/AcceleratedDrawingAreaProxy.cpp 2019-02-23 05:30:19 UTC (rev 241988)
@@ -183,7 +183,7 @@
m_isWaitingForDidUpdateBackingStoreState = respondImmediatelyOrNot == RespondImmediately;
- process().send(Messages::DrawingArea::UpdateBackingStoreState(m_nextBackingStoreStateID, respondImmediatelyOrNot == RespondImmediately, m_webPageProxy.deviceScaleFactor(), m_size, m_scrollOffset), m_webPageProxy.pageID());
+ send(Messages::DrawingArea::UpdateBackingStoreState(m_nextBackingStoreStateID, respondImmediatelyOrNot == RespondImmediately, m_webPageProxy.deviceScaleFactor(), m_size, m_scrollOffset));
m_scrollOffset = IntSize();
if (m_isWaitingForDidUpdateBackingStoreState) {
@@ -222,7 +222,7 @@
// choose the most recent one, or the one that is closest to our current size.
// The timeout, in seconds, we use when waiting for a DidUpdateBackingStoreState message when we're asked to paint.
- process().connection()->waitForAndDispatchImmediately<Messages::DrawingAreaProxy::DidUpdateBackingStoreState>(m_webPageProxy.pageID(), Seconds::fromMilliseconds(500));
+ process().connection()->waitForAndDispatchImmediately<Messages::DrawingAreaProxy::DidUpdateBackingStoreState>(m_identifier.toUInt64(), Seconds::fromMilliseconds(500));
}
void AcceleratedDrawingAreaProxy::enterAcceleratedCompositingMode(const LayerTreeContext& layerTreeContext)
@@ -256,7 +256,7 @@
m_pendingNativeSurfaceHandleForCompositing = handle;
return;
}
- process().send(Messages::DrawingArea::SetNativeSurfaceHandleForCompositing(handle), m_webPageProxy.pageID(), IPC::SendOption::DispatchMessageEvenWhenWaitingForSyncReply);
+ send(Messages::DrawingArea::SetNativeSurfaceHandleForCompositing(handle), IPC::SendOption::DispatchMessageEvenWhenWaitingForSyncReply);
}
void AcceleratedDrawingAreaProxy::destroyNativeSurfaceHandleForCompositing()
@@ -266,7 +266,7 @@
return;
}
bool handled;
- process().sendSync(Messages::DrawingArea::DestroyNativeSurfaceHandleForCompositing(), Messages::DrawingArea::DestroyNativeSurfaceHandleForCompositing::Reply(handled), m_webPageProxy.pageID());
+ sendSync(Messages::DrawingArea::DestroyNativeSurfaceHandleForCompositing(), Messages::DrawingArea::DestroyNativeSurfaceHandleForCompositing::Reply(handled));
}
#endif
Modified: trunk/Source/WebKit/UIProcess/DrawingAreaProxy.cpp (241987 => 241988)
--- trunk/Source/WebKit/UIProcess/DrawingAreaProxy.cpp 2019-02-23 05:14:34 UTC (rev 241987)
+++ trunk/Source/WebKit/UIProcess/DrawingAreaProxy.cpp 2019-02-23 05:30:19 UTC (rev 241988)
@@ -40,6 +40,7 @@
DrawingAreaProxy::DrawingAreaProxy(DrawingAreaType type, WebPageProxy& webPageProxy, WebProcessProxy& process)
: m_type(type)
+ , m_identifier(DrawingAreaIdentifier::generate())
, m_webPageProxy(webPageProxy)
, m_process(makeRef(process))
, m_size(webPageProxy.viewSize())
@@ -47,12 +48,12 @@
, m_viewExposedRectChangedTimer(RunLoop::main(), this, &DrawingAreaProxy::viewExposedRectChangedTimerFired)
#endif
{
- process.addMessageReceiver(Messages::DrawingAreaProxy::messageReceiverName(), m_webPageProxy.pageID(), *this);
+ process.addMessageReceiver(Messages::DrawingAreaProxy::messageReceiverName(), m_identifier.toUInt64(), *this);
}
DrawingAreaProxy::~DrawingAreaProxy()
{
- process().removeMessageReceiver(Messages::DrawingAreaProxy::messageReceiverName(), m_webPageProxy.pageID());
+ process().removeMessageReceiver(Messages::DrawingAreaProxy::messageReceiverName(), m_identifier.toUInt64());
}
bool DrawingAreaProxy::setSize(const IntSize& size, const IntSize& scrollDelta)
@@ -73,6 +74,16 @@
}
#endif
+IPC::Connection* DrawingAreaProxy::messageSenderConnection() const
+{
+ return process().connection();
+}
+
+bool DrawingAreaProxy::sendMessage(std::unique_ptr<IPC::Encoder> encoder, OptionSet<IPC::SendOption> sendOptions)
+{
+ return process().sendMessage(WTFMove(encoder), sendOptions);
+}
+
#if PLATFORM(MAC)
void DrawingAreaProxy::setViewExposedRect(Optional<WebCore::FloatRect> viewExposedRect)
{
@@ -93,7 +104,7 @@
if (m_viewExposedRect == m_lastSentViewExposedRect)
return;
- process().send(Messages::DrawingArea::SetViewExposedRect(m_viewExposedRect), m_webPageProxy.pageID());
+ send(Messages::DrawingArea::SetViewExposedRect(m_viewExposedRect));
m_lastSentViewExposedRect = m_viewExposedRect;
}
#endif // PLATFORM(MAC)
Modified: trunk/Source/WebKit/UIProcess/DrawingAreaProxy.h (241987 => 241988)
--- trunk/Source/WebKit/UIProcess/DrawingAreaProxy.h 2019-02-23 05:14:34 UTC (rev 241987)
+++ trunk/Source/WebKit/UIProcess/DrawingAreaProxy.h 2019-02-23 05:30:19 UTC (rev 241988)
@@ -29,6 +29,7 @@
#include "DrawingAreaInfo.h"
#include "GenericCallback.h"
#include "MessageReceiver.h"
+#include "MessageSender.h"
#include <WebCore/FloatRect.h>
#include <WebCore/IntRect.h>
#include <WebCore/IntSize.h>
@@ -50,7 +51,7 @@
class WebPageProxy;
class WebProcessProxy;
-class DrawingAreaProxy : public IPC::MessageReceiver {
+class DrawingAreaProxy : public IPC::MessageReceiver, protected IPC::MessageSender {
WTF_MAKE_NONCOPYABLE(DrawingAreaProxy);
public:
@@ -57,6 +58,7 @@
virtual ~DrawingAreaProxy();
DrawingAreaType type() const { return m_type; }
+ DrawingAreaIdentifier identifier() const { return m_identifier; }
virtual void deviceScaleFactorDidChange() = 0;
@@ -109,11 +111,13 @@
WebPageProxy& page() const { return m_webPageProxy; }
WebProcessProxy& process() { return m_process.get(); }
+ const WebProcessProxy& process() const { return m_process.get(); }
protected:
DrawingAreaProxy(DrawingAreaType, WebPageProxy&, WebProcessProxy&);
DrawingAreaType m_type;
+ DrawingAreaIdentifier m_identifier;
WebPageProxy& m_webPageProxy;
Ref<WebProcessProxy> m_process;
@@ -126,6 +130,10 @@
private:
virtual void sizeDidChange() = 0;
+ IPC::Connection* messageSenderConnection() const final;
+ uint64_t messageSenderDestinationID() const final { return m_identifier.toUInt64(); }
+ bool sendMessage(std::unique_ptr<IPC::Encoder>, OptionSet<IPC::SendOption>) final;
+
// Message handlers.
// FIXME: These should be pure virtual.
virtual void update(uint64_t /* backingStoreStateID */, const UpdateInfo&) { }
Modified: trunk/Source/WebKit/UIProcess/DrawingAreaProxyImpl.cpp (241987 => 241988)
--- trunk/Source/WebKit/UIProcess/DrawingAreaProxyImpl.cpp 2019-02-23 05:14:34 UTC (rev 241987)
+++ trunk/Source/WebKit/UIProcess/DrawingAreaProxyImpl.cpp 2019-02-23 05:30:19 UTC (rev 241988)
@@ -124,7 +124,7 @@
// FIXME: Handle the case where the view is hidden.
incorporateUpdate(updateInfo);
- process().send(Messages::DrawingArea::DidUpdate(), m_webPageProxy.pageID());
+ send(Messages::DrawingArea::DidUpdate());
}
void DrawingAreaProxyImpl::didUpdateBackingStoreState(uint64_t backingStoreStateID, const UpdateInfo& updateInfo, const LayerTreeContext& layerTreeContext)
Modified: trunk/Source/WebKit/UIProcess/ProvisionalPageProxy.cpp (241987 => 241988)
--- trunk/Source/WebKit/UIProcess/ProvisionalPageProxy.cpp 2019-02-23 05:14:34 UTC (rev 241987)
+++ trunk/Source/WebKit/UIProcess/ProvisionalPageProxy.cpp 2019-02-23 05:30:19 UTC (rev 241988)
@@ -135,7 +135,7 @@
{
m_drawingArea = m_page.pageClient().createDrawingAreaProxy(m_process);
- auto parameters = m_page.creationParameters(m_process);
+ auto parameters = m_page.creationParameters(m_process, *m_drawingArea);
parameters.isProcessSwap = true;
m_process->send(Messages::WebProcess::CreateWebPage(m_page.pageID(), parameters), 0);
Modified: trunk/Source/WebKit/UIProcess/RemoteLayerTree/RemoteLayerTreeDrawingAreaProxy.mm (241987 => 241988)
--- trunk/Source/WebKit/UIProcess/RemoteLayerTree/RemoteLayerTreeDrawingAreaProxy.mm 2019-02-23 05:14:34 UTC (rev 241987)
+++ trunk/Source/WebKit/UIProcess/RemoteLayerTree/RemoteLayerTreeDrawingAreaProxy.mm 2019-02-23 05:30:19 UTC (rev 241988)
@@ -115,7 +115,7 @@
IOSurfacePool::sharedPool().setPoolSize(0);
#endif
- process.addMessageReceiver(Messages::RemoteLayerTreeDrawingAreaProxy::messageReceiverName(), m_webPageProxy.pageID(), *this);
+ process.addMessageReceiver(Messages::RemoteLayerTreeDrawingAreaProxy::messageReceiverName(), m_identifier.toUInt64(), *this);
if (m_webPageProxy.preferences().tiledScrollingIndicatorVisible())
initializeDebugIndicator();
@@ -124,7 +124,7 @@
RemoteLayerTreeDrawingAreaProxy::~RemoteLayerTreeDrawingAreaProxy()
{
m_callbacks.invalidate(CallbackBase::Error::OwnerWasInvalidated);
- process().removeMessageReceiver(Messages::RemoteLayerTreeDrawingAreaProxy::messageReceiverName(), m_webPageProxy.pageID());
+ process().removeMessageReceiver(Messages::RemoteLayerTreeDrawingAreaProxy::messageReceiverName(), m_identifier.toUInt64());
#if PLATFORM(IOS_FAMILY)
[m_displayLinkHandler invalidate];
@@ -161,7 +161,7 @@
void RemoteLayerTreeDrawingAreaProxy::deviceScaleFactorDidChange()
{
- process().send(Messages::DrawingArea::SetDeviceScaleFactor(m_webPageProxy.deviceScaleFactor()), m_webPageProxy.pageID());
+ send(Messages::DrawingArea::SetDeviceScaleFactor(m_webPageProxy.deviceScaleFactor()));
}
void RemoteLayerTreeDrawingAreaProxy::didUpdateGeometry()
@@ -179,7 +179,7 @@
void RemoteLayerTreeDrawingAreaProxy::sendUpdateGeometry()
{
m_lastSentSize = m_size;
- process().send(Messages::DrawingArea::UpdateGeometry(m_size, false /* flushSynchronously */, MachSendRight()), m_webPageProxy.pageID());
+ send(Messages::DrawingArea::UpdateGeometry(m_size, false /* flushSynchronously */, MachSendRight()));
m_isWaitingForDidUpdateGeometry = true;
}
@@ -264,12 +264,12 @@
void RemoteLayerTreeDrawingAreaProxy::acceleratedAnimationDidStart(uint64_t layerID, const String& key, MonotonicTime startTime)
{
- process().send(Messages::DrawingArea::AcceleratedAnimationDidStart(layerID, key, startTime), m_webPageProxy.pageID());
+ send(Messages::DrawingArea::AcceleratedAnimationDidStart(layerID, key, startTime));
}
void RemoteLayerTreeDrawingAreaProxy::acceleratedAnimationDidEnd(uint64_t layerID, const String& key)
{
- process().send(Messages::DrawingArea::AcceleratedAnimationDidEnd(layerID, key), m_webPageProxy.pageID());
+ send(Messages::DrawingArea::AcceleratedAnimationDidEnd(layerID, key));
}
static const float indicatorInset = 10;
@@ -430,7 +430,7 @@
// Waiting for CA to commit is insufficient, because the render server can still be
// using our backing store. We can improve this by waiting for the render server to commit
// if we find API to do so, but for now we will make extra buffers if need be.
- process().send(Messages::DrawingArea::DidUpdate(), m_webPageProxy.pageID());
+ send(Messages::DrawingArea::DidUpdate());
m_lastVisibleTransactionID = m_transactionIDForPendingCACommit;
@@ -458,7 +458,7 @@
}();
auto startTime = MonotonicTime::now();
- while (process().connection()->waitForAndDispatchImmediately<Messages::RemoteLayerTreeDrawingAreaProxy::CommitLayerTree>(m_webPageProxy.pageID(), activityStateUpdateTimeout - (MonotonicTime::now() - startTime), IPC::WaitForOption::InterruptWaitingIfSyncMessageArrives)) {
+ while (process().connection()->waitForAndDispatchImmediately<Messages::RemoteLayerTreeDrawingAreaProxy::CommitLayerTree>(m_identifier.toUInt64(), activityStateUpdateTimeout - (MonotonicTime::now() - startTime), IPC::WaitForOption::InterruptWaitingIfSyncMessageArrives)) {
if (activityStateChangeID == ActivityStateChangeAsynchronous || activityStateChangeID <= m_activityStateChangeID)
return;
}
@@ -471,7 +471,7 @@
return;
}
- process().send(Messages::DrawingArea::AddTransactionCallbackID(m_callbacks.put(WTFMove(callbackFunction), process().throttler().backgroundActivityToken())), m_webPageProxy.pageID());
+ send(Messages::DrawingArea::AddTransactionCallbackID(m_callbacks.put(WTFMove(callbackFunction), process().throttler().backgroundActivityToken())));
}
void RemoteLayerTreeDrawingAreaProxy::hideContentUntilPendingUpdate()
Modified: trunk/Source/WebKit/UIProcess/WebPageProxy.cpp (241987 => 241988)
--- trunk/Source/WebKit/UIProcess/WebPageProxy.cpp 2019-02-23 05:14:34 UTC (rev 241987)
+++ trunk/Source/WebKit/UIProcess/WebPageProxy.cpp 2019-02-23 05:30:19 UTC (rev 241988)
@@ -944,7 +944,7 @@
setDrawingArea(pageClient().createDrawingAreaProxy(m_process));
ASSERT(m_drawingArea);
- process().send(Messages::WebProcess::CreateWebPage(m_pageID, creationParameters(m_process)), 0);
+ process().send(Messages::WebProcess::CreateWebPage(m_pageID, creationParameters(m_process, *m_drawingArea)), 0);
m_needsToFinishInitializingWebPageAfterProcessLaunch = true;
finishInitializingWebPageAfterProcessLaunch();
@@ -4878,7 +4878,7 @@
newPage->setOpenedByDOM();
- reply(newPage->pageID(), newPage->creationParameters(m_process));
+ reply(newPage->pageID(), newPage->creationParameters(m_process, *newPage->drawingArea()));
WebsiteDataStore::cloneSessionData(*this, *newPage);
newPage->m_shouldSuppressAppLinksInNextNavigationPolicyDecision = hostsAreEqual(URL({ }, mainFrameURL), request.url());
@@ -6857,13 +6857,14 @@
m_process->processTerminated();
}
-WebPageCreationParameters WebPageProxy::creationParameters(WebProcessProxy& process)
+WebPageCreationParameters WebPageProxy::creationParameters(WebProcessProxy& process, DrawingAreaProxy& drawingArea)
{
WebPageCreationParameters parameters;
parameters.viewSize = pageClient().viewSize();
parameters.activityState = m_activityState;
- parameters.drawingAreaType = m_drawingArea->type();
+ parameters.drawingAreaType = drawingArea.type();
+ parameters.drawingAreaIdentifier = drawingArea.identifier();
parameters.store = preferencesStore();
parameters.pageGroupData = m_pageGroup->data();
parameters.drawsBackground = m_drawsBackground;
Modified: trunk/Source/WebKit/UIProcess/WebPageProxy.h (241987 => 241988)
--- trunk/Source/WebKit/UIProcess/WebPageProxy.h 2019-02-23 05:14:34 UTC (rev 241987)
+++ trunk/Source/WebKit/UIProcess/WebPageProxy.h 2019-02-23 05:30:19 UTC (rev 241988)
@@ -1079,7 +1079,7 @@
void didChooseFilesForOpenPanel(const Vector<String>&);
void didCancelForOpenPanel();
- WebPageCreationParameters creationParameters(WebProcessProxy&);
+ WebPageCreationParameters creationParameters(WebProcessProxy&, DrawingAreaProxy&);
void handleDownloadRequest(DownloadProxy*);
Modified: trunk/Source/WebKit/UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.mm (241987 => 241988)
--- trunk/Source/WebKit/UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.mm 2019-02-23 05:14:34 UTC (rev 241987)
+++ trunk/Source/WebKit/UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.mm 2019-02-23 05:30:19 UTC (rev 241988)
@@ -55,7 +55,7 @@
void TiledCoreAnimationDrawingAreaProxy::deviceScaleFactorDidChange()
{
- process().send(Messages::DrawingArea::SetDeviceScaleFactor(m_webPageProxy.deviceScaleFactor()), m_webPageProxy.pageID());
+ send(Messages::DrawingArea::SetDeviceScaleFactor(m_webPageProxy.deviceScaleFactor()));
}
void TiledCoreAnimationDrawingAreaProxy::sizeDidChange()
@@ -73,7 +73,7 @@
void TiledCoreAnimationDrawingAreaProxy::colorSpaceDidChange()
{
- process().send(Messages::DrawingArea::SetColorSpace(m_webPageProxy.colorSpace()), m_webPageProxy.pageID());
+ send(Messages::DrawingArea::SetColorSpace(m_webPageProxy.colorSpace()));
}
void TiledCoreAnimationDrawingAreaProxy::viewLayoutSizeDidChange()
@@ -122,7 +122,7 @@
void TiledCoreAnimationDrawingAreaProxy::waitForDidUpdateActivityState(ActivityStateChangeID)
{
Seconds activityStateUpdateTimeout = Seconds::fromMilliseconds(250);
- process().connection()->waitForAndDispatchImmediately<Messages::WebPageProxy::DidUpdateActivityState>(m_webPageProxy.pageID(), activityStateUpdateTimeout, IPC::WaitForOption::InterruptWaitingIfSyncMessageArrives);
+ process().connection()->waitForAndDispatchImmediately<Messages::WebPageProxy::DidUpdateActivityState>(m_identifier.toUInt64(), activityStateUpdateTimeout, IPC::WaitForOption::InterruptWaitingIfSyncMessageArrives);
}
void TiledCoreAnimationDrawingAreaProxy::intrinsicContentSizeDidChange(const IntSize& newIntrinsicContentSize)
@@ -182,17 +182,17 @@
ASSERT(!m_isWaitingForDidUpdateGeometry);
willSendUpdateGeometry();
- process().send(Messages::DrawingArea::UpdateGeometry(m_size, true /* flushSynchronously */, createFence()), m_webPageProxy.pageID());
+ send(Messages::DrawingArea::UpdateGeometry(m_size, true /* flushSynchronously */, createFence()));
}
void TiledCoreAnimationDrawingAreaProxy::adjustTransientZoom(double scale, FloatPoint origin)
{
- process().send(Messages::DrawingArea::AdjustTransientZoom(scale, origin), m_webPageProxy.pageID());
+ send(Messages::DrawingArea::AdjustTransientZoom(scale, origin));
}
void TiledCoreAnimationDrawingAreaProxy::commitTransientZoom(double scale, FloatPoint origin)
{
- process().send(Messages::DrawingArea::CommitTransientZoom(scale, origin), m_webPageProxy.pageID());
+ send(Messages::DrawingArea::CommitTransientZoom(scale, origin));
}
void TiledCoreAnimationDrawingAreaProxy::dispatchAfterEnsuringDrawing(WTF::Function<void (CallbackBase::Error)>&& callback)
@@ -202,7 +202,7 @@
return;
}
- process().send(Messages::DrawingArea::AddTransactionCallbackID(m_callbacks.put(WTFMove(callback), nullptr)), m_webPageProxy.pageID());
+ send(Messages::DrawingArea::AddTransactionCallbackID(m_callbacks.put(WTFMove(callback), nullptr)));
}
void TiledCoreAnimationDrawingAreaProxy::dispatchPresentationCallbacksAfterFlushingLayers(const Vector<CallbackID>& callbackIDs)
Modified: trunk/Source/WebKit/WebProcess/WebPage/AcceleratedDrawingArea.cpp (241987 => 241988)
--- trunk/Source/WebKit/WebProcess/WebPage/AcceleratedDrawingArea.cpp 2019-02-23 05:14:34 UTC (rev 241987)
+++ trunk/Source/WebKit/WebProcess/WebPage/AcceleratedDrawingArea.cpp 2019-02-23 05:30:19 UTC (rev 241988)
@@ -53,7 +53,7 @@
}
AcceleratedDrawingArea::AcceleratedDrawingArea(WebPage& webPage, const WebPageCreationParameters& parameters)
- : DrawingArea(DrawingAreaTypeImpl, webPage)
+ : DrawingArea(DrawingAreaTypeImpl, parameters.drawingAreaIdentifier, webPage)
, m_exitCompositingTimer(RunLoop::main(), this, &AcceleratedDrawingArea::exitAcceleratedCompositingMode)
, m_discardPreviousLayerTreeHostTimer(RunLoop::main(), this, &AcceleratedDrawingArea::discardPreviousLayerTreeHost)
{
@@ -183,7 +183,7 @@
ASSERT(!m_compositingAccordingToProxyMessages);
if (!exitAcceleratedCompositingModePending()) {
- m_webPage.send(Messages::DrawingAreaProxy::EnterAcceleratedCompositingMode(m_backingStoreStateID, m_layerTreeHost->layerTreeContext()));
+ send(Messages::DrawingAreaProxy::EnterAcceleratedCompositingMode(m_backingStoreStateID, m_layerTreeHost->layerTreeContext()));
m_compositingAccordingToProxyMessages = true;
}
}
@@ -307,7 +307,7 @@
m_layerTreeHost->forceRepaint();
}
- m_webPage.send(Messages::DrawingAreaProxy::DidUpdateBackingStoreState(m_backingStoreStateID, updateInfo, layerTreeContext));
+ send(Messages::DrawingAreaProxy::DidUpdateBackingStoreState(m_backingStoreStateID, updateInfo, layerTreeContext));
m_compositingAccordingToProxyMessages = !layerTreeContext.isEmpty();
}
Modified: trunk/Source/WebKit/WebProcess/WebPage/DrawingArea.cpp (241987 => 241988)
--- trunk/Source/WebKit/WebProcess/WebPage/DrawingArea.cpp 2019-02-23 05:14:34 UTC (rev 241987)
+++ trunk/Source/WebKit/WebProcess/WebPage/DrawingArea.cpp 2019-02-23 05:30:19 UTC (rev 241988)
@@ -69,11 +69,12 @@
return nullptr;
}
-DrawingArea::DrawingArea(DrawingAreaType type, WebPage& webPage)
+DrawingArea::DrawingArea(DrawingAreaType type, DrawingAreaIdentifier identifier, WebPage& webPage)
: m_type(type)
+ , m_identifier(identifier)
, m_webPage(webPage)
{
- WebProcess::singleton().addMessageReceiver(Messages::DrawingArea::messageReceiverName(), m_webPage.pageID(), *this);
+ WebProcess::singleton().addMessageReceiver(Messages::DrawingArea::messageReceiverName(), m_identifier.toUInt64(), *this);
}
DrawingArea::~DrawingArea()
@@ -99,7 +100,7 @@
if (m_hasRemovedMessageReceiver)
return;
m_hasRemovedMessageReceiver = true;
- WebProcess::singleton().removeMessageReceiver(Messages::DrawingArea::messageReceiverName(), m_webPage.pageID());
+ WebProcess::singleton().removeMessageReceiver(Messages::DrawingArea::messageReceiverName(), m_identifier.toUInt64());
}
} // namespace WebKit
Modified: trunk/Source/WebKit/WebProcess/WebPage/DrawingArea.h (241987 => 241988)
--- trunk/Source/WebKit/WebProcess/WebPage/DrawingArea.h 2019-02-23 05:14:34 UTC (rev 241987)
+++ trunk/Source/WebKit/WebProcess/WebPage/DrawingArea.h 2019-02-23 05:30:19 UTC (rev 241988)
@@ -29,6 +29,7 @@
#include "DrawingAreaInfo.h"
#include "LayerTreeContext.h"
#include "MessageReceiver.h"
+#include "WebPage.h"
#include <WebCore/ActivityState.h>
#include <WebCore/FloatRect.h>
#include <WebCore/IntRect.h>
@@ -61,7 +62,6 @@
struct ColorSpaceData;
class LayerTreeHost;
-class WebPage;
struct WebPageCreationParameters;
struct WebPreferencesStore;
@@ -74,6 +74,7 @@
virtual ~DrawingArea();
DrawingAreaType type() const { return m_type; }
+ DrawingAreaIdentifier identifier() const { return m_identifier; }
virtual void setNeedsDisplay() = 0;
virtual void setNeedsDisplayInRect(const WebCore::IntRect&) = 0;
@@ -155,9 +156,15 @@
void removeMessageReceiverIfNeeded();
protected:
- DrawingArea(DrawingAreaType, WebPage&);
+ DrawingArea(DrawingAreaType, DrawingAreaIdentifier, WebPage&);
+ template<typename U> bool send(const U& message)
+ {
+ return m_webPage.send(message, m_identifier.toUInt64(), { });
+ }
+
DrawingAreaType m_type;
+ DrawingAreaIdentifier m_identifier;
WebPage& m_webPage;
#if USE(TEXTURE_MAPPER_GL) && PLATFORM(GTK) && PLATFORM(X11) && !USE(REDIRECTED_XCOMPOSITE_WINDOW)
Modified: trunk/Source/WebKit/WebProcess/WebPage/DrawingAreaImpl.cpp (241987 => 241988)
--- trunk/Source/WebKit/WebProcess/WebPage/DrawingAreaImpl.cpp 2019-02-23 05:14:34 UTC (rev 241987)
+++ trunk/Source/WebKit/WebProcess/WebPage/DrawingAreaImpl.cpp 2019-02-23 05:30:19 UTC (rev 241988)
@@ -242,7 +242,7 @@
m_shouldSendDidUpdateBackingStoreState = false;
LayerTreeContext layerTreeContext;
- m_webPage.send(Messages::DrawingAreaProxy::DidUpdateBackingStoreState(m_backingStoreStateID, updateInfo, layerTreeContext));
+ send(Messages::DrawingAreaProxy::DidUpdateBackingStoreState(m_backingStoreStateID, updateInfo, layerTreeContext));
m_compositingAccordingToProxyMessages = false;
return;
}
@@ -308,12 +308,12 @@
// Send along a complete update of the page so we can paint the contents right after we exit the
// accelerated compositing mode, eliminiating flicker.
if (m_compositingAccordingToProxyMessages) {
- m_webPage.send(Messages::DrawingAreaProxy::ExitAcceleratedCompositingMode(m_backingStoreStateID, updateInfo));
+ send(Messages::DrawingAreaProxy::ExitAcceleratedCompositingMode(m_backingStoreStateID, updateInfo));
m_compositingAccordingToProxyMessages = false;
} else {
// If we left accelerated compositing mode before we sent an EnterAcceleratedCompositingMode message to the
// UI process, we still need to let it know about the new contents, so send an Update message.
- m_webPage.send(Messages::DrawingAreaProxy::Update(m_backingStoreStateID, updateInfo));
+ send(Messages::DrawingAreaProxy::Update(m_backingStoreStateID, updateInfo));
}
}
@@ -367,7 +367,7 @@
return;
}
- m_webPage.send(Messages::DrawingAreaProxy::Update(m_backingStoreStateID, updateInfo));
+ send(Messages::DrawingAreaProxy::Update(m_backingStoreStateID, updateInfo));
m_isWaitingForDidUpdate = true;
}
Modified: trunk/Source/WebKit/WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm (241987 => 241988)
--- trunk/Source/WebKit/WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm 2019-02-23 05:14:34 UTC (rev 241987)
+++ trunk/Source/WebKit/WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm 2019-02-23 05:30:19 UTC (rev 241988)
@@ -36,6 +36,7 @@
#import "RemoteScrollingCoordinator.h"
#import "RemoteScrollingCoordinatorTransaction.h"
#import "WebPage.h"
+#import "WebPageCreationParameters.h"
#import "WebPageProxyMessages.h"
#import "WebProcess.h"
#import <QuartzCore/QuartzCore.h>
@@ -54,8 +55,8 @@
namespace WebKit {
using namespace WebCore;
-RemoteLayerTreeDrawingArea::RemoteLayerTreeDrawingArea(WebPage& webPage, const WebPageCreationParameters&)
- : DrawingArea(DrawingAreaTypeRemoteLayerTree, webPage)
+RemoteLayerTreeDrawingArea::RemoteLayerTreeDrawingArea(WebPage& webPage, const WebPageCreationParameters& parameters)
+ : DrawingArea(DrawingAreaTypeRemoteLayerTree, parameters.drawingAreaIdentifier, webPage)
, m_remoteLayerTreeContext(std::make_unique<RemoteLayerTreeContext>(webPage))
, m_rootLayer(GraphicsLayer::create(graphicsLayerFactory(), *this))
, m_layerFlushTimer(*this, &RemoteLayerTreeDrawingArea::flushLayers)
@@ -146,7 +147,7 @@
scheduleCompositingLayerFlush();
- m_webPage.send(Messages::DrawingAreaProxy::DidUpdateGeometry());
+ send(Messages::DrawingAreaProxy::DidUpdateGeometry());
}
bool RemoteLayerTreeDrawingArea::shouldUseTiledBackingForFrameView(const FrameView& frameView)
@@ -399,10 +400,10 @@
m_nextFlushIsForImmediatePaint = false;
m_waitingForBackingStoreSwap = true;
- m_webPage.send(Messages::RemoteLayerTreeDrawingAreaProxy::WillCommitLayerTree(layerTransaction.transactionID()));
+ send(Messages::RemoteLayerTreeDrawingAreaProxy::WillCommitLayerTree(layerTransaction.transactionID()));
Messages::RemoteLayerTreeDrawingAreaProxy::CommitLayerTree message(layerTransaction, scrollingTransaction);
- auto commitEncoder = std::make_unique<IPC::Encoder>(Messages::RemoteLayerTreeDrawingAreaProxy::CommitLayerTree::receiverName(), Messages::RemoteLayerTreeDrawingAreaProxy::CommitLayerTree::name(), m_webPage.pageID());
+ auto commitEncoder = std::make_unique<IPC::Encoder>(Messages::RemoteLayerTreeDrawingAreaProxy::CommitLayerTree::receiverName(), Messages::RemoteLayerTreeDrawingAreaProxy::CommitLayerTree::name(), m_identifier.toUInt64());
commitEncoder->encode(message.arguments());
// FIXME: Move all backing store flushing management to RemoteLayerBackingStoreCollection.
Modified: trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp (241987 => 241988)
--- trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp 2019-02-23 05:14:34 UTC (rev 241987)
+++ trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp 2019-02-23 05:30:19 UTC (rev 241988)
@@ -709,6 +709,7 @@
unfreezeLayerTree(LayerTreeFreezeReason::PageSuspended);
}
+ RELEASE_ASSERT(m_drawingArea->identifier() == parameters.drawingAreaIdentifier);
setViewLayoutSize(parameters.viewLayoutSize);
Modified: trunk/Source/WebKit/WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm (241987 => 241988)
--- trunk/Source/WebKit/WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm 2019-02-23 05:14:34 UTC (rev 241987)
+++ trunk/Source/WebKit/WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm 2019-02-23 05:30:19 UTC (rev 241988)
@@ -74,7 +74,7 @@
using namespace WebCore;
TiledCoreAnimationDrawingArea::TiledCoreAnimationDrawingArea(WebPage& webPage, const WebPageCreationParameters& parameters)
- : DrawingArea(DrawingAreaTypeTiledCoreAnimation, webPage)
+ : DrawingArea(DrawingAreaTypeTiledCoreAnimation, parameters.drawingAreaIdentifier, webPage)
, m_layerTreeStateIsFrozen(false)
, m_isPaintingSuspended(!(parameters.activityState & ActivityState::IsVisible))
, m_transientZoomScale(1)
@@ -118,7 +118,7 @@
return;
LayerTreeContext layerTreeContext;
layerTreeContext.contextID = m_layerHostingContext->contextID();
- m_webPage.send(Messages::DrawingAreaProxy::EnterAcceleratedCompositingMode(0, layerTreeContext));
+ send(Messages::DrawingAreaProxy::EnterAcceleratedCompositingMode(0, layerTreeContext));
});
}
@@ -298,7 +298,7 @@
return;
m_lastSentIntrinsicContentSize = contentSize;
- m_webPage.send(Messages::DrawingAreaProxy::IntrinsicContentSizeDidChange(contentSize));
+ send(Messages::DrawingAreaProxy::IntrinsicContentSizeDidChange(contentSize));
}
void TiledCoreAnimationDrawingArea::setShouldScaleViewToFitDocument(bool shouldScaleView)
@@ -504,7 +504,7 @@
applyTransientZoomToLayers(m_transientZoomScale, m_transientZoomOrigin);
if (!m_pendingCallbackIDs.isEmpty()) {
- m_webPage.send(Messages::DrawingAreaProxy::DispatchPresentationCallbacksAfterFlushingLayers(m_pendingCallbackIDs));
+ send(Messages::DrawingAreaProxy::DispatchPresentationCallbacksAfterFlushingLayers(m_pendingCallbackIDs));
m_pendingCallbackIDs.clear();
}
@@ -630,7 +630,7 @@
if (flushSynchronously)
[CATransaction flush];
- m_webPage.send(Messages::DrawingAreaProxy::DidUpdateGeometry());
+ send(Messages::DrawingAreaProxy::DidUpdateGeometry());
m_inUpdateGeometry = false;
@@ -649,7 +649,7 @@
// Finally, inform the UIProcess that the context has changed.
LayerTreeContext layerTreeContext;
layerTreeContext.contextID = m_layerHostingContext->contextID();
- m_webPage.send(Messages::DrawingAreaProxy::UpdateAcceleratedCompositingMode(0, layerTreeContext));
+ send(Messages::DrawingAreaProxy::UpdateAcceleratedCompositingMode(0, layerTreeContext));
}
void TiledCoreAnimationDrawingArea::setColorSpace(const ColorSpaceData& colorSpace)