diff options
author | 2022-10-23 20:25:18 -0700 | |
---|---|---|
committer | 2022-10-23 20:25:18 -0700 | |
commit | 76652ac3cad64dbc2fd54e976ce4bad0a37caa03 (patch) | |
tree | 179865bc417dc6bf2f224dd310b77b931ee45c73 /src/bun.js/bindings/ScriptExecutionContext.cpp | |
parent | 14cec299f5170b8ed35eed28e53b88724b8cc04f (diff) | |
download | bun-76652ac3cad64dbc2fd54e976ce4bad0a37caa03.tar.gz bun-76652ac3cad64dbc2fd54e976ce4bad0a37caa03.tar.zst bun-76652ac3cad64dbc2fd54e976ce4bad0a37caa03.zip |
Add Web Crypto API (#1384)
* Add Web Crypto API
* Duplicate symbols
* Update c_cpp_properties.json
Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
Diffstat (limited to 'src/bun.js/bindings/ScriptExecutionContext.cpp')
-rw-r--r-- | src/bun.js/bindings/ScriptExecutionContext.cpp | 51 |
1 files changed, 50 insertions, 1 deletions
diff --git a/src/bun.js/bindings/ScriptExecutionContext.cpp b/src/bun.js/bindings/ScriptExecutionContext.cpp index 5b8d88871..151c66495 100644 --- a/src/bun.js/bindings/ScriptExecutionContext.cpp +++ b/src/bun.js/bindings/ScriptExecutionContext.cpp @@ -10,6 +10,16 @@ extern "C" void Bun__startLoop(us_loop_t* loop); namespace WebCore { +static unsigned lastUniqueIdentifier = 0; + +static Lock allScriptExecutionContextsMapLock; +static HashMap<ScriptExecutionContextIdentifier, ScriptExecutionContext*>& allScriptExecutionContextsMap() WTF_REQUIRES_LOCK(allScriptExecutionContextsMapLock) +{ + static NeverDestroyed<HashMap<ScriptExecutionContextIdentifier, ScriptExecutionContext*>> contexts; + ASSERT(allScriptExecutionContextsMapLock.isLocked()); + return contexts; +} + template<bool SSL, bool isServer> static void registerHTTPContextForWebSocket(ScriptExecutionContext* script, us_socket_context_t* ctx, us_loop_t* loop) { @@ -39,6 +49,18 @@ us_socket_context_t* ScriptExecutionContext::webSocketContextSSL() return m_ssl_client_websockets_ctx; } +bool ScriptExecutionContext::postTaskTo(ScriptExecutionContextIdentifier identifier, Function<void(ScriptExecutionContext&)>&& task) +{ + Locker locker { allScriptExecutionContextsMapLock }; + auto* context = allScriptExecutionContextsMap().get(identifier); + + if (!context) + return false; + + context->postTaskConcurrently(WTFMove(task)); + return true; +} + us_socket_context_t* ScriptExecutionContext::webSocketContextNoSSL() { if (!m_client_websockets_ctx) { @@ -78,4 +100,31 @@ us_socket_context_t* ScriptExecutionContext::connectedWebSocketKindClientSSL() return registerWebSocketClientContext<true>(this, webSocketContextSSL()); } -}
\ No newline at end of file +void ScriptExecutionContext::regenerateIdentifier() +{ + Locker locker { allScriptExecutionContextsMapLock }; + + ASSERT(allScriptExecutionContextsMap().contains(m_identifier)); + allScriptExecutionContextsMap().remove(m_identifier); + + m_identifier = ++lastUniqueIdentifier; + + ASSERT(!allScriptExecutionContextsMap().contains(m_identifier)); + allScriptExecutionContextsMap().add(m_identifier, this); +} + +void ScriptExecutionContext::addToContextsMap() +{ + Locker locker { allScriptExecutionContextsMapLock }; + ASSERT(!allScriptExecutionContextsMap().contains(m_identifier)); + allScriptExecutionContextsMap().add(m_identifier, this); +} + +void ScriptExecutionContext::removeFromContextsMap() +{ + Locker locker { allScriptExecutionContextsMapLock }; + ASSERT(allScriptExecutionContextsMap().contains(m_identifier)); + allScriptExecutionContextsMap().remove(m_identifier); +} + +} |