Changeset 245863 in webkit
- Timestamp:
- May 29, 2019 1:07:56 PM (5 years ago)
- Location:
- trunk
- Files:
-
- 53 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WTF/ChangeLog
r245857 r245863 1 2019-05-29 Ryan Haddad <ryanhaddad@apple.com> 2 3 Unreviewed, rolling out r245857. 4 5 Breaks internal builds. 6 7 Reverted changeset: 8 9 "WeakPtr breaks vtables when upcasting to base classes" 10 https://bugs.webkit.org/show_bug.cgi?id=188799 11 https://trac.webkit.org/changeset/245857 12 1 13 2019-05-28 Geoffrey Garen <ggaren@apple.com> 2 14 -
trunk/Source/WTF/wtf/WeakHashSet.h
r245857 r245863 33 33 namespace WTF { 34 34 35 template<> struct HashTraits<Ref<WeakReference>> : RefHashTraits<WeakReference> {36 static const bool hasIsReleasedWeakValueFunction = true;37 static bool isReleasedWeakValue(const Ref<WeakReference>& value)38 {39 return !value.isHashTableDeletedValue() && !value.isHashTableEmptyValue() && !value.get();40 }41 };42 43 35 template <typename T> 44 36 class WeakHashSet { 45 37 public: 46 typedef HashSet<Ref<WeakReference >> WeakReferenceSet;38 typedef HashSet<Ref<WeakReference<T>>> WeakReferenceSet; 47 39 48 40 class WeakHashSetConstIterator : public std::iterator<std::forward_iterator_tag, T, std::ptrdiff_t, const T*, const T&> { … … 55 47 56 48 public: 57 T* get() const { return m_position->get(). template get<T, typename T::WeakValueType>(); }49 T* get() const { return m_position->get().get(); } 58 50 T& operator*() const { return *get(); } 59 51 T* operator->() const { return get(); } … … 69 61 void skipEmptyBuckets() 70 62 { 71 while (m_position != m_endPosition && ! get())63 while (m_position != m_endPosition && !m_position->get().get()) 72 64 ++m_position; 73 65 } … … 105 97 bool remove(const U& value) 106 98 { 107 auto & weakReference = value.weakPtrFactory().m_ref;108 if (!weakReference || !*weakReference)99 auto* weakReference = weak_reference_downcast<T>(value.weakPtrFactory().m_ref.get()); 100 if (!weakReference) 109 101 return false; 110 return m_set.remove( *weakReference);102 return m_set.remove(weakReference); 111 103 } 112 104 … … 114 106 bool contains(const U& value) const 115 107 { 116 auto & weakReference = value.weakPtrFactory().m_ref;117 if (!weakReference || !*weakReference)108 auto* weakReference = weak_reference_downcast<T>(value.weakPtrFactory().m_ref.get()); 109 if (!weakReference) 118 110 return false; 119 return m_set.contains( *weakReference);111 return m_set.contains(weakReference); 120 112 } 121 113 122 114 unsigned capacity() const { return m_set.capacity(); } 123 115 124 bool computesEmpty() const { return begin() == end(); } 116 bool computesEmpty() const 117 { 118 if (m_set.isEmpty()) 119 return true; 120 for (auto& value : m_set) { 121 if (value->get()) 122 return false; 123 } 124 return true; 125 } 125 126 126 127 bool hasNullReferences() const 127 128 { 128 return WTF::anyOf(m_set, [] (auto& value) { return !value .get(); });129 return WTF::anyOf(m_set, [] (auto& value) { return !value->get(); }); 129 130 } 130 131 131 132 unsigned computeSize() const 132 133 { 133 const_cast<WeakReferenceSet&>(m_set).removeIf([] (auto& value) { return !value .get(); });134 const_cast<WeakReferenceSet&>(m_set).removeIf([] (auto& value) { return !value->get(); }); 134 135 return m_set.size(); 135 136 } … … 145 146 }; 146 147 148 template<typename T> struct HashTraits<Ref<WeakReference<T>>> : RefHashTraits<WeakReference<T>> { 149 static const bool hasIsReleasedWeakValueFunction = true; 150 static bool isReleasedWeakValue(const Ref<WeakReference<T>>& value) 151 { 152 return !value.isHashTableDeletedValue() && !value.isHashTableEmptyValue() && !value.get().get(); 153 } 154 }; 155 147 156 } // namespace WTF 148 157 -
trunk/Source/WTF/wtf/WeakPtr.h
r245857 r245863 34 34 namespace WTF { 35 35 36 // Testing interface for TestWebKitAPI37 #ifndef DID_CREATE_WEAK_REFERENCE38 #define DID_CREATE_WEAK_REFERENCE(p)39 #endif40 #ifndef WILL_DESTROY_WEAK_REFERENCE41 #define WILL_DESTROY_WEAK_REFERENCE(p)42 #endif43 44 36 template<typename> class WeakHashSet; 45 37 template<typename> class WeakPtr; … … 47 39 48 40 // Note: WeakReference is an implementation detail, and should not be used directly. 49 class WeakReference : public ThreadSafeRefCounted<WeakReference> { 50 WTF_MAKE_NONCOPYABLE(WeakReference); 41 template<typename T> 42 class WeakReference : public ThreadSafeRefCounted<WeakReference<T>> { 43 WTF_MAKE_NONCOPYABLE(WeakReference<T>); 51 44 WTF_MAKE_FAST_ALLOCATED; 52 45 public: 53 template<typename T> static Ref<WeakReference> create(T* ptr) { return adoptRef(*new WeakReference(ptr)); } 54 55 ~WeakReference() 56 { 57 WILL_DESTROY_WEAK_REFERENCE(m_ptr); 58 } 59 60 template<typename T, typename WeakValueType> T* get() const { return static_cast<T*>(static_cast<WeakValueType*>(m_ptr)); } 61 explicit operator bool() const { return m_ptr; } 46 ~WeakReference() { } // So that we can use a template specialization for testing purposes to detect leaks. 47 48 T* get() const { return m_ptr; } 62 49 63 50 void clear() { m_ptr = nullptr; } 64 51 65 52 private: 66 template<typename T> explicit WeakReference(T* ptr) 53 friend class WeakPtr<T>; 54 friend class WeakPtrFactory<T>; 55 56 static Ref<WeakReference<T>> create(T* ptr) { return adoptRef(*new WeakReference(ptr)); } 57 58 explicit WeakReference(T* ptr) 67 59 : m_ptr(ptr) 68 60 { 69 DID_CREATE_WEAK_REFERENCE(ptr); 70 } 71 72 void* m_ptr; 61 } 62 63 T* m_ptr; 73 64 }; 74 65 … … 79 70 WeakPtr() { } 80 71 WeakPtr(std::nullptr_t) { } 72 WeakPtr(Ref<WeakReference<T>>&& ref) : m_ref(std::forward<Ref<WeakReference<T>>>(ref)) { } 81 73 template<typename U> WeakPtr(const WeakPtr<U>&); 82 74 template<typename U> WeakPtr(WeakPtr<U>&&); 83 75 84 T* get() const { return m_ref ? m_ref-> template get<T, typename T::WeakValueType>() : nullptr; }85 explicit operator bool() const { return m_ref && *m_ref; }76 T* get() const { return m_ref ? m_ref->get() : nullptr; } 77 explicit operator bool() const { return m_ref && m_ref->get(); } 86 78 87 79 WeakPtr& operator=(std::nullptr_t) { m_ref = nullptr; return *this; } … … 89 81 template<typename U> WeakPtr& operator=(WeakPtr<U>&&); 90 82 91 T* operator->() const { return get(); }92 T& operator*() const { return * get(); }83 T* operator->() const { return m_ref->get(); } 84 T& operator*() const { return *m_ref->get(); } 93 85 94 86 void clear() { m_ref = nullptr; } 95 87 96 88 private: 97 explicit WeakPtr(Ref<WeakReference>&& ref) : m_ref(std::move(ref)) { }98 89 template<typename> friend class WeakHashSet; 99 90 template<typename> friend class WeakPtr; 100 template<typename> friend class WeakPtrFactory;101 91 template<typename U> friend WeakPtr<U> makeWeakPtr(U&); 102 92 103 RefPtr<WeakReference > m_ref;93 RefPtr<WeakReference<T>> m_ref; 104 94 }; 105 95 … … 121 111 { 122 112 if (!m_ref) 123 m_ref = WeakReference ::create(&ptr);124 return WeakPtr<T>(makeRef(*m_ref));113 m_ref = WeakReference<T>::create(&ptr); 114 return { makeRef(*m_ref) }; 125 115 } 126 116 … … 128 118 { 129 119 if (!m_ref) 130 m_ref = WeakReference ::create(const_cast<T*>(&ptr));131 return WeakPtr<T>(makeRef(*m_ref));120 m_ref = WeakReference<T>::create(const_cast<T*>(&ptr)); 121 return { makeRef(reinterpret_cast<WeakReference<const T>&>(*m_ref)) }; 132 122 } 133 123 … … 144 134 template<typename> friend class WeakHashSet; 145 135 146 mutable RefPtr<WeakReference > m_ref;136 mutable RefPtr<WeakReference<T>> m_ref; 147 137 }; 148 138 149 139 template<typename T> class CanMakeWeakPtr { 150 140 public: 151 typedef T WeakValueType;152 153 141 const WeakPtrFactory<T>& weakPtrFactory() const { return m_weakFactory; } 154 142 WeakPtrFactory<T>& weakPtrFactory() { return m_weakFactory; } … … 158 146 }; 159 147 160 template<typename T, typename U> inline WeakReference* weak_reference_cast(WeakReference* weakReference) 161 { 162 UNUSED_VARIABLE(static_cast<T*>(static_cast<typename U::WeakValueType*>(nullptr))); // Verify that casting is valid. 163 return weakReference; 148 template<typename T, typename U> inline WeakReference<T>* weak_reference_upcast(WeakReference<U>* weakReference) 149 { 150 static_assert(std::is_convertible<U*, T*>::value, "U* must be convertible to T*"); 151 return reinterpret_cast<WeakReference<T>*>(weakReference); 152 } 153 154 template<typename T, typename U> inline WeakReference<T>* weak_reference_downcast(WeakReference<U>* weakReference) 155 { 156 static_assert(std::is_convertible<T*, U*>::value, "T* must be convertible to U*"); 157 return reinterpret_cast<WeakReference<T>*>(weakReference); 164 158 } 165 159 166 160 template<typename T> template<typename U> inline WeakPtr<T>::WeakPtr(const WeakPtr<U>& o) 167 : m_ref(weak_reference_ cast<T, U>(o.m_ref.get()))161 : m_ref(weak_reference_upcast<T>(o.m_ref.get())) 168 162 { 169 163 } 170 164 171 165 template<typename T> template<typename U> inline WeakPtr<T>::WeakPtr(WeakPtr<U>&& o) 172 : m_ref(adoptRef(weak_reference_ cast<T, U>(o.m_ref.leakRef())))166 : m_ref(adoptRef(weak_reference_upcast<T>(o.m_ref.leakRef()))) 173 167 { 174 168 } … … 176 170 template<typename T> template<typename U> inline WeakPtr<T>& WeakPtr<T>::operator=(const WeakPtr<U>& o) 177 171 { 178 m_ref = weak_reference_ cast<T, U>(o.m_ref.get());172 m_ref = weak_reference_upcast<T>(o.m_ref.get()); 179 173 return *this; 180 174 } … … 182 176 template<typename T> template<typename U> inline WeakPtr<T>& WeakPtr<T>::operator=(WeakPtr<U>&& o) 183 177 { 184 m_ref = adoptRef(weak_reference_ cast<T, U>(o.m_ref.leakRef()));178 m_ref = adoptRef(weak_reference_upcast<T>(o.m_ref.leakRef())); 185 179 return *this; 186 180 } … … 188 182 template<typename T> inline WeakPtr<T> makeWeakPtr(T& ref) 189 183 { 190 return { ref.weakPtrFactory().createWeakPtr(ref) };184 return { adoptRef(*weak_reference_downcast<T>(ref.weakPtrFactory().createWeakPtr(ref).m_ref.leakRef())) }; 191 185 } 192 186 -
trunk/Source/WebCore/ChangeLog
r245861 r245863 1 2019-05-29 Ryan Haddad <ryanhaddad@apple.com> 2 3 Unreviewed, rolling out r245857. 4 5 Breaks internal builds. 6 7 Reverted changeset: 8 9 "WeakPtr breaks vtables when upcasting to base classes" 10 https://bugs.webkit.org/show_bug.cgi?id=188799 11 https://trac.webkit.org/changeset/245857 12 1 13 2019-05-29 Keith Rollin <krollin@apple.com> 2 14 -
trunk/Source/WebCore/Modules/encryptedmedia/MediaKeySession.cpp
r245857 r245863 95 95 UNUSED_PARAM(m_uninitialized); 96 96 97 m_instanceSession->setClient(m akeWeakPtr(*this));97 m_instanceSession->setClient(m_cdmInstanceSessionClientWeakPtrFactory.createWeakPtr(*this)); 98 98 } 99 99 -
trunk/Source/WebCore/Modules/encryptedmedia/MediaKeySession.h
r245857 r245863 53 53 class SharedBuffer; 54 54 55 class MediaKeySession final : public RefCounted<MediaKeySession>, public EventTargetWithInlineData, public ActiveDOMObject, public C DMInstanceSessionClient {55 class MediaKeySession final : public RefCounted<MediaKeySession>, public EventTargetWithInlineData, public ActiveDOMObject, public CanMakeWeakPtr<MediaKeySession>, public CDMInstanceSessionClient { 56 56 WTF_MAKE_ISO_ALLOCATED(MediaKeySession); 57 57 public: … … 121 121 double m_latestDecryptTime { 0 }; 122 122 Vector<std::pair<Ref<SharedBuffer>, MediaKeyStatus>> m_statuses; 123 WeakPtrFactory<CDMInstanceSessionClient> m_cdmInstanceSessionClientWeakPtrFactory; 123 124 }; 124 125 -
trunk/Source/WebCore/css/CSSFontFace.cpp
r245857 r245863 123 123 } 124 124 125 FontFace* CSSFontFace::existingWrapper()126 {127 return m_wrapper.get();128 }129 130 125 static FontSelectionRange calculateWeightRange(CSSValue& value) 131 126 { -
trunk/Source/WebCore/css/CSSFontFace.h
r245857 r245863 151 151 Ref<FontFace> wrapper(); 152 152 void setWrapper(FontFace&); 153 FontFace* existingWrapper() ;153 FontFace* existingWrapper() { return m_wrapper.get(); } 154 154 155 155 struct FontLoadTiming { -
trunk/Source/WebCore/css/parser/CSSDeferredParser.cpp
r245857 r245863 40 40 } 41 41 42 StyleSheetContents* CSSDeferredParser::styleSheet() const43 {44 return m_styleSheet.get();45 }46 47 42 Ref<ImmutableStyleProperties> CSSDeferredParser::parseDeclaration(const CSSParserTokenRange& range) 48 43 { -
trunk/Source/WebCore/css/parser/CSSDeferredParser.h
r245857 r245863 48 48 49 49 const CSSParserContext& context() const { return m_context; } 50 StyleSheetContents* styleSheet() const ;50 StyleSheetContents* styleSheet() const { return m_styleSheet.get(); } 51 51 52 52 Ref<ImmutableStyleProperties> parseDeclaration(const CSSParserTokenRange&); -
trunk/Source/WebCore/dom/ContainerNode.h
r245857 r245863 26 26 #include "CollectionType.h" 27 27 #include "Node.h" 28 #include <wtf/WeakPtr.h>29 28 30 29 namespace WebCore { … … 37 36 typedef Vector<Ref<Node>, initialNodeVectorSize> NodeVector; 38 37 39 class ContainerNode : public CanMakeWeakPtr<ContainerNode>, publicNode {38 class ContainerNode : public Node { 40 39 WTF_MAKE_ISO_ALLOCATED(ContainerNode); 41 40 public: -
trunk/Source/WebCore/dom/Document.h
r245857 r245863 348 348 , public ScriptExecutionContext 349 349 , public FontSelectorClient 350 , public CanMakeWeakPtr<Document> 350 351 , public FrameDestructionObserver 351 352 , public Supplementable<Document> -
trunk/Source/WebCore/dom/Element.h
r245857 r245863 78 78 #endif 79 79 80 class Element : public ContainerNode {80 class Element : public ContainerNode , public CanMakeWeakPtr<Element> { 81 81 WTF_MAKE_ISO_ALLOCATED(Element); 82 82 public: -
trunk/Source/WebCore/dom/FullscreenManager.cpp
r245857 r245863 440 440 } 441 441 442 RenderFullScreen* FullscreenManager::fullscreenRenderer() const443 {444 return m_fullscreenRenderer.get();445 }446 447 442 void FullscreenManager::dispatchFullscreenChangeEvents() 448 443 { -
trunk/Source/WebCore/dom/FullscreenManager.h
r245857 r245863 80 80 81 81 void setFullscreenRenderer(RenderTreeBuilder&, RenderFullScreen&); 82 RenderFullScreen* fullscreenRenderer() const ;82 RenderFullScreen* fullscreenRenderer() const { return m_fullscreenRenderer.get(); } 83 83 84 84 void dispatchFullscreenChangeEvents(); -
trunk/Source/WebCore/html/FormAssociatedElement.cpp
r245857 r245863 120 120 } 121 121 122 HTMLFormElement* FormAssociatedElement::form() const123 {124 return m_form.get();125 }126 127 122 void FormAssociatedElement::formOwnerRemovedFromTree(const Node& formRoot) 128 123 { -
trunk/Source/WebCore/html/FormAssociatedElement.h
r245857 r245863 49 49 50 50 static HTMLFormElement* findAssociatedForm(const HTMLElement*, HTMLFormElement*); 51 WEBCORE_EXPORT HTMLFormElement* form() const;51 HTMLFormElement* form() const { return m_form.get(); } 52 52 ValidityState* validity(); 53 53 -
trunk/Source/WebCore/html/HTMLMediaElement.h
r245857 r245863 150 150 WTF_MAKE_ISO_ALLOCATED(HTMLMediaElement); 151 151 public: 152 typedef HTMLElement::WeakValueType WeakValueType;153 using HTMLElement::weakPtrFactory;154 155 152 RefPtr<MediaPlayer> player() const { return m_player; } 156 153 … … 578 575 579 576 enum class AutoplayEventPlaybackState { None, PreventedAutoplay, StartedWithUserGesture, StartedWithoutUserGesture }; 577 578 using HTMLElement::weakPtrFactory; 580 579 581 580 protected: -
trunk/Source/WebCore/loader/MediaResourceLoader.cpp
r245857 r245863 98 98 auto cachedRequest = createPotentialAccessControlRequest(WTFMove(request), *m_document, m_crossOriginMode, WTFMove(loaderOptions)); 99 99 if (m_mediaElement) 100 cachedRequest.setInitiator(*m_mediaElement );100 cachedRequest.setInitiator(*m_mediaElement.get()); 101 101 102 102 auto resource = m_document->cachedResourceLoader().requestMedia(WTFMove(cachedRequest)).value_or(nullptr); -
trunk/Source/WebCore/page/DOMWindowProperty.cpp
r245857 r245863 43 43 } 44 44 45 DOMWindow* DOMWindowProperty::window() const46 {47 return m_window.get();48 45 } 49 50 } -
trunk/Source/WebCore/page/DOMWindowProperty.h
r245857 r245863 36 36 public: 37 37 Frame* frame() const; 38 DOMWindow* window() const ;38 DOMWindow* window() const { return m_window.get(); } 39 39 40 40 protected: -
trunk/Source/WebCore/page/FrameViewLayoutContext.cpp
r245857 r245863 459 459 } 460 460 461 RenderElement* FrameViewLayoutContext::subtreeLayoutRoot() const462 {463 return m_subtreeLayoutRoot.get();464 }465 466 461 void FrameViewLayoutContext::convertSubtreeLayoutToFullLayout() 467 462 { -
trunk/Source/WebCore/page/FrameViewLayoutContext.h
r245857 r245863 28 28 #include "LayoutUnit.h" 29 29 #include "Timer.h" 30 30 31 #include <wtf/WeakPtr.h> 31 32 … … 82 83 unsigned layoutCount() const { return m_layoutCount; } 83 84 84 RenderElement* subtreeLayoutRoot() const ;85 RenderElement* subtreeLayoutRoot() const { return m_subtreeLayoutRoot.get(); } 85 86 void clearSubtreeLayoutRoot() { m_subtreeLayoutRoot.clear(); } 86 87 void convertSubtreeLayoutToFullLayout(); -
trunk/Source/WebCore/page/UndoItem.cpp
r245857 r245863 34 34 WTF_MAKE_ISO_ALLOCATED_IMPL(UndoItem); 35 35 36 UndoManager* UndoItem::undoManager() const37 {38 return m_undoManager.get();39 }40 41 36 void UndoItem::setUndoManager(UndoManager* undoManager) 42 37 { -
trunk/Source/WebCore/page/UndoItem.h
r245857 r245863 56 56 Document* document() const; 57 57 58 UndoManager* undoManager() const ;58 UndoManager* undoManager() const { return m_undoManager.get(); } 59 59 void setUndoManager(UndoManager*); 60 60 -
trunk/Source/WebCore/platform/ScrollView.h
r245857 r245863 66 66 virtual ~ScrollView(); 67 67 68 typedef Widget::WeakValueType WeakValueType;69 using Widget::weakPtrFactory;70 71 68 // ScrollableArea functions. 72 69 int scrollSize(ScrollbarOrientation) const final; … … 77 74 78 75 virtual void notifyPageThatContentAreaWillPaint() const; 76 77 using Widget::weakPtrFactory; 79 78 80 79 IntPoint locationOfContents() const; -
trunk/Source/WebCore/platform/Widget.cpp
r245857 r245863 43 43 } 44 44 45 ScrollView* Widget::parent() const46 {47 return m_parent.get();48 }49 50 45 void Widget::setParent(ScrollView* view) 51 46 { -
trunk/Source/WebCore/platform/Widget.h
r245857 r245863 141 141 WEBCORE_EXPORT void removeFromParent(); 142 142 WEBCORE_EXPORT virtual void setParent(ScrollView* view); 143 WEBCORE_EXPORT ScrollView* parent() const;143 ScrollView* parent() const { return m_parent.get(); } 144 144 FrameView* root() const; 145 145 -
trunk/Source/WebCore/platform/encryptedmedia/CDMInstanceSession.h
r245857 r245863 40 40 class SharedBuffer; 41 41 42 class CDMInstanceSessionClient : public CanMakeWeakPtr<CDMInstanceSessionClient>{42 class CDMInstanceSessionClient { 43 43 public: 44 44 virtual ~CDMInstanceSessionClient() = default; -
trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h
r245857 r245863 338 338 void setShouldObserveTimeControlStatus(bool); 339 339 340 WeakPtrFactory<MediaPlayerPrivateAVFoundationObjC> m_weakPtrFactory; 340 341 RetainPtr<AVURLAsset> m_avAsset; 341 342 RetainPtr<AVPlayer> m_avPlayer; -
trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm
r245857 r245863 360 360 , m_videoFullscreenLayerManager(std::make_unique<VideoFullscreenLayerManagerObjC>()) 361 361 , m_videoFullscreenGravity(MediaPlayer::VideoGravityResizeAspect) 362 , m_objcObserver(adoptNS([[WebCoreAVFMovieObserver alloc] initWithPlayer:m akeWeakPtr(*this)]))362 , m_objcObserver(adoptNS([[WebCoreAVFMovieObserver alloc] initWithPlayer:m_weakPtrFactory.createWeakPtr(*this)])) 363 363 , m_videoFrameHasDrawn(false) 364 364 , m_haveCheckedPlayability(false) 365 365 #if HAVE(AVFOUNDATION_VIDEO_OUTPUT) 366 , m_videoOutputDelegate(adoptNS([[WebCoreAVFPullDelegate alloc] initWithPlayer:m akeWeakPtr(*this)]))366 , m_videoOutputDelegate(adoptNS([[WebCoreAVFPullDelegate alloc] initWithPlayer:m_weakPtrFactory.createWeakPtr(*this)])) 367 367 #endif 368 368 #if HAVE(AVFOUNDATION_LOADER_DELEGATE) 369 , m_loaderDelegate(adoptNS([[WebCoreAVFLoaderDelegate alloc] initWithPlayer:m akeWeakPtr(*this)]))369 , m_loaderDelegate(adoptNS([[WebCoreAVFLoaderDelegate alloc] initWithPlayer:m_weakPtrFactory.createWeakPtr(*this)])) 370 370 #endif 371 371 , m_currentTextTrack(0) … … 388 388 MediaPlayerPrivateAVFoundationObjC::~MediaPlayerPrivateAVFoundationObjC() 389 389 { 390 weakPtrFactory().revokeAll();390 m_weakPtrFactory.revokeAll(); 391 391 392 392 #if HAVE(AVFOUNDATION_LOADER_DELEGATE) -
trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h
r245857 r245863 60 60 61 61 class MediaPlayerPrivateMediaSourceAVFObjC 62 : public CanMakeWeakPtr<MediaPlayerPrivateMediaSourceAVFObjC> 63 , public MediaPlayerPrivateInterface 62 : public MediaPlayerPrivateInterface 64 63 #if !RELEASE_LOG_DISABLED 65 64 , private LoggerHelper … … 123 122 #endif 124 123 void setCDMSession(LegacyCDMSession*) override; 125 CDMSessionMediaSourceAVFObjC* cdmSession() const ;124 CDMSessionMediaSourceAVFObjC* cdmSession() const { return m_session.get(); } 126 125 #endif 127 126 … … 148 147 const Vector<ContentType>& mediaContentTypesRequiringHardwareSupport() const; 149 148 bool shouldCheckHardwareSupport() const; 149 150 WeakPtr<MediaPlayerPrivateMediaSourceAVFObjC> createWeakPtr() { return m_weakPtrFactory.createWeakPtr(*this); } 150 151 151 152 #if !RELEASE_LOG_DISABLED … … 282 283 283 284 MediaPlayer* m_player; 285 WeakPtrFactory<MediaPlayerPrivateMediaSourceAVFObjC> m_weakPtrFactory; 284 286 WeakPtrFactory<MediaPlayerPrivateMediaSourceAVFObjC> m_sizeChangeObserverWeakPtrFactory; 285 287 RefPtr<MediaSourcePrivateAVFObjC> m_mediaSourcePrivate; -
trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm
r245857 r245863 53 53 #import <wtf/MainThread.h> 54 54 #import <wtf/NeverDestroyed.h> 55 #import <wtf/WeakPtr.h>56 55 57 56 #import "CoreVideoSoftLink.h" … … 89 88 { 90 89 MediaPlayerPrivateMediaSourceAVFObjC* player = (MediaPlayerPrivateMediaSourceAVFObjC*)const_cast<void*>(listener); 91 callOnMainThread([weakThis = makeWeakPtr(player)] {90 callOnMainThread([weakThis = player->createWeakPtr()] { 92 91 if (!weakThis) 93 92 return; 94 weakThis ->effectiveRateChanged();93 weakThis.get()->effectiveRateChanged(); 95 94 }); 96 95 } … … 122 121 // addPeriodicTimeObserverForInterval: throws an exception if you pass a non-numeric CMTime, so just use 123 122 // an arbitrarily large time value of once an hour: 124 __block auto weakThis = makeWeakPtr(*this);123 __block auto weakThis = createWeakPtr(); 125 124 m_timeJumpedObserver = [m_synchronizer addPeriodicTimeObserverForInterval:PAL::toCMTime(MediaTime::createWithDouble(3600)) queue:dispatch_get_main_queue() usingBlock:^(CMTime time) { 126 125 #if LOG_DISABLED … … 288 287 { 289 288 ALWAYS_LOG(LOGIDENTIFIER); 290 callOnMainThread([weakThis = makeWeakPtr(*this)] {289 callOnMainThread([weakThis = createWeakPtr()] { 291 290 if (!weakThis) 292 291 return; … … 309 308 { 310 309 ALWAYS_LOG(LOGIDENTIFIER); 311 callOnMainThread([weakThis = makeWeakPtr(*this)] {310 callOnMainThread([weakThis = createWeakPtr()] { 312 311 if (!weakThis) 313 312 return; … … 409 408 410 409 m_seeking = true; 410 auto weakThis = createWeakPtr(); 411 411 m_pendingSeek = std::make_unique<PendingSeek>(time, negativeThreshold, positiveThreshold); 412 412 … … 859 859 860 860 MediaTime duration = m_mediaSourcePrivate->duration(); 861 auto weakThis = createWeakPtr(); 861 862 NSArray* times = @[[NSValue valueWithCMTime:PAL::toCMTime(duration)]]; 862 863 … … 865 866 UNUSED_PARAM(logSiteIdentifier); 866 867 867 m_durationObserver = [m_synchronizer addBoundaryTimeObserverForTimes:times queue:dispatch_get_main_queue() usingBlock:[weakThis = makeWeakPtr(*this), duration, logSiteIdentifier, this] {868 m_durationObserver = [m_synchronizer addBoundaryTimeObserverForTimes:times queue:dispatch_get_main_queue() usingBlock:[weakThis, duration, logSiteIdentifier, this] { 868 869 if (!weakThis) 869 870 return; … … 955 956 #endif 956 957 957 CDMSessionMediaSourceAVFObjC* MediaPlayerPrivateMediaSourceAVFObjC::cdmSession() const958 {959 return m_session.get();960 }961 962 958 void MediaPlayerPrivateMediaSourceAVFObjC::setCDMSession(LegacyCDMSession* session) 963 959 { -
trunk/Source/WebCore/platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.h
r245857 r245863 176 176 ALLOW_NEW_API_WITHOUT_GUARDS_END 177 177 178 WeakPtr<SourceBufferPrivateAVFObjC> createWeakPtr() { return m_weakFactory.createWeakPtr(*this); } 179 178 180 Vector<RefPtr<VideoTrackPrivateMediaSourceAVFObjC>> m_videoTracks; 179 181 Vector<RefPtr<AudioTrackPrivateMediaSourceAVFObjC>> m_audioTracks; 180 182 Vector<SourceBufferPrivateAVFObjCErrorClient*> m_errorClients; 181 183 184 WeakPtrFactory<SourceBufferPrivateAVFObjC> m_weakFactory; 182 185 WeakPtrFactory<SourceBufferPrivateAVFObjC> m_appendWeakFactory; 183 186 -
trunk/Source/WebCore/platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm
r245857 r245863 466 466 SourceBufferPrivateAVFObjC::SourceBufferPrivateAVFObjC(MediaSourcePrivateAVFObjC* parent) 467 467 : m_parser(adoptNS([PAL::allocAVStreamDataParserInstance() init])) 468 , m_delegate(adoptNS([[WebAVStreamDataParserListener alloc] initWithParser:m_parser.get() parent: makeWeakPtr(*this)]))469 , m_errorListener(adoptNS([[WebAVSampleBufferErrorListener alloc] initWithParent: makeWeakPtr(*this)]))468 , m_delegate(adoptNS([[WebAVStreamDataParserListener alloc] initWithParser:m_parser.get() parent:createWeakPtr()])) 469 , m_errorListener(adoptNS([[WebAVSampleBufferErrorListener alloc] initWithParent:createWeakPtr()])) 470 470 , m_isAppendingGroup(adoptOSObject(dispatch_group_create())) 471 471 , m_mediaSource(parent) … … 885 885 if (!m_audioRenderers.contains(trackID)) { 886 886 renderer = adoptNS([PAL::allocAVSampleBufferAudioRendererInstance() init]); 887 auto weakThis = makeWeakPtr(*this);887 auto weakThis = createWeakPtr(); 888 888 [renderer requestMediaDataWhenReadyOnQueue:dispatch_get_main_queue() usingBlock:^{ 889 889 if (weakThis) … … 921 921 922 922 if (m_hdcpError) { 923 callOnMainThread([weakThis = makeWeakPtr(*this)] { 923 WeakPtr<SourceBufferPrivateAVFObjC> weakThis = createWeakPtr(); 924 callOnMainThread([weakThis] { 924 925 if (!weakThis || !weakThis->m_session || !weakThis->m_hdcpError) 925 926 return; … … 1065 1066 if (m_decompressionSession) { 1066 1067 m_decompressionSession->flush(); 1067 m_decompressionSession->notifyWhenHasAvailableVideoFrame([weakThis = makeWeakPtr(*this)] {1068 m_decompressionSession->notifyWhenHasAvailableVideoFrame([weakThis = createWeakPtr()] { 1068 1069 if (weakThis && weakThis->m_mediaSource) 1069 1070 weakThis->m_mediaSource->player()->setHasAvailableVideoFrame(true); … … 1138 1139 } else { 1139 1140 [m_displayLayer enqueueSampleBuffer:platformSample.sample.cmSampleBuffer]; 1140 [m_displayLayer prerollDecodeWithCompletionHandler:[weakThis = makeWeakPtr(*this)] (BOOL success) mutable {1141 [m_displayLayer prerollDecodeWithCompletionHandler:[weakThis = createWeakPtr()] (BOOL success) mutable { 1141 1142 if (!success || !weakThis) 1142 1143 return; … … 1237 1238 } 1238 1239 if (m_displayLayer) { 1239 auto weakThis = makeWeakPtr(*this);1240 auto weakThis = createWeakPtr(); 1240 1241 [m_displayLayer requestMediaDataWhenReadyOnQueue:dispatch_get_main_queue() usingBlock:^ { 1241 1242 if (weakThis) … … 1244 1245 } 1245 1246 } else if (m_audioRenderers.contains(trackID)) { 1246 auto weakThis = makeWeakPtr(*this);1247 auto weakThis = createWeakPtr(); 1247 1248 [m_audioRenderers.get(trackID) requestMediaDataWhenReadyOnQueue:dispatch_get_main_queue() usingBlock:^ { 1248 1249 if (weakThis) … … 1278 1279 1279 1280 if (m_displayLayer) { 1280 auto weakThis = makeWeakPtr(*this);1281 auto weakThis = createWeakPtr(); 1281 1282 [m_displayLayer requestMediaDataWhenReadyOnQueue:dispatch_get_main_queue() usingBlock:^ { 1282 1283 if (weakThis) … … 1306 1307 return; 1307 1308 1308 m_decompressionSession->requestMediaDataWhenReady([weakThis = makeWeakPtr(*this)] { 1309 WeakPtr<SourceBufferPrivateAVFObjC> weakThis = createWeakPtr(); 1310 m_decompressionSession->requestMediaDataWhenReady([weakThis] { 1309 1311 if (weakThis) 1310 1312 weakThis->didBecomeReadyForMoreSamples(weakThis->m_enabledVideoTrackID); 1311 1313 }); 1312 m_decompressionSession->notifyWhenHasAvailableVideoFrame([weakThis = makeWeakPtr(*this)] {1314 m_decompressionSession->notifyWhenHasAvailableVideoFrame([weakThis = createWeakPtr()] { 1313 1315 if (weakThis && weakThis->m_mediaSource) 1314 1316 weakThis->m_mediaSource->player()->setHasAvailableVideoFrame(true); -
trunk/Source/WebCore/rendering/RenderBlockFlow.cpp
r245857 r245863 160 160 } 161 161 162 RenderMultiColumnFlow* RenderBlockFlow::multiColumnFlowSlowCase() const163 {164 return rareBlockFlowData()->m_multiColumnFlow.get();165 }166 167 162 RenderBlockFlow* RenderBlockFlow::previousSiblingWithOverhangingFloats(bool& parentHasFloats) const 168 163 { -
trunk/Source/WebCore/rendering/RenderBlockFlow.h
r245857 r245863 265 265 void layoutLineGridBox(); 266 266 267 RenderMultiColumnFlow* multiColumnFlow() const { return hasRareBlockFlowData() ? multiColumnFlowSlowCase() : nullptr; } 268 RenderMultiColumnFlow* multiColumnFlowSlowCase() const; 267 RenderMultiColumnFlow* multiColumnFlow() const { return hasRareBlockFlowData() ? rareBlockFlowData()->m_multiColumnFlow.get() : nullptr; } 269 268 void setMultiColumnFlow(RenderMultiColumnFlow&); 270 269 void clearMultiColumnFlow(); -
trunk/Source/WebCore/rendering/RenderMultiColumnFlow.cpp
r245857 r245863 108 108 } 109 109 110 RenderMultiColumnSpannerPlaceholder* RenderMultiColumnFlow::findColumnSpannerPlaceholder(RenderBox* spanner) const111 {112 return m_spannerMap->get(spanner).get();113 }114 115 110 void RenderMultiColumnFlow::layout() 116 111 { -
trunk/Source/WebCore/rendering/RenderMultiColumnFlow.h
r245857 r245863 49 49 static RenderBox* previousColumnSetOrSpannerSiblingOf(const RenderBox*); 50 50 51 RenderMultiColumnSpannerPlaceholder* findColumnSpannerPlaceholder(RenderBox* spanner) const ;51 RenderMultiColumnSpannerPlaceholder* findColumnSpannerPlaceholder(RenderBox* spanner) const { return m_spannerMap->get(spanner).get(); } 52 52 53 53 void layout() override; -
trunk/Source/WebCore/rendering/RenderTable.cpp
r245857 r245863 96 96 97 97 RenderTable::~RenderTable() = default; 98 99 RenderTableSection* RenderTable::header() const100 {101 return m_head.get();102 }103 104 RenderTableSection* RenderTable::footer() const105 {106 return m_foot.get();107 }108 109 RenderTableSection* RenderTable::firstBody() const110 {111 return m_firstBody.get();112 }113 114 RenderTableSection* RenderTable::topSection() const115 {116 ASSERT(!needsSectionRecalc());117 if (m_head)118 return m_head.get();119 if (m_firstBody)120 return m_firstBody.get();121 return m_foot.get();122 }123 98 124 99 void RenderTable::styleDidChange(StyleDifference diff, const RenderStyle* oldStyle) -
trunk/Source/WebCore/rendering/RenderTable.h
r245857 r245863 153 153 } 154 154 155 RenderTableSection* header() const ;156 RenderTableSection* footer() const ;157 RenderTableSection* firstBody() const ;155 RenderTableSection* header() const { return m_head.get(); } 156 RenderTableSection* footer() const { return m_foot.get(); } 157 RenderTableSection* firstBody() const { return m_firstBody.get(); } 158 158 159 159 // This function returns 0 if the table has no section. … … 371 371 }; 372 372 373 inline RenderTableSection* RenderTable::topSection() const 374 { 375 ASSERT(!needsSectionRecalc()); 376 if (m_head) 377 return m_head.get(); 378 if (m_firstBody) 379 return m_firstBody.get(); 380 return m_foot.get(); 381 } 382 373 383 inline bool isDirectionSame(const RenderBox* tableItem, const RenderBox* otherTableItem) { return tableItem && otherTableItem ? tableItem->style().direction() == otherTableItem->style().direction() : true; } 374 384 -
trunk/Source/WebKit/ChangeLog
r245860 r245863 1 2019-05-29 Ryan Haddad <ryanhaddad@apple.com> 2 3 Unreviewed, rolling out r245857. 4 5 Breaks internal builds. 6 7 Reverted changeset: 8 9 "WeakPtr breaks vtables when upcasting to base classes" 10 https://bugs.webkit.org/show_bug.cgi?id=188799 11 https://trac.webkit.org/changeset/245857 12 1 13 2019-05-29 Chris Dumez <cdumez@apple.com> 2 14 -
trunk/Source/WebKit/NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp
r245857 r245863 1017 1017 } 1018 1018 1019 NetworkSession* WebResourceLoadStatisticsStore::networkSession()1020 {1021 return m_networkSession.get();1022 }1023 1024 1019 void WebResourceLoadStatisticsStore::deleteWebsiteDataForRegistrableDomains(OptionSet<WebsiteDataType> dataTypes, HashMap<RegistrableDomain, WebsiteDataToRemove>&& domainsToRemoveWebsiteDataFor, bool shouldNotifyPage, CompletionHandler<void(const HashSet<RegistrableDomain>&)>&& completionHandler) 1025 1020 { -
trunk/Source/WebKit/NetworkProcess/Classifier/WebResourceLoadStatisticsStore.h
r245857 r245863 176 176 void notifyResourceLoadStatisticsProcessed(); 177 177 178 NetworkSession* networkSession() ;178 NetworkSession* networkSession() { return m_networkSession.get(); } 179 179 180 180 void sendDiagnosticMessageWithValue(const String& message, const String& description, unsigned value, unsigned sigDigits, WebCore::ShouldSample) const; -
trunk/Source/WebKit/Shared/WebBackForwardListItem.cpp
r245857 r245863 169 169 } 170 170 171 SuspendedPageProxy* WebBackForwardListItem::suspendedPage() const172 {173 return m_suspendedPage.get();174 }175 176 171 void WebBackForwardListItem::removeSuspendedPageFromProcessPool() 177 172 { -
trunk/Source/WebKit/Shared/WebBackForwardListItem.h
r245857 r245863 76 76 #endif 77 77 void setSuspendedPage(SuspendedPageProxy*); 78 SuspendedPageProxy* suspendedPage() const ;78 SuspendedPageProxy* suspendedPage() const { return m_suspendedPage.get(); } 79 79 80 80 #if !LOG_DISABLED -
trunk/Source/WebKit/UIProcess/API/glib/WebKitWebResource.cpp
r245857 r245863 25 25 #include "WebKitURIRequest.h" 26 26 #include "WebKitWebResourcePrivate.h" 27 #include "WebPageProxy.h"28 27 #include <glib/gi18n-lib.h> 29 28 #include <wtf/glib/GRefPtr.h> -
trunk/Source/WebKit/UIProcess/Authentication/cocoa/SecKeyProxyStore.h
r245857 r245863 40 40 namespace WebKit { 41 41 42 class SecKeyProxyStore : public RefCounted<SecKeyProxyStore> , public CanMakeWeakPtr<SecKeyProxyStore>{42 class SecKeyProxyStore : public RefCounted<SecKeyProxyStore> { 43 43 public: 44 44 static Ref<SecKeyProxyStore> create() { return adoptRef(* new SecKeyProxyStore()); } … … 48 48 49 49 auto* get() const { return m_secKeyProxy.get(); } 50 auto& weakPtrFactory() const { return m_weakPtrFactory; } 50 51 51 52 private: 52 53 SecKeyProxyStore() = default; 53 54 55 WeakPtrFactory<SecKeyProxyStore> m_weakPtrFactory; 54 56 RetainPtr<SecKeyProxy> m_secKeyProxy; 55 57 }; -
trunk/Source/WebKit/UIProcess/WebAuthentication/AuthenticatorManager.h
r245857 r245863 50 50 51 51 using AuthenticatorTransportService::Observer::weakPtrFactory; 52 typedef AuthenticatorTransportService::Observer::WeakValueType WeakValueType;53 52 54 53 AuthenticatorManager(); -
trunk/Source/WebKit/UIProcess/WebProcessProxy.cpp
r245857 r245863 1514 1514 } 1515 1515 1516 WebProcessPool& WebProcessProxy::processPool() const1517 {1518 ASSERT(m_processPool);1519 return *m_processPool.get();1520 }1521 1522 1516 #if PLATFORM(WATCHOS) 1523 1517 -
trunk/Source/WebKit/UIProcess/WebProcessProxy.h
r245857 r245863 120 120 void decrementSuspendedPageCount(); 121 121 122 WebProcessPool& processPool() const ;122 WebProcessPool& processPool() const { ASSERT(m_processPool); return *m_processPool.get(); } 123 123 124 124 WebCore::RegistrableDomain registrableDomain() const { return m_registrableDomain.valueOr(WebCore::RegistrableDomain { }); } -
trunk/Tools/ChangeLog
r245857 r245863 1 2019-05-29 Ryan Haddad <ryanhaddad@apple.com> 2 3 Unreviewed, rolling out r245857. 4 5 Breaks internal builds. 6 7 Reverted changeset: 8 9 "WeakPtr breaks vtables when upcasting to base classes" 10 https://bugs.webkit.org/show_bug.cgi?id=188799 11 https://trac.webkit.org/changeset/245857 12 1 13 2019-05-28 Geoffrey Garen <ggaren@apple.com> 2 14 -
trunk/Tools/TestWebKitAPI/Tests/WTF/WeakPtr.cpp
r245857 r245863 26 26 #include "config.h" 27 27 28 static unsigned s_baseWeakReferences = 0;29 30 #define DID_CREATE_WEAK_REFERENCE(p) do { \31 ++s_baseWeakReferences; \32 } while (0);33 34 #define WILL_DESTROY_WEAK_REFERENCE(p) do { \35 --s_baseWeakReferences; \36 } while (0);37 38 28 #include "Test.h" 39 29 #include <wtf/HashSet.h> … … 41 31 #include <wtf/WeakPtr.h> 42 32 33 static unsigned s_baseWeakReferences = 0; 34 43 35 namespace TestWebKitAPI { 44 36 45 struct Int : public CanMakeWeakPtr<Int> { 46 Int(int i) : m_i(i) { } 47 operator int() const { return m_i; } 48 bool operator==(const Int& other) const { return m_i == other.m_i; } 49 int m_i; 50 }; 51 52 class Base : public CanMakeWeakPtr<Base> { 37 class Base { 53 38 public: 54 39 Base() { } … … 59 44 } 60 45 61 int dummy; // Prevent empty base class optimization, to make testing more interesting. 46 auto& weakPtrFactory() const { return m_weakPtrFactory; } 47 48 private: 49 WeakPtrFactory<Base> m_weakPtrFactory; 62 50 }; 63 51 … … 66 54 Derived() { } 67 55 68 virtual ~Derived() { } // Force a pointer fixup when casting Base <-> Derived69 70 56 int foo() 71 57 { … … 76 62 } 77 63 64 namespace WTF { 65 66 template<> 67 WeakReference<TestWebKitAPI::Base>::WeakReference(TestWebKitAPI::Base* ptr) 68 : m_ptr(ptr) 69 { 70 ++s_baseWeakReferences; 71 } 72 template<> 73 WeakReference<TestWebKitAPI::Base>::~WeakReference() 74 { 75 --s_baseWeakReferences; 76 } 77 78 } 79 78 80 namespace TestWebKitAPI { 79 81 80 82 TEST(WTF_WeakPtr, Basic) 81 83 { 82 Int dummy(5);83 WeakPtrFactory< Int>* factory = new WeakPtrFactory<Int>();84 WeakPtr< Int> weakPtr1 = factory->createWeakPtr(dummy);85 WeakPtr< Int> weakPtr2 = factory->createWeakPtr(dummy);86 WeakPtr< Int> weakPtr3 = factory->createWeakPtr(dummy);84 int dummy = 5; 85 WeakPtrFactory<int>* factory = new WeakPtrFactory<int>(); 86 WeakPtr<int> weakPtr1 = factory->createWeakPtr(dummy); 87 WeakPtr<int> weakPtr2 = factory->createWeakPtr(dummy); 88 WeakPtr<int> weakPtr3 = factory->createWeakPtr(dummy); 87 89 EXPECT_EQ(weakPtr1.get(), &dummy); 88 90 EXPECT_EQ(weakPtr2.get(), &dummy); … … 105 107 TEST(WTF_WeakPtr, Assignment) 106 108 { 107 Int dummy(5);108 WeakPtr< Int> weakPtr;109 { 110 WeakPtrFactory< Int> factory;109 int dummy = 5; 110 WeakPtr<int> weakPtr; 111 { 112 WeakPtrFactory<int> factory; 111 113 EXPECT_NULL(weakPtr.get()); 112 114 weakPtr = factory.createWeakPtr(dummy); … … 118 120 TEST(WTF_WeakPtr, MultipleFactories) 119 121 { 120 Int dummy1(5);121 Int dummy2(7);122 WeakPtrFactory< Int>* factory1 = new WeakPtrFactory<Int>();123 WeakPtrFactory< Int>* factory2 = new WeakPtrFactory<Int>();124 WeakPtr< Int> weakPtr1 = factory1->createWeakPtr(dummy1);125 WeakPtr< Int> weakPtr2 = factory2->createWeakPtr(dummy2);122 int dummy1 = 5; 123 int dummy2 = 7; 124 WeakPtrFactory<int>* factory1 = new WeakPtrFactory<int>(); 125 WeakPtrFactory<int>* factory2 = new WeakPtrFactory<int>(); 126 WeakPtr<int> weakPtr1 = factory1->createWeakPtr(dummy1); 127 WeakPtr<int> weakPtr2 = factory2->createWeakPtr(dummy2); 126 128 EXPECT_EQ(weakPtr1.get(), &dummy1); 127 129 EXPECT_EQ(weakPtr2.get(), &dummy2); … … 138 140 TEST(WTF_WeakPtr, RevokeAll) 139 141 { 140 Int dummy(5);141 WeakPtrFactory< Int> factory;142 WeakPtr< Int> weakPtr1 = factory.createWeakPtr(dummy);143 WeakPtr< Int> weakPtr2 = factory.createWeakPtr(dummy);144 WeakPtr< Int> weakPtr3 = factory.createWeakPtr(dummy);142 int dummy = 5; 143 WeakPtrFactory<int> factory; 144 WeakPtr<int> weakPtr1 = factory.createWeakPtr(dummy); 145 WeakPtr<int> weakPtr2 = factory.createWeakPtr(dummy); 146 WeakPtr<int> weakPtr3 = factory.createWeakPtr(dummy); 145 147 EXPECT_EQ(weakPtr1.get(), &dummy); 146 148 EXPECT_EQ(weakPtr2.get(), &dummy); … … 152 154 } 153 155 154 struct Foo : public CanMakeWeakPtr<Foo>{156 struct Foo { 155 157 void bar() { }; 156 158 }; … … 184 186 TEST(WTF_WeakPtr, Forget) 185 187 { 186 Int dummy(5);187 Int dummy2(7);188 189 WeakPtrFactory< Int> outerFactory;190 WeakPtr< Int> weakPtr1, weakPtr2, weakPtr3, weakPtr4;191 { 192 WeakPtrFactory< Int> innerFactory;188 int dummy = 5; 189 int dummy2 = 7; 190 191 WeakPtrFactory<int> outerFactory; 192 WeakPtr<int> weakPtr1, weakPtr2, weakPtr3, weakPtr4; 193 { 194 WeakPtrFactory<int> innerFactory; 193 195 weakPtr1 = innerFactory.createWeakPtr(dummy); 194 196 weakPtr2 = innerFactory.createWeakPtr(dummy); … … 216 218 EXPECT_EQ(weakPtr4.get(), &dummy); 217 219 218 WeakPtr< Int> weakPtr5 = weakPtr2;220 WeakPtr<int> weakPtr5 = weakPtr2; 219 221 EXPECT_EQ(weakPtr2.get(), &dummy); 220 222 EXPECT_EQ(weakPtr5.get(), &dummy); … … 232 234 EXPECT_EQ(weakPtr4.get(), &dummy2); 233 235 234 WeakPtr< Int> weakPtr5 = weakPtr4;236 WeakPtr<int> weakPtr5 = weakPtr4; 235 237 EXPECT_EQ(weakPtr4.get(), &dummy2); 236 238 EXPECT_EQ(weakPtr5.get(), &dummy2); 237 239 weakPtr5.clear(); 238 240 EXPECT_NULL(weakPtr5.get()); 239 WeakPtr< Int> weakPtr6 = weakPtr5;241 WeakPtr<int> weakPtr6 = weakPtr5; 240 242 EXPECT_NULL(weakPtr6.get()); 241 243 EXPECT_EQ(weakPtr5.get(), weakPtr6.get()); 242 244 243 WeakPtr< Int> weakPtr7 = outerFactory.createWeakPtr(dummy2);245 WeakPtr<int> weakPtr7 = outerFactory.createWeakPtr(dummy2); 244 246 EXPECT_EQ(weakPtr7.get(), &dummy2); 245 247 weakPtr7 = nullptr; … … 249 251 TEST(WTF_WeakPtr, Downcasting) 250 252 { 251 int dummy0 (0);252 int dummy1 (1);253 int dummy0 = 0; 254 int dummy1 = 1; 253 255 254 256 WeakPtr<Base> baseWeakPtr;
Note: See TracChangeset
for help on using the changeset viewer.