diff options
Diffstat (limited to 'chromium/third_party/blink/renderer/platform/bindings/callback_interface_base.cc')
-rw-r--r-- | chromium/third_party/blink/renderer/platform/bindings/callback_interface_base.cc | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/chromium/third_party/blink/renderer/platform/bindings/callback_interface_base.cc b/chromium/third_party/blink/renderer/platform/bindings/callback_interface_base.cc new file mode 100644 index 00000000000..c6d306c3a62 --- /dev/null +++ b/chromium/third_party/blink/renderer/platform/bindings/callback_interface_base.cc @@ -0,0 +1,40 @@ +// Copyright 2017 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "third_party/blink/renderer/platform/bindings/callback_interface_base.h" + +namespace blink { + +CallbackInterfaceBase::CallbackInterfaceBase( + v8::Local<v8::Object> callback_object, + SingleOperationOrNot single_op_or_not) { + DCHECK(!callback_object.IsEmpty()); + + callback_relevant_script_state_ = + ScriptState::From(callback_object->CreationContext()); + v8::Isolate* isolate = callback_relevant_script_state_->GetIsolate(); + + callback_object_.Set(isolate, callback_object); + is_callback_object_callable_ = + (single_op_or_not == kSingleOperation) && callback_object->IsCallable(); + incumbent_script_state_ = ScriptState::From(isolate->GetIncumbentContext()); +} + +void CallbackInterfaceBase::TraceWrappers( + const ScriptWrappableVisitor* visitor) const { + visitor->TraceWrappers(callback_object_); +} + +V8PersistentCallbackInterfaceBase::V8PersistentCallbackInterfaceBase( + CallbackInterfaceBase* callback_interface) + : callback_interface_(callback_interface) { + v8_object_.Reset(callback_interface_->GetIsolate(), + callback_interface_->callback_object_.Get()); +} + +void V8PersistentCallbackInterfaceBase::Trace(blink::Visitor* visitor) { + visitor->Trace(callback_interface_); +} + +} // namespace blink |