Changeset 160187 in webkit
- Timestamp:
- Dec 5, 2013 12:40:21 PM (10 years ago)
- Location:
- trunk
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit2/ChangeLog
r160162 r160187 1 2013-12-05 Anders Carlsson <andersca@apple.com> 2 3 Tweak WeakObjCPtr 4 https://bugs.webkit.org/show_bug.cgi?id=125311 5 6 Reviewed by Darin Adler. 7 8 Make it possible to use WeakObjCPtr with pointer types such as id. Also, 9 add a getAutoreleased() member that will load the weak pointer and retain + autorelease it. 10 11 * Shared/mac/WeakObjCPtr.h: 12 (WebKit::WeakObjCPtr::WeakObjCPtr): 13 (WebKit::WeakObjCPtr::operator=): 14 (WebKit::WeakObjCPtr::get): 15 (WebKit::WeakObjCPtr::getAutoreleased): 16 1 17 2013-12-05 Zan Dobersek <zdobersek@igalia.com> 2 18 -
trunk/Source/WebKit2/Shared/mac/WeakObjCPtr.h
r160146 r160187 28 28 29 29 #include <objc/runtime.h> 30 #include <type_traits> 30 31 #include <wtf/RetainPtr.h> 31 32 … … 44 45 template<typename T> class WeakObjCPtr { 45 46 public: 47 typedef typename std::remove_pointer<T>::type ValueType; 48 46 49 WeakObjCPtr() 47 50 : m_weakReference(nullptr) … … 49 52 } 50 53 51 WeakObjCPtr( T*ptr)54 WeakObjCPtr(ValueType *ptr) 52 55 { 53 56 objc_initWeak(&m_weakReference, ptr); … … 59 62 } 60 63 61 WeakObjCPtr& operator=( T*ptr)64 WeakObjCPtr& operator=(ValueType *ptr) 62 65 { 63 66 objc_storeWeak(&m_weakReference, ptr); … … 66 69 } 67 70 68 RetainPtr< T> get() const71 RetainPtr<ValueType> get() const 69 72 { 70 73 return adoptNS(objc_loadWeakRetained(const_cast<id*>(&m_weakReference))); 74 } 75 76 ValueType *getAutoreleased() const 77 { 78 return static_cast<ValueType *>(objc_loadWeak(const_cast<id*>(&m_weakReference))); 71 79 } 72 80 -
trunk/Tools/ChangeLog
r160173 r160187 1 2013-12-05 Anders Carlsson <andersca@apple.com> 2 3 Tweak WeakObjCPtr 4 https://bugs.webkit.org/show_bug.cgi?id=125311 5 6 Reviewed by Darin Adler. 7 8 Split up tests into more logical groups. Add new tests for new functionality. 9 10 * TestWebKitAPI/Tests/WebKit2/mac/WeakObjCPtr.mm: 11 1 12 2013-12-05 Carlos Garcia Campos <cgarcia@igalia.com> 2 13 -
trunk/Tools/TestWebKitAPI/Tests/WebKit2/mac/WeakObjCPtr.mm
r160146 r160187 30 30 using WebKit::WeakObjCPtr; 31 31 32 TEST(WebKit2 , WeakObjCPtr)32 TEST(WebKit2_WeakObjCPtr, Construction) 33 33 { 34 // Test construction. 34 NSObject *object = [[NSObject alloc] init]; 35 36 WeakObjCPtr<NSObject> weak(object); 37 38 EXPECT_EQ(weak.get(), object); 39 40 [object release]; 41 42 EXPECT_EQ(weak.get(), (void*)nil); 43 } 44 45 TEST(WebKit2_WeakObjCPtr, Assignment) 46 { 47 NSObject *object1 = [[NSObject alloc] init]; 48 49 WeakObjCPtr<NSObject> weak(object1); 50 51 EXPECT_EQ(weak.get(), object1); 52 53 NSObject *object2 = [[NSObject alloc] init]; 54 55 weak = object2; 56 EXPECT_EQ(weak.get(), object2); 57 58 [object1 release]; 59 EXPECT_EQ(weak.get(), object2); 60 61 [object2 release]; 62 EXPECT_EQ(weak.get(), (void*)nil); 63 } 64 65 TEST(WebKit2_WeakObjCPtr, ObjectOutlivesItsWeakPointer) 66 { 67 NSObject *object = [[NSObject alloc] init]; 68 35 69 { 36 NSObject *object = [[NSObject alloc] init];37 38 70 WeakObjCPtr<NSObject> weak(object); 39 71 40 72 EXPECT_EQ(weak.get(), object); 73 } 41 74 75 [object release]; 76 } 77 78 TEST(WebKit2_WeakObjCPtr, GetAutoreleased) 79 { 80 WeakObjCPtr<NSObject> weak; 81 82 @autoreleasepool { 83 NSObject *object = [[NSObject alloc] init]; 84 85 weak = object; 86 87 EXPECT_EQ(weak.getAutoreleased(), object); 88 42 89 [object release]; 43 90 44 EXPECT_EQ(weak.get(), (void*)nil); 91 // The object is still in the autorelease pool. 92 EXPECT_EQ(weak.getAutoreleased(), object); 45 93 } 46 94 47 // Test assignment. 48 { 49 NSObject *object1 = [[NSObject alloc] init]; 95 EXPECT_EQ(weak.getAutoreleased(), (id)nil); 96 } 50 97 51 WeakObjCPtr<NSObject> weak(object1); 98 TEST(WebKit2_WeakObjCPtr, Id) 99 { 100 id object = [[NSObject alloc] init]; 101 WeakObjCPtr<id> weak(object); 52 102 53 EXPECT_EQ(weak.get(), object1);103 EXPECT_EQ(weak.get(), object); 54 104 55 NSObject *object2 = [[NSObject alloc] init];105 [object release]; 56 106 57 weak = object2; 58 EXPECT_EQ(weak.get(), object2); 59 60 [object1 release]; 61 EXPECT_EQ(weak.get(), object2); 62 63 [object2 release]; 64 EXPECT_EQ(weak.get(), (void*)nil); 65 } 66 67 // Test having an object that outlives its weak pointer. 68 { 69 NSObject *object = [[NSObject alloc] init]; 70 71 { 72 WeakObjCPtr<NSObject> weak(object); 73 74 EXPECT_EQ(weak.get(), object); 75 } 76 77 [object release]; 78 } 79 107 EXPECT_EQ(weak.get(), (void*)nil); 80 108 }
Note: See TracChangeset
for help on using the changeset viewer.