diff options
author | Steve Block <steveblock@google.com> | 2011-05-06 11:45:16 +0100 |
---|---|---|
committer | Steve Block <steveblock@google.com> | 2011-05-12 13:44:10 +0100 |
commit | cad810f21b803229eb11403f9209855525a25d57 (patch) | |
tree | 29a6fd0279be608e0fe9ffe9841f722f0f4e4269 /Source/WebCore/history/HistoryItem.h | |
parent | 121b0cf4517156d0ac5111caf9830c51b69bae8f (diff) | |
download | external_webkit-cad810f21b803229eb11403f9209855525a25d57.zip external_webkit-cad810f21b803229eb11403f9209855525a25d57.tar.gz external_webkit-cad810f21b803229eb11403f9209855525a25d57.tar.bz2 |
Merge WebKit at r75315: Initial merge by git.
Change-Id: I570314b346ce101c935ed22a626b48c2af266b84
Diffstat (limited to 'Source/WebCore/history/HistoryItem.h')
-rw-r--r-- | Source/WebCore/history/HistoryItem.h | 297 |
1 files changed, 297 insertions, 0 deletions
diff --git a/Source/WebCore/history/HistoryItem.h b/Source/WebCore/history/HistoryItem.h new file mode 100644 index 0000000..19b33ad --- /dev/null +++ b/Source/WebCore/history/HistoryItem.h @@ -0,0 +1,297 @@ +/* + * Copyright (C) 2006, 2008, 2011 Apple Inc. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef HistoryItem_h +#define HistoryItem_h + +#include "IntPoint.h" +#include "PlatformString.h" +#include "SerializedScriptValue.h" +#include <wtf/OwnPtr.h> +#include <wtf/PassOwnPtr.h> + +#if PLATFORM(MAC) +#import <wtf/RetainPtr.h> +typedef struct objc_object* id; +#endif + +#if PLATFORM(QT) +#include <QVariant> +#include <QByteArray> +#include <QDataStream> +#endif + +#if PLATFORM(ANDROID) +#include "AndroidWebHistoryBridge.h" +#endif + +namespace WebCore { + +class CachedPage; +class Document; +class FormData; +class HistoryItem; +class Image; +class KURL; +class ResourceRequest; + +typedef Vector<RefPtr<HistoryItem> > HistoryItemVector; + +extern void (*notifyHistoryItemChanged)(HistoryItem*); + +enum VisitCountBehavior { + IncreaseVisitCount, + DoNotIncreaseVisitCount +}; + +class HistoryItem : public RefCounted<HistoryItem> { + friend class PageCache; + +public: + static PassRefPtr<HistoryItem> create() { return adoptRef(new HistoryItem); } + static PassRefPtr<HistoryItem> create(const String& urlString, const String& title, double lastVisited) + { + return adoptRef(new HistoryItem(urlString, title, lastVisited)); + } + static PassRefPtr<HistoryItem> create(const String& urlString, const String& title, const String& alternateTitle, double lastVisited) + { + return adoptRef(new HistoryItem(urlString, title, alternateTitle, lastVisited)); + } + static PassRefPtr<HistoryItem> create(const KURL& url, const String& target, const String& parent, const String& title) + { + return adoptRef(new HistoryItem(url, target, parent, title)); + } + + ~HistoryItem(); + + PassRefPtr<HistoryItem> copy() const; + + void encodeBackForwardTree(Encoder&) const; + static PassRefPtr<HistoryItem> decodeBackForwardTree(const String& urlString, const String& title, const String& originalURLString, Decoder&); + + const String& originalURLString() const; + const String& urlString() const; + const String& title() const; + + bool isInPageCache() const { return m_cachedPage; } + + double lastVisitedTime() const; + + void setAlternateTitle(const String& alternateTitle); + const String& alternateTitle() const; + + Image* icon() const; + + const String& parent() const; + KURL url() const; + KURL originalURL() const; + const String& referrer() const; + const String& target() const; + bool isTargetItem() const; + + FormData* formData(); + String formContentType() const; + + int visitCount() const; + bool lastVisitWasFailure() const { return m_lastVisitWasFailure; } + bool lastVisitWasHTTPNonGet() const { return m_lastVisitWasHTTPNonGet; } + + void mergeAutoCompleteHints(HistoryItem* otherItem); + + const IntPoint& scrollPoint() const; + void setScrollPoint(const IntPoint&); + void clearScrollPoint(); + const Vector<String>& documentState() const; + void setDocumentState(const Vector<String>&); + void clearDocumentState(); + + void setURL(const KURL&); + void setURLString(const String&); + void setOriginalURLString(const String&); + void setReferrer(const String&); + void setTarget(const String&); + void setParent(const String&); + void setTitle(const String&); + void setIsTargetItem(bool); + + void setStateObject(PassRefPtr<SerializedScriptValue> object); + SerializedScriptValue* stateObject() const { return m_stateObject.get(); } + + void setItemSequenceNumber(long long number) { m_itemSequenceNumber = number; } + long long itemSequenceNumber() const { return m_itemSequenceNumber; } + + 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&); + + void recordInitialVisit(); + + void setVisitCount(int); + void setLastVisitWasFailure(bool wasFailure) { m_lastVisitWasFailure = wasFailure; } + void setLastVisitWasHTTPNonGet(bool wasNotGet) { m_lastVisitWasHTTPNonGet = wasNotGet; } + + void addChildItem(PassRefPtr<HistoryItem>); + void setChildItem(PassRefPtr<HistoryItem>); + HistoryItem* childItemWithTarget(const String&) const; + HistoryItem* childItemWithDocumentSequenceNumber(long long number) const; + HistoryItem* targetItem(); + const HistoryItemVector& children() const; + bool hasChildren() const; + void clearChildren(); + + bool shouldDoSameDocumentNavigationTo(HistoryItem* otherItem) const; + bool hasSameFrames(HistoryItem* otherItem) const; + + // This should not be called directly for HistoryItems that are already included + // in GlobalHistory. The WebKit api for this is to use -[WebHistory setLastVisitedTimeInterval:forItem:] instead. + void setLastVisitedTime(double); + void visited(const String& title, double time, VisitCountBehavior); + + void addRedirectURL(const String&); + Vector<String>* redirectURLs() const; + void setRedirectURLs(PassOwnPtr<Vector<String> >); + + bool isCurrentDocument(Document*) const; + +#if PLATFORM(MAC) + id viewState() const; + void setViewState(id); + + // Transient properties may be of any ObjC type. They are intended to be used to store state per back/forward list entry. + // The properties will not be persisted; when the history item is removed, the properties will be lost. + id getTransientProperty(const String&) const; + void setTransientProperty(const String&, id); +#endif + +#if PLATFORM(QT) + QVariant userData() const { return m_userData; } + void setUserData(const QVariant& userData) { m_userData = userData; } + + bool restoreState(QDataStream& buffer, int version); + QDataStream& saveState(QDataStream& out, int version) const; +#endif + +#if PLATFORM(ANDROID) + void setBridge(AndroidWebHistoryBridge* bridge); + AndroidWebHistoryBridge* bridge() const; +#endif + +#ifndef NDEBUG + int showTree() const; + int showTreeWithIndent(unsigned indentLevel) const; +#endif + + void adoptVisitCounts(Vector<int>& dailyCounts, Vector<int>& weeklyCounts); + const Vector<int>& dailyVisitCounts() const { return m_dailyVisitCounts; } + const Vector<int>& weeklyVisitCounts() const { return m_weeklyVisitCounts; } + +private: + HistoryItem(); + HistoryItem(const String& urlString, const String& title, double lastVisited); + HistoryItem(const String& urlString, const String& title, const String& alternateTitle, double lastVisited); + HistoryItem(const KURL& url, const String& frameName, const String& parent, const String& title); + + HistoryItem(const HistoryItem&); + + void padDailyCountsForNewVisit(double time); + void collapseDailyVisitsToWeekly(); + void recordVisitAtTime(double, VisitCountBehavior = IncreaseVisitCount); + + bool hasSameDocumentTree(HistoryItem* otherItem) const; + + HistoryItem* findTargetItem(); + + void encodeBackForwardTreeNode(Encoder&) const; + static PassRefPtr<HistoryItem> decodeBackForwardTreeNode(const String& urlString, const String& title, const String& originalURLString, Decoder&); + + /* When adding new member variables to this class, please notify the Qt team. + * qt/HistoryItemQt.cpp contains code to serialize history items. + */ + + String m_urlString; + String m_originalURLString; + String m_referrer; + String m_target; + String m_parent; + String m_title; + String m_displayTitle; + + double m_lastVisitedTime; + bool m_lastVisitWasHTTPNonGet; + + IntPoint m_scrollPoint; + Vector<String> m_documentState; + + HistoryItemVector m_children; + + bool m_lastVisitWasFailure; + bool m_isTargetItem; + int m_visitCount; + Vector<int> m_dailyVisitCounts; + Vector<int> m_weeklyVisitCounts; + + OwnPtr<Vector<String> > m_redirectURLs; + + int64_t m_itemSequenceNumber; + + // Support for HTML5 History + RefPtr<SerializedScriptValue> m_stateObject; + int64_t m_documentSequenceNumber; + + // info used to repost form data + RefPtr<FormData> m_formData; + String m_formContentType; + + // PageCache controls these fields. + HistoryItem* m_next; + HistoryItem* m_prev; + RefPtr<CachedPage> m_cachedPage; + +#if PLATFORM(MAC) + RetainPtr<id> m_viewState; + OwnPtr<HashMap<String, RetainPtr<id> > > m_transientProperties; +#endif + +#if PLATFORM(QT) + QVariant m_userData; +#endif + +#if PLATFORM(ANDROID) + RefPtr<AndroidWebHistoryBridge> m_bridge; +#endif + +}; //class HistoryItem + +} //namespace WebCore + +#ifndef NDEBUG +// Outside the WebCore namespace for ease of invocation from gdb. +extern "C" int showTree(const WebCore::HistoryItem*); +#endif + +#endif // HISTORYITEM_H |