Changeset 293329 in webkit
- Timestamp:
- Apr 25, 2022 9:10:59 AM (3 months ago)
- Location:
- trunk
- Files:
-
- 5 added
- 35 edited
-
LayoutTests/workers/resources (added)
-
LayoutTests/workers/resources/worker-web-lock-released-on-reload-popup.html (added)
-
LayoutTests/workers/resources/worker-web-lock-released-on-reload-worker.js (added)
-
LayoutTests/workers/worker-web-lock-released-on-reload-expected.txt (added)
-
LayoutTests/workers/worker-web-lock-released-on-reload.html (added)
-
Source/WebCore/Modules/web-locks/WebLockManager.cpp (modified) (7 diffs)
-
Source/WebCore/Modules/web-locks/WebLockRegistry.cpp (modified) (10 diffs)
-
Source/WebCore/Modules/web-locks/WebLockRegistry.h (modified) (4 diffs)
-
Source/WebCore/Modules/webaudio/AudioWorkletMessagingProxy.cpp (modified) (2 diffs)
-
Source/WebCore/dom/Document.h (modified) (2 diffs)
-
Source/WebCore/loader/EmptyClients.cpp (modified) (3 diffs)
-
Source/WebCore/page/Page.cpp (modified) (2 diffs)
-
Source/WebCore/page/Page.h (modified) (3 diffs)
-
Source/WebCore/page/PageConfiguration.cpp (modified) (3 diffs)
-
Source/WebCore/page/PageConfiguration.h (modified) (2 diffs)
-
Source/WebCore/workers/Worker.cpp (modified) (2 diffs)
-
Source/WebCore/workers/WorkerGlobalScope.cpp (modified) (1 diff)
-
Source/WebCore/workers/WorkerGlobalScopeProxy.h (modified) (1 diff)
-
Source/WebCore/workers/WorkerMessagingProxy.cpp (modified) (2 diffs)
-
Source/WebCore/workers/WorkerMessagingProxy.h (modified) (1 diff)
-
Source/WebCore/workers/WorkerOrWorkletGlobalScope.cpp (modified) (2 diffs)
-
Source/WebCore/workers/WorkerOrWorkletGlobalScope.h (modified) (3 diffs)
-
Source/WebCore/workers/WorkerThread.h (modified) (1 diff)
-
Source/WebCore/workers/service/ServiceWorkerGlobalScope.cpp (modified) (3 diffs)
-
Source/WebCore/workers/service/ServiceWorkerGlobalScope.h (modified) (4 diffs)
-
Source/WebCore/workers/service/context/ServiceWorkerThread.cpp (modified) (1 diff)
-
Source/WebCore/workers/shared/context/SharedWorkerThreadProxy.cpp (modified) (2 diffs)
-
Source/WebCore/worklets/Worklet.cpp (modified) (1 diff)
-
Source/WebCore/worklets/WorkletGlobalScope.cpp (modified) (2 diffs)
-
Source/WebCore/worklets/WorkletParameters.h (modified) (1 diff)
-
Source/WebKit/UIProcess/WebLockRegistryProxy.cpp (modified) (4 diffs)
-
Source/WebKit/WebProcess/Storage/WebSWContextManagerConnection.cpp (modified) (1 diff)
-
Source/WebKit/WebProcess/Storage/WebSharedWorkerContextManagerConnection.cpp (modified) (1 diff)
-
Source/WebKit/WebProcess/WebCoreSupport/RemoteWebLockRegistry.cpp (modified) (4 diffs)
-
Source/WebKit/WebProcess/WebCoreSupport/RemoteWebLockRegistry.h (modified) (1 diff)
-
Source/WebKit/WebProcess/WebPage/WebPage.cpp (modified) (2 diffs)
-
Source/WebKit/WebProcess/WebProcess.cpp (modified) (2 diffs)
-
Source/WebKit/WebProcess/WebProcess.h (modified) (3 diffs)
-
Source/WebKitLegacy/mac/WebView/WebView.mm (modified) (4 diffs)
-
Source/WebKitLegacy/win/WebView.cpp (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/Modules/web-locks/WebLockManager.cpp
r291863 r293329 74 74 return nullptr; 75 75 76 return adoptRef(*new MainThreadBridge(*context, WTFMove(*clientOrigin))); 76 auto sessionID = context->sessionID(); 77 if (!sessionID) 78 return nullptr; 79 80 return adoptRef(*new MainThreadBridge(*context, *sessionID, WTFMove(*clientOrigin))); 77 81 } 78 82 … … 84 88 85 89 private: 86 MainThreadBridge(ScriptExecutionContext&, ClientOrigin&&); 87 88 void ensureOnMainThread(Function<void(WebLockRegistry&)>&& task); 89 90 WeakPtr<ScriptExecutionContext> m_context; 90 MainThreadBridge(ScriptExecutionContext&, PAL::SessionID, ClientOrigin&&); 91 91 92 const ScriptExecutionContextIdentifier m_clientID; 93 const PAL::SessionID m_sessionID; 92 94 const ClientOrigin m_clientOrigin; // Main thread only. 93 95 }; 94 96 95 WebLockManager::MainThreadBridge::MainThreadBridge(ScriptExecutionContext& context, ClientOrigin&& clientOrigin)96 : m_c ontext(context)97 , m_ clientID(context.identifier())97 WebLockManager::MainThreadBridge::MainThreadBridge(ScriptExecutionContext& context, PAL::SessionID sessionID, ClientOrigin&& clientOrigin) 98 : m_clientID(context.identifier()) 99 , m_sessionID(sessionID) 98 100 , m_clientOrigin(WTFMove(clientOrigin).isolatedCopy()) 99 101 { … … 102 104 void WebLockManager::MainThreadBridge::requestLock(WebLockIdentifier lockIdentifier, const String& name, const Options& options, Function<void(bool)>&& grantedHandler, Function<void()>&& lockStolenHandler) 103 105 { 104 ensureOnMainThread([this, name = crossThreadCopy(name), mode = options.mode, steal = options.steal, ifAvailable = options.ifAvailable, lockIdentifier, grantedHandler = WTFMove(grantedHandler), lockStolenHandler = WTFMove(lockStolenHandler)](auto& registry) mutable {105 registry.requestLock(m_clientOrigin, lockIdentifier, m_clientID, name, mode, steal, ifAvailable, [clientID = m_clientID, grantedHandler = WTFMove(grantedHandler)] (bool success) mutable {106 callOnMainThread([this, protectedThis = Ref { *this }, name = crossThreadCopy(name), mode = options.mode, steal = options.steal, ifAvailable = options.ifAvailable, lockIdentifier, grantedHandler = WTFMove(grantedHandler), lockStolenHandler = WTFMove(lockStolenHandler)]() mutable { 107 WebLockRegistry::shared().requestLock(m_sessionID, m_clientOrigin, lockIdentifier, m_clientID, name, mode, steal, ifAvailable, [clientID = m_clientID, grantedHandler = WTFMove(grantedHandler)] (bool success) mutable { 106 108 ScriptExecutionContext::ensureOnContextThread(clientID, [grantedHandler = WTFMove(grantedHandler), success](auto&) mutable { 107 109 grantedHandler(success); … … 117 119 void WebLockManager::MainThreadBridge::releaseLock(WebLockIdentifier lockIdentifier, const String& name) 118 120 { 119 ensureOnMainThread([this, lockIdentifier, name = crossThreadCopy(name)](auto& registry){120 registry.releaseLock(m_clientOrigin, lockIdentifier, m_clientID, name);121 callOnMainThread([this, protectedThis = Ref { *this }, lockIdentifier, name = crossThreadCopy(name)] { 122 WebLockRegistry::shared().releaseLock(m_sessionID, m_clientOrigin, lockIdentifier, m_clientID, name); 121 123 }); 122 124 } … … 124 126 void WebLockManager::MainThreadBridge::abortLockRequest(WebLockIdentifier lockIdentifier, const String& name, CompletionHandler<void(bool)>&& completionHandler) 125 127 { 126 ensureOnMainThread([this, lockIdentifier, name = crossThreadCopy(name), completionHandler = WTFMove(completionHandler)](auto& registry) mutable {127 registry.abortLockRequest(m_clientOrigin, lockIdentifier, m_clientID, name, [clientID = m_clientID, completionHandler = WTFMove(completionHandler)](bool wasAborted) mutable {128 callOnMainThread([this, protectedThis = Ref { *this }, lockIdentifier, name = crossThreadCopy(name), completionHandler = WTFMove(completionHandler)]() mutable { 129 WebLockRegistry::shared().abortLockRequest(m_sessionID, m_clientOrigin, lockIdentifier, m_clientID, name, [clientID = m_clientID, completionHandler = WTFMove(completionHandler)](bool wasAborted) mutable { 128 130 ScriptExecutionContext::ensureOnContextThread(clientID, [completionHandler = WTFMove(completionHandler), wasAborted](auto&) mutable { 129 131 completionHandler(wasAborted); … … 135 137 void WebLockManager::MainThreadBridge::query(CompletionHandler<void(Snapshot&&)>&& completionHandler) 136 138 { 137 ensureOnMainThread([this, completionHandler = WTFMove(completionHandler)](auto& registry) mutable {138 registry.snapshot(m_clientOrigin, [clientID = m_clientID, completionHandler = WTFMove(completionHandler)](Snapshot&& snapshot) mutable {139 callOnMainThread([this, protectedThis = Ref { *this }, completionHandler = WTFMove(completionHandler)]() mutable { 140 WebLockRegistry::shared().snapshot(m_sessionID, m_clientOrigin, [clientID = m_clientID, completionHandler = WTFMove(completionHandler)](Snapshot&& snapshot) mutable { 139 141 ScriptExecutionContext::ensureOnContextThread(clientID, [completionHandler = WTFMove(completionHandler), snapshot = crossThreadCopy(snapshot)](auto&) mutable { 140 142 completionHandler(WTFMove(snapshot)); … … 146 148 void WebLockManager::MainThreadBridge::clientIsGoingAway() 147 149 { 148 ensureOnMainThread([this](auto& registry) { 149 registry.clientIsGoingAway(m_clientOrigin, m_clientID); 150 }); 151 } 152 153 void WebLockManager::MainThreadBridge::ensureOnMainThread(Function<void(WebLockRegistry&)>&& task) 154 { 155 if (!m_context) 156 return; 157 ASSERT(m_context->isContextThread()); 158 159 if (is<Document>(*m_context)) { 160 if (auto page = downcast<Document>(*m_context).page()) { 161 Ref protectedThis { *this }; 162 task(page->webLockRegistry()); 163 } 164 } else { 165 downcast<WorkerGlobalScope>(*m_context).thread().workerLoaderProxy().postTaskToLoader([task = WTFMove(task), protectedThis = Ref { *this }](auto& context) { 166 if (auto page = downcast<Document>(context).page()) 167 task(page->webLockRegistry()); 168 }); 169 } 150 callOnMainThread([this, protectedThis = Ref { *this }] { 151 WebLockRegistry::shared().clientIsGoingAway(m_sessionID, m_clientOrigin, m_clientID); 152 }); 170 153 } 171 154 -
trunk/Source/WebCore/Modules/web-locks/WebLockRegistry.cpp
r293195 r293329 36 36 namespace WebCore { 37 37 38 static RefPtr<WebLockRegistry>& sharedRegistry() 39 { 40 static MainThreadNeverDestroyed<RefPtr<WebLockRegistry>> registry; 41 return registry; 42 } 43 44 WebLockRegistry& WebLockRegistry::shared() 45 { 46 auto& registry = sharedRegistry(); 47 if (!registry) 48 registry= LocalWebLockRegistry::create(); 49 return *registry; 50 } 51 52 void WebLockRegistry::setSharedRegistry(Ref<WebLockRegistry>&& registry) 53 { 54 ASSERT(!sharedRegistry()); 55 sharedRegistry() = WTFMove(registry); 56 } 57 38 58 class LocalWebLockRegistry::PerOriginRegistry : public RefCounted<PerOriginRegistry>, public CanMakeWeakPtr<PerOriginRegistry> { 39 59 public: 40 static Ref<PerOriginRegistry> create(LocalWebLockRegistry&, const ClientOrigin&);60 static Ref<PerOriginRegistry> create(LocalWebLockRegistry&, PAL::SessionID, const ClientOrigin&); 41 61 ~PerOriginRegistry(); 42 62 … … 56 76 57 77 private: 58 PerOriginRegistry(LocalWebLockRegistry&, const ClientOrigin&);78 PerOriginRegistry(LocalWebLockRegistry&, PAL::SessionID, const ClientOrigin&); 59 79 60 80 struct LockRequest : LockInfo { … … 67 87 68 88 WeakPtr<LocalWebLockRegistry> m_globalRegistry; 89 PAL::SessionID m_sessionID; 69 90 ClientOrigin m_clientOrigin; 70 91 FastRobinHoodHashMap<String, Deque<LockRequest>> m_lockRequestQueueMap; … … 76 97 LocalWebLockRegistry::~LocalWebLockRegistry() = default; 77 98 78 auto LocalWebLockRegistry::ensureRegistryForOrigin( const ClientOrigin& clientOrigin) -> Ref<PerOriginRegistry>79 { 80 if (auto existingRegistry = m_perOriginRegistries.get( clientOrigin))99 auto LocalWebLockRegistry::ensureRegistryForOrigin(PAL::SessionID sessionID, const ClientOrigin& clientOrigin) -> Ref<PerOriginRegistry> 100 { 101 if (auto existingRegistry = m_perOriginRegistries.get({ sessionID, clientOrigin })) 81 102 return *existingRegistry; 82 103 83 return PerOriginRegistry::create(*this, clientOrigin);84 } 85 86 auto LocalWebLockRegistry::existingRegistryForOrigin( const ClientOrigin& clientOrigin) const -> RefPtr<PerOriginRegistry>87 { 88 return m_perOriginRegistries.get( clientOrigin).get();89 } 90 91 Ref<LocalWebLockRegistry::PerOriginRegistry> LocalWebLockRegistry::PerOriginRegistry::create(LocalWebLockRegistry& globalRegistry, const ClientOrigin& clientOrigin)92 { 93 return adoptRef(*new PerOriginRegistry(globalRegistry, clientOrigin));94 } 95 96 LocalWebLockRegistry::PerOriginRegistry::PerOriginRegistry(LocalWebLockRegistry& globalRegistry, const ClientOrigin& clientOrigin)104 return PerOriginRegistry::create(*this, sessionID, clientOrigin); 105 } 106 107 auto LocalWebLockRegistry::existingRegistryForOrigin(PAL::SessionID sessionID, const ClientOrigin& clientOrigin) const -> RefPtr<PerOriginRegistry> 108 { 109 return m_perOriginRegistries.get({ sessionID, clientOrigin }).get(); 110 } 111 112 Ref<LocalWebLockRegistry::PerOriginRegistry> LocalWebLockRegistry::PerOriginRegistry::create(LocalWebLockRegistry& globalRegistry, PAL::SessionID sessionID, const ClientOrigin& clientOrigin) 113 { 114 return adoptRef(*new PerOriginRegistry(globalRegistry, sessionID, clientOrigin)); 115 } 116 117 LocalWebLockRegistry::PerOriginRegistry::PerOriginRegistry(LocalWebLockRegistry& globalRegistry, PAL::SessionID sessionID, const ClientOrigin& clientOrigin) 97 118 : m_globalRegistry(globalRegistry) 119 , m_sessionID(sessionID) 98 120 , m_clientOrigin(clientOrigin) 99 121 { 100 globalRegistry.m_perOriginRegistries.add( clientOrigin, WeakPtr { * this });122 globalRegistry.m_perOriginRegistries.add({ sessionID, clientOrigin }, WeakPtr { * this }); 101 123 } 102 124 … … 104 126 { 105 127 if (m_globalRegistry) 106 m_globalRegistry->m_perOriginRegistries.remove( m_clientOrigin);107 } 108 109 void LocalWebLockRegistry::requestLock( const ClientOrigin& clientOrigin, WebLockIdentifier lockIdentifier, ScriptExecutionContextIdentifier clientID, const String& name, WebLockMode mode, bool steal, bool ifAvailable, Function<void(bool)>&& grantedHandler, Function<void()>&& lockStolenHandler)110 { 111 ensureRegistryForOrigin( clientOrigin)->requestLock(lockIdentifier, clientID, name, mode, steal, ifAvailable, WTFMove(grantedHandler), WTFMove(lockStolenHandler));128 m_globalRegistry->m_perOriginRegistries.remove({ m_sessionID, m_clientOrigin }); 129 } 130 131 void LocalWebLockRegistry::requestLock(PAL::SessionID sessionID, const ClientOrigin& clientOrigin, WebLockIdentifier lockIdentifier, ScriptExecutionContextIdentifier clientID, const String& name, WebLockMode mode, bool steal, bool ifAvailable, Function<void(bool)>&& grantedHandler, Function<void()>&& lockStolenHandler) 132 { 133 ensureRegistryForOrigin(sessionID, clientOrigin)->requestLock(lockIdentifier, clientID, name, mode, steal, ifAvailable, WTFMove(grantedHandler), WTFMove(lockStolenHandler)); 112 134 } 113 135 … … 136 158 } 137 159 138 void LocalWebLockRegistry::releaseLock( const ClientOrigin& clientOrigin, WebLockIdentifier lockIdentifier, ScriptExecutionContextIdentifier, const String& name)139 { 140 if (auto registry = existingRegistryForOrigin( clientOrigin))160 void LocalWebLockRegistry::releaseLock(PAL::SessionID sessionID, const ClientOrigin& clientOrigin, WebLockIdentifier lockIdentifier, ScriptExecutionContextIdentifier, const String& name) 161 { 162 if (auto registry = existingRegistryForOrigin(sessionID, clientOrigin)) 141 163 registry->releaseLock(lockIdentifier, name); 142 164 } … … 159 181 } 160 182 161 void LocalWebLockRegistry::abortLockRequest( const ClientOrigin& clientOrigin, WebLockIdentifier lockIdentifier, ScriptExecutionContextIdentifier, const String& name, CompletionHandler<void(bool)>&& completionHandler)162 { 163 auto registry = existingRegistryForOrigin( clientOrigin);183 void LocalWebLockRegistry::abortLockRequest(PAL::SessionID sessionID, const ClientOrigin& clientOrigin, WebLockIdentifier lockIdentifier, ScriptExecutionContextIdentifier, const String& name, CompletionHandler<void(bool)>&& completionHandler) 184 { 185 auto registry = existingRegistryForOrigin(sessionID, clientOrigin); 164 186 if (!registry) 165 187 return completionHandler(false); … … 223 245 } 224 246 225 void LocalWebLockRegistry::snapshot( const ClientOrigin& clientOrigin, CompletionHandler<void(WebLockManager::Snapshot&&)>&& completionHandler)226 { 227 auto registry = existingRegistryForOrigin( clientOrigin);247 void LocalWebLockRegistry::snapshot(PAL::SessionID sessionID, const ClientOrigin& clientOrigin, CompletionHandler<void(WebLockManager::Snapshot&&)>&& completionHandler) 248 { 249 auto registry = existingRegistryForOrigin(sessionID, clientOrigin); 228 250 if (!registry) 229 251 return completionHandler({ }); … … 248 270 } 249 271 250 void LocalWebLockRegistry::clientIsGoingAway( const ClientOrigin& clientOrigin, ScriptExecutionContextIdentifier clientID)251 { 252 if (auto registry = existingRegistryForOrigin( clientOrigin))272 void LocalWebLockRegistry::clientIsGoingAway(PAL::SessionID sessionID, const ClientOrigin& clientOrigin, ScriptExecutionContextIdentifier clientID) 273 { 274 if (auto registry = existingRegistryForOrigin(sessionID, clientOrigin)) 253 275 registry->clientsAreGoingAway([clientID](auto& lockInfo) { return lockInfo.clientID == clientID; }); 254 276 } … … 292 314 void LocalWebLockRegistry::clientsAreGoingAway(ProcessIdentifier processIdentifier) 293 315 { 294 Vector< ClientOrigin> clientOrigins = copyToVector(m_perOriginRegistries.keys());295 for (auto& clientOrigin: clientOrigins) {296 if (auto registry = existingRegistryForOrigin( clientOrigin))316 Vector<std::pair<PAL::SessionID, ClientOrigin>> clientOrigins = copyToVector(m_perOriginRegistries.keys()); 317 for (auto& [sessionID, clientOrigin] : clientOrigins) { 318 if (auto registry = existingRegistryForOrigin(sessionID, clientOrigin)) 297 319 registry->clientsAreGoingAway([processIdentifier](auto& lockInfo) { return lockInfo.clientID.processIdentifier() == processIdentifier; }); 298 320 } -
trunk/Source/WebCore/Modules/web-locks/WebLockRegistry.h
r286455 r293329 30 30 #include "WebLockIdentifier.h" 31 31 #include "WebLockMode.h" 32 #include <pal/SessionID.h> 32 33 #include <wtf/Deque.h> 33 34 #include <wtf/HashMap.h> … … 43 44 class WebLockRegistry : public RefCounted<WebLockRegistry> { 44 45 public: 46 static WebLockRegistry& shared(); 47 WEBCORE_EXPORT static void setSharedRegistry(Ref<WebLockRegistry>&&); 48 45 49 virtual ~WebLockRegistry() { } 46 50 47 virtual void requestLock( const ClientOrigin&, WebLockIdentifier, ScriptExecutionContextIdentifier, const String& name, WebLockMode, bool steal, bool ifAvailable, Function<void(bool)>&& grantedHandler, Function<void()>&& lockStolenHandler) = 0;48 virtual void releaseLock( const ClientOrigin&, WebLockIdentifier, ScriptExecutionContextIdentifier, const String& name) = 0;49 virtual void abortLockRequest( const ClientOrigin&, WebLockIdentifier, ScriptExecutionContextIdentifier, const String& name, CompletionHandler<void(bool)>&&) = 0;50 virtual void snapshot( const ClientOrigin&, CompletionHandler<void(WebLockManagerSnapshot&&)>&&) = 0;51 virtual void clientIsGoingAway( const ClientOrigin&, ScriptExecutionContextIdentifier) = 0;51 virtual void requestLock(PAL::SessionID, const ClientOrigin&, WebLockIdentifier, ScriptExecutionContextIdentifier, const String& name, WebLockMode, bool steal, bool ifAvailable, Function<void(bool)>&& grantedHandler, Function<void()>&& lockStolenHandler) = 0; 52 virtual void releaseLock(PAL::SessionID, const ClientOrigin&, WebLockIdentifier, ScriptExecutionContextIdentifier, const String& name) = 0; 53 virtual void abortLockRequest(PAL::SessionID, const ClientOrigin&, WebLockIdentifier, ScriptExecutionContextIdentifier, const String& name, CompletionHandler<void(bool)>&&) = 0; 54 virtual void snapshot(PAL::SessionID, const ClientOrigin&, CompletionHandler<void(WebLockManagerSnapshot&&)>&&) = 0; 55 virtual void clientIsGoingAway(PAL::SessionID, const ClientOrigin&, ScriptExecutionContextIdentifier) = 0; 52 56 53 57 protected: … … 60 64 ~LocalWebLockRegistry(); 61 65 62 WEBCORE_EXPORT void requestLock( const ClientOrigin&, WebLockIdentifier, ScriptExecutionContextIdentifier, const String& name, WebLockMode, bool steal, bool ifAvailable, Function<void(bool)>&& grantedHandler, Function<void()>&& lockStolenHandler) final;63 WEBCORE_EXPORT void releaseLock( const ClientOrigin&, WebLockIdentifier, ScriptExecutionContextIdentifier, const String& name) final;64 WEBCORE_EXPORT void abortLockRequest( const ClientOrigin&, WebLockIdentifier, ScriptExecutionContextIdentifier, const String& name, CompletionHandler<void(bool)>&&) final;65 WEBCORE_EXPORT void snapshot( const ClientOrigin&, CompletionHandler<void(WebLockManagerSnapshot&&)>&&) final;66 WEBCORE_EXPORT void clientIsGoingAway( const ClientOrigin&, ScriptExecutionContextIdentifier) final;66 WEBCORE_EXPORT void requestLock(PAL::SessionID, const ClientOrigin&, WebLockIdentifier, ScriptExecutionContextIdentifier, const String& name, WebLockMode, bool steal, bool ifAvailable, Function<void(bool)>&& grantedHandler, Function<void()>&& lockStolenHandler) final; 67 WEBCORE_EXPORT void releaseLock(PAL::SessionID, const ClientOrigin&, WebLockIdentifier, ScriptExecutionContextIdentifier, const String& name) final; 68 WEBCORE_EXPORT void abortLockRequest(PAL::SessionID, const ClientOrigin&, WebLockIdentifier, ScriptExecutionContextIdentifier, const String& name, CompletionHandler<void(bool)>&&) final; 69 WEBCORE_EXPORT void snapshot(PAL::SessionID, const ClientOrigin&, CompletionHandler<void(WebLockManagerSnapshot&&)>&&) final; 70 WEBCORE_EXPORT void clientIsGoingAway(PAL::SessionID, const ClientOrigin&, ScriptExecutionContextIdentifier) final; 67 71 WEBCORE_EXPORT void clientsAreGoingAway(ProcessIdentifier); 68 72 … … 71 75 72 76 class PerOriginRegistry; 73 Ref<PerOriginRegistry> ensureRegistryForOrigin( const ClientOrigin&);74 RefPtr<PerOriginRegistry> existingRegistryForOrigin( const ClientOrigin&) const;77 Ref<PerOriginRegistry> ensureRegistryForOrigin(PAL::SessionID, const ClientOrigin&); 78 RefPtr<PerOriginRegistry> existingRegistryForOrigin(PAL::SessionID, const ClientOrigin&) const; 75 79 76 HashMap< ClientOrigin, WeakPtr<PerOriginRegistry>> m_perOriginRegistries;80 HashMap<std::pair<PAL::SessionID, ClientOrigin>, WeakPtr<PerOriginRegistry>> m_perOriginRegistries; 77 81 }; 78 82 -
trunk/Source/WebCore/Modules/webaudio/AudioWorkletMessagingProxy.cpp
r284057 r293329 50 50 auto* document = worklet.document(); 51 51 auto jsRuntimeFlags = document->settings().javaScriptRuntimeFlags(); 52 RELEASE_ASSERT(document->sessionID()); 52 53 53 54 return { … … 56 57 worklet.audioContext() ? worklet.audioContext()->sampleRate() : 0.0f, 57 58 worklet.identifier(), 59 *document->sessionID(), 58 60 document->settingsValues(), 59 61 worklet.audioContext() ? !worklet.audioContext()->isOfflineContext() : false -
trunk/Source/WebCore/dom/Document.h
r293059 r293329 1684 1684 WEBCORE_EXPORT void removeElementWithPendingUserAgentShadowTreeUpdate(Element&); 1685 1685 1686 std::optional<PAL::SessionID> sessionID() const final; 1687 1686 1688 protected: 1687 1689 enum ConstructionFlags { Synthesized = 1, NonRenderedPlaceholder = 1 << 1 }; … … 1806 1808 1807 1809 NotificationClient* notificationClient() final; 1808 std::optional<PAL::SessionID> sessionID() const final;1809 1810 1810 1811 const Ref<const Settings> m_settings; -
trunk/Source/WebCore/loader/EmptyClients.cpp
r293292 r293329 83 83 #include "UserContentProvider.h" 84 84 #include "VisitedLinkStore.h" 85 #include "WebLockRegistry.h"86 85 #include <JavaScriptCore/HeapInlines.h> 87 86 #include <pal/SessionID.h> … … 1193 1192 }; 1194 1193 1195 class EmptyWebLockRegistry final : public WebLockRegistry {1196 public:1197 static Ref<EmptyWebLockRegistry> create()1198 {1199 return adoptRef(*new EmptyWebLockRegistry);1200 }1201 private:1202 void requestLock(const ClientOrigin&, WebLockIdentifier, ScriptExecutionContextIdentifier, const String&, WebLockMode, bool, bool, Function<void(bool)>&&, Function<void()>&&) { }1203 void releaseLock(const ClientOrigin&, WebLockIdentifier, ScriptExecutionContextIdentifier, const String&) final { }1204 void abortLockRequest(const ClientOrigin&, WebLockIdentifier, ScriptExecutionContextIdentifier, const String&, CompletionHandler<void(bool)>&&) final { }1205 void snapshot(const ClientOrigin&, CompletionHandler<void(WebLockManagerSnapshot&&)>&&) { }1206 void clientIsGoingAway(const ClientOrigin&, ScriptExecutionContextIdentifier) { }1207 };1208 1209 1194 PageConfiguration pageConfigurationWithEmptyClients(PAL::SessionID sessionID) 1210 1195 { … … 1223 1208 makeUniqueRef<EmptyMediaRecorderProvider>(), 1224 1209 EmptyBroadcastChannelRegistry::create(), 1225 EmptyWebLockRegistry::create(),1226 1210 DummyPermissionController::create(), 1227 1211 makeUniqueRef<DummyStorageProvider>(), -
trunk/Source/WebCore/page/Page.cpp
r293285 r293329 165 165 #include "VoidCallback.h" 166 166 #include "WebCoreJSClientData.h" 167 #include "WebLockRegistry.h"168 167 #include "WheelEventDeltaFilter.h" 169 168 #include "WheelEventTestMonitor.h" … … 313 312 , m_visitedLinkStore(*WTFMove(pageConfiguration.visitedLinkStore)) 314 313 , m_broadcastChannelRegistry(WTFMove(pageConfiguration.broadcastChannelRegistry)) 315 , m_webLockRegistry(WTFMove(pageConfiguration.webLockRegistry))316 314 , m_sessionID(pageConfiguration.sessionID) 317 315 #if ENABLE(VIDEO) -
trunk/Source/WebCore/page/Page.h
r293195 r293329 172 172 class VisitedLinkStore; 173 173 class WebGLStateTracker; 174 class WebLockRegistry;175 174 class WheelEventDeltaFilter; 176 175 class WheelEventTestMonitor; … … 309 308 WEBCORE_EXPORT void setBroadcastChannelRegistry(Ref<BroadcastChannelRegistry>&&); // Only used by WebKitLegacy. 310 309 311 WebLockRegistry& webLockRegistry() { return m_webLockRegistry; }312 313 310 WEBCORE_EXPORT static void forEachPage(const Function<void(Page&)>&); 314 311 WEBCORE_EXPORT static unsigned nonUtilityPageCount(); … … 1183 1180 Ref<VisitedLinkStore> m_visitedLinkStore; 1184 1181 Ref<BroadcastChannelRegistry> m_broadcastChannelRegistry; 1185 Ref<WebLockRegistry> m_webLockRegistry;1186 1182 RefPtr<WheelEventTestMonitor> m_wheelEventTestMonitor; 1187 1183 WeakHashSet<ActivityStateChangeObserver> m_activityStateChangeObservers; -
trunk/Source/WebCore/page/PageConfiguration.cpp
r289994 r293329 55 55 #include "ValidationMessageClient.h" 56 56 #include "VisitedLinkStore.h" 57 #include "WebLockRegistry.h"58 57 #if ENABLE(WEBGL) 59 58 #include "WebGLStateTracker.h" … … 65 64 namespace WebCore { 66 65 67 PageConfiguration::PageConfiguration(PAL::SessionID sessionID, UniqueRef<EditorClient>&& editorClient, Ref<SocketProvider>&& socketProvider, UniqueRef<LibWebRTCProvider>&& libWebRTCProvider, Ref<CacheStorageProvider>&& cacheStorageProvider, Ref<UserContentProvider>&& userContentProvider, Ref<BackForwardClient>&& backForwardClient, Ref<CookieJar>&& cookieJar, UniqueRef<ProgressTrackerClient>&& progressTrackerClient, UniqueRef<FrameLoaderClient>&& loaderClientForMainFrame, UniqueRef<SpeechRecognitionProvider>&& speechRecognitionProvider, UniqueRef<MediaRecorderProvider>&& mediaRecorderProvider, Ref<BroadcastChannelRegistry>&& broadcastChannelRegistry, Ref< WebLockRegistry>&& webLockRegistry, Ref<PermissionController>&& permissionController, UniqueRef<StorageProvider>&& storageProvider, UniqueRef<ModelPlayerProvider>&& modelPlayerProvider)66 PageConfiguration::PageConfiguration(PAL::SessionID sessionID, UniqueRef<EditorClient>&& editorClient, Ref<SocketProvider>&& socketProvider, UniqueRef<LibWebRTCProvider>&& libWebRTCProvider, Ref<CacheStorageProvider>&& cacheStorageProvider, Ref<UserContentProvider>&& userContentProvider, Ref<BackForwardClient>&& backForwardClient, Ref<CookieJar>&& cookieJar, UniqueRef<ProgressTrackerClient>&& progressTrackerClient, UniqueRef<FrameLoaderClient>&& loaderClientForMainFrame, UniqueRef<SpeechRecognitionProvider>&& speechRecognitionProvider, UniqueRef<MediaRecorderProvider>&& mediaRecorderProvider, Ref<BroadcastChannelRegistry>&& broadcastChannelRegistry, Ref<PermissionController>&& permissionController, UniqueRef<StorageProvider>&& storageProvider, UniqueRef<ModelPlayerProvider>&& modelPlayerProvider) 68 67 : sessionID(sessionID) 69 68 , editorClient(WTFMove(editorClient)) … … 77 76 , userContentProvider(WTFMove(userContentProvider)) 78 77 , broadcastChannelRegistry(WTFMove(broadcastChannelRegistry)) 79 , webLockRegistry(WTFMove(webLockRegistry))80 78 , speechRecognitionProvider(WTFMove(speechRecognitionProvider)) 81 79 , mediaRecorderProvider(WTFMove(mediaRecorderProvider)) -
trunk/Source/WebCore/page/PageConfiguration.h
r293279 r293329 81 81 class VisitedLinkStore; 82 82 class WebGLStateTracker; 83 class WebLockRegistry;84 83 85 84 class PageConfiguration { 86 85 WTF_MAKE_NONCOPYABLE(PageConfiguration); WTF_MAKE_FAST_ALLOCATED; 87 86 public: 88 WEBCORE_EXPORT PageConfiguration(PAL::SessionID, UniqueRef<EditorClient>&&, Ref<SocketProvider>&&, UniqueRef<LibWebRTCProvider>&&, Ref<CacheStorageProvider>&&, Ref<UserContentProvider>&&, Ref<BackForwardClient>&&, Ref<CookieJar>&&, UniqueRef<ProgressTrackerClient>&&, UniqueRef<FrameLoaderClient>&&, UniqueRef<SpeechRecognitionProvider>&&, UniqueRef<MediaRecorderProvider>&&, Ref<BroadcastChannelRegistry>&&, Ref< WebLockRegistry>&&, Ref<PermissionController>&&, UniqueRef<StorageProvider>&&, UniqueRef<ModelPlayerProvider>&&);87 WEBCORE_EXPORT PageConfiguration(PAL::SessionID, UniqueRef<EditorClient>&&, Ref<SocketProvider>&&, UniqueRef<LibWebRTCProvider>&&, Ref<CacheStorageProvider>&&, Ref<UserContentProvider>&&, Ref<BackForwardClient>&&, Ref<CookieJar>&&, UniqueRef<ProgressTrackerClient>&&, UniqueRef<FrameLoaderClient>&&, UniqueRef<SpeechRecognitionProvider>&&, UniqueRef<MediaRecorderProvider>&&, Ref<BroadcastChannelRegistry>&&, Ref<PermissionController>&&, UniqueRef<StorageProvider>&&, UniqueRef<ModelPlayerProvider>&&); 89 88 WEBCORE_EXPORT ~PageConfiguration(); 90 89 PageConfiguration(PageConfiguration&&); … … 136 135 RefPtr<VisitedLinkStore> visitedLinkStore; 137 136 Ref<BroadcastChannelRegistry> broadcastChannelRegistry; 138 Ref<WebLockRegistry> webLockRegistry;139 137 140 138 #if ENABLE(DEVICE_ORIENTATION) && PLATFORM(IOS_FAMILY) -
trunk/Source/WebCore/workers/Worker.cpp
r292861 r293329 206 206 return; 207 207 208 auto sessionID = context->sessionID(); 209 if (!sessionID) 210 return; 211 208 212 if (m_scriptLoader->failed()) { 209 213 queueTaskToDispatchEvent(*this, TaskSource::DOMManipulation, Event::create(eventNames().errorEvent, Event::CanBubble::No, Event::IsCancelable::Yes)); … … 223 227 context->userAgent(m_scriptLoader->lastRequestURL()) 224 228 }; 225 m_contextProxy.startWorkerGlobalScope(m_scriptLoader->lastRequestURL(), m_options.name, WTFMove(initializationData), m_scriptLoader->script(), contentSecurityPolicyResponseHeaders, m_shouldBypassMainWorldContentSecurityPolicy, m_scriptLoader->crossOriginEmbedderPolicy(), m_workerCreationTime, referrerPolicy, m_options.type, m_options.credentials, m_runtimeFlags);229 m_contextProxy.startWorkerGlobalScope(m_scriptLoader->lastRequestURL(), *sessionID, m_options.name, WTFMove(initializationData), m_scriptLoader->script(), contentSecurityPolicyResponseHeaders, m_shouldBypassMainWorldContentSecurityPolicy, m_scriptLoader->crossOriginEmbedderPolicy(), m_workerCreationTime, referrerPolicy, m_options.type, m_options.credentials, m_runtimeFlags); 226 230 InspectorInstrumentation::scriptImported(*context, m_scriptLoader->identifier(), m_scriptLoader->script().toString()); 227 231 } -
trunk/Source/WebCore/workers/WorkerGlobalScope.cpp
r292949 r293329 94 94 95 95 WorkerGlobalScope::WorkerGlobalScope(WorkerThreadType type, const WorkerParameters& params, Ref<SecurityOrigin>&& origin, WorkerThread& thread, Ref<SecurityOrigin>&& topOrigin, IDBClient::IDBConnectionProxy* connectionProxy, SocketProvider* socketProvider) 96 : WorkerOrWorkletGlobalScope(type, isMainThread() ? Ref { commonVM() } : JSC::VM::create(), &thread, params.clientIdentifier)96 : WorkerOrWorkletGlobalScope(type, params.sessionID, isMainThread() ? Ref { commonVM() } : JSC::VM::create(), &thread, params.clientIdentifier) 97 97 , m_url(params.scriptURL) 98 98 , m_inspectorIdentifier(params.inspectorIdentifier) -
trunk/Source/WebCore/workers/WorkerGlobalScopeProxy.h
r292861 r293329 53 53 static WorkerGlobalScopeProxy& create(Worker&); 54 54 55 virtual void startWorkerGlobalScope(const URL& scriptURL, const String& name, WorkerInitializationData&&, const ScriptBuffer& sourceCode, const ContentSecurityPolicyResponseHeaders&, bool shouldBypassMainWorldContentSecurityPolicy, const CrossOriginEmbedderPolicy&, MonotonicTime timeOrigin, ReferrerPolicy, WorkerType, FetchRequestCredentials, JSC::RuntimeFlags) = 0;55 virtual void startWorkerGlobalScope(const URL& scriptURL, PAL::SessionID, const String& name, WorkerInitializationData&&, const ScriptBuffer& sourceCode, const ContentSecurityPolicyResponseHeaders&, bool shouldBypassMainWorldContentSecurityPolicy, const CrossOriginEmbedderPolicy&, MonotonicTime timeOrigin, ReferrerPolicy, WorkerType, FetchRequestCredentials, JSC::RuntimeFlags) = 0; 56 56 virtual void terminateWorkerGlobalScope() = 0; 57 57 virtual void postMessageToWorkerGlobalScope(MessageWithMessagePorts&&) = 0; -
trunk/Source/WebCore/workers/WorkerMessagingProxy.cpp
r292861 r293329 79 79 } 80 80 81 void WorkerMessagingProxy::startWorkerGlobalScope(const URL& scriptURL, const String& name, WorkerInitializationData&& initializationData, const ScriptBuffer& sourceCode, const ContentSecurityPolicyResponseHeaders& contentSecurityPolicyResponseHeaders, bool shouldBypassMainWorldContentSecurityPolicy, const CrossOriginEmbedderPolicy& crossOriginEmbedderPolicy, MonotonicTime timeOrigin, ReferrerPolicy referrerPolicy, WorkerType workerType, FetchRequestCredentials credentials, JSC::RuntimeFlags runtimeFlags)81 void WorkerMessagingProxy::startWorkerGlobalScope(const URL& scriptURL, PAL::SessionID sessionID, const String& name, WorkerInitializationData&& initializationData, const ScriptBuffer& sourceCode, const ContentSecurityPolicyResponseHeaders& contentSecurityPolicyResponseHeaders, bool shouldBypassMainWorldContentSecurityPolicy, const CrossOriginEmbedderPolicy& crossOriginEmbedderPolicy, MonotonicTime timeOrigin, ReferrerPolicy referrerPolicy, WorkerType workerType, FetchRequestCredentials credentials, JSC::RuntimeFlags runtimeFlags) 82 82 { 83 83 // FIXME: This need to be revisited when we support nested worker one day … … 91 91 SocketProvider* socketProvider = document.socketProvider(); 92 92 93 WorkerParameters params { scriptURL, name, identifier, WTFMove(initializationData.userAgent), platformStrategies()->loaderStrategy()->isOnLine(), contentSecurityPolicyResponseHeaders, shouldBypassMainWorldContentSecurityPolicy, crossOriginEmbedderPolicy, timeOrigin, referrerPolicy, workerType, credentials, document.settingsValues(), WorkerThreadMode::CreateNewThread, { },93 WorkerParameters params { scriptURL, name, identifier, WTFMove(initializationData.userAgent), platformStrategies()->loaderStrategy()->isOnLine(), contentSecurityPolicyResponseHeaders, shouldBypassMainWorldContentSecurityPolicy, crossOriginEmbedderPolicy, timeOrigin, referrerPolicy, workerType, credentials, document.settingsValues(), WorkerThreadMode::CreateNewThread, sessionID, 94 94 #if ENABLE(SERVICE_WORKER) 95 95 WTFMove(initializationData.serviceWorkerData), -
trunk/Source/WebCore/workers/WorkerMessagingProxy.h
r292861 r293329 51 51 // Implementations of WorkerGlobalScopeProxy. 52 52 // (Only use these functions in the worker object thread.) 53 void startWorkerGlobalScope(const URL& scriptURL, const String& name, WorkerInitializationData&&, const ScriptBuffer& sourceCode, const ContentSecurityPolicyResponseHeaders&, bool shouldBypassMainWorldContentSecurityPolicy, const CrossOriginEmbedderPolicy&, MonotonicTime timeOrigin, ReferrerPolicy, WorkerType, FetchRequestCredentials, JSC::RuntimeFlags) final;53 void startWorkerGlobalScope(const URL& scriptURL, PAL::SessionID, const String& name, WorkerInitializationData&&, const ScriptBuffer& sourceCode, const ContentSecurityPolicyResponseHeaders&, bool shouldBypassMainWorldContentSecurityPolicy, const CrossOriginEmbedderPolicy&, MonotonicTime timeOrigin, ReferrerPolicy, WorkerType, FetchRequestCredentials, JSC::RuntimeFlags) final; 54 54 void terminateWorkerGlobalScope() final; 55 55 void postMessageToWorkerGlobalScope(MessageWithMessagePorts&&) final; -
trunk/Source/WebCore/workers/WorkerOrWorkletGlobalScope.cpp
r292861 r293329 41 41 WTF_MAKE_ISO_ALLOCATED_IMPL(WorkerOrWorkletGlobalScope); 42 42 43 WorkerOrWorkletGlobalScope::WorkerOrWorkletGlobalScope(WorkerThreadType type, Ref<JSC::VM>&& vm, WorkerOrWorkletThread* thread, ScriptExecutionContextIdentifier contextIdentifier)43 WorkerOrWorkletGlobalScope::WorkerOrWorkletGlobalScope(WorkerThreadType type, PAL::SessionID sessionID, Ref<JSC::VM>&& vm, WorkerOrWorkletThread* thread, ScriptExecutionContextIdentifier contextIdentifier) 44 44 : ScriptExecutionContext(contextIdentifier) 45 45 , m_script(makeUnique<WorkerOrWorkletScriptController>(type, WTFMove(vm), this)) … … 47 47 , m_thread(thread) 48 48 , m_inspectorController(makeUnique<WorkerInspectorController>(*this)) 49 , m_sessionID(sessionID) 49 50 { 50 51 } -
trunk/Source/WebCore/workers/WorkerOrWorkletGlobalScope.h
r292861 r293329 65 65 bool isContextThread() const final; 66 66 void postTask(Task&&) final; // Executes the task on context's thread asynchronously. 67 std::optional<PAL::SessionID> sessionID() const final { return m_sessionID; } 67 68 68 69 // Defined specifcially for WorkerOrWorkletGlobalScope for cooperation with … … 81 82 82 83 protected: 83 WorkerOrWorkletGlobalScope(WorkerThreadType, Ref<JSC::VM>&&, WorkerOrWorkletThread*, ScriptExecutionContextIdentifier = { });84 WorkerOrWorkletGlobalScope(WorkerThreadType, PAL::SessionID, Ref<JSC::VM>&&, WorkerOrWorkletThread*, ScriptExecutionContextIdentifier = { }); 84 85 85 86 // ScriptExecutionContext. … … 109 110 std::unique_ptr<EventLoopTaskGroup> m_defaultTaskGroup; 110 111 std::unique_ptr<WorkerInspectorController> m_inspectorController; 112 PAL::SessionID m_sessionID; 111 113 bool m_isClosing { false }; 112 114 }; -
trunk/Source/WebCore/workers/WorkerThread.h
r292861 r293329 78 78 Settings::Values settingsValues; 79 79 WorkerThreadMode workerThreadMode { WorkerThreadMode::CreateNewThread }; 80 std::optional<PAL::SessionID> sessionID { std::nullopt };80 PAL::SessionID sessionID; 81 81 #if ENABLE(SERVICE_WORKER) 82 82 std::optional<ServiceWorkerData> serviceWorkerData; -
trunk/Source/WebCore/workers/service/ServiceWorkerGlobalScope.cpp
r292110 r293329 53 53 WTF_MAKE_ISO_ALLOCATED_IMPL(ServiceWorkerGlobalScope); 54 54 55 Ref<ServiceWorkerGlobalScope> ServiceWorkerGlobalScope::create(ServiceWorkerContextData&& contextData, ServiceWorkerData&& workerData, const WorkerParameters& params, Ref<SecurityOrigin>&& origin, ServiceWorkerThread& thread, Ref<SecurityOrigin>&& topOrigin, IDBClient::IDBConnectionProxy* connectionProxy, SocketProvider* socketProvider, std::unique_ptr<NotificationClient>&& notificationClient , PAL::SessionID sessionID)56 { 57 auto scope = adoptRef(*new ServiceWorkerGlobalScope { WTFMove(contextData), WTFMove(workerData), params, WTFMove(origin), thread, WTFMove(topOrigin), connectionProxy, socketProvider, WTFMove(notificationClient) , sessionID});55 Ref<ServiceWorkerGlobalScope> ServiceWorkerGlobalScope::create(ServiceWorkerContextData&& contextData, ServiceWorkerData&& workerData, const WorkerParameters& params, Ref<SecurityOrigin>&& origin, ServiceWorkerThread& thread, Ref<SecurityOrigin>&& topOrigin, IDBClient::IDBConnectionProxy* connectionProxy, SocketProvider* socketProvider, std::unique_ptr<NotificationClient>&& notificationClient) 56 { 57 auto scope = adoptRef(*new ServiceWorkerGlobalScope { WTFMove(contextData), WTFMove(workerData), params, WTFMove(origin), thread, WTFMove(topOrigin), connectionProxy, socketProvider, WTFMove(notificationClient) }); 58 58 scope->applyContentSecurityPolicyResponseHeaders(params.contentSecurityPolicyResponseHeaders); 59 59 scope->notifyServiceWorkerPageOfCreationIfNecessary(); … … 61 61 } 62 62 63 ServiceWorkerGlobalScope::ServiceWorkerGlobalScope(ServiceWorkerContextData&& contextData, ServiceWorkerData&& workerData, const WorkerParameters& params, Ref<SecurityOrigin>&& origin, ServiceWorkerThread& thread, Ref<SecurityOrigin>&& topOrigin, IDBClient::IDBConnectionProxy* connectionProxy, SocketProvider* socketProvider, std::unique_ptr<NotificationClient>&& notificationClient , PAL::SessionID sessionID)63 ServiceWorkerGlobalScope::ServiceWorkerGlobalScope(ServiceWorkerContextData&& contextData, ServiceWorkerData&& workerData, const WorkerParameters& params, Ref<SecurityOrigin>&& origin, ServiceWorkerThread& thread, Ref<SecurityOrigin>&& topOrigin, IDBClient::IDBConnectionProxy* connectionProxy, SocketProvider* socketProvider, std::unique_ptr<NotificationClient>&& notificationClient) 64 64 : WorkerGlobalScope(WorkerThreadType::ServiceWorker, params, WTFMove(origin), thread, WTFMove(topOrigin), connectionProxy, socketProvider) 65 65 , m_contextData(WTFMove(contextData)) … … 67 67 , m_serviceWorker(ServiceWorker::getOrCreate(*this, WTFMove(workerData))) 68 68 , m_clients(ServiceWorkerClients::create()) 69 , m_sessionID(sessionID)70 69 , m_notificationClient(WTFMove(notificationClient)) 71 70 , m_userGestureTimer(*this, &ServiceWorkerGlobalScope::resetUserGesture) -
trunk/Source/WebCore/workers/service/ServiceWorkerGlobalScope.h
r292110 r293329 52 52 WTF_MAKE_ISO_ALLOCATED(ServiceWorkerGlobalScope); 53 53 public: 54 static Ref<ServiceWorkerGlobalScope> create(ServiceWorkerContextData&&, ServiceWorkerData&&, const WorkerParameters&, Ref<SecurityOrigin>&&, ServiceWorkerThread&, Ref<SecurityOrigin>&& topOrigin, IDBClient::IDBConnectionProxy*, SocketProvider*, std::unique_ptr<NotificationClient>&& , PAL::SessionID);54 static Ref<ServiceWorkerGlobalScope> create(ServiceWorkerContextData&&, ServiceWorkerData&&, const WorkerParameters&, Ref<SecurityOrigin>&&, ServiceWorkerThread&, Ref<SecurityOrigin>&& topOrigin, IDBClient::IDBConnectionProxy*, SocketProvider*, std::unique_ptr<NotificationClient>&&); 55 55 56 56 ~ServiceWorkerGlobalScope(); … … 91 91 92 92 private: 93 ServiceWorkerGlobalScope(ServiceWorkerContextData&&, ServiceWorkerData&&, const WorkerParameters&, Ref<SecurityOrigin>&&, ServiceWorkerThread&, Ref<SecurityOrigin>&& topOrigin, IDBClient::IDBConnectionProxy*, SocketProvider*, std::unique_ptr<NotificationClient>&& , PAL::SessionID);93 ServiceWorkerGlobalScope(ServiceWorkerContextData&&, ServiceWorkerData&&, const WorkerParameters&, Ref<SecurityOrigin>&&, ServiceWorkerThread&, Ref<SecurityOrigin>&& topOrigin, IDBClient::IDBConnectionProxy*, SocketProvider*, std::unique_ptr<NotificationClient>&&); 94 94 void notifyServiceWorkerPageOfCreationIfNecessary(); 95 95 … … 98 98 99 99 NotificationClient* notificationClient() final { return m_notificationClient.get(); } 100 101 std::optional<PAL::SessionID> sessionID() const final { return m_sessionID; }102 100 103 101 void resetUserGesture() { m_isProcessingUserGesture = false; } … … 111 109 uint64_t m_lastRequestIdentifier { 0 }; 112 110 HashMap<uint64_t, RefPtr<DeferredPromise>> m_pendingSkipWaitingPromises; 113 PAL::SessionID m_sessionID;114 111 std::unique_ptr<NotificationClient> m_notificationClient; 115 112 bool m_hasPendingSilentPushEvent { false }; -
trunk/Source/WebCore/workers/service/context/ServiceWorkerThread.cpp
r293285 r293329 123 123 { 124 124 RELEASE_ASSERT(m_contextData); 125 RELEASE_ASSERT(params.sessionID); 126 return ServiceWorkerGlobalScope::create(*std::exchange(m_contextData, std::nullopt), *std::exchange(m_workerData, std::nullopt), params, WTFMove(origin), *this, WTFMove(topOrigin), idbConnectionProxy(), socketProvider(), WTFMove(m_notificationClient), *params.sessionID); 125 return ServiceWorkerGlobalScope::create(*std::exchange(m_contextData, std::nullopt), *std::exchange(m_workerData, std::nullopt), params, WTFMove(origin), *this, WTFMove(topOrigin), idbConnectionProxy(), socketProvider(), WTFMove(m_notificationClient)); 127 126 } 128 127 -
trunk/Source/WebCore/workers/shared/context/SharedWorkerThreadProxy.cpp
r292861 r293329 58 58 static WorkerParameters generateWorkerParameters(const WorkerFetchResult& workerFetchResult, WorkerOptions&& workerOptions, const String& userAgent, Document& document) 59 59 { 60 RELEASE_ASSERT(document.sessionID()); 60 61 return { 61 62 workerFetchResult.lastRequestURL, … … 73 74 document.settingsValues(), 74 75 WorkerThreadMode::CreateNewThread, 75 { },76 *document.sessionID(), 76 77 #if ENABLE(SERVICE_WORKER) 77 78 { }, -
trunk/Source/WebCore/worklets/Worklet.cpp
r291003 r293329 60 60 { 61 61 auto* document = this->document(); 62 if (!document ) {62 if (!document || !document->page()) { 63 63 promise.reject(Exception { InvalidStateError, "This frame is detached"_s }); 64 64 return; -
trunk/Source/WebCore/worklets/WorkletGlobalScope.cpp
r292677 r293329 51 51 52 52 WorkletGlobalScope::WorkletGlobalScope(WorkerOrWorkletThread& thread, Ref<JSC::VM>&& vm, const WorkletParameters& parameters) 53 : WorkerOrWorkletGlobalScope(WorkerThreadType::Worklet, WTFMove(vm), &thread)53 : WorkerOrWorkletGlobalScope(WorkerThreadType::Worklet, parameters.sessionID, WTFMove(vm), &thread) 54 54 , m_topOrigin(SecurityOrigin::createUnique()) 55 55 , m_url(parameters.windowURL) … … 65 65 66 66 WorkletGlobalScope::WorkletGlobalScope(Document& document, Ref<JSC::VM>&& vm, ScriptSourceCode&& code) 67 : WorkerOrWorkletGlobalScope(WorkerThreadType::Worklet, WTFMove(vm), nullptr)67 : WorkerOrWorkletGlobalScope(WorkerThreadType::Worklet, *document.sessionID(), WTFMove(vm), nullptr) 68 68 , m_document(document) 69 69 , m_topOrigin(SecurityOrigin::createUnique()) -
trunk/Source/WebCore/worklets/WorkletParameters.h
r290901 r293329 37 37 float sampleRate; 38 38 String identifier; 39 PAL::SessionID sessionID; 39 40 Settings::Values settingsValues; 40 41 bool isAudioContextRealTime; 41 42 42 WorkletParameters isolatedCopy() const & { return { windowURL.isolatedCopy(), jsRuntimeFlags, sampleRate, identifier.isolatedCopy(), se ttingsValues.isolatedCopy(), isAudioContextRealTime }; }43 WorkletParameters isolatedCopy() && { return { WTFMove(windowURL).isolatedCopy(), jsRuntimeFlags, sampleRate, WTFMove(identifier).isolatedCopy(), WTFMove(settingsValues).isolatedCopy(), isAudioContextRealTime }; }43 WorkletParameters isolatedCopy() const & { return { windowURL.isolatedCopy(), jsRuntimeFlags, sampleRate, identifier.isolatedCopy(), sessionID, settingsValues.isolatedCopy(), isAudioContextRealTime }; } 44 WorkletParameters isolatedCopy() && { return { WTFMove(windowURL).isolatedCopy(), jsRuntimeFlags, sampleRate, WTFMove(identifier).isolatedCopy(), sessionID, WTFMove(settingsValues).isolatedCopy(), isAudioContextRealTime }; } 44 45 }; 45 46 -
trunk/Source/WebKit/UIProcess/WebLockRegistryProxy.cpp
r286604 r293329 56 56 m_hasEverRequestedLocks = true; 57 57 58 m_process.websiteDataStore().webLockRegistry().requestLock( WTFMove(clientOrigin), lockIdentifier, clientID, WTFMove(name), lockMode, steal, ifAvailable, [weakThis = WeakPtr { *this }, lockIdentifier, clientID](bool success) {58 m_process.websiteDataStore().webLockRegistry().requestLock(m_process.sessionID(), WTFMove(clientOrigin), lockIdentifier, clientID, WTFMove(name), lockMode, steal, ifAvailable, [weakThis = WeakPtr { *this }, lockIdentifier, clientID](bool success) { 59 59 if (weakThis) 60 60 weakThis->m_process.send(Messages::RemoteWebLockRegistry::DidCompleteLockRequest(lockIdentifier, clientID, success), 0); … … 69 69 MESSAGE_CHECK(lockIdentifier.processIdentifier() == m_process.coreProcessIdentifier()); 70 70 MESSAGE_CHECK(clientID.processIdentifier() == m_process.coreProcessIdentifier()); 71 m_process.websiteDataStore().webLockRegistry().releaseLock( WTFMove(clientOrigin), lockIdentifier, clientID, WTFMove(name));71 m_process.websiteDataStore().webLockRegistry().releaseLock(m_process.sessionID(), WTFMove(clientOrigin), lockIdentifier, clientID, WTFMove(name)); 72 72 } 73 73 … … 76 76 MESSAGE_CHECK(lockIdentifier.processIdentifier() == m_process.coreProcessIdentifier()); 77 77 MESSAGE_CHECK(clientID.processIdentifier() == m_process.coreProcessIdentifier()); 78 m_process.websiteDataStore().webLockRegistry().abortLockRequest( WTFMove(clientOrigin), lockIdentifier, clientID, WTFMove(name), WTFMove(completionHandler));78 m_process.websiteDataStore().webLockRegistry().abortLockRequest(m_process.sessionID(), WTFMove(clientOrigin), lockIdentifier, clientID, WTFMove(name), WTFMove(completionHandler)); 79 79 } 80 80 81 81 void WebLockRegistryProxy::snapshot(WebCore::ClientOrigin&& clientOrigin, CompletionHandler<void(WebCore::WebLockManagerSnapshot&&)>&& completionHandler) 82 82 { 83 m_process.websiteDataStore().webLockRegistry().snapshot( WTFMove(clientOrigin), WTFMove(completionHandler));83 m_process.websiteDataStore().webLockRegistry().snapshot(m_process.sessionID(), WTFMove(clientOrigin), WTFMove(completionHandler)); 84 84 } 85 85 … … 87 87 { 88 88 MESSAGE_CHECK(clientID.processIdentifier() == m_process.coreProcessIdentifier()); 89 m_process.websiteDataStore().webLockRegistry().clientIsGoingAway( WTFMove(clientOrigin), clientID);89 m_process.websiteDataStore().webLockRegistry().clientIsGoingAway(m_process.sessionID(), WTFMove(clientOrigin), clientID); 90 90 } 91 91 -
trunk/Source/WebKit/WebProcess/Storage/WebSWContextManagerConnection.cpp
r292869 r293329 126 126 pageConfiguration.socketProvider = WebSocketProvider::create(m_webPageProxyID); 127 127 pageConfiguration.broadcastChannelRegistry = WebProcess::singleton().broadcastChannelRegistry(); 128 pageConfiguration.webLockRegistry = WebProcess::singleton().webLockRegistry();129 128 pageConfiguration.userContentProvider = m_userContentController; 130 129 #if ENABLE(WEB_RTC) -
trunk/Source/WebKit/WebProcess/Storage/WebSharedWorkerContextManagerConnection.cpp
r292869 r293329 98 98 pageConfiguration.socketProvider = WebSocketProvider::create(m_webPageProxyID); 99 99 pageConfiguration.broadcastChannelRegistry = WebProcess::singleton().broadcastChannelRegistry(); 100 pageConfiguration.webLockRegistry = WebProcess::singleton().webLockRegistry();101 100 pageConfiguration.userContentProvider = m_userContentController; 102 101 #if ENABLE(WEB_RTC) -
trunk/Source/WebKit/WebProcess/WebCoreSupport/RemoteWebLockRegistry.cpp
r286455 r293329 58 58 } 59 59 60 void RemoteWebLockRegistry::requestLock( const WebCore::ClientOrigin& clientOrigin, WebCore::WebLockIdentifier lockIdentifier, WebCore::ScriptExecutionContextIdentifier clientID, const String& name, WebCore::WebLockMode lockMode, bool steal, bool ifAvailable, Function<void(bool)>&& grantedHandler, Function<void()>&& lockStolenHandler)60 void RemoteWebLockRegistry::requestLock(PAL::SessionID sessionID, const WebCore::ClientOrigin& clientOrigin, WebCore::WebLockIdentifier lockIdentifier, WebCore::ScriptExecutionContextIdentifier clientID, const String& name, WebCore::WebLockMode lockMode, bool steal, bool ifAvailable, Function<void(bool)>&& grantedHandler, Function<void()>&& lockStolenHandler) 61 61 { 62 ASSERT_UNUSED(sessionID, WebProcess::singleton().sessionID()); 62 63 LockRequest request { { WTFMove(lockStolenHandler) }, WTFMove(grantedHandler) }; 63 64 auto& snapshot = m_locksSnapshotPerClient.ensure(clientID, [] { return LocksSnapshot { }; }).iterator->value; … … 67 68 } 68 69 69 void RemoteWebLockRegistry::releaseLock( const WebCore::ClientOrigin& clientOrigin, WebCore::WebLockIdentifier lockIdentifier, WebCore::ScriptExecutionContextIdentifier clientID, const String& name)70 void RemoteWebLockRegistry::releaseLock(PAL::SessionID sessionID, const WebCore::ClientOrigin& clientOrigin, WebCore::WebLockIdentifier lockIdentifier, WebCore::ScriptExecutionContextIdentifier clientID, const String& name) 70 71 { 72 ASSERT_UNUSED(sessionID, WebProcess::singleton().sessionID()); 71 73 auto it = m_locksSnapshotPerClient.find(clientID); 72 74 if (it != m_locksSnapshotPerClient.end()) { … … 79 81 } 80 82 81 void RemoteWebLockRegistry::abortLockRequest( const WebCore::ClientOrigin& clientOrigin, WebCore::WebLockIdentifier lockIdentifier, WebCore::ScriptExecutionContextIdentifier clientID, const String& name, CompletionHandler<void(bool)>&& completionHandler)83 void RemoteWebLockRegistry::abortLockRequest(PAL::SessionID sessionID, const WebCore::ClientOrigin& clientOrigin, WebCore::WebLockIdentifier lockIdentifier, WebCore::ScriptExecutionContextIdentifier clientID, const String& name, CompletionHandler<void(bool)>&& completionHandler) 82 84 { 85 ASSERT_UNUSED(sessionID, WebProcess::singleton().sessionID()); 83 86 WebProcess::singleton().sendWithAsyncReply(Messages::WebLockRegistryProxy::AbortLockRequest(clientOrigin, lockIdentifier, clientID, name), [weakThis = WeakPtr { *this }, lockIdentifier, clientID, completionHandler = WTFMove(completionHandler)](bool didAbort) mutable { 84 87 if (weakThis && didAbort) { … … 94 97 } 95 98 96 void RemoteWebLockRegistry::snapshot( const WebCore::ClientOrigin& clientOrigin, CompletionHandler<void(WebCore::WebLockManagerSnapshot&&)>&& completionHandler)99 void RemoteWebLockRegistry::snapshot(PAL::SessionID sessionID, const WebCore::ClientOrigin& clientOrigin, CompletionHandler<void(WebCore::WebLockManagerSnapshot&&)>&& completionHandler) 97 100 { 101 ASSERT_UNUSED(sessionID, WebProcess::singleton().sessionID()); 98 102 WebProcess::singleton().sendWithAsyncReply(Messages::WebLockRegistryProxy::Snapshot(clientOrigin), WTFMove(completionHandler), 0); 99 103 } 100 104 101 void RemoteWebLockRegistry::clientIsGoingAway( const WebCore::ClientOrigin& clientOrigin, WebCore::ScriptExecutionContextIdentifier clientID)105 void RemoteWebLockRegistry::clientIsGoingAway(PAL::SessionID sessionID, const WebCore::ClientOrigin& clientOrigin, WebCore::ScriptExecutionContextIdentifier clientID) 102 106 { 107 ASSERT_UNUSED(sessionID, WebProcess::singleton().sessionID()); 103 108 m_locksSnapshotPerClient.remove(clientID); 104 109 WebProcess::singleton().send(Messages::WebLockRegistryProxy::ClientIsGoingAway(clientOrigin, clientID), 0); -
trunk/Source/WebKit/WebProcess/WebCoreSupport/RemoteWebLockRegistry.h
r286455 r293329 42 42 43 43 // WebCore::WebLockRegistry. 44 void requestLock( const WebCore::ClientOrigin&, WebCore::WebLockIdentifier, WebCore::ScriptExecutionContextIdentifier, const String& name, WebCore::WebLockMode, bool steal, bool ifAvailable, Function<void(bool)>&& grantedHandler, Function<void()>&& lockStolenHandler) final;45 void releaseLock( const WebCore::ClientOrigin&, WebCore::WebLockIdentifier, WebCore::ScriptExecutionContextIdentifier, const String& name) final;46 void abortLockRequest( const WebCore::ClientOrigin&, WebCore::WebLockIdentifier, WebCore::ScriptExecutionContextIdentifier, const String& name, CompletionHandler<void(bool)>&&) final;47 void snapshot( const WebCore::ClientOrigin&, CompletionHandler<void(WebCore::WebLockManagerSnapshot&&)>&&) final;48 void clientIsGoingAway( const WebCore::ClientOrigin&, WebCore::ScriptExecutionContextIdentifier) final;44 void requestLock(PAL::SessionID, const WebCore::ClientOrigin&, WebCore::WebLockIdentifier, WebCore::ScriptExecutionContextIdentifier, const String& name, WebCore::WebLockMode, bool steal, bool ifAvailable, Function<void(bool)>&& grantedHandler, Function<void()>&& lockStolenHandler) final; 45 void releaseLock(PAL::SessionID, const WebCore::ClientOrigin&, WebCore::WebLockIdentifier, WebCore::ScriptExecutionContextIdentifier, const String& name) final; 46 void abortLockRequest(PAL::SessionID, const WebCore::ClientOrigin&, WebCore::WebLockIdentifier, WebCore::ScriptExecutionContextIdentifier, const String& name, CompletionHandler<void(bool)>&&) final; 47 void snapshot(PAL::SessionID, const WebCore::ClientOrigin&, CompletionHandler<void(WebCore::WebLockManagerSnapshot&&)>&&) final; 48 void clientIsGoingAway(PAL::SessionID, const WebCore::ClientOrigin&, WebCore::ScriptExecutionContextIdentifier) final; 49 49 50 50 // IPC::MessageReceiver. -
trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp
r293137 r293329 59 59 #include "RemoteWebInspectorUI.h" 60 60 #include "RemoteWebInspectorUIMessages.h" 61 #include "RemoteWebLockRegistry.h"62 61 #include "SessionState.h" 63 62 #include "SessionStateConversion.h" … … 597 596 makeUniqueRef<MediaRecorderProvider>(*this), 598 597 WebProcess::singleton().broadcastChannelRegistry(), 599 WebProcess::singleton().webLockRegistry(),600 598 WebPermissionController::create(*this), 601 599 makeUniqueRef<WebStorageProvider>(), -
trunk/Source/WebKit/WebProcess/WebProcess.cpp
r293266 r293329 294 294 , m_cacheStorageProvider(WebCacheStorageProvider::create()) 295 295 , m_broadcastChannelRegistry(WebBroadcastChannelRegistry::create()) 296 , m_webLockRegistry(RemoteWebLockRegistry::create(*this))297 296 , m_cookieJar(WebCookieJar::create()) 298 297 , m_dnsPrefetchHystereris([this](PAL::HysteresisState state) { if (state == PAL::HysteresisState::Stopped) m_dnsPrefetchedHosts.clear(); }) … … 354 353 WebMockContentFilterManager::singleton().startObservingSettings(); 355 354 #endif 355 356 WebCore::WebLockRegistry::setSharedRegistry(RemoteWebLockRegistry::create(*this)); 356 357 } 357 358 -
trunk/Source/WebKit/WebProcess/WebProcess.h
r293266 r293329 128 128 class RemoteLegacyCDMFactory; 129 129 class RemoteMediaEngineConfigurationFactory; 130 class RemoteWebLockRegistry;131 130 class StorageAreaMap; 132 131 class UserData; … … 336 335 WebCacheStorageProvider& cacheStorageProvider() { return m_cacheStorageProvider.get(); } 337 336 WebBroadcastChannelRegistry& broadcastChannelRegistry() { return m_broadcastChannelRegistry.get(); } 338 RemoteWebLockRegistry& webLockRegistry() { return m_webLockRegistry.get(); }339 337 WebCookieJar& cookieJar() { return m_cookieJar.get(); } 340 338 WebSocketChannelManager& webSocketChannelManager() { return m_webSocketChannelManager; } … … 668 666 Ref<WebCacheStorageProvider> m_cacheStorageProvider; 669 667 Ref<WebBroadcastChannelRegistry> m_broadcastChannelRegistry; 670 Ref<RemoteWebLockRegistry> m_webLockRegistry;671 668 Ref<WebCookieJar> m_cookieJar; 672 669 WebSocketChannelManager m_webSocketChannelManager; -
trunk/Source/WebKitLegacy/mac/WebView/WebView.mm
r292929 r293329 232 232 #import <WebCore/WebCoreObjCExtras.h> 233 233 #import <WebCore/WebCoreView.h> 234 #import <WebCore/WebLockRegistry.h>235 234 #import <WebCore/WebViewVisualIdentificationOverlay.h> 236 235 #import <WebCore/Widget.h> … … 1441 1440 #endif 1442 1441 1443 static Ref<WebCore::LocalWebLockRegistry> getOrCreateWebLockRegistry(bool isPrivateBrowsingEnabled)1444 {1445 static NeverDestroyed<WeakPtr<WebCore::LocalWebLockRegistry>> defaultRegistry;1446 static NeverDestroyed<WeakPtr<WebCore::LocalWebLockRegistry>> privateRegistry;1447 auto& existingRegistry = isPrivateBrowsingEnabled ? privateRegistry : defaultRegistry;1448 if (existingRegistry.get())1449 return *existingRegistry.get();1450 auto registry = WebCore::LocalWebLockRegistry::create();1451 existingRegistry.get() = registry;1452 return registry;1453 }1454 1455 1442 - (void)_commonInitializationWithFrameName:(NSString *)frameName groupName:(NSString *)groupName 1456 1443 { … … 1558 1545 makeUniqueRef<WebCore::MediaRecorderProvider>(), 1559 1546 WebBroadcastChannelRegistry::getOrCreate([[self preferences] privateBrowsingEnabled]), 1560 getOrCreateWebLockRegistry([[self preferences] privateBrowsingEnabled]),1561 1547 WebCore::DummyPermissionController::create(), 1562 1548 makeUniqueRef<WebCore::DummyStorageProvider>(), … … 1840 1826 makeUniqueRef<WebCore::MediaRecorderProvider>(), 1841 1827 WebBroadcastChannelRegistry::getOrCreate([[self preferences] privateBrowsingEnabled]), 1842 getOrCreateWebLockRegistry([[self preferences] privateBrowsingEnabled]),1843 1828 WebCore::DummyPermissionController::create(), 1844 1829 makeUniqueRef<WebCore::DummyStorageProvider>(), -
trunk/Source/WebKitLegacy/win/WebView.cpp
r293205 r293329 174 174 #include <WebCore/WebCoreJITOperations.h> 175 175 #include <WebCore/WebCoreTextRenderer.h> 176 #include <WebCore/WebLockRegistry.h>177 176 #include <WebCore/WindowMessageBroadcaster.h> 178 177 #include <WebCore/WindowsTouch.h> … … 2840 2839 } 2841 2840 2842 static Ref<WebCore::LocalWebLockRegistry> getOrCreateWebLockRegistry()2843 {2844 static NeverDestroyed<WeakPtr<WebCore::LocalWebLockRegistry>> existingRegistry;2845 if (existingRegistry.get())2846 return *existingRegistry.get();2847 auto registry = WebCore::LocalWebLockRegistry::create();2848 existingRegistry.get() = registry;2849 return registry;2850 }2851 2852 2841 HRESULT WebView::initWithFrame(RECT frame, _In_ BSTR frameName, _In_ BSTR groupName) 2853 2842 { … … 2923 2912 makeUniqueRef<MediaRecorderProvider>(), 2924 2913 WebBroadcastChannelRegistry::getOrCreate(false), 2925 getOrCreateWebLockRegistry(),2926 2914 WebCore::DummyPermissionController::create(), 2927 2915 makeUniqueRef<WebCore::DummyStorageProvider>(),
Note: See TracChangeset
for help on using the changeset viewer.