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

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

Issue 2816073002: Remove dependency to ScriptFunction from DOMWrapperWorld (Closed)
Patch Set: Change callback type 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
« no previous file with comments | « no previous file | third_party/WebKit/Source/bindings/core/v8/DOMWrapperWorld.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: third_party/WebKit/Source/bindings/core/v8/DOMWrapperWorld.h
diff --git a/third_party/WebKit/Source/bindings/core/v8/DOMWrapperWorld.h b/third_party/WebKit/Source/bindings/core/v8/DOMWrapperWorld.h
index 08c2601f1735dd919f8bf06836e7c4895598467e..c4f2cd852b050ca976a74f7b59045572de065dc7 100644
--- a/third_party/WebKit/Source/bindings/core/v8/DOMWrapperWorld.h
+++ b/third_party/WebKit/Source/bindings/core/v8/DOMWrapperWorld.h
@@ -134,9 +134,50 @@ class CORE_EXPORT DOMWrapperWorld : public RefCounted<DOMWrapperWorld> {
DOMDataStore& DomDataStore() const { return *dom_data_store_; }
template <typename T>
- void RegisterDOMObjectHolder(v8::Isolate*, T*, v8::Local<v8::Value>);
+ void RegisterDOMObjectHolder(v8::Isolate* isolate,
+ T* object,
+ v8::Local<v8::Value> wrapper) {
+ RegisterDOMObjectHolderInternal(
+ DOMObjectHolder<T>::Create(isolate, object, wrapper));
+ }
private:
+ class DOMObjectHolderBase {
+ USING_FAST_MALLOC(DOMObjectHolderBase);
+
+ public:
+ DOMObjectHolderBase(v8::Isolate* isolate, v8::Local<v8::Value> wrapper)
+ : wrapper_(isolate, wrapper), world_(nullptr) {}
+ virtual ~DOMObjectHolderBase() {}
+
+ DOMWrapperWorld* World() const { return world_; }
+ void SetWorld(DOMWrapperWorld* world) { world_ = world; }
+ void SetWeak(v8::WeakCallbackInfo<DOMObjectHolderBase>::Callback callback) {
+ wrapper_.SetWeak(this, callback);
+ }
+
+ private:
+ ScopedPersistent<v8::Value> wrapper_;
+ DOMWrapperWorld* world_;
+ };
+
+ template <typename T>
+ class DOMObjectHolder : public DOMObjectHolderBase {
+ public:
+ static std::unique_ptr<DOMObjectHolder<T>>
+ Create(v8::Isolate* isolate, T* object, v8::Local<v8::Value> wrapper) {
+ return WTF::WrapUnique(new DOMObjectHolder(isolate, object, wrapper));
+ }
+
+ private:
+ DOMObjectHolder(v8::Isolate* isolate,
+ T* object,
+ v8::Local<v8::Value> wrapper)
+ : DOMObjectHolderBase(isolate, wrapper), object_(object) {}
+
+ Persistent<T> object_;
+ };
+
DOMWrapperWorld(v8::Isolate*, WorldType, int world_id);
static void WeakCallbackForDOMObjectHolder(
« no previous file with comments | « no previous file | third_party/WebKit/Source/bindings/core/v8/DOMWrapperWorld.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698