Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(137)

Unified Diff: third_party/WebKit/Source/bindings/core/v8/V8PrivateProperty.h

Issue 2843603002: Move ScriptWrappable and dependencies to platform/bindings (Closed)
Patch Set: Rebase and try again Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/bindings/core/v8/V8PrivateProperty.h
diff --git a/third_party/WebKit/Source/bindings/core/v8/V8PrivateProperty.h b/third_party/WebKit/Source/bindings/core/v8/V8PrivateProperty.h
index 7a6f8cb958ca55122fec61da3d267f9334ed4fac..eb9cb53adc5544215ada6769ba7c00695aed60bd 100644
--- a/third_party/WebKit/Source/bindings/core/v8/V8PrivateProperty.h
+++ b/third_party/WebKit/Source/bindings/core/v8/V8PrivateProperty.h
@@ -2,222 +2,6 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#ifndef V8PrivateProperty_h
-#define V8PrivateProperty_h
-
-#include <memory>
-
-#include "bindings/core/v8/ScriptPromiseProperties.h"
-#include "bindings/core/v8/V8BindingMacros.h"
-#include "bindings/core/v8/V8PerIsolateData.h"
-#include "core/CoreExport.h"
-#include "platform/wtf/Allocator.h"
-#include "platform/wtf/PtrUtil.h"
-#include "v8/include/v8.h"
-
-namespace blink {
-
-class ScriptWrappable;
-
-// TODO(peria): Remove properties just to keep V8 objects alive.
-// e.g. InternalBody.Buffer, InternalBody.Stream, IDBCursor.Request,
-// FetchEvent.Request.
-// Apply |X| for each pair of (InterfaceName, PrivateKeyName).
-#define V8_PRIVATE_PROPERTY_FOR_EACH(X) \
- X(CustomElement, AdoptedCallback) \
- X(CustomElement, AttributeChangedCallback) \
- X(CustomElement, ConnectedCallback) \
- X(CustomElement, DisconnectedCallback) \
- X(CustomElement, Document) \
- X(CustomElement, IsInterfacePrototypeObject) \
- X(CustomElement, NamespaceURI) \
- X(CustomElement, RegistryMap) \
- X(CustomElement, TagName) \
- X(CustomElement, Type) \
- X(CustomElementLifecycle, AttachedCallback) \
- X(CustomElementLifecycle, AttributeChangedCallback) \
- X(CustomElementLifecycle, CreatedCallback) \
- X(CustomElementLifecycle, DetachedCallback) \
- X(CustomEvent, Detail) \
- X(DOMException, Error) \
- X(ErrorEvent, Error) \
- X(FetchEvent, Request) \
- X(Global, Event) \
- X(IDBCursor, Request) \
- X(IDBObserver, Callback) \
- X(InternalBody, Buffer) \
- X(InternalBody, Stream) \
- X(IntersectionObserver, Callback) \
- X(LazyEventListener, ToString) \
- X(MessageChannel, Port1) \
- X(MessageChannel, Port2) \
- X(MessageEvent, CachedData) \
- X(MutationObserver, Callback) \
- X(NamedConstructor, Initialized) \
- X(PerformanceObserver, Callback) \
- X(PopStateEvent, State) \
- X(SameObject, NotificationActions) \
- X(SameObject, NotificationData) \
- X(SameObject, NotificationVibrate) \
- X(SameObject, PerformanceLongTaskTimingAttribution) \
- SCRIPT_PROMISE_PROPERTIES(X, Promise) \
- SCRIPT_PROMISE_PROPERTIES(X, Resolver)
-
-// The getter's name for a private property.
-#define V8_PRIVATE_PROPERTY_GETTER_NAME(InterfaceName, PrivateKeyName) \
- Get##InterfaceName##PrivateKeyName
-
-// The member variable's name for a private property.
-#define V8_PRIVATE_PROPERTY_MEMBER_NAME(InterfaceName, PrivateKeyName) \
- m_symbol##InterfaceName##PrivateKeyName
-
-// The string used to create a private symbol. Must be unique per V8 instance.
-#define V8_PRIVATE_PROPERTY_SYMBOL_STRING(InterfaceName, PrivateKeyName) \
- #InterfaceName "#" #PrivateKeyName // NOLINT(whitespace/indent)
-
-// Provides access to V8's private properties.
-//
-// Usage 1) Fast path to use a pre-registered symbol.
-// auto private = V8PrivateProperty::getMessageEventCachedData(isolate);
-// v8::Local<v8::Object> object = ...;
-// v8::Local<v8::Value> value = private.getOrUndefined(object);
-// value = ...;
-// private.set(object, value);
-//
-// Usage 2) Slow path to create a global private symbol.
-// const char symbolName[] = "Interface#PrivateKeyName";
-// auto private = V8PrivateProperty::createSymbol(isolate, symbolName);
-// ...
-class CORE_EXPORT V8PrivateProperty {
- USING_FAST_MALLOC(V8PrivateProperty);
- WTF_MAKE_NONCOPYABLE(V8PrivateProperty);
-
- public:
- // Provides fast access to V8's private properties.
- //
- // Retrieving/creating a global private symbol from a string is very
- // expensive compared to get or set a private property. This class
- // provides a way to cache a private symbol and re-use it.
- class CORE_EXPORT Symbol {
- STACK_ALLOCATED();
-
- public:
- bool HasValue(v8::Local<v8::Object> object) const {
- return object->HasPrivate(GetContext(), private_symbol_).ToChecked();
- }
-
- // Returns the value of the private property if set, or undefined.
- v8::Local<v8::Value> GetOrUndefined(v8::Local<v8::Object> object) const {
- return object->GetPrivate(GetContext(), private_symbol_).ToLocalChecked();
- }
-
- // TODO(peria): Remove this method, and use getOrUndefined() instead.
- // Returns the value of the private property if set, or an empty handle.
- v8::Local<v8::Value> GetOrEmpty(v8::Local<v8::Object> object) const {
- if (HasValue(object))
- return GetOrUndefined(object);
- return v8::Local<v8::Value>();
- }
-
- bool Set(v8::Local<v8::Object> object, v8::Local<v8::Value> value) const {
- return object->SetPrivate(GetContext(), private_symbol_, value)
- .ToChecked();
- }
-
- bool DeleteProperty(v8::Local<v8::Object> object) const {
- return object->DeletePrivate(GetContext(), private_symbol_).ToChecked();
- }
-
- v8::Local<v8::Private> GetPrivate() const { return private_symbol_; }
-
- private:
- friend class V8PrivateProperty;
- // The following classes are exceptionally allowed to call to
- // getFromMainWorld.
- friend class V8CustomEvent;
- friend class V8ExtendableMessageEvent;
-
- Symbol(v8::Isolate* isolate, v8::Local<v8::Private> private_symbol)
- : private_symbol_(private_symbol), isolate_(isolate) {}
-
- // To get/set private property, we should use the current context.
- v8::Local<v8::Context> GetContext() const {
- return isolate_->GetCurrentContext();
- }
-
- // Only friend classes are allowed to use this API.
- v8::Local<v8::Value> GetFromMainWorld(ScriptWrappable*);
-
- v8::Local<v8::Private> private_symbol_;
- v8::Isolate* isolate_;
- };
-
- static std::unique_ptr<V8PrivateProperty> Create() {
- return WTF::WrapUnique(new V8PrivateProperty());
- }
-
-#define V8_PRIVATE_PROPERTY_DEFINE_GETTER(InterfaceName, KeyName) \
- static Symbol V8_PRIVATE_PROPERTY_GETTER_NAME(/* // NOLINT */ \
- InterfaceName, KeyName)( \
- v8::Isolate * isolate) { \
- V8PrivateProperty* private_prop = \
- V8PerIsolateData::From(isolate)->PrivateProperty(); \
- v8::Eternal<v8::Private>& property_handle = \
- private_prop->V8_PRIVATE_PROPERTY_MEMBER_NAME(InterfaceName, KeyName); \
- if (UNLIKELY(property_handle.IsEmpty())) { \
- property_handle.Set( \
- isolate, CreateV8Private(isolate, V8_PRIVATE_PROPERTY_SYMBOL_STRING( \
- InterfaceName, KeyName))); \
- } \
- return Symbol(isolate, property_handle.Get(isolate)); \
- }
-
- V8_PRIVATE_PROPERTY_FOR_EACH(V8_PRIVATE_PROPERTY_DEFINE_GETTER)
-#undef V8_PRIVATE_PROPERTY_DEFINE_GETTER
-
- // TODO(peria): Do not use this specialized hack. See a TODO comment
- // on m_symbolWindowDocumentCachedAccessor.
- static Symbol GetWindowDocumentCachedAccessor(v8::Isolate* isolate) {
- V8PrivateProperty* private_prop =
- V8PerIsolateData::From(isolate)->PrivateProperty();
- if (UNLIKELY(
- private_prop->symbol_window_document_cached_accessor_.IsEmpty())) {
- private_prop->symbol_window_document_cached_accessor_.Set(
- isolate, CreateCachedV8Private(
- isolate, V8_PRIVATE_PROPERTY_SYMBOL_STRING(
- "Window", "DocumentCachedAccessor")));
- }
- return Symbol(
- isolate, private_prop->symbol_window_document_cached_accessor_.NewLocal(
- isolate));
- }
-
- static Symbol GetSymbol(v8::Isolate* isolate, const char* symbol) {
- return Symbol(isolate, CreateCachedV8Private(isolate, symbol));
- }
-
- private:
- V8PrivateProperty() {}
-
- static v8::Local<v8::Private> CreateV8Private(v8::Isolate*,
- const char* symbol);
- // TODO(peria): Remove this method. We should not use v8::Private::ForApi().
- static v8::Local<v8::Private> CreateCachedV8Private(v8::Isolate*,
- const char* symbol);
-
-#define V8_PRIVATE_PROPERTY_DECLARE_MEMBER(InterfaceName, KeyName) \
- v8::Eternal<v8::Private> V8_PRIVATE_PROPERTY_MEMBER_NAME( \
- InterfaceName, KeyName); // NOLINT(readability/naming/underscores)
- V8_PRIVATE_PROPERTY_FOR_EACH(V8_PRIVATE_PROPERTY_DECLARE_MEMBER)
-#undef V8_PRIVATE_PROPERTY_DECLARE_MEMBER
-
- // TODO(peria): Do not use this specialized hack for
- // Window#DocumentCachedAccessor. This is required to put v8::Private key in
- // a snapshot, and it cannot be a v8::Eternal<> due to V8 serializer's
- // requirement.
- ScopedPersistent<v8::Private> symbol_window_document_cached_accessor_;
-};
-
-} // namespace blink
-
-#endif // V8PrivateProperty_h
+// This file has been moved to platform/bindings/V8PrivateProperty.h.
+// TODO(adithyas): Remove this file.
+#include "platform/bindings/V8PrivateProperty.h"

Powered by Google App Engine
This is Rietveld 408576698