diff options
author | Lorry Tar Creator <lorry-tar-importer@lorry> | 2016-04-10 09:28:39 +0000 |
---|---|---|
committer | Lorry Tar Creator <lorry-tar-importer@lorry> | 2016-04-10 09:28:39 +0000 |
commit | 32761a6cee1d0dee366b885b7b9c777e67885688 (patch) | |
tree | d6bec92bebfb216f4126356e55518842c2f476a1 /Source/JavaScriptCore/inspector/InjectedScriptHost.cpp | |
parent | a4e969f4965059196ca948db781e52f7cfebf19e (diff) | |
download | WebKitGtk-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.cpp | 46 |
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) |