[SCM] WebKit Debian packaging branch, debian/experimental, updated. upstream/1.3.3-9427-gc2be6fc

weinig at apple.com weinig at apple.com
Wed Dec 22 12:55:11 UTC 2010


The following commit has been merged in the debian/experimental branch:
commit ab000789f5e5ce83d90cc313927bfd6591d7a7f1
Author: weinig at apple.com <weinig at apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Wed Sep 1 22:35:34 2010 +0000

    Change ImmutableArray to be backed by a Vector
    https://bugs.webkit.org/show_bug.cgi?id=45064
    
    Reviewed by John Sullivan.
    
    Change ImmutableArray to be backed by a Vector to work toward having
    a mutable subclass and to improve the API when working with it in WebKit2
    itself.
    
    - Also remove WKArrayCreateAdoptingValues which was confusing and unused.
    
    * Shared/ImmutableArray.cpp:
    (WebKit::ImmutableArray::ImmutableArray):
    (WebKit::ImmutableArray::~ImmutableArray):
    * Shared/ImmutableArray.h:
    (WebKit::ImmutableArray::adopt):
    (WebKit::ImmutableArray::at):
    (WebKit::ImmutableArray::size):
    * Shared/ImmutableDictionary.cpp:
    (WebKit::ImmutableDictionary::keys):
    * UIProcess/API/C/WKArray.cpp:
    * UIProcess/API/C/WKArray.h:
    * UIProcess/WebBackForwardList.cpp:
    (WebKit::WebBackForwardList::backListAsImmutableArrayWithLimit):
    (WebKit::WebBackForwardList::forwardListAsImmutableArrayWithLimit):
    * UIProcess/WebContext.cpp:
    (WebKit::PostMessageEncoder::PostMessageDecoder::decode):
    * WebProcess/InjectedBundle/InjectedBundle.cpp:
    (WebKit::PostMessageEncoder::PostMessageDecoder::decode):
    * WebProcess/WebPage/WebFrame.cpp:
    (WebKit::WebFrame::childFrames):
    
    
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@66621 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/WebKit2/ChangeLog b/WebKit2/ChangeLog
index 7b7ca9c..5c8b62e 100644
--- a/WebKit2/ChangeLog
+++ b/WebKit2/ChangeLog
@@ -1,5 +1,39 @@
 2010-09-01  Sam Weinig  <sam at webkit.org>
 
+        Reviewed by John Sullivan.
+
+        Change ImmutableArray to be backed by a Vector
+        https://bugs.webkit.org/show_bug.cgi?id=45064
+
+        Change ImmutableArray to be backed by a Vector to work toward having 
+        a mutable subclass and to improve the API when working with it in WebKit2
+        itself.
+
+        - Also remove WKArrayCreateAdoptingValues which was confusing and unused.
+
+        * Shared/ImmutableArray.cpp:
+        (WebKit::ImmutableArray::ImmutableArray):
+        (WebKit::ImmutableArray::~ImmutableArray):
+        * Shared/ImmutableArray.h:
+        (WebKit::ImmutableArray::adopt):
+        (WebKit::ImmutableArray::at):
+        (WebKit::ImmutableArray::size):
+        * Shared/ImmutableDictionary.cpp:
+        (WebKit::ImmutableDictionary::keys):
+        * UIProcess/API/C/WKArray.cpp:
+        * UIProcess/API/C/WKArray.h:
+        * UIProcess/WebBackForwardList.cpp:
+        (WebKit::WebBackForwardList::backListAsImmutableArrayWithLimit):
+        (WebKit::WebBackForwardList::forwardListAsImmutableArrayWithLimit):
+        * UIProcess/WebContext.cpp:
+        (WebKit::PostMessageEncoder::PostMessageDecoder::decode):
+        * WebProcess/InjectedBundle/InjectedBundle.cpp:
+        (WebKit::PostMessageEncoder::PostMessageDecoder::decode):
+        * WebProcess/WebPage/WebFrame.cpp:
+        (WebKit::WebFrame::childFrames):
+
+2010-09-01  Sam Weinig  <sam at webkit.org>
+
         Reviewed by Anders Carlsson.
 
         Add URLResponse API for WebKit2
diff --git a/WebKit2/Shared/ImmutableArray.cpp b/WebKit2/Shared/ImmutableArray.cpp
index af73f2f..83e0f6e 100644
--- a/WebKit2/Shared/ImmutableArray.cpp
+++ b/WebKit2/Shared/ImmutableArray.cpp
@@ -28,30 +28,23 @@
 namespace WebKit {
 
 ImmutableArray::ImmutableArray()
-    : m_entries(0)
-    , m_size(0)
 {
 }
 
 ImmutableArray::ImmutableArray(APIObject** entries, size_t size)
-    : m_entries(adoptArrayPtr(new APIObject*[size]))
-    , m_size(size)
+    : m_entries(size)
 {
-    memcpy(m_entries.get(), entries, m_size);
+    memcpy(m_entries.data(), entries, size);
 }
 
-ImmutableArray::ImmutableArray(PassOwnArrayPtr<APIObject*> entries, size_t size)
-    : m_entries(entries)
-    , m_size(size)
+ImmutableArray::ImmutableArray(Vector<APIObject*>& entries)
 {
+    m_entries.swap(entries);
 }
 
 ImmutableArray::~ImmutableArray()
 {
-    if (!m_entries)
-        return;
-
-    for (size_t i = 0; i < m_size; ++i)
+    for (size_t i = 0; i < m_entries.size(); ++i)
         m_entries[i]->deref();
 }
 
diff --git a/WebKit2/Shared/ImmutableArray.h b/WebKit2/Shared/ImmutableArray.h
index fa3a357..5841ca7 100644
--- a/WebKit2/Shared/ImmutableArray.h
+++ b/WebKit2/Shared/ImmutableArray.h
@@ -27,9 +27,9 @@
 #define ImmutableArray_h
 
 #include "APIObject.h"
-#include <wtf/OwnArrayPtr.h>
 #include <wtf/PassOwnArrayPtr.h>
 #include <wtf/PassRefPtr.h>
+#include <wtf/Vector.h>
 
 namespace WebKit {
 
@@ -47,28 +47,27 @@ public:
     {
         return adoptRef(new ImmutableArray(entries, size));
     }
-    static PassRefPtr<ImmutableArray> adopt(PassOwnArrayPtr<APIObject*> entries, size_t size)
+    static PassRefPtr<ImmutableArray> adopt(Vector<APIObject*>& entries)
     {
-        return adoptRef(new ImmutableArray(entries, size));
+        return adoptRef(new ImmutableArray(entries));
     }
 
     ~ImmutableArray();
 
     template<typename T>
-    T* at(size_t i) { ASSERT(i < m_size); if (m_entries[i]->type() != T::APIType) return 0; return static_cast<T*>(m_entries[i]); }
+    T* at(size_t i) { if (m_entries[i]->type() != T::APIType) return 0; return static_cast<T*>(m_entries[i]); }
 
-    APIObject* at(size_t i) { ASSERT(i < m_size); return m_entries[i]; }
-    size_t size() { return m_size; }
+    APIObject* at(size_t i) { return m_entries[i]; }
+    size_t size() { return m_entries.size(); }
 
-private:
+protected:
     ImmutableArray();
     ImmutableArray(APIObject** entries, size_t size);
-    ImmutableArray(PassOwnArrayPtr<APIObject*> entries, size_t size);
+    ImmutableArray(Vector<APIObject*>& entries);
 
     virtual Type type() const { return APIType; }
 
-    OwnArrayPtr<APIObject*> m_entries;
-    size_t m_size;
+    Vector<APIObject*> m_entries;
 };
 
 } // namespace WebKit
diff --git a/WebKit2/Shared/ImmutableDictionary.cpp b/WebKit2/Shared/ImmutableDictionary.cpp
index 223461b..c76ec96 100644
--- a/WebKit2/Shared/ImmutableDictionary.cpp
+++ b/WebKit2/Shared/ImmutableDictionary.cpp
@@ -48,15 +48,15 @@ PassRefPtr<ImmutableArray> ImmutableDictionary::keys() const
     if (m_map.isEmpty())
         return ImmutableArray::create();
 
-    size_t size = m_map.size();
-    OwnArrayPtr<APIObject*> array = adoptArrayPtr(new APIObject*[size]);
+    Vector<APIObject*> vector;
+    vector.reserveInitialCapacity(m_map.size());
 
     MapType::const_iterator::Keys it = m_map.begin().keys();
     MapType::const_iterator::Keys end = m_map.end().keys();
-    for (unsigned i = 0; it != end; ++it, ++i)
-        array[i] = WebString::create(*it).releaseRef();
+    for (; it != end; ++it)
+        vector.uncheckedAppend(WebString::create(*it).releaseRef());
 
-    return ImmutableArray::adopt(array.release(), size);
+    return ImmutableArray::adopt(vector);
 }
 
 } // namespace WebKit
diff --git a/WebKit2/UIProcess/API/C/WKArray.cpp b/WebKit2/UIProcess/API/C/WKArray.cpp
index c0900ad..c11dd85 100644
--- a/WebKit2/UIProcess/API/C/WKArray.cpp
+++ b/WebKit2/UIProcess/API/C/WKArray.cpp
@@ -41,12 +41,6 @@ WKArrayRef WKArrayCreate(WKTypeRef* values, size_t numberOfValues)
     return toRef(array.release().releaseRef());
 }
 
-WKArrayRef WKArrayCreateAdoptingValues(WKTypeRef* values, size_t numberOfValues)
-{
-    RefPtr<ImmutableArray> array = ImmutableArray::adopt(reinterpret_cast<APIObject**>(values), numberOfValues);
-    return toRef(array.release().releaseRef());
-}
-
 WKTypeRef WKArrayGetItemAtIndex(WKArrayRef arrayRef, size_t index)
 {
     return toWK(arrayRef)->at(index);
diff --git a/WebKit2/UIProcess/API/C/WKArray.h b/WebKit2/UIProcess/API/C/WKArray.h
index 25900f3..da4560a 100644
--- a/WebKit2/UIProcess/API/C/WKArray.h
+++ b/WebKit2/UIProcess/API/C/WKArray.h
@@ -37,7 +37,6 @@ extern "C" {
 WK_EXPORT WKTypeID WKArrayGetTypeID();
 
 WK_EXPORT WKArrayRef WKArrayCreate(WKTypeRef* values, size_t numberOfValues);
-WK_EXPORT WKArrayRef WKArrayCreateAdoptingValues(WKTypeRef* values, size_t numberOfValues);
 
 WK_EXPORT WKTypeRef WKArrayGetItemAtIndex(WKArrayRef array, size_t index);
 WK_EXPORT size_t WKArrayGetSize(WKArrayRef array);
diff --git a/WebKit2/UIProcess/WebBackForwardList.cpp b/WebKit2/UIProcess/WebBackForwardList.cpp
index 7e71c03..3fc40f1 100644
--- a/WebKit2/UIProcess/WebBackForwardList.cpp
+++ b/WebKit2/UIProcess/WebBackForwardList.cpp
@@ -173,15 +173,17 @@ PassRefPtr<ImmutableArray> WebBackForwardList::backListAsImmutableArrayWithLimit
     if (!size)
         return ImmutableArray::create();
 
-    OwnArrayPtr<APIObject*> array = adoptArrayPtr(new APIObject*[size]);
+    Vector<APIObject*> vector;
+    vector.reserveInitialCapacity(size);
+
     ASSERT(backListSize >= size);
-    for (unsigned i = backListSize - size, j = 0; i < backListSize; ++i, ++j) {
+    for (unsigned i = backListSize - size; i < backListSize; ++i) {
         APIObject* item = m_entries[i].get();
         item->ref();
-        array[j] = item;
+        vector.uncheckedAppend(item);
     }
 
-    return ImmutableArray::adopt(array.release(), size);
+    return ImmutableArray::adopt(vector);
 }
 
 PassRefPtr<ImmutableArray> WebBackForwardList::forwardListAsImmutableArrayWithLimit(unsigned limit)
@@ -190,16 +192,18 @@ PassRefPtr<ImmutableArray> WebBackForwardList::forwardListAsImmutableArrayWithLi
     if (!size)
         return ImmutableArray::create();
 
-    OwnArrayPtr<APIObject*> array = adoptArrayPtr(new APIObject*[size]);
+    Vector<APIObject*> vector;
+    vector.reserveInitialCapacity(size);
+
     unsigned last = m_current + size;
     ASSERT(last < m_entries.size());
-    for (unsigned i = m_current + 1, j = 0; i <= last; ++i, ++j) {
+    for (unsigned i = m_current + 1; i <= last; ++i) {
         APIObject* item = m_entries[i].get();
         item->ref();
-        array[j] = item;
+        vector.uncheckedAppend(item);
     }
 
-    return ImmutableArray::adopt(array.release(), size);
+    return ImmutableArray::adopt(vector);
 }
 
 } // namespace WebKit
diff --git a/WebKit2/UIProcess/WebContext.cpp b/WebKit2/UIProcess/WebContext.cpp
index e14bcc4..e944d39 100644
--- a/WebKit2/UIProcess/WebContext.cpp
+++ b/WebKit2/UIProcess/WebContext.cpp
@@ -127,16 +127,16 @@ public:
             if (!decoder->decode(size))
                 return false;
             
-            OwnArrayPtr<APIObject*> array = adoptArrayPtr(new APIObject*[size]);
+            Vector<APIObject*> array;
             for (size_t i = 0; i < size; ++i) {
                 APIObject* element;
                 PostMessageDecoder messageCoder(&element, coder.m_context);
                 if (!decoder->decode(messageCoder))
                     return false;
-                array[i] = element;
+                array.append(element);
             }
 
-            *(coder.m_root) = ImmutableArray::adopt(array.release(), size).leakRef();
+            *(coder.m_root) = ImmutableArray::adopt(array).leakRef();
             break;
         }
         case APIObject::TypeString: {
diff --git a/WebKit2/WebProcess/InjectedBundle/InjectedBundle.cpp b/WebKit2/WebProcess/InjectedBundle/InjectedBundle.cpp
index 07d5fb7..071147e 100644
--- a/WebKit2/WebProcess/InjectedBundle/InjectedBundle.cpp
+++ b/WebKit2/WebProcess/InjectedBundle/InjectedBundle.cpp
@@ -127,16 +127,16 @@ public:
             if (!decoder->decode(size))
                 return false;
 
-            OwnArrayPtr<APIObject*> array = adoptArrayPtr(new APIObject*[size]);
+            Vector<APIObject*> vector;
             for (size_t i = 0; i < size; ++i) {
                 APIObject* element;
                 PostMessageDecoder messageCoder(&element);
                 if (!decoder->decode(messageCoder))
                     return false;
-                array[i] = element;
+                vector.append(element);
             }
 
-            *(coder.m_root) = ImmutableArray::adopt(array.release(), size).leakRef();
+            *(coder.m_root) = ImmutableArray::adopt(vector).leakRef();
             break;
         }
         case APIObject::TypeString: {
diff --git a/WebKit2/WebProcess/WebPage/WebFrame.cpp b/WebKit2/WebProcess/WebPage/WebFrame.cpp
index a1b8cae..ff4c714 100644
--- a/WebKit2/WebProcess/WebPage/WebFrame.cpp
+++ b/WebKit2/WebProcess/WebPage/WebFrame.cpp
@@ -224,15 +224,16 @@ PassRefPtr<ImmutableArray> WebFrame::childFrames()
     if (!size)
         return ImmutableArray::create();
 
-    OwnArrayPtr<APIObject*> array = adoptArrayPtr(new APIObject*[size]);
-    unsigned i = 0;
-    for (Frame* child = m_coreFrame->tree()->firstChild(); child; child = child->tree()->nextSibling(), ++i) {
+    Vector<APIObject*> vector;
+    vector.reserveInitialCapacity(size);
+
+    for (Frame* child = m_coreFrame->tree()->firstChild(); child; child = child->tree()->nextSibling()) {
         WebFrame* webFrame = static_cast<WebFrameLoaderClient*>(child->loader()->client())->webFrame();
         webFrame->ref();
-        array[i] = webFrame;
+        vector.uncheckedAppend(webFrame);
     }
 
-    return ImmutableArray::adopt(array.release(), size);
+    return ImmutableArray::adopt(vector);
 }
 
 unsigned WebFrame::numberOfActiveAnimations()

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list