Title: [222824] trunk/Source/WebKit
Revision
222824
Author
[email protected]
Date
2017-10-03 17:51:24 -0700 (Tue, 03 Oct 2017)

Log Message

Moderize WebKit's back forward list code
https://bugs.webkit.org/show_bug.cgi?id=177843

Reviewed by Tim Horton.

Use Ref instead of RefPtr when possible.
Use references instead of pointers when possible.
Remove unnecessary null checks.
Reduce unnecessary Vector copying.

* Shared/SessionState.h:
* Shared/WebBackForwardListItem.h:
* UIProcess/API/APILoaderClient.h:
(API::LoaderClient::didChangeBackForwardList):
(API::LoaderClient::shouldKeepCurrentBackForwardListItemInList):
* UIProcess/API/C/WKPage.cpp:
(WKPageSetPageLoaderClient):
* UIProcess/WebBackForwardList.cpp:
(WebKit::WebBackForwardList::pageClosed):
(WebKit::WebBackForwardList::addItem):
(WebKit::WebBackForwardList::goToItem):
(WebKit::WebBackForwardList::currentItem const):
(WebKit::WebBackForwardList::backItem const):
(WebKit::WebBackForwardList::forwardItem const):
(WebKit::WebBackForwardList::itemAtIndex const):
(WebKit::WebBackForwardList::backListAsAPIArrayWithLimit const):
(WebKit::WebBackForwardList::forwardListAsAPIArrayWithLimit const):
(WebKit::WebBackForwardList::removeAllItems):
(WebKit::WebBackForwardList::clear):
(WebKit::WebBackForwardList::backForwardListState const):
(WebKit::WebBackForwardList::restoreFromState):
* UIProcess/WebBackForwardList.h:
* UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::reattachToWebProcessWithItem):
(WebKit::WebPageProxy::initializeWebPage):
(WebKit::WebPageProxy::didChangeBackForwardList):
(WebKit::WebPageProxy::shouldKeepCurrentBackForwardListItemInList):
(WebKit::WebPageProxy::backForwardGoToItem):
* UIProcess/WebPageProxy.h:
* UIProcess/WebProcessProxy.cpp:
(WebKit::WebProcessProxy::registerNewWebBackForwardListItem):
* UIProcess/WebProcessProxy.h:
* WebProcess/WebPage/WebBackForwardListProxy.cpp:
(WebKit::WebBackForwardListProxy::itemAtIndex):

Modified Paths

Diff

Modified: trunk/Source/WebKit/ChangeLog (222823 => 222824)


--- trunk/Source/WebKit/ChangeLog	2017-10-04 00:13:33 UTC (rev 222823)
+++ trunk/Source/WebKit/ChangeLog	2017-10-04 00:51:24 UTC (rev 222824)
@@ -1,3 +1,50 @@
+2017-10-03  Alex Christensen  <[email protected]>
+
+        Moderize WebKit's back forward list code
+        https://bugs.webkit.org/show_bug.cgi?id=177843
+
+        Reviewed by Tim Horton.
+
+        Use Ref instead of RefPtr when possible.
+        Use references instead of pointers when possible.
+        Remove unnecessary null checks.
+        Reduce unnecessary Vector copying.
+
+        * Shared/SessionState.h:
+        * Shared/WebBackForwardListItem.h:
+        * UIProcess/API/APILoaderClient.h:
+        (API::LoaderClient::didChangeBackForwardList):
+        (API::LoaderClient::shouldKeepCurrentBackForwardListItemInList):
+        * UIProcess/API/C/WKPage.cpp:
+        (WKPageSetPageLoaderClient):
+        * UIProcess/WebBackForwardList.cpp:
+        (WebKit::WebBackForwardList::pageClosed):
+        (WebKit::WebBackForwardList::addItem):
+        (WebKit::WebBackForwardList::goToItem):
+        (WebKit::WebBackForwardList::currentItem const):
+        (WebKit::WebBackForwardList::backItem const):
+        (WebKit::WebBackForwardList::forwardItem const):
+        (WebKit::WebBackForwardList::itemAtIndex const):
+        (WebKit::WebBackForwardList::backListAsAPIArrayWithLimit const):
+        (WebKit::WebBackForwardList::forwardListAsAPIArrayWithLimit const):
+        (WebKit::WebBackForwardList::removeAllItems):
+        (WebKit::WebBackForwardList::clear):
+        (WebKit::WebBackForwardList::backForwardListState const):
+        (WebKit::WebBackForwardList::restoreFromState):
+        * UIProcess/WebBackForwardList.h:
+        * UIProcess/WebPageProxy.cpp:
+        (WebKit::WebPageProxy::reattachToWebProcessWithItem):
+        (WebKit::WebPageProxy::initializeWebPage):
+        (WebKit::WebPageProxy::didChangeBackForwardList):
+        (WebKit::WebPageProxy::shouldKeepCurrentBackForwardListItemInList):
+        (WebKit::WebPageProxy::backForwardGoToItem):
+        * UIProcess/WebPageProxy.h:
+        * UIProcess/WebProcessProxy.cpp:
+        (WebKit::WebProcessProxy::registerNewWebBackForwardListItem):
+        * UIProcess/WebProcessProxy.h:
+        * WebProcess/WebPage/WebBackForwardListProxy.cpp:
+        (WebKit::WebBackForwardListProxy::itemAtIndex):
+
 2017-10-03  Chris Dumez  <[email protected]>
 
         SharedStringHashStore should support removing hashes

Modified: trunk/Source/WebKit/Shared/SessionState.h (222823 => 222824)


--- trunk/Source/WebKit/Shared/SessionState.h	2017-10-04 00:13:33 UTC (rev 222823)
+++ trunk/Source/WebKit/Shared/SessionState.h	2017-10-04 00:51:24 UTC (rev 222824)
@@ -23,8 +23,7 @@
  * THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-#ifndef SessionState_h
-#define SessionState_h
+#pragma once
 
 #if PLATFORM(COCOA)
 #include "ViewSnapshotStore.h"
@@ -150,5 +149,3 @@
 };
 
 } // namespace WebKit
-
-#endif // SessionState_h

Modified: trunk/Source/WebKit/Shared/WebBackForwardListItem.h (222823 => 222824)


--- trunk/Source/WebKit/Shared/WebBackForwardListItem.h	2017-10-04 00:13:33 UTC (rev 222823)
+++ trunk/Source/WebKit/Shared/WebBackForwardListItem.h	2017-10-04 00:51:24 UTC (rev 222824)
@@ -23,12 +23,11 @@
  * THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-#ifndef WebBackForwardListItem_h
-#define WebBackForwardListItem_h
+#pragma once
 
 #include "APIObject.h"
 #include "SessionState.h"
-#include <wtf/RefPtr.h>
+#include <wtf/Ref.h>
 #include <wtf/text/WTFString.h>
 
 namespace API {
@@ -74,8 +73,6 @@
     uint64_t m_pageID;
 };
 
-typedef Vector<RefPtr<WebBackForwardListItem>> BackForwardListItemVector;
+typedef Vector<Ref<WebBackForwardListItem>> BackForwardListItemVector;
 
 } // namespace WebKit
-
-#endif // WebBackForwardListItem_h

Modified: trunk/Source/WebKit/UIProcess/API/APILoaderClient.h (222823 => 222824)


--- trunk/Source/WebKit/UIProcess/API/APILoaderClient.h	2017-10-04 00:13:33 UTC (rev 222823)
+++ trunk/Source/WebKit/UIProcess/API/APILoaderClient.h	2017-10-04 00:51:24 UTC (rev 222824)
@@ -89,8 +89,8 @@
     virtual void processDidBecomeResponsive(WebKit::WebPageProxy&) { }
     virtual void processDidCrash(WebKit::WebPageProxy&) { }
 
-    virtual void didChangeBackForwardList(WebKit::WebPageProxy&, WebKit::WebBackForwardListItem*, Vector<RefPtr<WebKit::WebBackForwardListItem>>) { }
-    virtual bool shouldKeepCurrentBackForwardListItemInList(WebKit::WebPageProxy&, WebKit::WebBackForwardListItem*) { return true; }
+    virtual void didChangeBackForwardList(WebKit::WebPageProxy&, WebKit::WebBackForwardListItem*, Vector<Ref<WebKit::WebBackForwardListItem>>&&) { }
+    virtual bool shouldKeepCurrentBackForwardListItemInList(WebKit::WebPageProxy&, WebKit::WebBackForwardListItem&) { return true; }
     virtual void willGoToBackForwardListItem(WebKit::WebPageProxy&, WebKit::WebBackForwardListItem&, API::Object*) { }
 
     virtual void didNavigateWithNavigationData(WebKit::WebPageProxy&, const WebKit::WebNavigationDataStore&, WebKit::WebFrameProxy&) { }

Modified: trunk/Source/WebKit/UIProcess/API/C/WKPage.cpp (222823 => 222824)


--- trunk/Source/WebKit/UIProcess/API/C/WKPage.cpp	2017-10-04 00:13:33 UTC (rev 222823)
+++ trunk/Source/WebKit/UIProcess/API/C/WKPage.cpp	2017-10-04 00:51:24 UTC (rev 222824)
@@ -1204,7 +1204,7 @@
             m_client.processDidCrash(toAPI(&page), m_client.base.clientInfo);
         }
 
-        void didChangeBackForwardList(WebPageProxy& page, WebBackForwardListItem* addedItem, Vector<RefPtr<WebBackForwardListItem>> removedItems) override
+        void didChangeBackForwardList(WebPageProxy& page, WebBackForwardListItem* addedItem, Vector<Ref<WebBackForwardListItem>>&& removedItems) override
         {
             if (!m_client.didChangeBackForwardList)
                 return;
@@ -1222,12 +1222,12 @@
             m_client.didChangeBackForwardList(toAPI(&page), toAPI(addedItem), toAPI(removedItemsArray.get()), m_client.base.clientInfo);
         }
 
-        bool shouldKeepCurrentBackForwardListItemInList(WebKit::WebPageProxy& page, WebKit::WebBackForwardListItem* item) override
+        bool shouldKeepCurrentBackForwardListItemInList(WebKit::WebPageProxy& page, WebKit::WebBackForwardListItem& item) override
         {
             if (!m_client.shouldKeepCurrentBackForwardListItemInList)
                 return true;
 
-            return m_client.shouldKeepCurrentBackForwardListItemInList(toAPI(&page), toAPI(item), m_client.base.clientInfo);
+            return m_client.shouldKeepCurrentBackForwardListItemInList(toAPI(&page), toAPI(&item), m_client.base.clientInfo);
         }
 
         void willGoToBackForwardListItem(WebPageProxy& page, WebBackForwardListItem& item, API::Object* userData) override

Modified: trunk/Source/WebKit/UIProcess/API/glib/WebKitBackForwardList.cpp (222823 => 222824)


--- trunk/Source/WebKit/UIProcess/API/glib/WebKitBackForwardList.cpp	2017-10-04 00:13:33 UTC (rev 222823)
+++ trunk/Source/WebKit/UIProcess/API/glib/WebKitBackForwardList.cpp	2017-10-04 00:51:24 UTC (rev 222824)
@@ -128,7 +128,7 @@
     return list;
 }
 
-void webkitBackForwardListChanged(WebKitBackForwardList* backForwardList, WebBackForwardListItem* webAddedItem, const Vector<RefPtr<WebBackForwardListItem>>& webRemovedItems)
+void webkitBackForwardListChanged(WebKitBackForwardList* backForwardList, WebBackForwardListItem* webAddedItem, Vector<Ref<WebBackForwardListItem>>&& webRemovedItems)
 {
     WebKitBackForwardListItem* addedItem = webkitBackForwardListGetOrCreateItem(backForwardList, webAddedItem);
     GList* removedItems = nullptr;
@@ -138,12 +138,12 @@
         // After a session restore, we still don't have wrappers for the newly added items, so it would be possible that
         // the removed items are not in the map. In that case we create a wrapper now to pass it the changed signal, but
         // without adding it to the item map. See https://bugs.webkit.org/show_bug.cgi?id=153233.
-        GRefPtr<WebKitBackForwardListItem> removedItem = priv->itemsMap.get(webItem.get());
+        GRefPtr<WebKitBackForwardListItem> removedItem = priv->itemsMap.get(webItem.ptr());
         if (removedItem) {
             removedItems = g_list_prepend(removedItems, g_object_ref(removedItem.get()));
-            priv->itemsMap.remove(webItem.get());
+            priv->itemsMap.remove(webItem.ptr());
         } else
-            removedItems = g_list_prepend(removedItems, webkitBackForwardListItemGetOrCreate(webItem.get()));
+            removedItems = g_list_prepend(removedItems, webkitBackForwardListItemGetOrCreate(webItem.ptr()));
     }
 
     g_signal_emit(backForwardList, signals[CHANGED], 0, addedItem, removedItems, nullptr);

Modified: trunk/Source/WebKit/UIProcess/API/glib/WebKitBackForwardListPrivate.h (222823 => 222824)


--- trunk/Source/WebKit/UIProcess/API/glib/WebKitBackForwardListPrivate.h	2017-10-04 00:13:33 UTC (rev 222823)
+++ trunk/Source/WebKit/UIProcess/API/glib/WebKitBackForwardListPrivate.h	2017-10-04 00:51:24 UTC (rev 222824)
@@ -23,8 +23,7 @@
  * THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-#ifndef WebKitBackForwardListPrivate_h
-#define WebKitBackForwardListPrivate_h
+#pragma once
 
 #include "WebBackForwardList.h"
 #include "WebKitBackForwardList.h"
@@ -32,6 +31,4 @@
 WebKitBackForwardList* webkitBackForwardListCreate(WebKit::WebBackForwardList*);
 WebKitBackForwardListItem* webkitBackForwardListItemGetOrCreate(WebKit::WebBackForwardListItem*);
 WebKit::WebBackForwardListItem* webkitBackForwardListItemGetItem(WebKitBackForwardListItem*);
-void webkitBackForwardListChanged(WebKitBackForwardList*, WebKit::WebBackForwardListItem* webAddedItem, const Vector<RefPtr<WebKit::WebBackForwardListItem>>&);
-
-#endif // WebKitBackForwardListPrivate_h
+void webkitBackForwardListChanged(WebKitBackForwardList*, WebKit::WebBackForwardListItem* webAddedItem, Vector<Ref<WebKit::WebBackForwardListItem>>&&);

Modified: trunk/Source/WebKit/UIProcess/API/glib/WebKitLoaderClient.cpp (222823 => 222824)


--- trunk/Source/WebKit/UIProcess/API/glib/WebKitLoaderClient.cpp	2017-10-04 00:13:33 UTC (rev 222823)
+++ trunk/Source/WebKit/UIProcess/API/glib/WebKitLoaderClient.cpp	2017-10-04 00:51:24 UTC (rev 222824)
@@ -100,9 +100,9 @@
         webkitWebViewInsecureContentDetected(m_webView, WEBKIT_INSECURE_CONTENT_RUN);
     }
 
-    void didChangeBackForwardList(WebPageProxy&, WebBackForwardListItem* addedItem, Vector<RefPtr<WebBackForwardListItem>> removedItems) override
+    void didChangeBackForwardList(WebPageProxy&, WebBackForwardListItem* addedItem, Vector<Ref<WebBackForwardListItem>>&& removedItems) override
     {
-        webkitBackForwardListChanged(webkit_web_view_get_back_forward_list(m_webView), addedItem, removedItems);
+        webkitBackForwardListChanged(webkit_web_view_get_back_forward_list(m_webView), addedItem, WTFMove(removedItems));
     }
 
     void didReceiveAuthenticationChallengeInFrame(WebPageProxy&, WebFrameProxy&, AuthenticationChallengeProxy* authenticationChallenge) override

Modified: trunk/Source/WebKit/UIProcess/WebBackForwardList.cpp (222823 => 222824)


--- trunk/Source/WebKit/UIProcess/WebBackForwardList.cpp	2017-10-04 00:13:33 UTC (rev 222823)
+++ trunk/Source/WebKit/UIProcess/WebBackForwardList.cpp	2017-10-04 00:51:24 UTC (rev 222824)
@@ -72,13 +72,8 @@
 
     if (m_page) {
         size_t size = m_entries.size();
-        for (size_t i = 0; i < size; ++i) {
-            ASSERT(m_entries[i]);
-            if (!m_entries[i])
-                continue;
-
-            didRemoveItem(*m_entries[i]);
-        }
+        for (size_t i = 0; i < size; ++i)
+            didRemoveItem(m_entries[i]);
     }
 
     m_page = 0;
@@ -93,7 +88,7 @@
     if (!m_capacity || !newItem || !m_page)
         return;
 
-    Vector<RefPtr<WebBackForwardListItem>> removedItems;
+    Vector<Ref<WebBackForwardListItem>> removedItems;
     
     if (m_hasCurrentIndex) {
         m_page->recordAutomaticNavigationSnapshot();
@@ -102,7 +97,7 @@
         unsigned targetSize = m_currentIndex + 1;
         removedItems.reserveCapacity(m_entries.size() - targetSize);
         while (m_entries.size() > targetSize) {
-            didRemoveItem(*m_entries.last());
+            didRemoveItem(m_entries.last());
             removedItems.append(WTFMove(m_entries.last()));
             m_entries.removeLast();
         }
@@ -110,7 +105,7 @@
         // Toss the first item if the list is getting too big, as long as we're not using it
         // (or even if we are, if we only want 1 entry).
         if (m_entries.size() == m_capacity && (m_currentIndex || m_capacity == 1)) {
-            didRemoveItem(*m_entries[0]);
+            didRemoveItem(m_entries[0]);
             removedItems.append(WTFMove(m_entries[0]));
             m_entries.remove(0);
 
@@ -126,10 +121,7 @@
         // But just in case it does happen in practice we'll get back in to a consistent state now before adding the new item.
         size_t size = m_entries.size();
         for (size_t i = 0; i < size; ++i) {
-            ASSERT(m_entries[i]);
-            if (!m_entries[i])
-                continue;
-            didRemoveItem(*m_entries[i]);
+            didRemoveItem(m_entries[i]);
             removedItems.append(WTFMove(m_entries[i]));
         }
         m_entries.clear();
@@ -142,7 +134,7 @@
         m_currentIndex = 0;
         m_hasCurrentIndex = true;
     } else {
-        shouldKeepCurrentItem = m_page->shouldKeepCurrentBackForwardListItemInList(m_entries[m_currentIndex].get());
+        shouldKeepCurrentItem = m_page->shouldKeepCurrentBackForwardListItemInList(m_entries[m_currentIndex]);
         if (shouldKeepCurrentItem)
             m_currentIndex++;
     }
@@ -152,8 +144,8 @@
         // If it is, something has gone wrong and we should not try to swap in the new item.
         ASSERT(m_currentIndex < m_entries.size());
 
-        removedItems.append(m_entries[m_currentIndex]);
-        m_entries[m_currentIndex] = newItem;
+        removedItems.append(m_entries[m_currentIndex].copyRef());
+        m_entries[m_currentIndex] = *newItem;
     } else {
         // m_current should never be pointing more than 1 past the end of the entries Vector.
         // If it is, something has gone wrong and we should not try to insert the new item.
@@ -160,20 +152,26 @@
         ASSERT(m_currentIndex <= m_entries.size());
 
         if (m_currentIndex <= m_entries.size())
-            m_entries.insert(m_currentIndex, newItem);
+            m_entries.insert(m_currentIndex, *newItem);
     }
 
     m_page->didChangeBackForwardList(newItem, WTFMove(removedItems));
 }
 
-void WebBackForwardList::goToItem(WebBackForwardListItem* item)
+void WebBackForwardList::goToItem(WebBackForwardListItem& item)
 {
     ASSERT(!m_hasCurrentIndex || m_currentIndex < m_entries.size());
 
-    if (!m_entries.size() || !item || !m_page || !m_hasCurrentIndex)
+    if (!m_entries.size() || !m_page || !m_hasCurrentIndex)
         return;
 
-    size_t targetIndex = m_entries.find(item);
+    size_t targetIndex = notFound;
+    for (size_t i = 0; i < m_entries.size(); ++i) {
+        if (m_entries[i].ptr() == &item) {
+            targetIndex = i;
+            break;
+        }
+    }
 
     // If the target item wasn't even in the list, there's nothing else to do.
     if (targetIndex == notFound)
@@ -187,25 +185,30 @@
 
     // If we're going to an item different from the current item, ask the client if the current
     // item should remain in the list.
-    WebBackForwardListItem* currentItem = m_entries[m_currentIndex].get();
+    auto& currentItem = m_entries[m_currentIndex];
     bool shouldKeepCurrentItem = true;
-    if (currentItem != item) {
+    if (currentItem.ptr() != &item) {
         m_page->recordAutomaticNavigationSnapshot();
-        shouldKeepCurrentItem = m_page->shouldKeepCurrentBackForwardListItemInList(m_entries[m_currentIndex].get());
+        shouldKeepCurrentItem = m_page->shouldKeepCurrentBackForwardListItemInList(m_entries[m_currentIndex]);
     }
 
     // If the client said to remove the current item, remove it and then update the target index.
-    Vector<RefPtr<WebBackForwardListItem>> removedItems;
+    Vector<Ref<WebBackForwardListItem>> removedItems;
     if (!shouldKeepCurrentItem) {
-        removedItems.append(currentItem);
+        removedItems.append(currentItem.copyRef());
         m_entries.remove(m_currentIndex);
-        targetIndex = m_entries.find(item);
-
+        targetIndex = notFound;
+        for (size_t i = 0; i < m_entries.size(); ++i) {
+            if (m_entries[0].ptr() == &item) {
+                targetIndex = i;
+                break;
+            }
+        }
         ASSERT(targetIndex != notFound);
     }
 
     m_currentIndex = targetIndex;
-    m_page->didChangeBackForwardList(nullptr, removedItems);
+    m_page->didChangeBackForwardList(nullptr, WTFMove(removedItems));
 }
 
 WebBackForwardListItem* WebBackForwardList::currentItem() const
@@ -212,7 +215,7 @@
 {
     ASSERT(!m_hasCurrentIndex || m_currentIndex < m_entries.size());
 
-    return m_page && m_hasCurrentIndex ? m_entries[m_currentIndex].get() : nullptr;
+    return m_page && m_hasCurrentIndex ? m_entries[m_currentIndex].ptr() : nullptr;
 }
 
 WebBackForwardListItem* WebBackForwardList::backItem() const
@@ -219,7 +222,7 @@
 {
     ASSERT(!m_hasCurrentIndex || m_currentIndex < m_entries.size());
 
-    return m_page && m_hasCurrentIndex && m_currentIndex ? m_entries[m_currentIndex - 1].get() : nullptr;
+    return m_page && m_hasCurrentIndex && m_currentIndex ? m_entries[m_currentIndex - 1].ptr() : nullptr;
 }
 
 WebBackForwardListItem* WebBackForwardList::forwardItem() const
@@ -226,7 +229,7 @@
 {
     ASSERT(!m_hasCurrentIndex || m_currentIndex < m_entries.size());
 
-    return m_page && m_hasCurrentIndex && m_entries.size() && m_currentIndex < m_entries.size() - 1 ? m_entries[m_currentIndex + 1].get() : nullptr;
+    return m_page && m_hasCurrentIndex && m_entries.size() && m_currentIndex < m_entries.size() - 1 ? m_entries[m_currentIndex + 1].ptr() : nullptr;
 }
 
 WebBackForwardListItem* WebBackForwardList::itemAtIndex(int index) const
@@ -243,7 +246,7 @@
     if (index > forwardListCount())
         return nullptr;
         
-    return m_entries[index + m_currentIndex].get();
+    return m_entries[index + m_currentIndex].ptr();
 }
 
 int WebBackForwardList::backListCount() const
@@ -286,10 +289,8 @@
     vector.reserveInitialCapacity(size);
 
     ASSERT(backListSize >= size);
-    for (unsigned i = backListSize - size; i < backListSize; ++i) {
-        ASSERT(m_entries[i]);
-        vector.uncheckedAppend(m_entries[i].get());
-    }
+    for (unsigned i = backListSize - size; i < backListSize; ++i)
+        vector.uncheckedAppend(m_entries[i].ptr());
 
     return API::Array::create(WTFMove(vector));
 }
@@ -310,10 +311,8 @@
 
     unsigned last = m_currentIndex + size;
     ASSERT(last < m_entries.size());
-    for (unsigned i = m_currentIndex + 1; i <= last; ++i) {
-        ASSERT(m_entries[i]);
-        vector.uncheckedAppend(m_entries[i].get());
-    }
+    for (unsigned i = m_currentIndex + 1; i <= last; ++i)
+        vector.uncheckedAppend(m_entries[i].ptr());
 
     return API::Array::create(WTFMove(vector));
 }
@@ -322,14 +321,10 @@
 {
     ASSERT(!m_hasCurrentIndex || m_currentIndex < m_entries.size());
 
-    Vector<RefPtr<WebBackForwardListItem>> removedItems;
+    Vector<Ref<WebBackForwardListItem>> removedItems;
 
     for (auto& entry : m_entries) {
-        ASSERT(entry);
-        if (!entry)
-            continue;
-
-        didRemoveItem(*entry);
+        didRemoveItem(entry);
         removedItems.append(WTFMove(entry));
     }
 
@@ -347,7 +342,7 @@
         return;
 
     RefPtr<WebBackForwardListItem> currentItem = this->currentItem();
-    Vector<RefPtr<WebBackForwardListItem>> removedItems;
+    Vector<Ref<WebBackForwardListItem>> removedItems;
 
     if (!currentItem) {
         // We should only ever have no current item if we also have no current item index.
@@ -355,11 +350,7 @@
 
         // But just in case it does happen in practice we should get back into a consistent state now.
         for (size_t i = 0; i < size; ++i) {
-            ASSERT(m_entries[i]);
-            if (!m_entries[i])
-                continue;
-
-            didRemoveItem(*m_entries[i]);
+            didRemoveItem(m_entries[i]);
             removedItems.append(WTFMove(m_entries[i]));
         }
 
@@ -371,14 +362,13 @@
     }
 
     for (size_t i = 0; i < size; ++i) {
-        ASSERT(m_entries[i]);
-        if (m_entries[i] && m_entries[i] != currentItem)
-            didRemoveItem(*m_entries[i]);
+        if (m_entries[i].ptr() != currentItem)
+            didRemoveItem(m_entries[i]);
     }
 
     removedItems.reserveCapacity(size - 1);
     for (size_t i = 0; i < size; ++i) {
-        if (i != m_currentIndex && m_hasCurrentIndex && m_entries[i])
+        if (i != m_currentIndex && m_hasCurrentIndex)
             removedItems.append(WTFMove(m_entries[i]));
     }
 
@@ -386,7 +376,7 @@
 
     if (currentItem) {
         m_entries.shrink(1);
-        m_entries[0] = WTFMove(currentItem);
+        m_entries[0] = currentItem.releaseNonNull();
     } else {
         m_entries.clear();
         m_hasCurrentIndex = false;
@@ -404,7 +394,7 @@
         backForwardListState.currentIndex = m_currentIndex;
 
     for (size_t i = 0; i < m_entries.size(); ++i) {
-        auto& entry = *m_entries[i];
+        auto& entry = m_entries[i];
 
         if (filter && !filter(entry)) {
             auto& currentIndex = backForwardListState.currentIndex;
@@ -414,7 +404,7 @@
             continue;
         }
 
-        backForwardListState.items.append(entry.itemState());
+        backForwardListState.items.append(entry->itemState());
     }
 
     if (backForwardListState.items.isEmpty())
@@ -427,7 +417,7 @@
 
 void WebBackForwardList::restoreFromState(BackForwardListState backForwardListState)
 {
-    Vector<RefPtr<WebBackForwardListItem>> items;
+    Vector<Ref<WebBackForwardListItem>> items;
     items.reserveInitialCapacity(backForwardListState.items.size());
 
     for (auto& backForwardListItemState : backForwardListState.items) {

Modified: trunk/Source/WebKit/UIProcess/WebBackForwardList.h (222823 => 222824)


--- trunk/Source/WebKit/UIProcess/WebBackForwardList.h	2017-10-04 00:13:33 UTC (rev 222823)
+++ trunk/Source/WebKit/UIProcess/WebBackForwardList.h	2017-10-04 00:51:24 UTC (rev 222824)
@@ -23,18 +23,13 @@
  * THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-#ifndef WebBackForwardList_h
-#define WebBackForwardList_h
+#pragma once
 
 #include "APIObject.h"
 #include "WebBackForwardListItem.h"
 #include "WebPageProxy.h"
 #include <wtf/Ref.h>
-#include <wtf/RefPtr.h>
 #include <wtf/Vector.h>
-#if USE(CF)
-#include <CoreFoundation/CFDictionary.h>
-#endif
 
 namespace WebKit {
 
@@ -51,7 +46,7 @@
     virtual ~WebBackForwardList();
 
     void addItem(WebBackForwardListItem*);
-    void goToItem(WebBackForwardListItem*);
+    void goToItem(WebBackForwardListItem&);
     void removeAllItems();
     void clear();
 
@@ -85,11 +80,10 @@
     WebPageProxy* m_page;
     BackForwardListItemVector m_entries;
     
+    // FIXME: m_currentIndex should be a std::optional<size_t>
     bool m_hasCurrentIndex;
-    unsigned m_currentIndex;
-    unsigned m_capacity;
+    size_t m_currentIndex;
+    size_t m_capacity;
 };
 
 } // namespace WebKit
-
-#endif // WebBackForwardList_h

Modified: trunk/Source/WebKit/UIProcess/WebPageProxy.cpp (222823 => 222824)


--- trunk/Source/WebKit/UIProcess/WebPageProxy.cpp	2017-10-04 00:13:33 UTC (rev 222823)
+++ trunk/Source/WebKit/UIProcess/WebPageProxy.cpp	2017-10-04 00:51:24 UTC (rev 222824)
@@ -684,7 +684,7 @@
         return nullptr;
 
     if (item != m_backForwardList->currentItem())
-        m_backForwardList->goToItem(item);
+        m_backForwardList->goToItem(*item);
 
     auto navigation = m_navigationState->createBackForwardNavigation();
 
@@ -698,7 +698,7 @@
 {
     ASSERT(isValid());
 
-    BackForwardListItemVector items = m_backForwardList->entries();
+    const BackForwardListItemVector& items = m_backForwardList->entries();
     for (size_t i = 0; i < items.size(); ++i)
         m_process->registerNewWebBackForwardListItem(items[i].get());
 
@@ -1192,7 +1192,7 @@
     m_process->send(Messages::WebPage::TryRestoreScrollPosition(), m_pageID);
 }
 
-void WebPageProxy::didChangeBackForwardList(WebBackForwardListItem* added, Vector<RefPtr<WebBackForwardListItem>> removed)
+void WebPageProxy::didChangeBackForwardList(WebBackForwardListItem* added, Vector<Ref<WebBackForwardListItem>>&& removed)
 {
     PageClientProtector protector(m_pageClient);
 
@@ -1215,7 +1215,7 @@
     }
 }
 
-bool WebPageProxy::shouldKeepCurrentBackForwardListItemInList(WebBackForwardListItem* item)
+bool WebPageProxy::shouldKeepCurrentBackForwardListItemInList(WebBackForwardListItem& item)
 {
     PageClientProtector protector(m_pageClient);
 
@@ -4494,7 +4494,7 @@
     bool createdExtension = maybeInitializeSandboxExtensionHandle(URL(URL(), item->url()), sandboxExtensionHandle);
     if (createdExtension)
         m_process->willAcquireUniversalFileReadSandboxExtension();
-    m_backForwardList->goToItem(item);
+    m_backForwardList->goToItem(*item);
 }
 
 void WebPageProxy::backForwardItemAtIndex(int32_t index, uint64_t& itemID)

Modified: trunk/Source/WebKit/UIProcess/WebPageProxy.h (222823 => 222824)


--- trunk/Source/WebKit/UIProcess/WebPageProxy.h	2017-10-04 00:13:33 UTC (rev 222823)
+++ trunk/Source/WebKit/UIProcess/WebPageProxy.h	2017-10-04 00:51:24 UTC (rev 222824)
@@ -409,10 +409,10 @@
 
     RefPtr<API::Navigation> goToBackForwardItem(WebBackForwardListItem*);
     void tryRestoreScrollPosition();
-    void didChangeBackForwardList(WebBackForwardListItem* addedItem, Vector<RefPtr<WebBackForwardListItem>> removed);
+    void didChangeBackForwardList(WebBackForwardListItem* addedItem, Vector<Ref<WebBackForwardListItem>>&& removed);
     void willGoToBackForwardListItem(uint64_t itemID, bool inPageCache, const UserData&);
 
-    bool shouldKeepCurrentBackForwardListItemInList(WebBackForwardListItem*);
+    bool shouldKeepCurrentBackForwardListItemInList(WebBackForwardListItem&);
 
     bool willHandleHorizontalScrollEvents() const;
 

Modified: trunk/Source/WebKit/UIProcess/WebProcessProxy.cpp (222823 => 222824)


--- trunk/Source/WebKit/UIProcess/WebProcessProxy.cpp	2017-10-04 00:13:33 UTC (rev 222823)
+++ trunk/Source/WebKit/UIProcess/WebProcessProxy.cpp	2017-10-04 00:51:24 UTC (rev 222824)
@@ -424,13 +424,13 @@
     return m_backForwardListItemMap.get(itemID);
 }
 
-void WebProcessProxy::registerNewWebBackForwardListItem(WebBackForwardListItem* item)
+void WebProcessProxy::registerNewWebBackForwardListItem(WebBackForwardListItem& item)
 {
     // This item was just created by the UIProcess and is being added to the map for the first time
     // so we should not already have an item for this ID.
-    ASSERT(!m_backForwardListItemMap.contains(item->itemID()));
+    ASSERT(!m_backForwardListItemMap.contains(item.itemID()));
 
-    m_backForwardListItemMap.set(item->itemID(), item);
+    m_backForwardListItemMap.set(item.itemID(), &item);
 }
 
 void WebProcessProxy::removeBackForwardItem(uint64_t itemID)

Modified: trunk/Source/WebKit/UIProcess/WebProcessProxy.h (222823 => 222824)


--- trunk/Source/WebKit/UIProcess/WebProcessProxy.h	2017-10-04 00:13:33 UTC (rev 222823)
+++ trunk/Source/WebKit/UIProcess/WebProcessProxy.h	2017-10-04 00:51:24 UTC (rev 222824)
@@ -123,7 +123,7 @@
 
     void updateTextCheckerState();
 
-    void registerNewWebBackForwardListItem(WebBackForwardListItem*);
+    void registerNewWebBackForwardListItem(WebBackForwardListItem&);
     void removeBackForwardItem(uint64_t);
 
     void willAcquireUniversalFileReadSandboxExtension() { m_mayHaveUniversalFileReadSandboxExtension = true; }

Modified: trunk/Source/WebKit/WebProcess/WebPage/WebBackForwardListProxy.cpp (222823 => 222824)


--- trunk/Source/WebKit/WebProcess/WebPage/WebBackForwardListProxy.cpp	2017-10-04 00:13:33 UTC (rev 222823)
+++ trunk/Source/WebKit/WebProcess/WebPage/WebBackForwardListProxy.cpp	2017-10-04 00:51:24 UTC (rev 222824)
@@ -172,14 +172,14 @@
 HistoryItem* WebBackForwardListProxy::itemAtIndex(int itemIndex)
 {
     if (!m_page)
-        return 0;
+        return nullptr;
 
     uint64_t itemID = 0;
     if (!WebProcess::singleton().parentProcessConnection()->sendSync(Messages::WebPageProxy::BackForwardItemAtIndex(itemIndex), Messages::WebPageProxy::BackForwardItemAtIndex::Reply(itemID), m_page->pageID()))
-        return 0;
+        return nullptr;
 
     if (!itemID)
-        return 0;
+        return nullptr;
 
     return idToHistoryItemMap().get(itemID);
 }
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to