11e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 51e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#ifndef CONTENT_BROWSER_FRAME_HOST_NAVIGATION_ENTRY_IMPL_H_ 61e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#define CONTENT_BROWSER_FRAME_HOST_NAVIGATION_ENTRY_IMPL_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/ref_counted.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/browser/site_instance_impl.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/favicon_status.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/global_request_id.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/navigation_entry.h" 1490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "content/public/common/page_state.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/common/ssl_status.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content { 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class CONTENT_EXPORT NavigationEntryImpl 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : public NON_EXPORTED_BASE(NavigationEntry) { 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static NavigationEntryImpl* FromNavigationEntry(NavigationEntry* entry); 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The value of bindings() before it is set during commit. 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static int kInvalidBindings; 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NavigationEntryImpl(); 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NavigationEntryImpl(SiteInstanceImpl* instance, 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int page_id, 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& url, 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const Referrer& referrer, 32a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16& title, 331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ui::PageTransition transition_type, 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_renderer_initiated); 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~NavigationEntryImpl(); 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // NavigationEntry implementation: 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual int GetUniqueID() const OVERRIDE; 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual PageType GetPageType() const OVERRIDE; 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetURL(const GURL& url) OVERRIDE; 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual const GURL& GetURL() const OVERRIDE; 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetBaseURLForDataURL(const GURL& url) OVERRIDE; 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual const GURL& GetBaseURLForDataURL() const OVERRIDE; 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetReferrer(const Referrer& referrer) OVERRIDE; 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual const Referrer& GetReferrer() const OVERRIDE; 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetVirtualURL(const GURL& url) OVERRIDE; 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual const GURL& GetVirtualURL() const OVERRIDE; 48a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) virtual void SetTitle(const base::string16& title) OVERRIDE; 49a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) virtual const base::string16& GetTitle() const OVERRIDE; 5090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) virtual void SetPageState(const PageState& state) OVERRIDE; 5190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) virtual const PageState& GetPageState() const OVERRIDE; 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetPageID(int page_id) OVERRIDE; 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual int32 GetPageID() const OVERRIDE; 54a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) virtual const base::string16& GetTitleForDisplay( 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& languages) const OVERRIDE; 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool IsViewSourceMode() const OVERRIDE; 571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual void SetTransitionType(ui::PageTransition transition_type) OVERRIDE; 581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual ui::PageTransition GetTransitionType() const OVERRIDE; 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual const GURL& GetUserTypedURL() const OVERRIDE; 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetHasPostData(bool has_post_data) OVERRIDE; 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool GetHasPostData() const OVERRIDE; 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetPostID(int64 post_id) OVERRIDE; 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual int64 GetPostID() const OVERRIDE; 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetBrowserInitiatedPostData( 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::RefCountedMemory* data) OVERRIDE; 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual const base::RefCountedMemory* 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetBrowserInitiatedPostData() const OVERRIDE; 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual const FaviconStatus& GetFavicon() const OVERRIDE; 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual FaviconStatus& GetFavicon() OVERRIDE; 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual const SSLStatus& GetSSL() const OVERRIDE; 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual SSLStatus& GetSSL() OVERRIDE; 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetOriginalRequestURL(const GURL& original_url) OVERRIDE; 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual const GURL& GetOriginalRequestURL() const OVERRIDE; 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetIsOverridingUserAgent(bool override) OVERRIDE; 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool GetIsOverridingUserAgent() const OVERRIDE; 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetTimestamp(base::Time timestamp) OVERRIDE; 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual base::Time GetTimestamp() const OVERRIDE; 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetCanLoadLocalResources(bool allow) OVERRIDE; 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool GetCanLoadLocalResources() const OVERRIDE; 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void SetFrameToNavigate(const std::string& frame_name) OVERRIDE; 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual const std::string& GetFrameToNavigate() const OVERRIDE; 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void SetExtraData(const std::string& key, 83a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16& data) OVERRIDE; 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual bool GetExtraData(const std::string& key, 85a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16* data) const OVERRIDE; 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void ClearExtraData(const std::string& key) OVERRIDE; 87424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) virtual void SetHttpStatusCode(int http_status_code) OVERRIDE; 88424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) virtual int GetHttpStatusCode() const OVERRIDE; 890529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch virtual void SetRedirectChain(const std::vector<GURL>& redirects) OVERRIDE; 900529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch virtual const std::vector<GURL>& GetRedirectChain() const OVERRIDE; 915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual bool IsRestored() const OVERRIDE; 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 931e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Once a navigation entry is committed, we should no longer track several 941e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // pieces of non-persisted state, as documented on the members below. 951e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) void ResetForCommit(); 961e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_unique_id(int unique_id) { 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unique_id_ = unique_id; 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The SiteInstance tells us how to share sub-processes. This is a reference 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // counted pointer to a shared site instance. 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Note that the SiteInstance should usually not be changed after it is set, 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // but this may happen if the NavigationEntry was cloned and needs to use a 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // different SiteInstance. 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_site_instance(SiteInstanceImpl* site_instance); 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SiteInstanceImpl* site_instance() const { 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return site_instance_.get(); 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Remember the set of bindings granted to this NavigationEntry at the time 1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // of commit, to ensure that we do not grant it additional bindings if we 1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // navigate back to it in the future. This can only be changed once. 1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetBindings(int bindings); 1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int bindings() const { 1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return bindings_; 1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_page_type(PageType page_type) { 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) page_type_ = page_type; 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool has_virtual_url() const { 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return !virtual_url_.is_empty(); 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool update_virtual_url_with_url() const { 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return update_virtual_url_with_url_; 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_update_virtual_url_with_url(bool update) { 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) update_virtual_url_with_url_ = update; 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Extra headers (separated by \n) to send during the request. 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_extra_headers(const std::string& extra_headers) { 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extra_headers_ = extra_headers; 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& extra_headers() const { 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return extra_headers_; 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Whether this (pending) navigation is renderer-initiated. Resets to false 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // for all types of navigations after commit. 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_is_renderer_initiated(bool is_renderer_initiated) { 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) is_renderer_initiated_ = is_renderer_initiated; 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_renderer_initiated() const { 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return is_renderer_initiated_; 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_user_typed_url(const GURL& user_typed_url) { 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) user_typed_url_ = user_typed_url; 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Enumerations of the possible restore types. 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enum RestoreType { 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Restore from the previous session. 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RESTORE_LAST_SESSION_EXITED_CLEANLY, 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RESTORE_LAST_SESSION_CRASHED, 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The entry has been restored from the current session. This is used when 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the user issues 'reopen closed tab'. 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RESTORE_CURRENT_SESSION, 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The entry was not restored. 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RESTORE_NONE 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The RestoreType for this entry. This is set if the entry was retored. This 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // is set to RESTORE_NONE once the entry is loaded. 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_restore_type(RestoreType type) { 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) restore_type_ = type; 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RestoreType restore_type() const { 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return restore_type_; 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_transferred_global_request_id( 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GlobalRequestID& transferred_global_request_id) { 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) transferred_global_request_id_ = transferred_global_request_id; 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GlobalRequestID transferred_global_request_id() const { 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return transferred_global_request_id_; 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Whether this (pending) navigation needs to replace current entry. 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Resets to false after commit. 1902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool should_replace_entry() const { 1912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return should_replace_entry_; 1922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_should_replace_entry(bool should_replace_entry) { 1952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) should_replace_entry_ = should_replace_entry; 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 198c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void SetScreenshotPNGData(scoped_refptr<base::RefCountedBytes> png_data); 1992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const scoped_refptr<base::RefCountedBytes> screenshot() const { 2002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return screenshot_; 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 203c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Whether this (pending) navigation should clear the session history. Resets 204c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // to false after commit. 205c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool should_clear_history_list() const { 206c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return should_clear_history_list_; 207c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 208c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void set_should_clear_history_list(bool should_clear_history_list) { 209c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) should_clear_history_list_ = should_clear_history_list; 210c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 211c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 212f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Indicates which FrameTreeNode to navigate. Currently only used if the 213f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // --site-per-process flag is passed. 214f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) int64 frame_tree_node_id() const { 215f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return frame_tree_node_id_; 216f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 217f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void set_frame_tree_node_id(int64 frame_tree_node_id) { 218f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) frame_tree_node_id_ = frame_tree_node_id; 219f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 220f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Session/Tab restore save portions of this class so that it can be recreated 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // later. If you add a new field that needs to be persisted you'll have to 2252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // update SessionService/TabRestoreService and Android WebView 2262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // state_serializer.cc appropriately. 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // See the accessors above for descriptions. 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int unique_id_; 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<SiteInstanceImpl> site_instance_; 2322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // TODO(creis): Persist bindings_. http://crbug.com/173672. 2332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int bindings_; 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PageType page_type_; 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL url_; 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Referrer referrer_; 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL virtual_url_; 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool update_virtual_url_with_url_; 239a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 title_; 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FaviconStatus favicon_; 24190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) PageState page_state_; 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int32 page_id_; 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SSLStatus ssl_; 2441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ui::PageTransition transition_type_; 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL user_typed_url_; 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool has_post_data_; 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 post_id_; 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RestoreType restore_type_; 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL original_request_url_; 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_overriding_user_agent_; 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Time timestamp_; 252424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) int http_status_code_; 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This member is not persisted with session restore because it is transient. 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If the post request succeeds, this field is cleared since the same 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // information is stored in |content_state_| above. It is also only shallow 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // copied with compiler provided copy constructor. 2581e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Cleared in |ResetForCommit|. 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<const base::RefCountedMemory> browser_initiated_post_data_; 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // This is also a transient member (i.e. is not persisted with session 2622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // restore). The screenshot of a page is taken when navigating away from the 2632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // page. This screenshot is displayed during an overscroll-navigation 2642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // gesture. |screenshot_| will be NULL when the screenshot is not available 2652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // (e.g. after a session restore, or if taking the screenshot of a page 2662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // failed). The UI is responsible for dealing with missing screenshots 2672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // appropriately (e.g. display a placeholder image instead). 2682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_refptr<base::RefCountedBytes> screenshot_; 2692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This member is not persisted with session restore. 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string extra_headers_; 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Used for specifying base URL for pages loaded via data URLs. Only used and 2742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // persisted by Android WebView. 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL base_url_for_data_url_; 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Whether the entry, while loading, was created for a renderer-initiated 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // navigation. This dictates whether the URL should be displayed before the 2791e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // navigation commits. It is cleared in |ResetForCommit| and not persisted. 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_renderer_initiated_; 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This is a cached version of the result of GetTitleForDisplay. It prevents 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // us from having to do URL formatting on the URL every time the title is 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // displayed. When the URL, virtual URL, or title is set, this should be 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // cleared to force a refresh. 286a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) mutable base::string16 cached_display_title_; 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // In case a navigation is transferred to a new RVH but the request has 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // been generated in the renderer already, this identifies the old request so 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // that it can be resumed. The old request is stored until the 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // ResourceDispatcher receives the navigation from the renderer which 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // carries this |transferred_global_request_id_| annotation. Once the request 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // is transferred to the new process, this is cleared and the request 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // continues as normal. 2951e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Cleared in |ResetForCommit|. 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GlobalRequestID transferred_global_request_id_; 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This is set to true when this entry is being reloaded and due to changes in 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the state of the URL, it has to be reloaded in a different site instance. 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // In such case, we must treat it as an existing navigation in the new site 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // instance, instead of a new navigation. This value should not be persisted 3021e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // and is cleared in |ResetForCommit|. 3032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // 3042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // We also use this flag for cross-process redirect navigations, so that the 3052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // browser will replace the current navigation entry (which is the page 3062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // doing the redirect). 3072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool should_replace_entry_; 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3091e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // This is used when transferring a pending entry from one process to another. 3100529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // We also send this data through session sync for offline analysis. 3110529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // It is preserved after commit but should not be persisted. 3121e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) std::vector<GURL> redirect_chain_; 3131e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 314c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // This is set to true when this entry's navigation should clear the session 315c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // history both on the renderer and browser side. The browser side history 316c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // won't be cleared until the renderer has committed this navigation. This 317c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // entry is not persisted by the session restore system, as it is always 3181e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // cleared in |ResetForCommit|. 319c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool should_clear_history_list_; 320c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set when this entry should be able to access local file:// resources. This 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // value is not needed after the entry commits and is not persisted. 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool can_load_local_resources_; 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // If not empty, the name of the frame to navigate. This field is not 3262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // persisted, because it is currently only used in tests. 3272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string frame_to_navigate_; 3282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 329f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // If not -1, this indicates which FrameTreeNode to navigate. This field is 330f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // not persisted because it is experimental and only used when the 331f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // --site-per-process flag is passed. It is cleared in |ResetForCommit| 332f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // because we only use it while the navigation is pending. 333f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // TODO(creis): Move this to FrameNavigationEntry. 334f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) int64 frame_tree_node_id_; 335f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 3362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Used to store extra data to support browser features. This member is not 3372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // persisted, unless specific data is taken out/put back in at save/restore 3382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // time (see TabNavigation for an example of this). 339a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) std::map<std::string, base::string16> extra_data_; 3402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Copy and assignment is explicitly allowed for this class. 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace content 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3461e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#endif // CONTENT_BROWSER_FRAME_HOST_NAVIGATION_ENTRY_IMPL_H_ 347