Chromium Code Reviews| Index: third_party/WebKit/Source/platform/heap/Persistent.h |
| diff --git a/third_party/WebKit/Source/platform/heap/Persistent.h b/third_party/WebKit/Source/platform/heap/Persistent.h |
| index 37399f545ca475db1e18cd29ce91cdf00fed7e81..6f73be4ae67993c3285773afb90d6bd23539de64 100644 |
| --- a/third_party/WebKit/Source/platform/heap/Persistent.h |
| +++ b/third_party/WebKit/Source/platform/heap/Persistent.h |
| @@ -114,6 +114,7 @@ public: |
| operator T*() const { return m_raw; } |
| T* operator->() const { return *this; } |
| T* get() const { return m_raw; } |
| + T* getInternal() const { return m_raw; } |
| template<typename U> |
| PersistentBase& operator=(U* other) |
| @@ -437,8 +438,6 @@ public: |
| CrossThreadPersistent(const Member<U>& other) : Parent(other) { } |
| CrossThreadPersistent(WTF::HashTableDeletedValueType x) : Parent(x) { } |
| - T* atomicGet() { return Parent::atomicGet(); } |
| - |
| template<typename U> |
| CrossThreadPersistent& operator=(U* other) |
| { |
| @@ -471,6 +470,13 @@ public: |
| Parent::operator=(other); |
| return *this; |
| } |
| + |
| + template<typename U> |
| + static CrossThreadPersistent<U> protectWeak(const PersistentBase<U, WeakPersistentConfiguration, CrossThreadPersistentConfiguration>& other) |
| + { |
| + CrossThreadPersistentRegion::LockScope persistentLock(ProcessHeap::crossThreadPersistentRegion()); |
| + return CrossThreadPersistent<U>(other.getInternal()); |
| + } |
| }; |
| // Combines the behavior of CrossThreadPersistent and WeakPersistent. |
| @@ -520,6 +526,34 @@ public: |
| Parent::operator=(other); |
| return *this; |
| } |
| + |
| + T* atomicGet() { return Parent::atomicGet(); } |
| + |
| + T& operator*() const |
| + { |
| + DCHECK(!Parent::get() || !ThreadState::current() || !ThreadState::current()->perThreadHeapEnabled() || &ThreadState::fromObject(Parent::get())->heap() == &ThreadState::current()->heap()); |
|
haraken
2016/09/02 09:39:18
Should we drop the '|| !ThreadState::current()->pe
keishi
2016/09/07 10:14:42
Done.
|
| + return Parent::operator*(); |
| + } |
| + explicit operator bool() const |
| + { |
| + DCHECK(!Parent::get() || !ThreadState::current() || !ThreadState::current()->perThreadHeapEnabled() || &ThreadState::fromObject(Parent::get())->heap() == &ThreadState::current()->heap()); |
| + return Parent::operator bool(); |
| + } |
| + operator T*() const |
| + { |
| + DCHECK(!Parent::get() || !ThreadState::current() || !ThreadState::current()->perThreadHeapEnabled() || &ThreadState::fromObject(Parent::get())->heap() == &ThreadState::current()->heap()); |
| + return Parent::operator T*(); |
| + } |
| + T* operator->() const |
| + { |
| + DCHECK(!Parent::get() || !ThreadState::current() || !ThreadState::current()->perThreadHeapEnabled() || &ThreadState::fromObject(Parent::get())->heap() == &ThreadState::current()->heap()); |
| + return Parent::operator->(); |
| + } |
| + T* get() const |
| + { |
| + DCHECK(!Parent::get() || !ThreadState::current() || !ThreadState::current()->perThreadHeapEnabled() || &ThreadState::fromObject(Parent::get())->heap() == &ThreadState::current()->heap()); |
| + return Parent::get(); |
| + } |
| }; |
| template<typename Collection> |