Changeset 82206 in webkit
- Timestamp:
- Mar 29, 2011 12:37:30 AM (13 years ago)
- Location:
- trunk/Source/WebKit2
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit2/ChangeLog
r82193 r82206 1 2011-03-28 Maciej Stachowiak <mjs@apple.com> 2 3 Reviewed by Dan Bernstein. 4 5 WKPageGetSourceForFrame and WKPageGetContentsAsString should throw an error in case of a race with page loading 6 https://bugs.webkit.org/show_bug.cgi?id=57305 7 <rdar://problem/8738060>, <rdar://problem/8780168> 8 9 * UIProcess/WebPageProxy.cpp: 10 (WebKit::WebPageProxy::close): Clear m_loadDependentStringCallbackIDs 11 (WebKit::WebPageProxy::getSourceForFrame): track the callback as load dependent 12 (WebKit::WebPageProxy::getContentsAsString): ditto 13 (WebKit::WebPageProxy::clearLoadDependentCallbacks): Invalidate all load dependent callbacks 14 (WebKit::WebPageProxy::didCommitLoadForFrame): Call clearLoadDependentCallbacks 15 (WebKit::WebPageProxy::didFailLoadForFrame): ditto 16 (WebKit::WebPageProxy::stringCallback): Remove callback from load dependent set if appropriate 17 (WebKit::WebPageProxy::processDidCrash): Clear m_loadDependentStringCallbackIDs 18 * UIProcess/WebPageProxy.h: Add m_loadDependentStringCallbackIDs hash set. 19 1 20 2011-03-28 Patrick Gansterer <paroga@webkit.org> 2 21 -
trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp
r82047 r82206 324 324 invalidateCallbackMap(m_dataCallbacks); 325 325 invalidateCallbackMap(m_stringCallbacks); 326 m_loadDependentStringCallbackIDs.clear(); 326 327 invalidateCallbackMap(m_scriptValueCallbacks); 327 328 invalidateCallbackMap(m_computedPagesCallbacks); … … 1116 1117 RefPtr<StringCallback> callback = prpCallback; 1117 1118 uint64_t callbackID = callback->callbackID(); 1119 m_loadDependentStringCallbackIDs.add(callbackID); 1118 1120 m_stringCallbacks.set(callbackID, callback.get()); 1119 1121 process()->send(Messages::WebPage::GetSourceForFrame(frame->frameID(), callbackID), m_pageID); … … 1124 1126 RefPtr<StringCallback> callback = prpCallback; 1125 1127 uint64_t callbackID = callback->callbackID(); 1128 m_loadDependentStringCallbackIDs.add(callbackID); 1126 1129 m_stringCallbacks.set(callbackID, callback.get()); 1127 1130 process()->send(Messages::WebPage::GetContentsAsString(callbackID), m_pageID); … … 1396 1399 } 1397 1400 1401 void WebPageProxy::clearLoadDependentCallbacks() 1402 { 1403 Vector<uint64_t> callbackIDsCopy; 1404 copyToVector(m_loadDependentStringCallbackIDs, callbackIDsCopy); 1405 m_loadDependentStringCallbackIDs.clear(); 1406 1407 for (size_t i = 0; i < callbackIDsCopy.size(); ++i) { 1408 RefPtr<StringCallback> callback = m_stringCallbacks.take(callbackIDsCopy[i]); 1409 if (callback) 1410 callback->invalidate(); 1411 } 1412 } 1413 1398 1414 void WebPageProxy::didCommitLoadForFrame(uint64_t frameID, const String& mimeType, bool frameHasCustomRepresentation, const PlatformCertificateInfo& certificateInfo, CoreIPC::ArgumentDecoder* arguments) 1399 1415 { … … 1410 1426 MESSAGE_CHECK(frame); 1411 1427 1428 clearLoadDependentCallbacks(); 1429 1412 1430 frame->didCommitLoad(mimeType, certificateInfo); 1413 1431 … … 1457 1475 WebFrameProxy* frame = process()->webFrame(frameID); 1458 1476 MESSAGE_CHECK(frame); 1477 1478 clearLoadDependentCallbacks(); 1459 1479 1460 1480 frame->didFailLoad(); … … 2432 2452 if (!callback) { 2433 2453 // FIXME: Log error or assert. 2434 return; 2435 } 2454 // this can validly happen if a load invalidated the callback, though 2455 return; 2456 } 2457 2458 m_loadDependentStringCallbackIDs.remove(callbackID); 2436 2459 2437 2460 callback->performCallbackWithReturnValue(resultString.impl()); … … 2556 2579 invalidateCallbackMap(m_dataCallbacks); 2557 2580 invalidateCallbackMap(m_stringCallbacks); 2581 m_loadDependentStringCallbackIDs.clear(); 2558 2582 invalidateCallbackMap(m_scriptValueCallbacks); 2559 2583 invalidateCallbackMap(m_computedPagesCallbacks); -
trunk/Source/WebKit2/UIProcess/WebPageProxy.h
r82019 r82206 657 657 #endif 658 658 659 void clearLoadDependentCallbacks(); 660 659 661 PageClient* m_pageClient; 660 662 WebLoaderClient m_loaderClient; … … 689 691 HashMap<uint64_t, RefPtr<DataCallback> > m_dataCallbacks; 690 692 HashMap<uint64_t, RefPtr<StringCallback> > m_stringCallbacks; 693 HashSet<uint64_t> m_loadDependentStringCallbackIDs; 691 694 HashMap<uint64_t, RefPtr<ScriptValueCallback> > m_scriptValueCallbacks; 692 695 HashMap<uint64_t, RefPtr<ComputedPagesCallback> > m_computedPagesCallbacks;
Note: See TracChangeset
for help on using the changeset viewer.