summaryrefslogtreecommitdiffstats
path: root/Source/WebCore/history/HistoryItem.h
diff options
context:
space:
mode:
authorSteve Block <steveblock@google.com>2011-05-06 11:45:16 +0100
committerSteve Block <steveblock@google.com>2011-05-12 13:44:10 +0100
commitcad810f21b803229eb11403f9209855525a25d57 (patch)
tree29a6fd0279be608e0fe9ffe9841f722f0f4e4269 /Source/WebCore/history/HistoryItem.h
parent121b0cf4517156d0ac5111caf9830c51b69bae8f (diff)
downloadexternal_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.h297
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