| Index: third_party/WebKit/Source/bindings/core/v8/ScriptWrappable.h
|
| diff --git a/third_party/WebKit/Source/bindings/core/v8/ScriptWrappable.h b/third_party/WebKit/Source/bindings/core/v8/ScriptWrappable.h
|
| index 3989ab33a85f40fead28dd6e5bb49d84ae44b04f..511eeb7fff14b621761750f6389abaa1db3b75ff 100644
|
| --- a/third_party/WebKit/Source/bindings/core/v8/ScriptWrappable.h
|
| +++ b/third_party/WebKit/Source/bindings/core/v8/ScriptWrappable.h
|
| @@ -28,186 +28,6 @@
|
| * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
| */
|
|
|
| -#ifndef ScriptWrappable_h
|
| -#define ScriptWrappable_h
|
| -
|
| -#include "bindings/core/v8/ScriptWrappableVisitor.h"
|
| -#include "bindings/core/v8/WrapperTypeInfo.h"
|
| -#include "core/CoreExport.h"
|
| -#include "platform/heap/Handle.h"
|
| -#include "platform/wtf/Compiler.h"
|
| -#include "platform/wtf/Noncopyable.h"
|
| -#include "platform/wtf/TypeTraits.h"
|
| -#include "v8/include/v8.h"
|
| -
|
| -namespace blink {
|
| -
|
| -class CORE_EXPORT TraceWrapperBase {
|
| - WTF_MAKE_NONCOPYABLE(TraceWrapperBase);
|
| -
|
| - public:
|
| - TraceWrapperBase() = default;
|
| - virtual bool IsScriptWrappable() const { return false; }
|
| -
|
| - DECLARE_VIRTUAL_TRACE_WRAPPERS(){};
|
| -};
|
| -
|
| -// ScriptWrappable provides a way to map from/to C++ DOM implementation to/from
|
| -// JavaScript object (platform object). ToV8() converts a ScriptWrappable to
|
| -// a v8::Object and toScriptWrappable() converts a v8::Object back to
|
| -// a ScriptWrappable. v8::Object as platform object is called "wrapper object".
|
| -// The wrapepr object for the main world is stored in ScriptWrappable. Wrapper
|
| -// objects for other worlds are stored in DOMWrapperMap.
|
| -class CORE_EXPORT ScriptWrappable : public TraceWrapperBase {
|
| - WTF_MAKE_NONCOPYABLE(ScriptWrappable);
|
| -
|
| - public:
|
| - ScriptWrappable() {}
|
| -
|
| - bool IsScriptWrappable() const override { return true; }
|
| -
|
| - template <typename T>
|
| - T* ToImpl() {
|
| - // All ScriptWrappables are managed by the Blink GC heap; check that
|
| - // |T| is a garbage collected type.
|
| - static_assert(
|
| - sizeof(T) && WTF::IsGarbageCollectedType<T>::value,
|
| - "Classes implementing ScriptWrappable must be garbage collected.");
|
| -
|
| -// Check if T* is castable to ScriptWrappable*, which means T doesn't
|
| -// have two or more ScriptWrappable as superclasses. If T has two
|
| -// ScriptWrappable as superclasses, conversions from T* to
|
| -// ScriptWrappable* are ambiguous.
|
| -#if !COMPILER(MSVC)
|
| - // MSVC 2013 doesn't support static_assert + constexpr well.
|
| - static_assert(!static_cast<ScriptWrappable*>(static_cast<T*>(nullptr)),
|
| - "Class T must not have two or more ScriptWrappable as its "
|
| - "superclasses.");
|
| -#endif
|
| - return static_cast<T*>(this);
|
| - }
|
| -
|
| - // Returns the WrapperTypeInfo of the instance.
|
| - //
|
| - // This method must be overridden by DEFINE_WRAPPERTYPEINFO macro.
|
| - virtual const WrapperTypeInfo* GetWrapperTypeInfo() const = 0;
|
| -
|
| - // Creates and returns a new wrapper object.
|
| - virtual v8::Local<v8::Object> Wrap(v8::Isolate*,
|
| - v8::Local<v8::Object> creation_context);
|
| -
|
| - // Associates the instance with the given |wrapper| if this instance is not
|
| - // yet associated with any wrapper. Returns the wrapper already associated
|
| - // or |wrapper| if not yet associated.
|
| - // The caller should always use the returned value rather than |wrapper|.
|
| - WARN_UNUSED_RESULT virtual v8::Local<v8::Object> AssociateWithWrapper(
|
| - v8::Isolate*,
|
| - const WrapperTypeInfo*,
|
| - v8::Local<v8::Object> wrapper);
|
| -
|
| - // Returns true if the instance needs to be kept alive even when the
|
| - // instance is unreachable from JavaScript.
|
| - virtual bool HasPendingActivity() const { return false; }
|
| -
|
| - // Associates this instance with the given |wrapper| if this instance is not
|
| - // yet associated with any wrapper. Returns true if the given wrapper is
|
| - // associated with this instance, or false if this instance is already
|
| - // associated with a wrapper. In the latter case, |wrapper| will be updated
|
| - // to the existing wrapper.
|
| - WARN_UNUSED_RESULT bool SetWrapper(v8::Isolate* isolate,
|
| - const WrapperTypeInfo* wrapper_type_info,
|
| - v8::Local<v8::Object>& wrapper) {
|
| - DCHECK(!wrapper.IsEmpty());
|
| - if (UNLIKELY(ContainsWrapper())) {
|
| - wrapper = MainWorldWrapper(isolate);
|
| - return false;
|
| - }
|
| - main_world_wrapper_.Reset(isolate, wrapper);
|
| - wrapper_type_info->ConfigureWrapper(&main_world_wrapper_);
|
| - main_world_wrapper_.SetWeak();
|
| - DCHECK(ContainsWrapper());
|
| - ScriptWrappableVisitor::WriteBarrier(isolate, &main_world_wrapper_);
|
| - return true;
|
| - }
|
| -
|
| - // Dissociates the wrapper, if any, from this instance.
|
| - void UnsetWrapperIfAny() {
|
| - if (ContainsWrapper()) {
|
| - main_world_wrapper_.Reset();
|
| - WrapperTypeInfo::WrapperDestroyed();
|
| - }
|
| - }
|
| -
|
| - bool IsEqualTo(const v8::Local<v8::Object>& other) const {
|
| - return main_world_wrapper_ == other;
|
| - }
|
| -
|
| - bool SetReturnValue(v8::ReturnValue<v8::Value> return_value) {
|
| - return_value.Set(main_world_wrapper_);
|
| - return ContainsWrapper();
|
| - }
|
| -
|
| - bool ContainsWrapper() const { return !main_world_wrapper_.IsEmpty(); }
|
| -
|
| - // Mark wrapper of this ScriptWrappable as alive in V8. Only marks
|
| - // wrapper in the main world. To mark wrappers in all worlds call
|
| - // ScriptWrappableVisitor::markWrapper(ScriptWrappable*, v8::Isolate*)
|
| - void MarkWrapper(const WrapperVisitor*) const;
|
| -
|
| - private:
|
| - // These classes are exceptionally allowed to use mainWorldWrapper().
|
| - friend class DOMDataStore;
|
| - friend class HeapSnaphotWrapperVisitor;
|
| - friend class V8HiddenValue;
|
| - friend class V8PrivateProperty;
|
| -
|
| - v8::Local<v8::Object> MainWorldWrapper(v8::Isolate* isolate) const {
|
| - return v8::Local<v8::Object>::New(isolate, main_world_wrapper_);
|
| - }
|
| -
|
| - // Only use when really necessary, i.e., when passing over this
|
| - // ScriptWrappable's reference to V8. Should only be needed by GC
|
| - // infrastructure.
|
| - const v8::Persistent<v8::Object>* RawMainWorldWrapper() const {
|
| - return &main_world_wrapper_;
|
| - }
|
| -
|
| - v8::Persistent<v8::Object> main_world_wrapper_;
|
| -};
|
| -
|
| -// Defines 'wrapperTypeInfo' virtual method which returns the WrapperTypeInfo of
|
| -// the instance. Also declares a static member of type WrapperTypeInfo, of which
|
| -// the definition is given by the IDL code generator.
|
| -//
|
| -// All the derived classes of ScriptWrappable, regardless of directly or
|
| -// indirectly, must write this macro in the class definition as long as the
|
| -// class has a corresponding .idl file.
|
| -#define DEFINE_WRAPPERTYPEINFO() \
|
| - public: \
|
| - const WrapperTypeInfo* GetWrapperTypeInfo() const override { \
|
| - return &wrapper_type_info_; \
|
| - } \
|
| - \
|
| - private: \
|
| - static const WrapperTypeInfo& wrapper_type_info_
|
| -
|
| -// Declares 'wrapperTypeInfo' method without definition.
|
| -//
|
| -// This macro is used for template classes. e.g. DOMTypedArray<>.
|
| -// To export such a template class X, we need to instantiate X with EXPORT_API,
|
| -// i.e. "extern template class EXPORT_API X;"
|
| -// However, once we instantiate X, we cannot specialize X after
|
| -// the instantiation. i.e. we will see "error: explicit specialization of ...
|
| -// after instantiation". So we cannot define X's s_wrapperTypeInfo in generated
|
| -// code by using specialization. Instead, we need to implement wrapperTypeInfo
|
| -// in X's cpp code, and instantiate X, i.e. "template class X;".
|
| -#define DECLARE_WRAPPERTYPEINFO() \
|
| - public: \
|
| - const WrapperTypeInfo* GetWrapperTypeInfo() const override; \
|
| - \
|
| - private: \
|
| - typedef void end_of_define_wrappertypeinfo_not_reached_t
|
| -
|
| -} // namespace blink
|
| -
|
| -#endif // ScriptWrappable_h
|
| +// This file has been moved to platform/bindings/ScriptWrappable.h.
|
| +// TODO(adithyas): Remove this file.
|
| +#include "platform/bindings/ScriptWrappable.h"
|
|
|