summaryrefslogtreecommitdiffstats
path: root/WebCore/bindings/js/JSCallbackData.h
diff options
context:
space:
mode:
authorKristian Monsen <kristianm@google.com>2010-05-21 16:53:46 +0100
committerKristian Monsen <kristianm@google.com>2010-05-25 10:24:15 +0100
commit6c2af9490927c3c5959b5cb07461b646f8b32f6c (patch)
treef7111b9b22befab472616c1d50ec94eb50f1ec8c /WebCore/bindings/js/JSCallbackData.h
parenta149172322a9067c14e8b474a53e63649aa17cad (diff)
downloadexternal_webkit-6c2af9490927c3c5959b5cb07461b646f8b32f6c.zip
external_webkit-6c2af9490927c3c5959b5cb07461b646f8b32f6c.tar.gz
external_webkit-6c2af9490927c3c5959b5cb07461b646f8b32f6c.tar.bz2
Merge WebKit at r59636: Initial merge by git
Change-Id: I59b289c4e6b18425f06ce41cc9d34c522515de91
Diffstat (limited to 'WebCore/bindings/js/JSCallbackData.h')
-rw-r--r--WebCore/bindings/js/JSCallbackData.h32
1 files changed, 29 insertions, 3 deletions
diff --git a/WebCore/bindings/js/JSCallbackData.h b/WebCore/bindings/js/JSCallbackData.h
index b939c01..f7b8bfe 100644
--- a/WebCore/bindings/js/JSCallbackData.h
+++ b/WebCore/bindings/js/JSCallbackData.h
@@ -31,14 +31,15 @@
#include "JSDOMBinding.h"
#include "JSDOMGlobalObject.h"
+#include "ScriptExecutionContext.h"
#include <runtime/JSObject.h>
#include <runtime/Protect.h>
#include <wtf/Threading.h>
namespace WebCore {
-// We have to clean up this data on the main thread because unprotecting a
-// JSObject on a non-main thread without synchronization would corrupt the heap
+// We have to clean up this data on the context thread because unprotecting a
+// JSObject on the wrong thread without synchronization would corrupt the heap
// (and synchronization would be slow).
class JSCallbackData {
@@ -48,12 +49,15 @@ public:
JSCallbackData(JSC::JSObject* callback, JSDOMGlobalObject* globalObject)
: m_callback(callback)
, m_globalObject(globalObject)
+#ifndef NDEBUG
+ , m_thread(currentThread())
+#endif
{
}
~JSCallbackData()
{
- ASSERT(isMainThread());
+ ASSERT(m_thread == currentThread());
}
JSC::JSObject* callback() { return m_callback.get(); }
@@ -64,6 +68,28 @@ public:
private:
JSC::ProtectedPtr<JSC::JSObject> m_callback;
JSC::ProtectedPtr<JSDOMGlobalObject> m_globalObject;
+#ifndef NDEBUG
+ ThreadIdentifier m_thread;
+#endif
+};
+
+class DeleteCallbackDataTask : public ScriptExecutionContext::Task {
+public:
+ static PassOwnPtr<DeleteCallbackDataTask> create(JSCallbackData* data)
+ {
+ return new DeleteCallbackDataTask(data);
+ }
+
+ virtual void performTask(ScriptExecutionContext*)
+ {
+ delete m_data;
+ }
+ virtual bool isCleanupTask() const { return true; }
+private:
+
+ DeleteCallbackDataTask(JSCallbackData* data) : m_data(data) {}
+
+ JSCallbackData* m_data;
};
} // namespace WebCore