aboutsummaryrefslogtreecommitdiff
path: root/src/bun.js/bindings/ScriptExecutionContext.cpp
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <jarred@jarredsumner.com> 2022-10-23 20:25:18 -0700
committerGravatar GitHub <noreply@github.com> 2022-10-23 20:25:18 -0700
commit76652ac3cad64dbc2fd54e976ce4bad0a37caa03 (patch)
tree179865bc417dc6bf2f224dd310b77b931ee45c73 /src/bun.js/bindings/ScriptExecutionContext.cpp
parent14cec299f5170b8ed35eed28e53b88724b8cc04f (diff)
downloadbun-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.cpp51
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);
+}
+
+}