Chromium Code Reviews| 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..e0216424abc307339fbbd9e92b3b9a81d77e5932 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,40 @@ V8IDBObserverCallback::~V8IDBObserverCallback() |
| { |
| } |
| +void V8IDBObserverCallback::handleEvent(IDBObserverChanges& changes, IDBObserver& observer) |
| +{ |
| + |
|
jsbell
2016/07/11 18:25:33
Nit: remove this blank line
palakj1
2016/07/11 22:25:40
Done
|
| + 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); |