Diff
Modified: trunk/Source/WebKit/ChangeLog (261899 => 261900)
--- trunk/Source/WebKit/ChangeLog 2020-05-20 01:15:40 UTC (rev 261899)
+++ trunk/Source/WebKit/ChangeLog 2020-05-20 01:32:30 UTC (rev 261900)
@@ -1,3 +1,33 @@
+2020-05-19 Simon Fraser <simon.fra...@apple.com>
+
+ Use an ObjectIdentifier<> for DisplayLink observer IDs
+ https://bugs.webkit.org/show_bug.cgi?id=212112
+
+ Reviewed by Per Arne Vollan.
+
+ Replace unsigned observerID with DisplayLinkObserverID, which is a typesafe ObjectIdentifier<>.
+
+ Use PlatformDisplayID in more places.
+
+ * Scripts/webkit/messages.py:
+ * Shared/DisplayLinkObserverID.h: Copied from Source/WebKit/UIProcess/mac/DisplayLink.h.
+ * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
+ (WebKit::WebProcessPool::startDisplayLink):
+ (WebKit::WebProcessPool::stopDisplayLink):
+ * UIProcess/WebProcessPool.h:
+ * UIProcess/WebProcessProxy.h:
+ * UIProcess/WebProcessProxy.messages.in:
+ * UIProcess/mac/DisplayLink.cpp:
+ (WebKit::DisplayLink::addObserver):
+ (WebKit::DisplayLink::removeObserver):
+ * UIProcess/mac/DisplayLink.h:
+ * UIProcess/mac/WebProcessProxyMac.mm:
+ (WebKit::WebProcessProxy::startDisplayLink):
+ (WebKit::WebProcessProxy::stopDisplayLink):
+ * WebKit.xcodeproj/project.pbxproj:
+ * WebProcess/WebPage/mac/DrawingAreaMac.cpp:
+ (WebKit::DisplayRefreshMonitorMac::DisplayRefreshMonitorMac):
+
2020-05-19 Alex Christensen <achristen...@webkit.org>
Add _WKDownloadDelegate callback including totalBytesWritten
Modified: trunk/Source/WebKit/Scripts/webkit/messages.py (261899 => 261900)
--- trunk/Source/WebKit/Scripts/webkit/messages.py 2020-05-20 01:15:40 UTC (rev 261899)
+++ trunk/Source/WebKit/Scripts/webkit/messages.py 2020-05-20 01:32:30 UTC (rev 261900)
@@ -228,6 +228,7 @@
'WebKit::ActivityStateChangeID',
'WebKit::AudioMediaStreamTrackRendererIdentifier',
'WebKit::ContentWorldIdentifier',
+ 'WebKit::DisplayLinkObserverID',
'WebKit::GeolocationIdentifier',
'WebKit::ImageBufferBackendHandle',
'WebKit::ImageBufferFlushIdentifier',
Copied: trunk/Source/WebKit/Shared/DisplayLinkObserverID.h (from rev 261899, trunk/Source/WebKit/UIProcess/mac/DisplayLink.h) (0 => 261900)
--- trunk/Source/WebKit/Shared/DisplayLinkObserverID.h (rev 0)
+++ trunk/Source/WebKit/Shared/DisplayLinkObserverID.h 2020-05-20 01:32:30 UTC (rev 261900)
@@ -0,0 +1,35 @@
+/*
+ * Copyright (C) 2020 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+
+#include <wtf/ObjectIdentifier.h>
+
+namespace WebKit {
+
+enum DisplayLinkObserverIDType { };
+using DisplayLinkObserverID = ObjectIdentifier<DisplayLinkObserverIDType>;
+
+} // namespace WebKit
Modified: trunk/Source/WebKit/UIProcess/Cocoa/WebProcessPoolCocoa.mm (261899 => 261900)
--- trunk/Source/WebKit/UIProcess/Cocoa/WebProcessPoolCocoa.mm 2020-05-20 01:15:40 UTC (rev 261899)
+++ trunk/Source/WebKit/UIProcess/Cocoa/WebProcessPoolCocoa.mm 2020-05-20 01:32:30 UTC (rev 261900)
@@ -791,7 +791,7 @@
}
#if PLATFORM(MAC) && ENABLE(WEBPROCESS_WINDOWSERVER_BLOCKING)
-void WebProcessPool::startDisplayLink(IPC::Connection& connection, unsigned observerID, uint32_t displayID)
+void WebProcessPool::startDisplayLink(IPC::Connection& connection, DisplayLinkObserverID observerID, PlatformDisplayID displayID)
{
for (auto& displayLink : m_displayLinks) {
if (displayLink->displayID() == displayID) {
@@ -804,7 +804,7 @@
m_displayLinks.append(WTFMove(displayLink));
}
-void WebProcessPool::stopDisplayLink(IPC::Connection& connection, unsigned observerID, uint32_t displayID)
+void WebProcessPool::stopDisplayLink(IPC::Connection& connection, DisplayLinkObserverID observerID, PlatformDisplayID displayID)
{
for (auto& displayLink : m_displayLinks) {
if (displayLink->displayID() == displayID) {
Modified: trunk/Source/WebKit/UIProcess/WebProcessPool.h (261899 => 261900)
--- trunk/Source/WebKit/UIProcess/WebProcessPool.h 2020-05-20 01:15:40 UTC (rev 261899)
+++ trunk/Source/WebKit/UIProcess/WebProcessPool.h 2020-05-20 01:32:30 UTC (rev 261900)
@@ -249,8 +249,8 @@
#endif
#if PLATFORM(MAC) && ENABLE(WEBPROCESS_WINDOWSERVER_BLOCKING)
- void startDisplayLink(IPC::Connection&, unsigned observerID, uint32_t displayID);
- void stopDisplayLink(IPC::Connection&, unsigned observerID, uint32_t displayID);
+ void startDisplayLink(IPC::Connection&, DisplayLinkObserverID, WebCore::PlatformDisplayID);
+ void stopDisplayLink(IPC::Connection&, DisplayLinkObserverID, WebCore::PlatformDisplayID);
void stopDisplayLinks(IPC::Connection&);
#endif
Modified: trunk/Source/WebKit/UIProcess/WebProcessProxy.h (261899 => 261900)
--- trunk/Source/WebKit/UIProcess/WebProcessProxy.h 2020-05-20 01:15:40 UTC (rev 261899)
+++ trunk/Source/WebKit/UIProcess/WebProcessProxy.h 2020-05-20 01:32:30 UTC (rev 261900)
@@ -28,6 +28,7 @@
#include "APIUserInitiatedAction.h"
#include "AuxiliaryProcessProxy.h"
#include "BackgroundProcessResponsivenessTimer.h"
+#include "DisplayLinkObserverID.h"
#include "MessageReceiverMap.h"
#include "NetworkProcessProxy.h"
#include "PluginInfoStore.h"
@@ -74,6 +75,7 @@
struct PrewarmInformation;
struct SecurityOriginData;
enum class ThirdPartyCookieBlockingMode : uint8_t;
+using PlatformDisplayID = uint32_t;
}
namespace WebKit {
@@ -281,8 +283,8 @@
#endif
#if PLATFORM(MAC) && ENABLE(WEBPROCESS_WINDOWSERVER_BLOCKING)
- void startDisplayLink(unsigned observerID, uint32_t displayID);
- void stopDisplayLink(unsigned observerID, uint32_t displayID);
+ void startDisplayLink(DisplayLinkObserverID, WebCore::PlatformDisplayID);
+ void stopDisplayLink(DisplayLinkObserverID, WebCore::PlatformDisplayID);
#endif
// Called when the web process has crashed or we know that it will terminate soon.
Modified: trunk/Source/WebKit/UIProcess/WebProcessProxy.messages.in (261899 => 261900)
--- trunk/Source/WebKit/UIProcess/WebProcessProxy.messages.in 2020-05-20 01:15:40 UTC (rev 261899)
+++ trunk/Source/WebKit/UIProcess/WebProcessProxy.messages.in 2020-05-20 01:32:30 UTC (rev 261900)
@@ -66,8 +66,8 @@
#endif
#if PLATFORM(MAC) && ENABLE(WEBPROCESS_WINDOWSERVER_BLOCKING)
- StartDisplayLink(unsigned observerID, uint32_t displayID)
- StopDisplayLink(unsigned observerID, uint32_t displayID)
+ StartDisplayLink(WebKit::DisplayLinkObserverID observerID, uint32_t displayID)
+ StopDisplayLink(WebKit::DisplayLinkObserverID observerID, uint32_t displayID)
#endif
# Plug-in messages.
Modified: trunk/Source/WebKit/UIProcess/mac/DisplayLink.cpp (261899 => 261900)
--- trunk/Source/WebKit/UIProcess/mac/DisplayLink.cpp 2020-05-20 01:15:40 UTC (rev 261899)
+++ trunk/Source/WebKit/UIProcess/mac/DisplayLink.cpp 2020-05-20 01:32:30 UTC (rev 261900)
@@ -61,7 +61,7 @@
CVDisplayLinkRelease(m_displayLink);
}
-void DisplayLink::addObserver(IPC::Connection& connection, unsigned observerID)
+void DisplayLink::addObserver(IPC::Connection& connection, DisplayLinkObserverID observerID)
{
ASSERT(RunLoop::isMain());
bool isRunning = !m_observers.isEmpty();
@@ -69,7 +69,7 @@
{
LockHolder locker(m_observersLock);
m_observers.ensure(&connection, [] {
- return Vector<unsigned> { };
+ return Vector<DisplayLinkObserverID> { };
}).iterator->value.append(observerID);
}
@@ -80,7 +80,7 @@
}
}
-void DisplayLink::removeObserver(IPC::Connection& connection, unsigned observerID)
+void DisplayLink::removeObserver(IPC::Connection& connection, DisplayLinkObserverID observerID)
{
ASSERT(RunLoop::isMain());
Modified: trunk/Source/WebKit/UIProcess/mac/DisplayLink.h (261899 => 261900)
--- trunk/Source/WebKit/UIProcess/mac/DisplayLink.h 2020-05-20 01:15:40 UTC (rev 261899)
+++ trunk/Source/WebKit/UIProcess/mac/DisplayLink.h 2020-05-20 01:32:30 UTC (rev 261900)
@@ -27,6 +27,7 @@
#if ENABLE(WEBPROCESS_WINDOWSERVER_BLOCKING)
+#include "DisplayLinkObserverID.h"
#include <CoreVideo/CVDisplayLink.h>
#include <WebCore/PlatformScreen.h>
#include <wtf/HashMap.h>
@@ -44,8 +45,8 @@
explicit DisplayLink(WebCore::PlatformDisplayID);
~DisplayLink();
- void addObserver(IPC::Connection&, unsigned observerID);
- void removeObserver(IPC::Connection&, unsigned observerID);
+ void addObserver(IPC::Connection&, DisplayLinkObserverID);
+ void removeObserver(IPC::Connection&, DisplayLinkObserverID);
void removeObservers(IPC::Connection&);
bool hasObservers() const;
@@ -56,7 +57,7 @@
CVDisplayLinkRef m_displayLink { nullptr };
Lock m_observersLock;
- HashMap<RefPtr<IPC::Connection>, Vector<unsigned>> m_observers;
+ HashMap<RefPtr<IPC::Connection>, Vector<DisplayLinkObserverID>> m_observers;
WebCore::PlatformDisplayID m_displayID;
};
Modified: trunk/Source/WebKit/UIProcess/mac/WebProcessProxyMac.mm (261899 => 261900)
--- trunk/Source/WebKit/UIProcess/mac/WebProcessProxyMac.mm 2020-05-20 01:15:40 UTC (rev 261899)
+++ trunk/Source/WebKit/UIProcess/mac/WebProcessProxyMac.mm 2020-05-20 01:32:30 UTC (rev 261900)
@@ -60,7 +60,7 @@
}
#if ENABLE(WEBPROCESS_WINDOWSERVER_BLOCKING)
-void WebProcessProxy::startDisplayLink(unsigned observerID, uint32_t displayID)
+void WebProcessProxy::startDisplayLink(DisplayLinkObserverID observerID, WebCore::PlatformDisplayID displayID)
{
ASSERT(hasProcessPrivilege(ProcessPrivilege::CanCommunicateWithWindowServer));
ASSERT(connection());
@@ -67,7 +67,7 @@
processPool().startDisplayLink(*connection(), observerID, displayID);
}
-void WebProcessProxy::stopDisplayLink(unsigned observerID, uint32_t displayID)
+void WebProcessProxy::stopDisplayLink(DisplayLinkObserverID observerID, WebCore::PlatformDisplayID displayID)
{
ASSERT(connection());
processPool().stopDisplayLink(*connection(), observerID, displayID);
Modified: trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj (261899 => 261900)
--- trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj 2020-05-20 01:15:40 UTC (rev 261899)
+++ trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj 2020-05-20 01:32:30 UTC (rev 261900)
@@ -112,6 +112,7 @@
0F08CF521D63C13A00B48DF1 /* WKFormSelectPicker.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F08CF511D63C13A00B48DF1 /* WKFormSelectPicker.h */; };
0F08CF541D63C14000B48DF1 /* WKFormSelectPopover.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F08CF531D63C14000B48DF1 /* WKFormSelectPopover.h */; };
0F174AA3142A4CB70039250F /* APIGeometry.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F174AA2142A4CB60039250F /* APIGeometry.h */; };
+ 0F189CAC24749F2F00E58D81 /* DisplayLinkObserverID.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F189CAB24749F2F00E58D81 /* DisplayLinkObserverID.h */; };
0F3C725B196F604E00AEDD0C /* WKInspectorHighlightView.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F3C7259196F5F6800AEDD0C /* WKInspectorHighlightView.h */; };
0F45A331239D89A100294ABF /* WKWebViewPrivateForTestingIOS.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F45A32F239D89A000294ABF /* WKWebViewPrivateForTestingIOS.h */; settings = {ATTRIBUTES = (Private, ); }; };
0F45A335239D89AF00294ABF /* WKWebViewPrivateForTestingMac.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F45A333239D89AF00294ABF /* WKWebViewPrivateForTestingMac.h */; settings = {ATTRIBUTES = (Private, ); }; };
@@ -2200,6 +2201,7 @@
0F11781422E39BE6008BD570 /* TransactionID.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TransactionID.h; sourceTree = "<group>"; };
0F174AA2142A4CB60039250F /* APIGeometry.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = APIGeometry.h; sourceTree = "<group>"; };
0F174AA6142AAC610039250F /* WKGeometry.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WKGeometry.cpp; sourceTree = "<group>"; };
+ 0F189CAB24749F2F00E58D81 /* DisplayLinkObserverID.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DisplayLinkObserverID.h; sourceTree = "<group>"; };
0F3C7257196F5F5000AEDD0C /* WKInspectorHighlightView.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WKInspectorHighlightView.mm; sourceTree = "<group>"; };
0F3C7259196F5F6800AEDD0C /* WKInspectorHighlightView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WKInspectorHighlightView.h; sourceTree = "<group>"; };
0F45A32F239D89A000294ABF /* WKWebViewPrivateForTestingIOS.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WKWebViewPrivateForTestingIOS.h; sourceTree = "<group>"; };
@@ -6031,6 +6033,7 @@
99F642D21FABE378009621E9 /* CoordinateSystem.h */,
99036AE823A970870000B06A /* DebuggableInfoData.cpp */,
99036AE723A970870000B06A /* DebuggableInfoData.h */,
+ 0F189CAB24749F2F00E58D81 /* DisplayLinkObserverID.h */,
2D7FD190223C730F007887F1 /* DocumentEditingContext.h */,
2D7FD191223C7310007887F1 /* DocumentEditingContext.mm */,
C517388012DF8F4F00EE3F47 /* DragControllerAction.h */,
@@ -10782,6 +10785,7 @@
2DAADA8F2298C21000E36B0C /* DeviceManagementSPI.h in Headers */,
83891B6C1A68C30B0030F386 /* DiagnosticLoggingClient.h in Headers */,
C18173612058424700DFDA65 /* DisplayLink.h in Headers */,
+ 0F189CAC24749F2F00E58D81 /* DisplayLinkObserverID.h in Headers */,
5C1427021C23F84C00D41183 /* Download.h in Headers */,
A1DF631318E0B7C8003A3E2A /* DownloadClient.h in Headers */,
5C1427051C23F84C00D41183 /* DownloadID.h in Headers */,
Modified: trunk/Source/WebKit/WebProcess/WebPage/mac/DrawingAreaMac.cpp (261899 => 261900)
--- trunk/Source/WebKit/WebProcess/WebPage/mac/DrawingAreaMac.cpp 2020-05-20 01:15:40 UTC (rev 261899)
+++ trunk/Source/WebKit/WebProcess/WebPage/mac/DrawingAreaMac.cpp 2020-05-20 01:32:30 UTC (rev 261900)
@@ -55,18 +55,15 @@
bool hasRequestedRefreshCallback() const override { return m_hasSentMessage; }
+ DisplayLinkObserverID m_observerID;
+ std::unique_ptr<RunLoopObserver> m_runLoopObserver;
bool m_hasSentMessage { false };
- unsigned m_observerID;
- static unsigned m_counterID;
- std::unique_ptr<RunLoopObserver> m_runLoopObserver;
bool m_firstCallbackInCurrentRunloop { false };
};
-unsigned DisplayRefreshMonitorMac::m_counterID = 0;
-
DisplayRefreshMonitorMac::DisplayRefreshMonitorMac(PlatformDisplayID displayID)
: DisplayRefreshMonitor(displayID)
- , m_observerID(++m_counterID)
+ , m_observerID(DisplayLinkObserverID::generate())
{
}