Title: [236049] releases/WebKitGTK/webkit-2.22
Revision
236049
Author
[email protected]
Date
2018-09-17 02:54:40 -0700 (Mon, 17 Sep 2018)

Log Message

Merge r235315 - Allow creating WeakPtrs to const objects
https://bugs.webkit.org/show_bug.cgi?id=188785

Reviewed by Geoff Garen.

Source/WebCore:

Remove some unneeded const_casts.

* css/MediaQueryEvaluator.cpp:
(WebCore::MediaQueryEvaluator::MediaQueryEvaluator):
(WebCore::MediaQueryEvaluator::evaluate const):
* css/MediaQueryEvaluator.h:
* rendering/FloatingObjects.cpp:
(WebCore::ComputeFloatOffsetAdapter::ComputeFloatOffsetAdapter):
(WebCore::ComputeFloatOffsetForFloatLayoutAdapter::ComputeFloatOffsetForFloatLayoutAdapter):
(WebCore::ComputeFloatOffsetForLineLayoutAdapter::ComputeFloatOffsetForLineLayoutAdapter):
(WebCore::FindNextFloatLogicalBottomAdapter::FindNextFloatLogicalBottomAdapter):
(WebCore::FloatingObjects::FloatingObjects):
* rendering/FloatingObjects.h:
(WebCore::FloatingObjects::renderer const):

Source/WTF:

const Foo foo;
WeakPtr<const Foo> weakConstFoo = makeWeakPtr(foo);

* wtf/WeakPtr.h:
(WTF::WeakPtrFactory::createWeakPtr const):

Add a separate factory function for const T.
The underlying WeakReference is kept non-const in all cases.

Tools:

* TestWebKitAPI/Tests/WTF/WeakPtr.cpp:
(TestWebKitAPI::Base::weakPtrFactory const):
(TestWebKitAPI::TEST):
(TestWebKitAPI::Base::weakPtrFactory): Deleted.

Modified Paths

Diff

Modified: releases/WebKitGTK/webkit-2.22/Source/WTF/ChangeLog (236048 => 236049)


--- releases/WebKitGTK/webkit-2.22/Source/WTF/ChangeLog	2018-09-17 09:54:31 UTC (rev 236048)
+++ releases/WebKitGTK/webkit-2.22/Source/WTF/ChangeLog	2018-09-17 09:54:40 UTC (rev 236049)
@@ -1,3 +1,19 @@
+2018-08-24  Antti Koivisto  <[email protected]>
+
+        Allow creating WeakPtrs to const objects
+        https://bugs.webkit.org/show_bug.cgi?id=188785
+
+        Reviewed by Geoff Garen.
+
+        const Foo foo;
+        WeakPtr<const Foo> weakConstFoo = makeWeakPtr(foo);
+
+        * wtf/WeakPtr.h:
+        (WTF::WeakPtrFactory::createWeakPtr const):
+
+        Add a separate factory function for const T.
+        The underlying WeakReference is kept non-const in all cases.
+
 2018-08-21  Carlos Garcia Campos  <[email protected]>
 
         [Linux] Cache the memory footprint and only update it after 1 second

Modified: releases/WebKitGTK/webkit-2.22/Source/WTF/wtf/WeakPtr.h (236048 => 236049)


--- releases/WebKitGTK/webkit-2.22/Source/WTF/wtf/WeakPtr.h	2018-09-17 09:54:31 UTC (rev 236048)
+++ releases/WebKitGTK/webkit-2.22/Source/WTF/wtf/WeakPtr.h	2018-09-17 09:54:40 UTC (rev 236049)
@@ -111,6 +111,13 @@
         return { makeRef(*m_ref) };
     }
 
+    WeakPtr<const T> createWeakPtr(const T& ptr) const
+    {
+        if (!m_ref)
+            m_ref = WeakReference<T>::create(const_cast<T*>(&ptr));
+        return { makeRef(reinterpret_cast<WeakReference<const T>&>(*m_ref)) };
+    }
+
     void revokeAll()
     {
         if (!m_ref)

Modified: releases/WebKitGTK/webkit-2.22/Source/WebCore/ChangeLog (236048 => 236049)


--- releases/WebKitGTK/webkit-2.22/Source/WebCore/ChangeLog	2018-09-17 09:54:31 UTC (rev 236048)
+++ releases/WebKitGTK/webkit-2.22/Source/WebCore/ChangeLog	2018-09-17 09:54:40 UTC (rev 236049)
@@ -1,3 +1,25 @@
+2018-08-24  Antti Koivisto  <[email protected]>
+
+        Allow creating WeakPtrs to const objects
+        https://bugs.webkit.org/show_bug.cgi?id=188785
+
+        Reviewed by Geoff Garen.
+
+        Remove some unneeded const_casts.
+
+        * css/MediaQueryEvaluator.cpp:
+        (WebCore::MediaQueryEvaluator::MediaQueryEvaluator):
+        (WebCore::MediaQueryEvaluator::evaluate const):
+        * css/MediaQueryEvaluator.h:
+        * rendering/FloatingObjects.cpp:
+        (WebCore::ComputeFloatOffsetAdapter::ComputeFloatOffsetAdapter):
+        (WebCore::ComputeFloatOffsetForFloatLayoutAdapter::ComputeFloatOffsetForFloatLayoutAdapter):
+        (WebCore::ComputeFloatOffsetForLineLayoutAdapter::ComputeFloatOffsetForLineLayoutAdapter):
+        (WebCore::FindNextFloatLogicalBottomAdapter::FindNextFloatLogicalBottomAdapter):
+        (WebCore::FloatingObjects::FloatingObjects):
+        * rendering/FloatingObjects.h:
+        (WebCore::FloatingObjects::renderer const):
+
 2018-08-23  Ryosuke Niwa  <[email protected]>
 
         initKeyboardEvent doesn't clear CapsLock state

Modified: releases/WebKitGTK/webkit-2.22/Source/WebCore/css/MediaQueryEvaluator.cpp (236048 => 236049)


--- releases/WebKitGTK/webkit-2.22/Source/WebCore/css/MediaQueryEvaluator.cpp	2018-09-17 09:54:31 UTC (rev 236048)
+++ releases/WebKitGTK/webkit-2.22/Source/WebCore/css/MediaQueryEvaluator.cpp	2018-09-17 09:54:40 UTC (rev 236049)
@@ -110,7 +110,7 @@
 
 MediaQueryEvaluator::MediaQueryEvaluator(const String& acceptedMediaType, const Document& document, const RenderStyle* style)
     : m_mediaType(acceptedMediaType)
-    , m_document(makeWeakPtr(const_cast<Document&>(document)))
+    , m_document(makeWeakPtr(document))
     , m_style(style)
 {
 }
@@ -787,7 +787,7 @@
     if (!m_document)
         return m_fallbackResult;
 
-    Document& document = *m_document;
+    auto& document = *m_document;
     auto* frame = document.frame();
     if (!frame || !frame->view() || !m_style)
         return m_fallbackResult;

Modified: releases/WebKitGTK/webkit-2.22/Source/WebCore/css/MediaQueryEvaluator.h (236048 => 236049)


--- releases/WebKitGTK/webkit-2.22/Source/WebCore/css/MediaQueryEvaluator.h	2018-09-17 09:54:31 UTC (rev 236048)
+++ releases/WebKitGTK/webkit-2.22/Source/WebCore/css/MediaQueryEvaluator.h	2018-09-17 09:54:40 UTC (rev 236049)
@@ -75,7 +75,7 @@
 
 private:
     String m_mediaType;
-    WeakPtr<Document> m_document;
+    WeakPtr<const Document> m_document;
     const RenderStyle* m_style { nullptr };
     bool m_fallbackResult { false };
 };

Modified: releases/WebKitGTK/webkit-2.22/Source/WebCore/rendering/FloatingObjects.cpp (236048 => 236049)


--- releases/WebKitGTK/webkit-2.22/Source/WebCore/rendering/FloatingObjects.cpp	2018-09-17 09:54:31 UTC (rev 236048)
+++ releases/WebKitGTK/webkit-2.22/Source/WebCore/rendering/FloatingObjects.cpp	2018-09-17 09:54:40 UTC (rev 236049)
@@ -124,7 +124,7 @@
 public:
     typedef FloatingObjectInterval IntervalType;
 
-    ComputeFloatOffsetAdapter(RenderBlockFlow& renderer, LayoutUnit lineTop, LayoutUnit lineBottom, LayoutUnit offset)
+    ComputeFloatOffsetAdapter(const RenderBlockFlow& renderer, LayoutUnit lineTop, LayoutUnit lineBottom, LayoutUnit offset)
         : m_renderer(makeWeakPtr(renderer))
         , m_lineTop(lineTop)
         , m_lineBottom(lineBottom)
@@ -144,7 +144,7 @@
 protected:
     virtual bool updateOffsetIfNeeded(const FloatingObject&) = 0;
 
-    WeakPtr<RenderBlockFlow> m_renderer;
+    WeakPtr<const RenderBlockFlow> m_renderer;
     LayoutUnit m_lineTop;
     LayoutUnit m_lineBottom;
     LayoutUnit m_offset;
@@ -154,7 +154,7 @@
 template <FloatingObject::Type FloatTypeValue>
 class ComputeFloatOffsetForFloatLayoutAdapter : public ComputeFloatOffsetAdapter<FloatTypeValue> {
 public:
-    ComputeFloatOffsetForFloatLayoutAdapter(RenderBlockFlow& renderer, LayoutUnit lineTop, LayoutUnit lineBottom, LayoutUnit offset)
+    ComputeFloatOffsetForFloatLayoutAdapter(const RenderBlockFlow& renderer, LayoutUnit lineTop, LayoutUnit lineBottom, LayoutUnit offset)
         : ComputeFloatOffsetAdapter<FloatTypeValue>(renderer, lineTop, lineBottom, offset)
     {
     }
@@ -170,7 +170,7 @@
 template <FloatingObject::Type FloatTypeValue>
 class ComputeFloatOffsetForLineLayoutAdapter : public ComputeFloatOffsetAdapter<FloatTypeValue> {
 public:
-    ComputeFloatOffsetForLineLayoutAdapter(RenderBlockFlow& renderer, LayoutUnit lineTop, LayoutUnit lineBottom, LayoutUnit offset)
+    ComputeFloatOffsetForLineLayoutAdapter(const RenderBlockFlow& renderer, LayoutUnit lineTop, LayoutUnit lineBottom, LayoutUnit offset)
         : ComputeFloatOffsetAdapter<FloatTypeValue>(renderer, lineTop, lineBottom, offset)
     {
     }
@@ -185,7 +185,7 @@
 public:
     typedef FloatingObjectInterval IntervalType;
 
-    FindNextFloatLogicalBottomAdapter(RenderBlockFlow& renderer, LayoutUnit belowLogicalHeight)
+    FindNextFloatLogicalBottomAdapter(const RenderBlockFlow& renderer, LayoutUnit belowLogicalHeight)
         : m_renderer(makeWeakPtr(renderer))
         , m_belowLogicalHeight(belowLogicalHeight)
     {
@@ -199,7 +199,7 @@
     LayoutUnit nextShapeLogicalBottom() const { return m_nextShapeLogicalBottom.value_or(nextLogicalBottom()); }
 
 private:
-    WeakPtr<RenderBlockFlow> m_renderer;
+    WeakPtr<const RenderBlockFlow> m_renderer;
     LayoutUnit m_belowLogicalHeight;
     std::optional<LayoutUnit> m_nextLogicalBottom;
     std::optional<LayoutUnit> m_nextShapeLogicalBottom;
@@ -250,7 +250,7 @@
     : m_leftObjectsCount(0)
     , m_rightObjectsCount(0)
     , m_horizontalWritingMode(renderer.isHorizontalWritingMode())
-    , m_renderer(makeWeakPtr(const_cast<RenderBlockFlow&>(renderer)))
+    , m_renderer(makeWeakPtr(renderer))
 {
 }
 

Modified: releases/WebKitGTK/webkit-2.22/Source/WebCore/rendering/FloatingObjects.h (236048 => 236049)


--- releases/WebKitGTK/webkit-2.22/Source/WebCore/rendering/FloatingObjects.h	2018-09-17 09:54:31 UTC (rev 236048)
+++ releases/WebKitGTK/webkit-2.22/Source/WebCore/rendering/FloatingObjects.h	2018-09-17 09:54:40 UTC (rev 236049)
@@ -161,7 +161,7 @@
     LayoutUnit findNextFloatLogicalBottomBelowForBlock(LayoutUnit logicalHeight);
 
 private:
-    RenderBlockFlow& renderer() const { return *m_renderer; }
+    const RenderBlockFlow& renderer() const { return *m_renderer; }
     void computePlacedFloatsTree();
     const FloatingObjectTree* placedFloatsTree();
     void increaseObjectsCount(FloatingObject::Type);
@@ -173,7 +173,7 @@
     unsigned m_leftObjectsCount;
     unsigned m_rightObjectsCount;
     bool m_horizontalWritingMode;
-    WeakPtr<RenderBlockFlow> m_renderer;
+    WeakPtr<const RenderBlockFlow> m_renderer;
 };
 
 } // namespace WebCore

Modified: releases/WebKitGTK/webkit-2.22/Tools/ChangeLog (236048 => 236049)


--- releases/WebKitGTK/webkit-2.22/Tools/ChangeLog	2018-09-17 09:54:31 UTC (rev 236048)
+++ releases/WebKitGTK/webkit-2.22/Tools/ChangeLog	2018-09-17 09:54:40 UTC (rev 236049)
@@ -1,3 +1,15 @@
+2018-08-24  Antti Koivisto  <[email protected]>
+
+        Allow creating WeakPtrs to const objects
+        https://bugs.webkit.org/show_bug.cgi?id=188785
+
+        Reviewed by Geoff Garen.
+
+        * TestWebKitAPI/Tests/WTF/WeakPtr.cpp:
+        (TestWebKitAPI::Base::weakPtrFactory const):
+        (TestWebKitAPI::TEST):
+        (TestWebKitAPI::Base::weakPtrFactory): Deleted.
+
 2018-08-22  Ryosuke Niwa  <[email protected]>
 
         Assert in NetworkBlobRegistry::unregisterBlobURL after network process had terminated

Modified: releases/WebKitGTK/webkit-2.22/Tools/TestWebKitAPI/Tests/WTF/WeakPtr.cpp (236048 => 236049)


--- releases/WebKitGTK/webkit-2.22/Tools/TestWebKitAPI/Tests/WTF/WeakPtr.cpp	2018-09-17 09:54:31 UTC (rev 236048)
+++ releases/WebKitGTK/webkit-2.22/Tools/TestWebKitAPI/Tests/WTF/WeakPtr.cpp	2018-09-17 09:54:40 UTC (rev 236049)
@@ -201,12 +201,14 @@
 
 class Base {
 public:
+    Base() { }
+
     int foo()
     {
         return 0;
     }
 
-    auto& weakPtrFactory() { return m_weakPtrFactory; }
+    auto& weakPtrFactory() const { return m_weakPtrFactory; }
 
 private:
     WeakPtrFactory<Base> m_weakPtrFactory;
@@ -214,6 +216,8 @@
 
 class Derived : public Base {
 public:
+    Derived() { }
+
     int foo()
     {
         return 1;
@@ -284,4 +288,38 @@
     }
 }
 
+TEST(WTF_WeakPtr, DerivedConstructAndAssignConst)
+{
+    const Derived derived;
+    {
+        auto derivedWeakPtr = makeWeakPtr(derived);
+        WeakPtr<const Base> baseWeakPtr { WTFMove(derivedWeakPtr) };
+        EXPECT_EQ(baseWeakPtr.get(), &derived);
+        EXPECT_NULL(derivedWeakPtr.get());
+    }
+
+    {
+        auto derivedWeakPtr = makeWeakPtr(derived);
+        WeakPtr<const Base> baseWeakPtr { derivedWeakPtr };
+        EXPECT_EQ(baseWeakPtr.get(), &derived);
+        EXPECT_EQ(derivedWeakPtr.get(), &derived);
+    }
+
+    {
+        auto derivedWeakPtr = makeWeakPtr(derived);
+        WeakPtr<const Base> baseWeakPtr;
+        baseWeakPtr = WTFMove(derivedWeakPtr);
+        EXPECT_EQ(baseWeakPtr.get(), &derived);
+        EXPECT_NULL(derivedWeakPtr.get());
+    }
+
+    {
+        auto derivedWeakPtr = makeWeakPtr(derived);
+        WeakPtr<const Base> baseWeakPtr;
+        baseWeakPtr = derivedWeakPtr;
+        EXPECT_EQ(baseWeakPtr.get(), &derived);
+        EXPECT_EQ(derivedWeakPtr.get(), &derived);
+    }
+}
+
 } // namespace TestWebKitAPI
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to