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

Side by Side Diff: third_party/WebKit/public/platform/WebPrivatePtr.h

Issue 2019963002: Remove get from CrossThreadPersistent to avoid accidental use Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 6 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 /* 1 /*
2 * Copyright (C) 2010 Google Inc. All rights reserved. 2 * Copyright (C) 2010 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
129 public: 129 public:
130 using Type = CrossThreadPersistent<T>; 130 using Type = CrossThreadPersistent<T>;
131 }; 131 };
132 132
133 template <typename T> 133 template <typename T>
134 struct WebPrivatePtrPersistentStorageType<T, WebPrivatePtrDestructionCrossThread , WebPrivatePtrStrength::Weak> { 134 struct WebPrivatePtrPersistentStorageType<T, WebPrivatePtrDestructionCrossThread , WebPrivatePtrStrength::Weak> {
135 public: 135 public:
136 using Type = CrossThreadWeakPersistent<T>; 136 using Type = CrossThreadWeakPersistent<T>;
137 }; 137 };
138 138
139 template<typename T, WebPrivatePtrDestruction crossThreadDestruction, WebPrivate PtrStrength strongOrWeak> 139 template<typename T, WebPrivatePtrStrength strongOrWeak>
140 class PtrStorageImpl<T, crossThreadDestruction, strongOrWeak, GarbageCollectedLi fetime> { 140 class PtrStorageImpl<T, WebPrivatePtrDestructionCrossThread, strongOrWeak, Garba geCollectedLifetime> {
141 public: 141 public:
142 void assign(T* val) 142 void assign(T* val)
143 { 143 {
144 if (!val) {
145 release();
146 return;
147 }
148
149 if (!m_handle)
150 m_handle = new (typename WebPrivatePtrPersistentStorageType<T, WebPr ivatePtrDestructionCrossThread, strongOrWeak>::Type)();
151
152 (*m_handle) = val;
153 }
154
155 template<typename U> void assign(U* val) { assign(static_cast<T*>(val)); }
156
157 void assign(const PtrStorageImpl& other) { assign(other.get()); }
158
159 T* get() const { return m_handle ? m_handle->unsafeGet() : nullptr; }
sof 2016/06/02 07:00:12 You can use a trait (over WebPrivatePtrDestruction
160
161 void release()
162 {
163 delete m_handle;
164 m_handle = nullptr;
165 }
166
167 private:
168 typename WebPrivatePtrPersistentStorageType<T, WebPrivatePtrDestructionCross Thread, strongOrWeak>::Type* m_handle;
169 };
170
171 template<typename T, WebPrivatePtrStrength strongOrWeak>
172 class PtrStorageImpl<T, WebPrivatePtrDestructionSameThread, strongOrWeak, Garbag eCollectedLifetime> {
173 public:
174 void assign(T* val)
175 {
144 if (!val) { 176 if (!val) {
145 release(); 177 release();
146 return; 178 return;
147 } 179 }
148 180
149 if (!m_handle) 181 if (!m_handle)
150 m_handle = new (typename WebPrivatePtrPersistentStorageType<T, cross ThreadDestruction, strongOrWeak>::Type)(); 182 m_handle = new (typename WebPrivatePtrPersistentStorageType<T, WebPr ivatePtrDestructionSameThread, strongOrWeak>::Type)();
151 183
152 (*m_handle) = val; 184 (*m_handle) = val;
153 } 185 }
154 186
155 template<typename U> void assign(U* val) { assign(static_cast<T*>(val)); } 187 template<typename U> void assign(U* val) { assign(static_cast<T*>(val)); }
156 188
157 void assign(const PtrStorageImpl& other) { assign(other.get()); } 189 void assign(const PtrStorageImpl& other) { assign(other.get()); }
158 190
159 T* get() const { return m_handle ? m_handle->get() : 0; } 191 T* get() const { return m_handle ? m_handle->get() : 0; }
160 192
161 void release() 193 void release()
162 { 194 {
163 delete m_handle; 195 delete m_handle;
164 m_handle = 0; 196 m_handle = 0;
165 } 197 }
166 198
167 private: 199 private:
168 typename WebPrivatePtrPersistentStorageType<T, crossThreadDestruction, stron gOrWeak>::Type* m_handle; 200 typename WebPrivatePtrPersistentStorageType<T, WebPrivatePtrDestructionSameT hread, strongOrWeak>::Type* m_handle;
169 }; 201 };
170 202
171 template<typename T, WebPrivatePtrDestruction crossThreadDestruction, WebPrivate PtrStrength strongOrWeak> 203 template<typename T, WebPrivatePtrDestruction crossThreadDestruction, WebPrivate PtrStrength strongOrWeak>
172 class PtrStorage : public PtrStorageImpl<T, crossThreadDestruction, strongOrWeak , LifetimeOf<T>::value> { 204 class PtrStorage : public PtrStorageImpl<T, crossThreadDestruction, strongOrWeak , LifetimeOf<T>::value> {
173 public: 205 public:
174 static PtrStorage& fromSlot(void** slot) 206 static PtrStorage& fromSlot(void** slot)
175 { 207 {
176 static_assert(sizeof(PtrStorage) == sizeof(void*), "PtrStorage must be t he size of a pointer"); 208 static_assert(sizeof(PtrStorage) == sizeof(void*), "PtrStorage must be t he size of a pointer");
177 return *reinterpret_cast<PtrStorage*>(slot); 209 return *reinterpret_cast<PtrStorage*>(slot);
178 } 210 }
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
295 // Disable the copy constructor; classes that contain a WebPrivatePtr 327 // Disable the copy constructor; classes that contain a WebPrivatePtr
296 // should implement their copy constructor using assign(). 328 // should implement their copy constructor using assign().
297 WebPrivatePtr(const WebPrivatePtr&); 329 WebPrivatePtr(const WebPrivatePtr&);
298 330
299 void* m_storage; 331 void* m_storage;
300 }; 332 };
301 333
302 } // namespace blink 334 } // namespace blink
303 335
304 #endif // WebPrivatePtr_h 336 #endif // WebPrivatePtr_h
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698