diff options
Diffstat (limited to 'Source/WebCore/history')
-rw-r--r-- | Source/WebCore/history/BackForwardController.h | 3 | ||||
-rw-r--r-- | Source/WebCore/history/CachedFrame.cpp | 4 | ||||
-rw-r--r-- | Source/WebCore/history/HistoryItem.cpp | 40 | ||||
-rw-r--r-- | Source/WebCore/history/HistoryItem.h | 15 | ||||
-rw-r--r-- | Source/WebCore/history/PageCache.h | 3 |
5 files changed, 61 insertions, 4 deletions
diff --git a/Source/WebCore/history/BackForwardController.h b/Source/WebCore/history/BackForwardController.h index e89e32b..12884ea 100644 --- a/Source/WebCore/history/BackForwardController.h +++ b/Source/WebCore/history/BackForwardController.h @@ -36,7 +36,8 @@ class BackForwardList; class HistoryItem; class Page; -class BackForwardController : public Noncopyable { +class BackForwardController { + WTF_MAKE_NONCOPYABLE(BackForwardController); WTF_MAKE_FAST_ALLOCATED; public: BackForwardController(Page*, PassRefPtr<BackForwardList>); ~BackForwardController(); diff --git a/Source/WebCore/history/CachedFrame.cpp b/Source/WebCore/history/CachedFrame.cpp index d21f958..ab6b4d6 100644 --- a/Source/WebCore/history/CachedFrame.cpp +++ b/Source/WebCore/history/CachedFrame.cpp @@ -30,6 +30,7 @@ #include "DocumentLoader.h" #include "ExceptionCode.h" #include "EventNames.h" +#include "FocusController.h" #include "Frame.h" #include "FrameLoaderClient.h" #include "FrameView.h" @@ -131,6 +132,9 @@ CachedFrame::CachedFrame(Frame* frame) ASSERT(m_documentLoader); ASSERT(m_view); + if (frame->page()->focusController()->focusedFrame() == frame) + frame->page()->focusController()->setFocusedFrame(frame->page()->mainFrame()); + // Active DOM objects must be suspended before we cached the frame script data m_document->suspendActiveDOMObjects(ActiveDOMObject::DocumentWillBecomeInactive); m_cachedFrameScriptData = adoptPtr(new ScriptCachedFrameData(frame)); diff --git a/Source/WebCore/history/HistoryItem.cpp b/Source/WebCore/history/HistoryItem.cpp index f9e6c96..805d5aa 100644 --- a/Source/WebCore/history/HistoryItem.cpp +++ b/Source/WebCore/history/HistoryItem.cpp @@ -65,6 +65,8 @@ HistoryItem::HistoryItem() , m_visitCount(0) , m_itemSequenceNumber(generateSequenceNumber()) , m_documentSequenceNumber(generateSequenceNumber()) + , m_next(0) + , m_prev(0) { } @@ -80,6 +82,8 @@ HistoryItem::HistoryItem(const String& urlString, const String& title, double ti , m_visitCount(0) , m_itemSequenceNumber(generateSequenceNumber()) , m_documentSequenceNumber(generateSequenceNumber()) + , m_next(0) + , m_prev(0) { iconDatabase()->retainIconForPageURL(m_urlString); } @@ -97,6 +101,8 @@ HistoryItem::HistoryItem(const String& urlString, const String& title, const Str , m_visitCount(0) , m_itemSequenceNumber(generateSequenceNumber()) , m_documentSequenceNumber(generateSequenceNumber()) + , m_next(0) + , m_prev(0) { iconDatabase()->retainIconForPageURL(m_urlString); } @@ -115,6 +121,8 @@ HistoryItem::HistoryItem(const KURL& url, const String& target, const String& pa , m_visitCount(0) , m_itemSequenceNumber(generateSequenceNumber()) , m_documentSequenceNumber(generateSequenceNumber()) + , m_next(0) + , m_prev(0) { iconDatabase()->retainIconForPageURL(m_urlString); } @@ -168,6 +176,38 @@ PassRefPtr<HistoryItem> HistoryItem::copy() const return adoptRef(new HistoryItem(*this)); } +void HistoryItem::reset() +{ + iconDatabase()->releaseIconForPageURL(m_urlString); + + m_urlString = String(); + m_originalURLString = String(); + m_referrer = String(); + m_target = String(); + m_parent = String(); + m_title = String(); + m_displayTitle = String(); + + m_lastVisitedTime = 0; + m_lastVisitWasHTTPNonGet = false; + + m_lastVisitWasFailure = false; + m_isTargetItem = false; + m_visitCount = 0; + m_dailyVisitCounts.clear(); + m_weeklyVisitCounts.clear(); + + m_redirectURLs.clear(); + + m_itemSequenceNumber = generateSequenceNumber(); + + m_stateObject = 0; + m_documentSequenceNumber = generateSequenceNumber(); + + m_formData = 0; + m_formContentType = String(); +} + const String& HistoryItem::urlString() const { return m_urlString; diff --git a/Source/WebCore/history/HistoryItem.h b/Source/WebCore/history/HistoryItem.h index a4622c0..526cae2 100644 --- a/Source/WebCore/history/HistoryItem.h +++ b/Source/WebCore/history/HistoryItem.h @@ -88,6 +88,9 @@ public: PassRefPtr<HistoryItem> copy() const; + // Resets the HistoryItem to its initial state, as returned by create(). + void reset(); + void encodeBackForwardTree(Encoder&) const; static PassRefPtr<HistoryItem> decodeBackForwardTree(const String& urlString, const String& title, const String& originalURLString, Decoder&); @@ -148,7 +151,7 @@ public: void setDocumentSequenceNumber(long long number) { m_documentSequenceNumber = number; } long long documentSequenceNumber() const { return m_documentSequenceNumber; } - + void setFormInfoFromRequest(const ResourceRequest&); void setFormData(PassRefPtr<FormData>); void setFormContentType(const String&); @@ -262,11 +265,19 @@ private: OwnPtr<Vector<String> > m_redirectURLs; + // If two HistoryItems have the same item sequence number, then they are + // clones of one another. Traversing history from one such HistoryItem to + // another is a no-op. HistoryItem clones are created for parent and + // sibling frames when only a subframe navigates. int64_t m_itemSequenceNumber; + // If two HistoryItems have the same document sequence number, then they + // refer to the same instance of a document. Traversing history from one + // such HistoryItem to another preserves the document. + int64_t m_documentSequenceNumber; + // Support for HTML5 History RefPtr<SerializedScriptValue> m_stateObject; - int64_t m_documentSequenceNumber; // info used to repost form data RefPtr<FormData> m_formData; diff --git a/Source/WebCore/history/PageCache.h b/Source/WebCore/history/PageCache.h index 71ae5ad..912bd65 100644 --- a/Source/WebCore/history/PageCache.h +++ b/Source/WebCore/history/PageCache.h @@ -39,7 +39,8 @@ namespace WebCore { class HistoryItem; class Page; - class PageCache : public Noncopyable { + class PageCache { + WTF_MAKE_NONCOPYABLE(PageCache); WTF_MAKE_FAST_ALLOCATED; public: friend PageCache* pageCache(); |