summaryrefslogtreecommitdiff
path: root/Source/JavaScriptCore/inspector/InjectedScriptHost.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/JavaScriptCore/inspector/InjectedScriptHost.cpp')
-rw-r--r--Source/JavaScriptCore/inspector/InjectedScriptHost.cpp46
1 files changed, 35 insertions, 11 deletions
diff --git a/Source/JavaScriptCore/inspector/InjectedScriptHost.cpp b/Source/JavaScriptCore/inspector/InjectedScriptHost.cpp
index 657ba19cd..46b3c4e37 100644
--- a/Source/JavaScriptCore/inspector/InjectedScriptHost.cpp
+++ b/Source/JavaScriptCore/inspector/InjectedScriptHost.cpp
@@ -26,7 +26,8 @@
#include "config.h"
#include "InjectedScriptHost.h"
-#include "JSCInlines.h"
+#if ENABLE(INSPECTOR)
+
#include "JSInjectedScriptHost.h"
using namespace JSC;
@@ -37,23 +38,46 @@ InjectedScriptHost::~InjectedScriptHost()
{
}
-JSValue InjectedScriptHost::wrapper(ExecState* exec, JSGlobalObject* globalObject)
+JSValue InjectedScriptHost::jsWrapper(ExecState* exec, JSGlobalObject* globalObject)
{
- JSValue value = m_wrappers.getWrapper(globalObject);
- if (value)
- return value;
+ auto key = std::make_pair(exec, globalObject);
+ auto it = m_wrappers.find(key);
+ if (it != m_wrappers.end())
+ return it->value.get();
+
+ JSValue jsValue = toJS(exec, globalObject, this);
+ if (!jsValue.isObject())
+ return jsValue;
+
+ JSObject* jsObject = jsValue.toObject(exec, globalObject);
+ Strong<JSObject> wrapper(exec->vm(), jsObject);
+ m_wrappers.add(key, wrapper);
+
+ return jsValue;
+}
- JSObject* prototype = JSInjectedScriptHost::createPrototype(exec->vm(), globalObject);
- Structure* structure = JSInjectedScriptHost::createStructure(exec->vm(), globalObject, prototype);
- JSInjectedScriptHost* injectedScriptHost = JSInjectedScriptHost::create(exec->vm(), structure, Ref<InjectedScriptHost>(*this));
- m_wrappers.addWrapper(globalObject, injectedScriptHost);
+static void clearWrapperFromValue(JSValue value)
+{
+ JSInjectedScriptHost* jsInjectedScriptHost = toJSInjectedScriptHost(value);
+ ASSERT(jsInjectedScriptHost);
+ if (jsInjectedScriptHost)
+ jsInjectedScriptHost->releaseImpl();
+}
- return injectedScriptHost;
+void InjectedScriptHost::clearWrapper(ExecState* exec, JSGlobalObject* globalObject)
+{
+ auto key = std::make_pair(exec, globalObject);
+ clearWrapperFromValue(m_wrappers.take(key).get());
}
void InjectedScriptHost::clearAllWrappers()
{
- m_wrappers.clearAllWrappers();
+ for (auto wrapper : m_wrappers)
+ clearWrapperFromValue(wrapper.value.get());
+
+ m_wrappers.clear();
}
} // namespace Inspector
+
+#endif // ENABLE(INSPECTOR)