5d9e04f279b8ddf821da2d6e0a2c21eb54de3057
[WebKit-https.git] / WebCore / history / HistoryItem.h
1 /*
2  * Copyright (C) 2006 Apple Computer, Inc.  All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
17  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
24  */
25
26 #ifndef HistoryItem_h
27 #define HistoryItem_h
28
29 #include "CachedPage.h"
30 #include "FormData.h"
31 #include "IntPoint.h"
32 #include "KURL.h"
33 #include "PlatformString.h"
34 #include <wtf/RefCounted.h>
35 #include "StringHash.h"
36 #include <wtf/HashMap.h>
37 #include <wtf/OwnPtr.h>
38 #include <wtf/RefPtr.h>
39 #include <wtf/Vector.h>
40
41 #if PLATFORM(MAC)
42 #import <wtf/RetainPtr.h>
43 typedef struct objc_object* id;
44 #endif
45
46 namespace WebCore {
47
48 class Document;
49 class Image;
50 class KURL;
51 struct ResourceRequest;
52
53 class HistoryItem;
54 typedef Vector<RefPtr<HistoryItem> > HistoryItemVector;
55
56 extern void (*notifyHistoryItemChanged)();
57
58 class HistoryItem : public RefCounted<HistoryItem> {
59     friend class PageCache;
60
61 public: 
62     HistoryItem();
63     HistoryItem(const String& urlString, const String& title, double lastVisited);
64     HistoryItem(const String& urlString, const String& title, const String& alternateTitle, double lastVisited);
65     HistoryItem(const KURL& url, const String& title);
66     HistoryItem(const KURL& url, const String& target, const String& parent, const String& title);
67     
68     ~HistoryItem();
69     
70     PassRefPtr<HistoryItem> copy() const;
71     
72     const String& originalURLString() const;
73     const String& urlString() const;
74     const String& title() const;
75     
76     void setInPageCache(bool inPageCache) { m_isInPageCache = inPageCache; }
77     bool isInPageCache() const { return m_isInPageCache; }
78     
79     double lastVisitedTime() const;
80     
81     void setAlternateTitle(const String& alternateTitle);
82     const String& alternateTitle() const;
83     
84     Image* icon() const;
85     
86     const String& parent() const;
87     KURL url() const;
88     KURL originalURL() const;
89     const String& target() const;
90     bool isTargetItem() const;
91     
92     FormData* formData();
93     String formContentType() const;
94     String formReferrer() const;
95     String rssFeedReferrer() const;
96     
97     int visitCount() const;
98
99     void mergeAutoCompleteHints(HistoryItem* otherItem);
100     
101     const IntPoint& scrollPoint() const;
102     void setScrollPoint(const IntPoint&);
103     void clearScrollPoint();
104     const Vector<String>& documentState() const;
105     void setDocumentState(const Vector<String>&);
106     void clearDocumentState();
107
108     void setURL(const KURL&);
109     void setURLString(const String&);
110     void setOriginalURLString(const String&);
111     void setTarget(const String&);
112     void setParent(const String&);
113     void setTitle(const String&);
114     void setIsTargetItem(bool);
115     
116     void setFormInfoFromRequest(const ResourceRequest&);
117
118     void setRSSFeedReferrer(const String&);
119     void setVisitCount(int);
120
121     void addChildItem(PassRefPtr<HistoryItem>);
122     HistoryItem* childItemWithName(const String&) const;
123     HistoryItem* targetItem();
124     HistoryItem* recurseToFindTargetItem();
125     const HistoryItemVector& children() const;
126     bool hasChildren() const;
127
128     // This should not be called directly for HistoryItems that are already included
129     // in GlobalHistory. The WebKit api for this is to use -[WebHistory setLastVisitedTimeInterval:forItem:] instead.
130     void setLastVisitedTime(double);
131     
132     bool isCurrentDocument(Document*) const;
133     
134 #if PLATFORM(MAC)
135     id viewState() const;
136     void setViewState(id);
137     
138     // Transient properties may be of any ObjC type.  They are intended to be used to store state per back/forward list entry.
139     // The properties will not be persisted; when the history item is removed, the properties will be lost.
140     id getTransientProperty(const String&) const;
141     void setTransientProperty(const String&, id);
142 #endif
143
144 #ifndef NDEBUG
145     int showTree() const;
146     int showTreeWithIndent(unsigned indentLevel) const;
147 #endif
148
149 private:
150     HistoryItem(const HistoryItem&);
151     
152     String m_urlString;
153     String m_originalURLString;
154     String m_target;
155     String m_parent;
156     String m_title;
157     String m_displayTitle;
158     
159     double m_lastVisitedTime;
160
161     IntPoint m_scrollPoint;
162     Vector<String> m_documentState;
163     
164     HistoryItemVector m_subItems;
165     
166     bool m_isInPageCache;
167     bool m_isTargetItem;
168     int m_visitCount;
169     
170     // info used to repost form data
171     RefPtr<FormData> m_formData;
172     String m_formContentType;
173     String m_formReferrer;
174     
175     // info used to support RSS feeds
176     String m_rssFeedReferrer;
177
178     // PageCache controls these fields.
179     HistoryItem* m_next;
180     HistoryItem* m_prev;
181     RefPtr<CachedPage> m_cachedPage;
182     
183 #if PLATFORM(MAC)
184     RetainPtr<id> m_viewState;
185     OwnPtr<HashMap<String, RetainPtr<id> > > m_transientProperties;
186 #endif
187 }; //class HistoryItem
188
189 } //namespace WebCore
190
191 #ifndef NDEBUG
192 // Outside the WebCore namespace for ease of invocation from gdb.
193 extern "C" int showTree(const WebCore::HistoryItem*);
194 #endif
195
196 #endif // HISTORYITEM_H