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

Side by Side Diff: third_party/WebKit/Source/bindings/core/v8/TraceWrapperV8Reference.h

Issue 2843603002: Move ScriptWrappable and dependencies to platform/bindings (Closed)
Patch Set: Rebase and try again Created 3 years, 7 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 unified diff | Download patch
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef TraceWrapperV8Reference_h 5 // This file has been moved to platform/bindings/TraceWrapperV8Reference.h.
6 #define TraceWrapperV8Reference_h 6 // TODO(adithyas): Remove this file.
7 7 #include "platform/bindings/TraceWrapperV8Reference.h"
8 #include "bindings/core/v8/ScriptWrappableVisitor.h"
9
10 namespace blink {
11
12 /**
13 * TraceWrapperV8Reference is used to trace from Blink to V8. If wrapper
14 * tracing is disabled, the reference is a weak v8::Persistent. Otherwise,
15 * the reference is (strongly) traced by wrapper tracing.
16 *
17 * TODO(mlippautz): Use a better handle type than v8::Persistent.
18 */
19 template <typename T>
20 class TraceWrapperV8Reference {
21 public:
22 explicit TraceWrapperV8Reference(void* parent) : parent_(parent) {}
23
24 TraceWrapperV8Reference(v8::Isolate* isolate,
25 void* parent,
26 v8::Local<T> handle)
27 : parent_(parent) {
28 InternalSet(isolate, handle);
29 handle_.SetWeak();
30 }
31
32 ~TraceWrapperV8Reference() { Clear(); }
33
34 void Set(v8::Isolate* isolate, v8::Local<T> handle) {
35 InternalSet(isolate, handle);
36 handle_.SetWeak();
37 }
38
39 template <typename P>
40 void Set(v8::Isolate* isolate,
41 v8::Local<T> handle,
42 P* parameters,
43 void (*callback)(const v8::WeakCallbackInfo<P>&),
44 v8::WeakCallbackType type = v8::WeakCallbackType::kParameter) {
45 InternalSet(isolate, handle);
46 handle_.SetWeak(parameters, callback, type);
47 }
48
49 ALWAYS_INLINE v8::Local<T> NewLocal(v8::Isolate* isolate) const {
50 return v8::Local<T>::New(isolate, handle_);
51 }
52
53 bool IsEmpty() const { return handle_.IsEmpty(); }
54 void Clear() { handle_.Reset(); }
55 ALWAYS_INLINE v8::Persistent<T>& Get() { return handle_; }
56
57 template <typename S>
58 const TraceWrapperV8Reference<S>& Cast() const {
59 return reinterpret_cast<const TraceWrapperV8Reference<S>&>(
60 const_cast<const TraceWrapperV8Reference<T>&>(*this));
61 }
62
63 private:
64 inline void InternalSet(v8::Isolate* isolate, v8::Local<T> handle) {
65 handle_.Reset(isolate, handle);
66 ScriptWrappableVisitor::WriteBarrier(isolate, parent_, &Cast<v8::Value>());
67 }
68
69 v8::Persistent<T> handle_;
70 void* parent_;
71 };
72
73 } // namespace blink
74
75 #endif // TraceWrapperV8Reference_h
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698