Index: Source/core/page/HistoryController.cpp |
diff --git a/Source/core/page/HistoryController.cpp b/Source/core/page/HistoryController.cpp |
index cb963d6c45926d15bc63505a5a6885014469159f..09534be653b561e8e2abb0a9f4d8c93c475b1a29 100644 |
--- a/Source/core/page/HistoryController.cpp |
+++ b/Source/core/page/HistoryController.cpp |
@@ -153,6 +153,22 @@ void HistoryController::updateBackForwardListForFragmentScroll(Frame* frame, His |
createNewBackForwardItem(frame, item, false); |
} |
+class HistoryController::HistoryFrameLoad { |
+public: |
+ HistoryFrameLoad(Frame* frame, HistoryItem* item) |
+ : m_frame(frame) |
+ , m_item(item) |
+ { |
+ } |
+ |
+ Frame* frame() { return m_frame.get(); } |
+ HistoryItem* item() { return m_item; } |
+ |
+private: |
+ RefPtr<Frame> m_frame; |
+ HistoryItem* m_item; |
+}; |
+ |
void HistoryController::goToEntry(PassOwnPtr<HistoryEntry> targetEntry, ResourceRequestCachePolicy cachePolicy) |
{ |
HistoryFrameLoadSet sameDocumentLoads; |
@@ -162,10 +178,10 @@ void HistoryController::goToEntry(PassOwnPtr<HistoryEntry> targetEntry, Resource |
if (m_currentEntry) |
recursiveGoToEntry(m_page->mainFrame(), sameDocumentLoads, differentDocumentLoads); |
else |
- differentDocumentLoads.set(m_page->mainFrame(), m_provisionalEntry->root()); |
+ differentDocumentLoads.set(m_page->mainFrame(), adoptPtr(new HistoryFrameLoad(m_page->mainFrame(), m_provisionalEntry->root()))); |
if (sameDocumentLoads.isEmpty() && differentDocumentLoads.isEmpty()) |
- sameDocumentLoads.set(m_page->mainFrame(), m_provisionalEntry->root()); |
+ sameDocumentLoads.set(m_page->mainFrame(), adoptPtr(new HistoryFrameLoad(m_page->mainFrame(), m_provisionalEntry->root()))); |
if (differentDocumentLoads.isEmpty()) { |
m_previousEntry = m_currentEntry.release(); |
@@ -173,9 +189,9 @@ void HistoryController::goToEntry(PassOwnPtr<HistoryEntry> targetEntry, Resource |
} |
for (HistoryFrameLoadSet::iterator it = sameDocumentLoads.begin(); it != sameDocumentLoads.end(); ++it) |
- it->key->loader().loadHistoryItem(it->value, HistorySameDocumentLoad, cachePolicy); |
+ it->key->loader().loadHistoryItem(it->value->item(), HistorySameDocumentLoad, cachePolicy); |
Nate Chapin
2014/01/23 18:19:11
Rather than checking m_client in loadHistoryItem()
|
for (HistoryFrameLoadSet::iterator it = differentDocumentLoads.begin(); it != differentDocumentLoads.end(); ++it) |
- it->key->loader().loadHistoryItem(it->value, HistoryDifferentDocumentLoad, cachePolicy); |
+ it->key->loader().loadHistoryItem(it->value->item(), HistoryDifferentDocumentLoad, cachePolicy); |
} |
void HistoryController::recursiveGoToEntry(Frame* frame, HistoryFrameLoadSet& sameDocumentLoads, HistoryFrameLoadSet& differentDocumentLoads) |
@@ -189,9 +205,9 @@ void HistoryController::recursiveGoToEntry(Frame* frame, HistoryFrameLoadSet& sa |
if (!oldItem || (newItem != oldItem && newItem->itemSequenceNumber() != oldItem->itemSequenceNumber())) { |
if (oldItem && newItem->documentSequenceNumber() == oldItem->documentSequenceNumber()) |
- sameDocumentLoads.set(frame, newItem); |
+ sameDocumentLoads.set(frame, adoptPtr(new HistoryFrameLoad(frame, newItem))); |
else |
- differentDocumentLoads.set(frame, newItem); |
+ differentDocumentLoads.set(frame, adoptPtr(new HistoryFrameLoad(frame, newItem))); |
return; |
} |