Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1060)

Side by Side Diff: content/browser/web_contents/navigation_entry_impl.h

Issue 49823002: Move navigation and frame tree classes to a new frame_host/ directory. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fixing gyp and adding TODO. Created 7 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #ifndef CONTENT_BROWSER_WEB_CONTENTS_NAVIGATION_ENTRY_IMPL_H_
6 #define CONTENT_BROWSER_WEB_CONTENTS_NAVIGATION_ENTRY_IMPL_H_
7
8 #include "base/basictypes.h"
9 #include "base/memory/ref_counted.h"
10 #include "content/browser/site_instance_impl.h"
11 #include "content/public/browser/favicon_status.h"
12 #include "content/public/browser/global_request_id.h"
13 #include "content/public/browser/navigation_entry.h"
14 #include "content/public/common/page_state.h"
15 #include "content/public/common/ssl_status.h"
16
17 namespace content {
18
19 class CONTENT_EXPORT NavigationEntryImpl
20 : public NON_EXPORTED_BASE(NavigationEntry) {
21 public:
22 static NavigationEntryImpl* FromNavigationEntry(NavigationEntry* entry);
23
24 // The value of bindings() before it is set during commit.
25 static int kInvalidBindings;
26
27 NavigationEntryImpl();
28 NavigationEntryImpl(SiteInstanceImpl* instance,
29 int page_id,
30 const GURL& url,
31 const Referrer& referrer,
32 const string16& title,
33 PageTransition transition_type,
34 bool is_renderer_initiated);
35 virtual ~NavigationEntryImpl();
36
37 // NavigationEntry implementation:
38 virtual int GetUniqueID() const OVERRIDE;
39 virtual PageType GetPageType() const OVERRIDE;
40 virtual void SetURL(const GURL& url) OVERRIDE;
41 virtual const GURL& GetURL() const OVERRIDE;
42 virtual void SetBaseURLForDataURL(const GURL& url) OVERRIDE;
43 virtual const GURL& GetBaseURLForDataURL() const OVERRIDE;
44 virtual void SetReferrer(const Referrer& referrer) OVERRIDE;
45 virtual const Referrer& GetReferrer() const OVERRIDE;
46 virtual void SetVirtualURL(const GURL& url) OVERRIDE;
47 virtual const GURL& GetVirtualURL() const OVERRIDE;
48 virtual void SetTitle(const string16& title) OVERRIDE;
49 virtual const string16& GetTitle() const OVERRIDE;
50 virtual void SetPageState(const PageState& state) OVERRIDE;
51 virtual const PageState& GetPageState() const OVERRIDE;
52 virtual void SetPageID(int page_id) OVERRIDE;
53 virtual int32 GetPageID() const OVERRIDE;
54 virtual const string16& GetTitleForDisplay(
55 const std::string& languages) const OVERRIDE;
56 virtual bool IsViewSourceMode() const OVERRIDE;
57 virtual void SetTransitionType(PageTransition transition_type) OVERRIDE;
58 virtual PageTransition GetTransitionType() const OVERRIDE;
59 virtual const GURL& GetUserTypedURL() const OVERRIDE;
60 virtual void SetHasPostData(bool has_post_data) OVERRIDE;
61 virtual bool GetHasPostData() const OVERRIDE;
62 virtual void SetPostID(int64 post_id) OVERRIDE;
63 virtual int64 GetPostID() const OVERRIDE;
64 virtual void SetBrowserInitiatedPostData(
65 const base::RefCountedMemory* data) OVERRIDE;
66 virtual const base::RefCountedMemory*
67 GetBrowserInitiatedPostData() const OVERRIDE;
68 virtual const FaviconStatus& GetFavicon() const OVERRIDE;
69 virtual FaviconStatus& GetFavicon() OVERRIDE;
70 virtual const SSLStatus& GetSSL() const OVERRIDE;
71 virtual SSLStatus& GetSSL() OVERRIDE;
72 virtual void SetOriginalRequestURL(const GURL& original_url) OVERRIDE;
73 virtual const GURL& GetOriginalRequestURL() const OVERRIDE;
74 virtual void SetIsOverridingUserAgent(bool override) OVERRIDE;
75 virtual bool GetIsOverridingUserAgent() const OVERRIDE;
76 virtual void SetTimestamp(base::Time timestamp) OVERRIDE;
77 virtual base::Time GetTimestamp() const OVERRIDE;
78 virtual void SetCanLoadLocalResources(bool allow) OVERRIDE;
79 virtual bool GetCanLoadLocalResources() const OVERRIDE;
80 virtual void SetFrameToNavigate(const std::string& frame_name) OVERRIDE;
81 virtual const std::string& GetFrameToNavigate() const OVERRIDE;
82 virtual void SetExtraData(const std::string& key,
83 const string16& data) OVERRIDE;
84 virtual bool GetExtraData(const std::string& key,
85 string16* data) const OVERRIDE;
86 virtual void ClearExtraData(const std::string& key) OVERRIDE;
87 virtual void SetHttpStatusCode(int http_status_code) OVERRIDE;
88 virtual int GetHttpStatusCode() const OVERRIDE;
89
90 void set_unique_id(int unique_id) {
91 unique_id_ = unique_id;
92 }
93
94 // The SiteInstance tells us how to share sub-processes. This is a reference
95 // counted pointer to a shared site instance.
96 //
97 // Note that the SiteInstance should usually not be changed after it is set,
98 // but this may happen if the NavigationEntry was cloned and needs to use a
99 // different SiteInstance.
100 void set_site_instance(SiteInstanceImpl* site_instance);
101 SiteInstanceImpl* site_instance() const {
102 return site_instance_.get();
103 }
104
105 // Remember the set of bindings granted to this NavigationEntry at the time
106 // of commit, to ensure that we do not grant it additional bindings if we
107 // navigate back to it in the future. This can only be changed once.
108 void SetBindings(int bindings);
109 int bindings() const {
110 return bindings_;
111 }
112
113 void set_page_type(PageType page_type) {
114 page_type_ = page_type;
115 }
116
117 bool has_virtual_url() const {
118 return !virtual_url_.is_empty();
119 }
120
121 bool update_virtual_url_with_url() const {
122 return update_virtual_url_with_url_;
123 }
124 void set_update_virtual_url_with_url(bool update) {
125 update_virtual_url_with_url_ = update;
126 }
127
128 // Extra headers (separated by \n) to send during the request.
129 void set_extra_headers(const std::string& extra_headers) {
130 extra_headers_ = extra_headers;
131 }
132 const std::string& extra_headers() const {
133 return extra_headers_;
134 }
135
136 // Whether this (pending) navigation is renderer-initiated. Resets to false
137 // for all types of navigations after commit.
138 void set_is_renderer_initiated(bool is_renderer_initiated) {
139 is_renderer_initiated_ = is_renderer_initiated;
140 }
141 bool is_renderer_initiated() const {
142 return is_renderer_initiated_;
143 }
144
145 void set_user_typed_url(const GURL& user_typed_url) {
146 user_typed_url_ = user_typed_url;
147 }
148
149 // Enumerations of the possible restore types.
150 enum RestoreType {
151 // Restore from the previous session.
152 RESTORE_LAST_SESSION_EXITED_CLEANLY,
153 RESTORE_LAST_SESSION_CRASHED,
154
155 // The entry has been restored from the current session. This is used when
156 // the user issues 'reopen closed tab'.
157 RESTORE_CURRENT_SESSION,
158
159 // The entry was not restored.
160 RESTORE_NONE
161 };
162
163 // The RestoreType for this entry. This is set if the entry was retored. This
164 // is set to RESTORE_NONE once the entry is loaded.
165 void set_restore_type(RestoreType type) {
166 restore_type_ = type;
167 }
168 RestoreType restore_type() const {
169 return restore_type_;
170 }
171
172 void set_transferred_global_request_id(
173 const GlobalRequestID& transferred_global_request_id) {
174 transferred_global_request_id_ = transferred_global_request_id;
175 }
176
177 GlobalRequestID transferred_global_request_id() const {
178 return transferred_global_request_id_;
179 }
180
181 // Whether this (pending) navigation needs to replace current entry.
182 // Resets to false after commit.
183 bool should_replace_entry() const {
184 return should_replace_entry_;
185 }
186
187 void set_should_replace_entry(bool should_replace_entry) {
188 should_replace_entry_ = should_replace_entry;
189 }
190
191 void SetScreenshotPNGData(scoped_refptr<base::RefCountedBytes> png_data);
192 const scoped_refptr<base::RefCountedBytes> screenshot() const {
193 return screenshot_;
194 }
195
196 // Whether this (pending) navigation should clear the session history. Resets
197 // to false after commit.
198 bool should_clear_history_list() const {
199 return should_clear_history_list_;
200 }
201 void set_should_clear_history_list(bool should_clear_history_list) {
202 should_clear_history_list_ = should_clear_history_list;
203 }
204
205 private:
206 // WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING
207 // Session/Tab restore save portions of this class so that it can be recreated
208 // later. If you add a new field that needs to be persisted you'll have to
209 // update SessionService/TabRestoreService and Android WebView
210 // state_serializer.cc appropriately.
211 // WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING
212
213 // See the accessors above for descriptions.
214 int unique_id_;
215 scoped_refptr<SiteInstanceImpl> site_instance_;
216 // TODO(creis): Persist bindings_. http://crbug.com/173672.
217 int bindings_;
218 PageType page_type_;
219 GURL url_;
220 Referrer referrer_;
221 GURL virtual_url_;
222 bool update_virtual_url_with_url_;
223 string16 title_;
224 FaviconStatus favicon_;
225 PageState page_state_;
226 int32 page_id_;
227 SSLStatus ssl_;
228 PageTransition transition_type_;
229 GURL user_typed_url_;
230 bool has_post_data_;
231 int64 post_id_;
232 RestoreType restore_type_;
233 GURL original_request_url_;
234 bool is_overriding_user_agent_;
235 base::Time timestamp_;
236 int http_status_code_;
237
238 // This member is not persisted with session restore because it is transient.
239 // If the post request succeeds, this field is cleared since the same
240 // information is stored in |content_state_| above. It is also only shallow
241 // copied with compiler provided copy constructor.
242 scoped_refptr<const base::RefCountedMemory> browser_initiated_post_data_;
243
244 // This is also a transient member (i.e. is not persisted with session
245 // restore). The screenshot of a page is taken when navigating away from the
246 // page. This screenshot is displayed during an overscroll-navigation
247 // gesture. |screenshot_| will be NULL when the screenshot is not available
248 // (e.g. after a session restore, or if taking the screenshot of a page
249 // failed). The UI is responsible for dealing with missing screenshots
250 // appropriately (e.g. display a placeholder image instead).
251 scoped_refptr<base::RefCountedBytes> screenshot_;
252
253 // This member is not persisted with session restore.
254 std::string extra_headers_;
255
256 // Used for specifying base URL for pages loaded via data URLs. Only used and
257 // persisted by Android WebView.
258 GURL base_url_for_data_url_;
259
260 // Whether the entry, while loading, was created for a renderer-initiated
261 // navigation. This dictates whether the URL should be displayed before the
262 // navigation commits. It is cleared on commit and not persisted.
263 bool is_renderer_initiated_;
264
265 // This is a cached version of the result of GetTitleForDisplay. It prevents
266 // us from having to do URL formatting on the URL every time the title is
267 // displayed. When the URL, virtual URL, or title is set, this should be
268 // cleared to force a refresh.
269 mutable string16 cached_display_title_;
270
271 // In case a navigation is transferred to a new RVH but the request has
272 // been generated in the renderer already, this identifies the old request so
273 // that it can be resumed. The old request is stored until the
274 // ResourceDispatcher receives the navigation from the renderer which
275 // carries this |transferred_global_request_id_| annotation. Once the request
276 // is transferred to the new process, this is cleared and the request
277 // continues as normal.
278 GlobalRequestID transferred_global_request_id_;
279
280 // This is set to true when this entry is being reloaded and due to changes in
281 // the state of the URL, it has to be reloaded in a different site instance.
282 // In such case, we must treat it as an existing navigation in the new site
283 // instance, instead of a new navigation. This value should not be persisted
284 // and is not needed after the entry commits.
285 //
286 // We also use this flag for cross-process redirect navigations, so that the
287 // browser will replace the current navigation entry (which is the page
288 // doing the redirect).
289 bool should_replace_entry_;
290
291 // This is set to true when this entry's navigation should clear the session
292 // history both on the renderer and browser side. The browser side history
293 // won't be cleared until the renderer has committed this navigation. This
294 // entry is not persisted by the session restore system, as it is always
295 // reset to false after commit.
296 bool should_clear_history_list_;
297
298 // Set when this entry should be able to access local file:// resources. This
299 // value is not needed after the entry commits and is not persisted.
300 bool can_load_local_resources_;
301
302 // If not empty, the name of the frame to navigate. This field is not
303 // persisted, because it is currently only used in tests.
304 std::string frame_to_navigate_;
305
306 // Used to store extra data to support browser features. This member is not
307 // persisted, unless specific data is taken out/put back in at save/restore
308 // time (see TabNavigation for an example of this).
309 std::map<std::string, string16> extra_data_;
310
311 // Copy and assignment is explicitly allowed for this class.
312 };
313
314 } // namespace content
315
316 #endif // CONTENT_BROWSER_WEB_CONTENTS_NAVIGATION_ENTRY_IMPL_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698