summaryrefslogtreecommitdiff
path: root/Source/JavaScriptCore/inspector/InjectedScriptHost.cpp
diff options
context:
space:
mode:
authorLorry Tar Creator <lorry-tar-importer@lorry>2016-04-10 09:28:39 +0000
committerLorry Tar Creator <lorry-tar-importer@lorry>2016-04-10 09:28:39 +0000
commit32761a6cee1d0dee366b885b7b9c777e67885688 (patch)
treed6bec92bebfb216f4126356e55518842c2f476a1 /Source/JavaScriptCore/inspector/InjectedScriptHost.cpp
parenta4e969f4965059196ca948db781e52f7cfebf19e (diff)
downloadWebKitGtk-tarball-32761a6cee1d0dee366b885b7b9c777e67885688.tar.gz
webkitgtk-2.4.11webkitgtk-2.4.11
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)