Index: third_party/WebKit/Source/bindings/modules/v8/V8IDBObserverCallback.cpp |
diff --git a/third_party/WebKit/Source/bindings/modules/v8/V8IDBObserverCallback.cpp b/third_party/WebKit/Source/bindings/modules/v8/V8IDBObserverCallback.cpp |
index dd61fb10df142e256e12b35b2ff431034889a96f..3df562aaf59f2a07db7bf17811b56f7a6fb345f9 100644 |
--- a/third_party/WebKit/Source/bindings/modules/v8/V8IDBObserverCallback.cpp |
+++ b/third_party/WebKit/Source/bindings/modules/v8/V8IDBObserverCallback.cpp |
@@ -5,9 +5,12 @@ |
#include "bindings/modules/v8/V8IDBObserverCallback.h" |
#include "bindings/core/v8/ScriptController.h" |
+#include "bindings/core/v8/ToV8.h" |
#include "bindings/core/v8/V8Binding.h" |
#include "bindings/core/v8/V8PrivateProperty.h" |
#include "bindings/modules/v8/V8IDBObserver.h" |
+#include "bindings/modules/v8/V8IDBObserverChanges.h" |
+#include "wtf/Assertions.h" |
namespace blink { |
@@ -24,6 +27,39 @@ V8IDBObserverCallback::~V8IDBObserverCallback() |
{ |
} |
+void V8IDBObserverCallback::handleChanges(IDBObserverChanges& changes, IDBObserver& observer) |
+{ |
+ if (!canInvokeCallback()) |
+ return; |
+ |
+ if (!m_scriptState->contextIsValid()) |
+ return; |
+ ScriptState::Scope scope(m_scriptState.get()); |
+ |
+ if (m_callback.isEmpty()) |
+ return; |
+ v8::Local<v8::Value> observerHandle = toV8(&observer, m_scriptState->context()->Global(), m_scriptState->isolate()); |
+ if (observerHandle.IsEmpty()) { |
+ if (!isScriptControllerTerminating()) |
+ CRASH(); |
+ return; |
+ } |
+ |
+ if (!observerHandle->IsObject()) |
+ return; |
+ |
+ v8::Local<v8::Object> thisObject = v8::Local<v8::Object>::Cast(observerHandle); |
+ v8::Local<v8::Value> changesHandle = toV8(&changes, m_scriptState->context()->Global(), m_scriptState->isolate()); |
+ if (changesHandle.IsEmpty()) |
+ return; |
+ |
+ v8::Local<v8::Value> argv[] = { changesHandle }; |
+ |
+ v8::TryCatch exceptionCatcher(m_scriptState->isolate()); |
+ exceptionCatcher.SetVerbose(true); |
+ V8ScriptRunner::callFunction(m_callback.newLocal(m_scriptState->isolate()), m_scriptState->getExecutionContext(), thisObject, 1, argv, m_scriptState->isolate()); |
+} |
+ |
DEFINE_TRACE(V8IDBObserverCallback) |
{ |
IDBObserverCallback::trace(visitor); |