[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