+2017-05-31 Brent Fulgham <bfulgham@apple.com>
+
+ Avoid iterator invalidation bug in WebCore::defaultPortForProtocol
+ https://bugs.webkit.org/show_bug.cgi?id=172786
+ <rdar://problem/32499586>
+
+ Reviewed by Chris Dumez.
+
+ Create the SecurityOrigin objects on the main thread (rather than the worker queues)
+ since defaultPortForProtocol is not threadsafe.
+
+ * loader/ResourceLoadObserver.cpp:
+ (WebCore::ResourceLoadObserver::logFrameNavigation):
+ (WebCore::ResourceLoadObserver::logSubresourceLoading):
+ (WebCore::ResourceLoadObserver::logWebSocketLoading):
+
2017-05-31 Mark Lam <mark.lam@apple.com>
Remove overrides of visitChildren() that do not add any functionality.
if (targetPrimaryDomain == mainFramePrimaryDomain || targetPrimaryDomain == sourcePrimaryDomain)
return;
+ auto mainFrameOrigin = SecurityOrigin::create(mainFrameURL);
+
ASSERT(m_queue);
- m_queue->dispatch([this, isMainFrame, isRedirect, sourcePrimaryDomain = sourcePrimaryDomain.isolatedCopy(), mainFramePrimaryDomain = mainFramePrimaryDomain.isolatedCopy(), targetURL = CrossThreadCopier<URL>::copy(targetURL), mainFrameURL = CrossThreadCopier<URL>::copy(mainFrameURL), targetPrimaryDomain = targetPrimaryDomain.isolatedCopy()] () {
+ m_queue->dispatch([this, isMainFrame, isRedirect, sourcePrimaryDomain = sourcePrimaryDomain.isolatedCopy(), mainFramePrimaryDomain = mainFramePrimaryDomain.isolatedCopy(), targetURL = CrossThreadCopier<URL>::copy(targetURL), mainFrameOrigin = mainFrameOrigin->isolatedCopy(), targetPrimaryDomain = targetPrimaryDomain.isolatedCopy()] () {
auto targetOrigin = SecurityOrigin::create(targetURL);
bool shouldFireDataModificationHandler = false;
else {
targetStatistics.subframeHasBeenLoadedBefore = true;
- auto mainFrameOrigin = SecurityOrigin::create(mainFrameURL);
auto subframeUnderTopFrameOriginsResult = targetStatistics.subframeUnderTopFrameOrigins.add(mainFramePrimaryDomain);
if (subframeUnderTopFrameOriginsResult.isNewEntry)
shouldFireDataModificationHandler = true;
if (targetPrimaryDomain == mainFramePrimaryDomain || (isRedirect && targetPrimaryDomain == sourcePrimaryDomain))
return;
+ auto mainFrameOrigin = SecurityOrigin::create(mainFrameURL);
+
ASSERT(m_queue);
- m_queue->dispatch([this, isRedirect, sourcePrimaryDomain = sourcePrimaryDomain.isolatedCopy(), mainFramePrimaryDomain = mainFramePrimaryDomain.isolatedCopy(), targetPrimaryDomain = targetPrimaryDomain.isolatedCopy(), mainFrameURL = mainFrameURL.isolatedCopy()] () {
+ m_queue->dispatch([this, isRedirect, sourcePrimaryDomain = sourcePrimaryDomain.isolatedCopy(), mainFramePrimaryDomain = mainFramePrimaryDomain.isolatedCopy(), targetPrimaryDomain = targetPrimaryDomain.isolatedCopy(), mainFrameOrigin = mainFrameOrigin->isolatedCopy()] () {
bool shouldFireDataModificationHandler = false;
// Always fire if we have previously removed data records for this domain
shouldFireDataModificationHandler = targetStatistics.dataRecordsRemoved > 0;
- auto mainFrameOrigin = SecurityOrigin::create(mainFrameURL);
auto subresourceUnderTopFrameOriginsResult = targetStatistics.subresourceUnderTopFrameOrigins.add(mainFramePrimaryDomain);
if (subresourceUnderTopFrameOriginsResult.isNewEntry)
shouldFireDataModificationHandler = true;
if (targetPrimaryDomain == mainFramePrimaryDomain)
return;
+ auto mainFrameOrigin = SecurityOrigin::create(mainFrameURL);
+
ASSERT(m_queue);
- m_queue->dispatch([this, targetPrimaryDomain = targetPrimaryDomain.isolatedCopy(), mainFramePrimaryDomain = mainFramePrimaryDomain.isolatedCopy(), mainFrameURL = mainFrameURL.isolatedCopy()] () {
+ m_queue->dispatch([this, targetPrimaryDomain = targetPrimaryDomain.isolatedCopy(), mainFramePrimaryDomain = mainFramePrimaryDomain.isolatedCopy(), mainFrameOrigin = mainFrameOrigin->isolatedCopy()] () {
bool shouldFireDataModificationHandler = false;
// Always fire if we have previously removed data records for this domain
shouldFireDataModificationHandler = targetStatistics.dataRecordsRemoved > 0;
- auto mainFrameOrigin = SecurityOrigin::create(mainFrameURL);
auto subresourceUnderTopFrameOriginsResult = targetStatistics.subresourceUnderTopFrameOrigins.add(mainFramePrimaryDomain);
if (subresourceUnderTopFrameOriginsResult.isNewEntry)
shouldFireDataModificationHandler = true;