summaryrefslogtreecommitdiff
path: root/Source/WebCore/bindings/js/JSMainThreadExecState.h
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WebCore/bindings/js/JSMainThreadExecState.h')
-rw-r--r--Source/WebCore/bindings/js/JSMainThreadExecState.h17
1 files changed, 16 insertions, 1 deletions
diff --git a/Source/WebCore/bindings/js/JSMainThreadExecState.h b/Source/WebCore/bindings/js/JSMainThreadExecState.h
index 55b820324..5e4c4e2dc 100644
--- a/Source/WebCore/bindings/js/JSMainThreadExecState.h
+++ b/Source/WebCore/bindings/js/JSMainThreadExecState.h
@@ -92,19 +92,34 @@ protected:
ASSERT(isMainThread());
s_mainThreadState = exec;
};
-
+
~JSMainThreadExecState()
{
ASSERT(isMainThread());
+
+#if ENABLE(MUTATION_OBSERVERS)
+ bool didExitJavaScript = s_mainThreadState && !m_previousState;
+#endif
+
s_mainThreadState = m_previousState;
+
+#if ENABLE(MUTATION_OBSERVERS)
+ if (didExitJavaScript)
+ didLeaveScriptContext();
+#endif
}
private:
static JSC::ExecState* s_mainThreadState;
JSC::ExecState* m_previousState;
+
+#if ENABLE(MUTATION_OBSERVERS)
+ static void didLeaveScriptContext();
+#endif
};
// Null state prevents origin security checks.
+// Used by non-JavaScript bindings (ObjC, GObject).
class JSMainThreadNullState : private JSMainThreadExecState {
public:
explicit JSMainThreadNullState() : JSMainThreadExecState(0) {};