[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:57:02 UTC 2010


The following commit has been merged in the debian/experimental branch:
commit 1ae369e47c980ac9103c3280bd02d8538ec63e5e
Author: weinig at apple.com <weinig at apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Thu Sep 2 19:11:27 2010 +0000

    Simplify ownership semantics of some WebKit2 types
    https://bugs.webkit.org/show_bug.cgi?id=45120
    
    Reviewed by Anders Carlsson.
    
    - Make ImmutableArray and MutableArray use a Vector<RefPtr<APIObject> > and
      therefore ref any items it takes in.
    - Make the PostMessageDecoder operate on a RefPtr<APIObject>& to avoid the odd
      leaking semantics.
    
    * Shared/ImmutableArray.cpp:
    (WebKit::ImmutableArray::ImmutableArray): This constructor now uses a for-loop
    instead of memcpy to ref each item.
    (WebKit::ImmutableArray::~ImmutableArray): No longer necessary to manually deref.
    * Shared/ImmutableArray.h:
    (WebKit::ImmutableArray::adopt):
    (WebKit::ImmutableArray::at):
    Changes to accommodate entries being changed to a Vector<RefPtr<APIObject> >.
    
    * Shared/ImmutableDictionary.cpp:
    (WebKit::ImmutableDictionary::keys):
    Build a Vector<RefPtr<APIObject> >.
    
    * UIProcess/WebBackForwardList.cpp:
    (WebKit::WebBackForwardList::backListAsImmutableArrayWithLimit):
    (WebKit::WebBackForwardList::forwardListAsImmutableArrayWithLimit):
    Ditto.
    
    * UIProcess/WebContext.cpp:
    (WebKit::PostMessageEncoder::PostMessageDecoder::PostMessageDecoder):
    (WebKit::PostMessageEncoder::PostMessageDecoder::decode):
    (WebKit::WebContext::didReceiveMessage):
    APIObject>& to avoid the odd leaking semantics.
    
    * WebProcess/InjectedBundle/InjectedBundle.cpp:
    (WebKit::PostMessageEncoder::PostMessageDecoder::PostMessageDecoder):
    (WebKit::PostMessageEncoder::PostMessageDecoder::decode):
    (WebKit::InjectedBundle::didReceiveMessage):
    Ditto.
    
    * WebProcess/WebPage/WebFrame.cpp:
    (WebKit::WebFrame::childFrames):
    Build a Vector<RefPtr<APIObject> >.
    
    
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@66679 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/WebKit2/ChangeLog b/WebKit2/ChangeLog
index 04464f8..85d5e61 100644
--- a/WebKit2/ChangeLog
+++ b/WebKit2/ChangeLog
@@ -2,6 +2,52 @@
 
         Reviewed by Anders Carlsson.
 
+        Simplify ownership semantics of some WebKit2 types
+        https://bugs.webkit.org/show_bug.cgi?id=45120
+
+        - Make ImmutableArray and MutableArray use a Vector<RefPtr<APIObject> > and
+          therefore ref any items it takes in.
+        - Make the PostMessageDecoder operate on a RefPtr<APIObject>& to avoid the odd
+          leaking semantics.
+
+        * Shared/ImmutableArray.cpp:
+        (WebKit::ImmutableArray::ImmutableArray): This constructor now uses a for-loop
+        instead of memcpy to ref each item.
+        (WebKit::ImmutableArray::~ImmutableArray): No longer necessary to manually deref.
+        * Shared/ImmutableArray.h:
+        (WebKit::ImmutableArray::adopt):
+        (WebKit::ImmutableArray::at):
+        Changes to accommodate entries being changed to a Vector<RefPtr<APIObject> >.
+
+        * Shared/ImmutableDictionary.cpp:
+        (WebKit::ImmutableDictionary::keys):
+        Build a Vector<RefPtr<APIObject> >.
+
+        * UIProcess/WebBackForwardList.cpp:
+        (WebKit::WebBackForwardList::backListAsImmutableArrayWithLimit):
+        (WebKit::WebBackForwardList::forwardListAsImmutableArrayWithLimit):
+        Ditto.
+
+        * UIProcess/WebContext.cpp:
+        (WebKit::PostMessageEncoder::PostMessageDecoder::PostMessageDecoder):
+        (WebKit::PostMessageEncoder::PostMessageDecoder::decode):
+        (WebKit::WebContext::didReceiveMessage):
+        APIObject>& to avoid the odd leaking semantics.
+
+        * WebProcess/InjectedBundle/InjectedBundle.cpp:
+        (WebKit::PostMessageEncoder::PostMessageDecoder::PostMessageDecoder):
+        (WebKit::PostMessageEncoder::PostMessageDecoder::decode):
+        (WebKit::InjectedBundle::didReceiveMessage):
+        Ditto.
+
+        * WebProcess/WebPage/WebFrame.cpp:
+        (WebKit::WebFrame::childFrames):
+        Build a Vector<RefPtr<APIObject> >.
+
+2010-09-02  Sam Weinig  <sam at webkit.org>
+
+        Reviewed by Anders Carlsson.
+
         Add WKMutableDictionary API for WebKit2
         https://bugs.webkit.org/show_bug.cgi?id=45117
 
diff --git a/WebKit2/Shared/ImmutableArray.cpp b/WebKit2/Shared/ImmutableArray.cpp
index 83e0f6e..2be62fd 100644
--- a/WebKit2/Shared/ImmutableArray.cpp
+++ b/WebKit2/Shared/ImmutableArray.cpp
@@ -34,18 +34,17 @@ ImmutableArray::ImmutableArray()
 ImmutableArray::ImmutableArray(APIObject** entries, size_t size)
     : m_entries(size)
 {
-    memcpy(m_entries.data(), entries, size);
+    for (size_t i = 0; i < size; ++i)
+        m_entries[i] = entries[i];
 }
 
-ImmutableArray::ImmutableArray(Vector<APIObject*>& entries)
+ImmutableArray::ImmutableArray(Vector<RefPtr<APIObject> >& entries)
 {
     m_entries.swap(entries);
 }
 
 ImmutableArray::~ImmutableArray()
 {
-    for (size_t i = 0; i < m_entries.size(); ++i)
-        m_entries[i]->deref();
 }
 
 } // namespace WebKit
diff --git a/WebKit2/Shared/ImmutableArray.h b/WebKit2/Shared/ImmutableArray.h
index 042597c..9f3f96b 100644
--- a/WebKit2/Shared/ImmutableArray.h
+++ b/WebKit2/Shared/ImmutableArray.h
@@ -47,7 +47,7 @@ public:
     {
         return adoptRef(new ImmutableArray(entries, size));
     }
-    static PassRefPtr<ImmutableArray> adopt(Vector<APIObject*>& entries)
+    static PassRefPtr<ImmutableArray> adopt(Vector<RefPtr<APIObject> >& entries)
     {
         return adoptRef(new ImmutableArray(entries));
     }
@@ -55,9 +55,9 @@ public:
     ~ImmutableArray();
 
     template<typename T>
-    T* at(size_t i) { 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].get()); }
 
-    APIObject* at(size_t i) { return m_entries[i]; }
+    APIObject* at(size_t i) { return m_entries[i].get(); }
     size_t size() { return m_entries.size(); }
 
     virtual bool isMutable() { return false; }
@@ -65,11 +65,11 @@ public:
 protected:
     ImmutableArray();
     ImmutableArray(APIObject** entries, size_t size);
-    ImmutableArray(Vector<APIObject*>& entries);
+    ImmutableArray(Vector<RefPtr<APIObject> >& entries);
 
     virtual Type type() const { return APIType; }
 
-    Vector<APIObject*> m_entries;
+    Vector<RefPtr<APIObject> > m_entries;
 };
 
 } // namespace WebKit
diff --git a/WebKit2/Shared/ImmutableDictionary.cpp b/WebKit2/Shared/ImmutableDictionary.cpp
index c76ec96..4eb4853 100644
--- a/WebKit2/Shared/ImmutableDictionary.cpp
+++ b/WebKit2/Shared/ImmutableDictionary.cpp
@@ -48,13 +48,13 @@ PassRefPtr<ImmutableArray> ImmutableDictionary::keys() const
     if (m_map.isEmpty())
         return ImmutableArray::create();
 
-    Vector<APIObject*> vector;
+    Vector<RefPtr<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 (; it != end; ++it)
-        vector.uncheckedAppend(WebString::create(*it).releaseRef());
+        vector.uncheckedAppend(WebString::create(*it));
 
     return ImmutableArray::adopt(vector);
 }
diff --git a/WebKit2/UIProcess/WebBackForwardList.cpp b/WebKit2/UIProcess/WebBackForwardList.cpp
index 3fc40f1..1470245 100644
--- a/WebKit2/UIProcess/WebBackForwardList.cpp
+++ b/WebKit2/UIProcess/WebBackForwardList.cpp
@@ -173,15 +173,12 @@ PassRefPtr<ImmutableArray> WebBackForwardList::backListAsImmutableArrayWithLimit
     if (!size)
         return ImmutableArray::create();
 
-    Vector<APIObject*> vector;
+    Vector<RefPtr<APIObject> > vector;
     vector.reserveInitialCapacity(size);
 
     ASSERT(backListSize >= size);
-    for (unsigned i = backListSize - size; i < backListSize; ++i) {
-        APIObject* item = m_entries[i].get();
-        item->ref();
-        vector.uncheckedAppend(item);
-    }
+    for (unsigned i = backListSize - size; i < backListSize; ++i)
+        vector.uncheckedAppend(m_entries[i].get());
 
     return ImmutableArray::adopt(vector);
 }
@@ -192,16 +189,13 @@ PassRefPtr<ImmutableArray> WebBackForwardList::forwardListAsImmutableArrayWithLi
     if (!size)
         return ImmutableArray::create();
 
-    Vector<APIObject*> vector;
+    Vector<RefPtr<APIObject> > vector;
     vector.reserveInitialCapacity(size);
 
     unsigned last = m_current + size;
     ASSERT(last < m_entries.size());
-    for (unsigned i = m_current + 1; i <= last; ++i) {
-        APIObject* item = m_entries[i].get();
-        item->ref();
-        vector.uncheckedAppend(item);
-    }
+    for (unsigned i = m_current + 1; i <= last; ++i)
+        vector.uncheckedAppend(m_entries[i].get());
 
     return ImmutableArray::adopt(vector);
 }
diff --git a/WebKit2/UIProcess/WebContext.cpp b/WebKit2/UIProcess/WebContext.cpp
index e944d39..6ca35ac 100644
--- a/WebKit2/UIProcess/WebContext.cpp
+++ b/WebKit2/UIProcess/WebContext.cpp
@@ -109,7 +109,7 @@ private:
 
 class PostMessageDecoder {
 public:
-    PostMessageDecoder(APIObject** root, WebContext* context)
+    PostMessageDecoder(RefPtr<APIObject>& root, WebContext* context)
         : m_root(root)
         , m_context(context)
     {
@@ -127,30 +127,30 @@ public:
             if (!decoder->decode(size))
                 return false;
             
-            Vector<APIObject*> array;
+            Vector<RefPtr<APIObject> > vector;
             for (size_t i = 0; i < size; ++i) {
-                APIObject* element;
-                PostMessageDecoder messageCoder(&element, coder.m_context);
+                RefPtr<APIObject> element;
+                PostMessageDecoder messageCoder(element, coder.m_context);
                 if (!decoder->decode(messageCoder))
                     return false;
-                array.append(element);
+                vector.append(element.release());
             }
 
-            *(coder.m_root) = ImmutableArray::adopt(array).leakRef();
+            coder.m_root = ImmutableArray::adopt(vector);
             break;
         }
         case APIObject::TypeString: {
             String string;
             if (!decoder->decode(string))
                 return false;
-            *(coder.m_root) = WebString::create(string).leakRef();
+            coder.m_root = WebString::create(string);
             break;
         }
         case APIObject::TypeBundlePage: {
             uint64_t pageID;
             if (!decoder->decode(pageID))
                 return false;
-            *(coder.m_root) = coder.m_context->process()->webPage(pageID);
+            coder.m_root = coder.m_context->process()->webPage(pageID);
             break;
         }
         default:
@@ -161,7 +161,7 @@ public:
     }
 
 private:
-    APIObject** m_root;
+    RefPtr<APIObject>& m_root;
     WebContext* m_context;
 };
 
@@ -406,16 +406,12 @@ void WebContext::didReceiveMessage(CoreIPC::Connection* connection, CoreIPC::Mes
     switch (messageID.get<WebContextMessage::Kind>()) {
         case WebContextMessage::PostMessage: {
             String messageName;
-            // FIXME: This should be a RefPtr<APIObject>
-            APIObject* messageBody = 0;
-            PostMessageDecoder messageCoder(&messageBody, this);
+            RefPtr<APIObject> messageBody;
+            PostMessageDecoder messageCoder(messageBody, this);
             if (!arguments->decode(CoreIPC::Out(messageName, messageCoder)))
                 return;
 
-            didReceiveMessageFromInjectedBundle(messageName, messageBody);
-
-            messageBody->deref();
-
+            didReceiveMessageFromInjectedBundle(messageName, messageBody.get());
             return;
         }
     }
diff --git a/WebKit2/WebProcess/InjectedBundle/InjectedBundle.cpp b/WebKit2/WebProcess/InjectedBundle/InjectedBundle.cpp
index 071147e..fa12d4b 100644
--- a/WebKit2/WebProcess/InjectedBundle/InjectedBundle.cpp
+++ b/WebKit2/WebProcess/InjectedBundle/InjectedBundle.cpp
@@ -110,7 +110,7 @@ private:
 
 class PostMessageDecoder {
 public:
-    PostMessageDecoder(APIObject** root)
+    PostMessageDecoder(RefPtr<APIObject>& root)
         : m_root(root)
     {
     }
@@ -127,30 +127,30 @@ public:
             if (!decoder->decode(size))
                 return false;
 
-            Vector<APIObject*> vector;
+            Vector<RefPtr<APIObject> > vector;
             for (size_t i = 0; i < size; ++i) {
-                APIObject* element;
-                PostMessageDecoder messageCoder(&element);
+                RefPtr<APIObject> element;
+                PostMessageDecoder messageCoder(element);
                 if (!decoder->decode(messageCoder))
                     return false;
-                vector.append(element);
+                vector.append(element.release());
             }
 
-            *(coder.m_root) = ImmutableArray::adopt(vector).leakRef();
+            coder.m_root = ImmutableArray::adopt(vector);
             break;
         }
         case APIObject::TypeString: {
             String string;
             if (!decoder->decode(string))
                 return false;
-            *(coder.m_root) = WebString::create(string).leakRef();
+            coder.m_root = WebString::create(string);
             break;
         }
         case APIObject::TypePage: {
             uint64_t pageID;
             if (!decoder->decode(pageID))
                 return false;
-            *(coder.m_root) = WebProcess::shared().webPage(pageID);
+            coder.m_root = WebProcess::shared().webPage(pageID);
             break;
         }
         default:
@@ -161,7 +161,7 @@ public:
     }
 
 private:
-    APIObject** m_root;
+    RefPtr<APIObject>& m_root;
 };
 
 }
@@ -305,17 +305,13 @@ void InjectedBundle::didReceiveMessage(CoreIPC::Connection* connection, CoreIPC:
 {
     switch (messageID.get<InjectedBundleMessage::Kind>()) {
         case InjectedBundleMessage::PostMessage: {
-            String messageName;
-            // FIXME: This should be a RefPtr<APIObject>
-            APIObject* messageBody = 0;
-            PostMessageDecoder messageCoder(&messageBody);
+            String messageName;            
+            RefPtr<APIObject> messageBody;
+            PostMessageDecoder messageCoder(messageBody);
             if (!arguments->decode(CoreIPC::Out(messageName, messageCoder)))
                 return;
 
-            didReceiveMessage(messageName, messageBody);
-
-            messageBody->deref();
-
+            didReceiveMessage(messageName, messageBody.get());
             return;
         }
     }
diff --git a/WebKit2/WebProcess/WebPage/WebFrame.cpp b/WebKit2/WebProcess/WebPage/WebFrame.cpp
index ff4c714..bd96db8 100644
--- a/WebKit2/WebProcess/WebPage/WebFrame.cpp
+++ b/WebKit2/WebProcess/WebPage/WebFrame.cpp
@@ -224,12 +224,11 @@ PassRefPtr<ImmutableArray> WebFrame::childFrames()
     if (!size)
         return ImmutableArray::create();
 
-    Vector<APIObject*> vector;
+    Vector<RefPtr<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();
         vector.uncheckedAppend(webFrame);
     }
 

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list