Changeset 66679 in webkit
- Timestamp:
- Sep 2, 2010 12:11:27 PM (14 years ago)
- Location:
- trunk/WebKit2
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/WebKit2/ChangeLog
r66676 r66679 1 2010-09-02 Sam Weinig <sam@webkit.org> 2 3 Reviewed by Anders Carlsson. 4 5 Simplify ownership semantics of some WebKit2 types 6 https://bugs.webkit.org/show_bug.cgi?id=45120 7 8 - Make ImmutableArray and MutableArray use a Vector<RefPtr<APIObject> > and 9 therefore ref any items it takes in. 10 - Make the PostMessageDecoder operate on a RefPtr<APIObject>& to avoid the odd 11 leaking semantics. 12 13 * Shared/ImmutableArray.cpp: 14 (WebKit::ImmutableArray::ImmutableArray): This constructor now uses a for-loop 15 instead of memcpy to ref each item. 16 (WebKit::ImmutableArray::~ImmutableArray): No longer necessary to manually deref. 17 * Shared/ImmutableArray.h: 18 (WebKit::ImmutableArray::adopt): 19 (WebKit::ImmutableArray::at): 20 Changes to accommodate entries being changed to a Vector<RefPtr<APIObject> >. 21 22 * Shared/ImmutableDictionary.cpp: 23 (WebKit::ImmutableDictionary::keys): 24 Build a Vector<RefPtr<APIObject> >. 25 26 * UIProcess/WebBackForwardList.cpp: 27 (WebKit::WebBackForwardList::backListAsImmutableArrayWithLimit): 28 (WebKit::WebBackForwardList::forwardListAsImmutableArrayWithLimit): 29 Ditto. 30 31 * UIProcess/WebContext.cpp: 32 (WebKit::PostMessageEncoder::PostMessageDecoder::PostMessageDecoder): 33 (WebKit::PostMessageEncoder::PostMessageDecoder::decode): 34 (WebKit::WebContext::didReceiveMessage): 35 APIObject>& to avoid the odd leaking semantics. 36 37 * WebProcess/InjectedBundle/InjectedBundle.cpp: 38 (WebKit::PostMessageEncoder::PostMessageDecoder::PostMessageDecoder): 39 (WebKit::PostMessageEncoder::PostMessageDecoder::decode): 40 (WebKit::InjectedBundle::didReceiveMessage): 41 Ditto. 42 43 * WebProcess/WebPage/WebFrame.cpp: 44 (WebKit::WebFrame::childFrames): 45 Build a Vector<RefPtr<APIObject> >. 46 1 47 2010-09-02 Sam Weinig <sam@webkit.org> 2 48 -
trunk/WebKit2/Shared/ImmutableArray.cpp
r66621 r66679 35 35 : m_entries(size) 36 36 { 37 memcpy(m_entries.data(), entries, size); 37 for (size_t i = 0; i < size; ++i) 38 m_entries[i] = entries[i]; 38 39 } 39 40 40 ImmutableArray::ImmutableArray(Vector< APIObject*>& entries)41 ImmutableArray::ImmutableArray(Vector<RefPtr<APIObject> >& entries) 41 42 { 42 43 m_entries.swap(entries); … … 45 46 ImmutableArray::~ImmutableArray() 46 47 { 47 for (size_t i = 0; i < m_entries.size(); ++i)48 m_entries[i]->deref();49 48 } 50 49 -
trunk/WebKit2/Shared/ImmutableArray.h
r66638 r66679 48 48 return adoptRef(new ImmutableArray(entries, size)); 49 49 } 50 static PassRefPtr<ImmutableArray> adopt(Vector< APIObject*>& entries)50 static PassRefPtr<ImmutableArray> adopt(Vector<RefPtr<APIObject> >& entries) 51 51 { 52 52 return adoptRef(new ImmutableArray(entries)); … … 56 56 57 57 template<typename T> 58 T* at(size_t i) { if (m_entries[i]->type() != T::APIType) return 0; return static_cast<T*>(m_entries[i] ); }58 T* at(size_t i) { if (m_entries[i]->type() != T::APIType) return 0; return static_cast<T*>(m_entries[i].get()); } 59 59 60 APIObject* at(size_t i) { return m_entries[i] ; }60 APIObject* at(size_t i) { return m_entries[i].get(); } 61 61 size_t size() { return m_entries.size(); } 62 62 … … 66 66 ImmutableArray(); 67 67 ImmutableArray(APIObject** entries, size_t size); 68 ImmutableArray(Vector< APIObject*>& entries);68 ImmutableArray(Vector<RefPtr<APIObject> >& entries); 69 69 70 70 virtual Type type() const { return APIType; } 71 71 72 Vector< APIObject*> m_entries;72 Vector<RefPtr<APIObject> > m_entries; 73 73 }; 74 74 -
trunk/WebKit2/Shared/ImmutableDictionary.cpp
r66621 r66679 49 49 return ImmutableArray::create(); 50 50 51 Vector< APIObject*> vector;51 Vector<RefPtr<APIObject> > vector; 52 52 vector.reserveInitialCapacity(m_map.size()); 53 53 … … 55 55 MapType::const_iterator::Keys end = m_map.end().keys(); 56 56 for (; it != end; ++it) 57 vector.uncheckedAppend(WebString::create(*it) .releaseRef());57 vector.uncheckedAppend(WebString::create(*it)); 58 58 59 59 return ImmutableArray::adopt(vector); -
trunk/WebKit2/UIProcess/WebBackForwardList.cpp
r66621 r66679 174 174 return ImmutableArray::create(); 175 175 176 Vector< APIObject*> vector;176 Vector<RefPtr<APIObject> > vector; 177 177 vector.reserveInitialCapacity(size); 178 178 179 179 ASSERT(backListSize >= size); 180 for (unsigned i = backListSize - size; i < backListSize; ++i) { 181 APIObject* item = m_entries[i].get(); 182 item->ref(); 183 vector.uncheckedAppend(item); 184 } 180 for (unsigned i = backListSize - size; i < backListSize; ++i) 181 vector.uncheckedAppend(m_entries[i].get()); 185 182 186 183 return ImmutableArray::adopt(vector); … … 193 190 return ImmutableArray::create(); 194 191 195 Vector< APIObject*> vector;192 Vector<RefPtr<APIObject> > vector; 196 193 vector.reserveInitialCapacity(size); 197 194 198 195 unsigned last = m_current + size; 199 196 ASSERT(last < m_entries.size()); 200 for (unsigned i = m_current + 1; i <= last; ++i) { 201 APIObject* item = m_entries[i].get(); 202 item->ref(); 203 vector.uncheckedAppend(item); 204 } 197 for (unsigned i = m_current + 1; i <= last; ++i) 198 vector.uncheckedAppend(m_entries[i].get()); 205 199 206 200 return ImmutableArray::adopt(vector); -
trunk/WebKit2/UIProcess/WebContext.cpp
r66621 r66679 110 110 class PostMessageDecoder { 111 111 public: 112 PostMessageDecoder( APIObject**root, WebContext* context)112 PostMessageDecoder(RefPtr<APIObject>& root, WebContext* context) 113 113 : m_root(root) 114 114 , m_context(context) … … 128 128 return false; 129 129 130 Vector< APIObject*> array;130 Vector<RefPtr<APIObject> > vector; 131 131 for (size_t i = 0; i < size; ++i) { 132 APIObject*element;133 PostMessageDecoder messageCoder( &element, coder.m_context);132 RefPtr<APIObject> element; 133 PostMessageDecoder messageCoder(element, coder.m_context); 134 134 if (!decoder->decode(messageCoder)) 135 135 return false; 136 array.append(element);136 vector.append(element.release()); 137 137 } 138 138 139 *(coder.m_root) = ImmutableArray::adopt(array).leakRef();139 coder.m_root = ImmutableArray::adopt(vector); 140 140 break; 141 141 } … … 144 144 if (!decoder->decode(string)) 145 145 return false; 146 *(coder.m_root) = WebString::create(string).leakRef();146 coder.m_root = WebString::create(string); 147 147 break; 148 148 } … … 151 151 if (!decoder->decode(pageID)) 152 152 return false; 153 *(coder.m_root)= coder.m_context->process()->webPage(pageID);153 coder.m_root = coder.m_context->process()->webPage(pageID); 154 154 break; 155 155 } … … 162 162 163 163 private: 164 APIObject**m_root;164 RefPtr<APIObject>& m_root; 165 165 WebContext* m_context; 166 166 }; … … 407 407 case WebContextMessage::PostMessage: { 408 408 String messageName; 409 // FIXME: This should be a RefPtr<APIObject> 410 APIObject* messageBody = 0; 411 PostMessageDecoder messageCoder(&messageBody, this); 409 RefPtr<APIObject> messageBody; 410 PostMessageDecoder messageCoder(messageBody, this); 412 411 if (!arguments->decode(CoreIPC::Out(messageName, messageCoder))) 413 412 return; 414 413 415 didReceiveMessageFromInjectedBundle(messageName, messageBody); 416 417 messageBody->deref(); 418 414 didReceiveMessageFromInjectedBundle(messageName, messageBody.get()); 419 415 return; 420 416 } -
trunk/WebKit2/WebProcess/InjectedBundle/InjectedBundle.cpp
r66621 r66679 111 111 class PostMessageDecoder { 112 112 public: 113 PostMessageDecoder( APIObject**root)113 PostMessageDecoder(RefPtr<APIObject>& root) 114 114 : m_root(root) 115 115 { … … 128 128 return false; 129 129 130 Vector< APIObject*> vector;130 Vector<RefPtr<APIObject> > vector; 131 131 for (size_t i = 0; i < size; ++i) { 132 APIObject*element;133 PostMessageDecoder messageCoder( &element);132 RefPtr<APIObject> element; 133 PostMessageDecoder messageCoder(element); 134 134 if (!decoder->decode(messageCoder)) 135 135 return false; 136 vector.append(element );136 vector.append(element.release()); 137 137 } 138 138 139 *(coder.m_root) = ImmutableArray::adopt(vector).leakRef();139 coder.m_root = ImmutableArray::adopt(vector); 140 140 break; 141 141 } … … 144 144 if (!decoder->decode(string)) 145 145 return false; 146 *(coder.m_root) = WebString::create(string).leakRef();146 coder.m_root = WebString::create(string); 147 147 break; 148 148 } … … 151 151 if (!decoder->decode(pageID)) 152 152 return false; 153 *(coder.m_root)= WebProcess::shared().webPage(pageID);153 coder.m_root = WebProcess::shared().webPage(pageID); 154 154 break; 155 155 } … … 162 162 163 163 private: 164 APIObject**m_root;164 RefPtr<APIObject>& m_root; 165 165 }; 166 166 … … 306 306 switch (messageID.get<InjectedBundleMessage::Kind>()) { 307 307 case InjectedBundleMessage::PostMessage: { 308 String messageName; 309 // FIXME: This should be a RefPtr<APIObject> 310 APIObject* messageBody = 0; 311 PostMessageDecoder messageCoder(&messageBody); 308 String messageName; 309 RefPtr<APIObject> messageBody; 310 PostMessageDecoder messageCoder(messageBody); 312 311 if (!arguments->decode(CoreIPC::Out(messageName, messageCoder))) 313 312 return; 314 313 315 didReceiveMessage(messageName, messageBody); 316 317 messageBody->deref(); 318 314 didReceiveMessage(messageName, messageBody.get()); 319 315 return; 320 316 } -
trunk/WebKit2/WebProcess/WebPage/WebFrame.cpp
r66621 r66679 225 225 return ImmutableArray::create(); 226 226 227 Vector< APIObject*> vector;227 Vector<RefPtr<APIObject> > vector; 228 228 vector.reserveInitialCapacity(size); 229 229 230 230 for (Frame* child = m_coreFrame->tree()->firstChild(); child; child = child->tree()->nextSibling()) { 231 231 WebFrame* webFrame = static_cast<WebFrameLoaderClient*>(child->loader()->client())->webFrame(); 232 webFrame->ref();233 232 vector.uncheckedAppend(webFrame); 234 233 }
Note: See TracChangeset
for help on using the changeset viewer.