1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
|
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#ifndef mozilla_IHistory_h_
#define mozilla_IHistory_h_
#include "nsISupports.h"
#include "nsDataHashtable.h"
#include "nsURIHashKey.h"
#include "nsTObserverArray.h"
class nsIURI;
class nsIWidget;
namespace mozilla {
namespace dom {
class Document;
class Link;
} // namespace dom
// 0057c9d3-b98e-4933-bdc5-0275d06705e1
#define IHISTORY_IID \
{ \
0x0057c9d3, 0xb98e, 0x4933, { \
0xbd, 0xc5, 0x02, 0x75, 0xd0, 0x67, 0x05, 0xe1 \
} \
}
class IHistory : public nsISupports {
public:
NS_DECLARE_STATIC_IID_ACCESSOR(IHISTORY_IID)
/**
* Registers the Link for notifications about the visited-ness of aURI.
* Consumers should assume that the URI is unvisited after calling this, and
* they will be notified if that state (unvisited) changes by having
* VisitedQueryFinished called on themselves. Note that it may call
* synchronously if the answer is already known.
*
* @note VisitedQueryFinished must not call RegisterVisitedCallback or
* UnregisterVisitedCallback.
*
* @pre aURI must not be null.
* @pre aLink may be null only in the parent (chrome) process.
*
* @param aURI
* The URI to check.
* @param aLink
* The link to update whenever the history status changes. The
* implementation will only hold onto a raw pointer, so if this
* object should be destroyed, be sure to call
* UnregisterVistedCallback first.
*/
virtual void RegisterVisitedCallback(nsIURI* aURI, dom::Link* aLink) = 0;
/**
* Unregisters a previously registered Link object. This must be called
* before destroying the registered object, and asserts when misused.
*
* @pre aURI must not be null.
* @pre aLink must not be null.
*
* @param aURI
* The URI that aLink was registered for.
* @param aLink
* The link object to unregister for aURI.
*/
virtual void UnregisterVisitedCallback(nsIURI* aURI, dom::Link* aLink) = 0;
enum class VisitedStatus : uint8_t {
Unknown,
Visited,
Unvisited,
};
/**
* Notifies about the visited status of a given URI. The visited status cannot
* be unknown, otherwise there's no point in notifying of anything.
*/
virtual void NotifyVisited(nsIURI*, VisitedStatus) = 0;
enum VisitFlags {
/**
* Indicates whether the URI was loaded in a top-level window.
*/
TOP_LEVEL = 1 << 0,
/**
* Indicates whether the URI is the target of a permanent redirect.
*/
REDIRECT_PERMANENT = 1 << 1,
/**
* Indicates whether the URI is the target of a temporary redirect.
*/
REDIRECT_TEMPORARY = 1 << 2,
/**
* Indicates the URI will redirect (Response code 3xx).
*/
REDIRECT_SOURCE = 1 << 3,
/**
* Indicates the URI caused an error that is unlikely fixable by a
* retry, like a not found or unfetchable page.
*/
UNRECOVERABLE_ERROR = 1 << 4,
/**
* If REDIRECT_SOURCE is set, this indicates that the redirect is permanent.
* Note this differs from REDIRECT_PERMANENT because that one refers to how
* we reached the URI, while this is used when the URI itself redirects.
*/
REDIRECT_SOURCE_PERMANENT = 1 << 5
};
/**
* Adds a history visit for the URI.
*
* @pre aURI must not be null.
*
* @param aWidget
* The widget for the DocShell.
* @param aURI
* The URI of the page being visited.
* @param aLastVisitedURI
* The URI of the last visit in the chain.
* @param aFlags
* The VisitFlags describing this visit.
*/
NS_IMETHOD VisitURI(nsIWidget* aWidget, nsIURI* aURI, nsIURI* aLastVisitedURI,
uint32_t aFlags) = 0;
/**
* Set the title of the URI.
*
* @pre aURI must not be null.
*
* @param aURI
* The URI to set the title for.
* @param aTitle
* The title string.
*/
NS_IMETHOD SetURITitle(nsIURI* aURI, const nsAString& aTitle) = 0;
};
NS_DEFINE_STATIC_IID_ACCESSOR(IHistory, IHISTORY_IID)
} // namespace mozilla
#endif // mozilla_IHistory_h_
|