blob: 391ff0011124100940ba4598e915abf0deb8fef1 [file] [log] [blame]
// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CONTENT_BROWSER_WEB_CONTENTS_NAVIGATION_ENTRY_IMPL_H_
#define CONTENT_BROWSER_WEB_CONTENTS_NAVIGATION_ENTRY_IMPL_H_
#pragma once
#include "base/basictypes.h"
#include "base/memory/ref_counted.h"
#include "content/browser/site_instance_impl.h"
#include "content/public/browser/favicon_status.h"
#include "content/public/browser/global_request_id.h"
#include "content/public/browser/navigation_entry.h"
#include "content/public/common/ssl_status.h"
namespace content {
class CONTENT_EXPORT NavigationEntryImpl
: public NON_EXPORTED_BASE(NavigationEntry) {
public:
static NavigationEntryImpl* FromNavigationEntry(NavigationEntry* entry);
NavigationEntryImpl();
NavigationEntryImpl(SiteInstanceImpl* instance,
int page_id,
const GURL& url,
const Referrer& referrer,
const string16& title,
PageTransition transition_type,
bool is_renderer_initiated);
virtual ~NavigationEntryImpl();
// NavigationEntry implementation:
virtual int GetUniqueID() const OVERRIDE;
virtual PageType GetPageType() const OVERRIDE;
virtual void SetURL(const GURL& url) OVERRIDE;
virtual const GURL& GetURL() const OVERRIDE;
virtual void SetReferrer(const Referrer& referrer) OVERRIDE;
virtual const Referrer& GetReferrer() const OVERRIDE;
virtual void SetVirtualURL(const GURL& url) OVERRIDE;
virtual const GURL& GetVirtualURL() const OVERRIDE;
virtual void SetTitle(const string16& title) OVERRIDE;
virtual const string16& GetTitle() const OVERRIDE;
virtual void SetContentState(const std::string& state) OVERRIDE;
virtual const std::string& GetContentState() const OVERRIDE;
virtual void SetPageID(int page_id) OVERRIDE;
virtual int32 GetPageID() const OVERRIDE;
virtual const string16& GetTitleForDisplay(
const std::string& languages) const OVERRIDE;
virtual bool IsViewSourceMode() const OVERRIDE;
virtual void SetTransitionType(PageTransition transition_type) OVERRIDE;
virtual PageTransition GetTransitionType() const OVERRIDE;
virtual const GURL& GetUserTypedURL() const OVERRIDE;
virtual void SetHasPostData(bool has_post_data) OVERRIDE;
virtual bool GetHasPostData() const OVERRIDE;
virtual void SetPostID(int64 post_id) OVERRIDE;
virtual int64 GetPostID() const OVERRIDE;
virtual const FaviconStatus& GetFavicon() const OVERRIDE;
virtual FaviconStatus& GetFavicon() OVERRIDE;
virtual const SSLStatus& GetSSL() const OVERRIDE;
virtual SSLStatus& GetSSL() OVERRIDE;
virtual void SetOriginalRequestURL(const GURL& original_url) OVERRIDE;
virtual const GURL& GetOriginalRequestURL() const OVERRIDE;
void set_unique_id(int unique_id) {
unique_id_ = unique_id;
}
// The SiteInstance tells us how to share sub-processes. This is a reference
// counted pointer to a shared site instance.
//
// Note that the SiteInstance should usually not be changed after it is set,
// but this may happen if the NavigationEntry was cloned and needs to use a
// different SiteInstance.
void set_site_instance(SiteInstanceImpl* site_instance);
SiteInstanceImpl* site_instance() const {
return site_instance_.get();
}
void set_page_type(PageType page_type) {
page_type_ = page_type;
}
bool has_virtual_url() const {
return !virtual_url_.is_empty();
}
bool update_virtual_url_with_url() const {
return update_virtual_url_with_url_;
}
void set_update_virtual_url_with_url(bool update) {
update_virtual_url_with_url_ = update;
}
// Extra headers (separated by \n) to send during the request.
void set_extra_headers(const std::string& extra_headers) {
extra_headers_ = extra_headers;
}
const std::string& extra_headers() const {
return extra_headers_;
}
// Whether this (pending) navigation is renderer-initiated. Resets to false
// for all types of navigations after commit.
void set_is_renderer_initiated(bool is_renderer_initiated) {
is_renderer_initiated_ = is_renderer_initiated;
}
bool is_renderer_initiated() const {
return is_renderer_initiated_;
}
void set_user_typed_url(const GURL& user_typed_url) {
user_typed_url_ = user_typed_url;
}
// Enumerations of the possible restore types.
enum RestoreType {
// The entry has been restored is from the last session.
RESTORE_LAST_SESSION,
// The entry has been restored from the current session. This is used when
// the user issues 'reopen closed tab'.
RESTORE_CURRENT_SESSION,
// The entry was not restored.
RESTORE_NONE
};
// The RestoreType for this entry. This is set if the entry was retored. This
// is set to RESTORE_NONE once the entry is loaded.
void set_restore_type(RestoreType type) {
restore_type_ = type;
}
RestoreType restore_type() const {
return restore_type_;
}
void set_transferred_global_request_id(
const GlobalRequestID& transferred_global_request_id) {
transferred_global_request_id_ = transferred_global_request_id;
}
GlobalRequestID transferred_global_request_id() const {
return transferred_global_request_id_;
}
// Whether this (pending) navigation is reload across site instances.
// Resets to false after commit.
void set_is_cross_site_reload(bool is_cross_site_reload) {
is_cross_site_reload_ = is_cross_site_reload;
}
bool is_cross_site_reload() const {
return is_cross_site_reload_;
}
private:
// WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING
// Session/Tab restore save portions of this class so that it can be recreated
// later. If you add a new field that needs to be persisted you'll have to
// update SessionService/TabRestoreService appropriately.
// WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING
// See the accessors above for descriptions.
int unique_id_;
scoped_refptr<SiteInstanceImpl> site_instance_;
PageType page_type_;
GURL url_;
Referrer referrer_;
GURL virtual_url_;
bool update_virtual_url_with_url_;
string16 title_;
FaviconStatus favicon_;
std::string content_state_;
int32 page_id_;
SSLStatus ssl_;
PageTransition transition_type_;
GURL user_typed_url_;
bool has_post_data_;
int64 post_id_;
RestoreType restore_type_;
GURL original_request_url_;
// This member is not persisted with sesssion restore.
std::string extra_headers_;
// Whether the entry, while loading, was created for a renderer-initiated
// navigation. This dictates whether the URL should be displayed before the
// navigation commits. It is cleared on commit and not persisted.
bool is_renderer_initiated_;
// This is a cached version of the result of GetTitleForDisplay. It prevents
// us from having to do URL formatting on the URL every time the title is
// displayed. When the URL, virtual URL, or title is set, this should be
// cleared to force a refresh.
mutable string16 cached_display_title_;
// In case a navigation is transferred to a new RVH but the request has
// been generated in the renderer already, this identifies the old request so
// that it can be resumed. The old request is stored until the
// ResourceDispatcher receives the navigation from the renderer which
// carries this |transferred_global_request_id_| annotation. Once the request
// is transferred to the new process, this is cleared and the request
// continues as normal.
GlobalRequestID transferred_global_request_id_;
// This is set to true when this entry is being reloaded and due to changes in
// the state of the URL, it has to be reloaded in a different site instance.
// In such case, we must treat it as an existing navigation in the new site
// instance, instead of a new navigation. This value should not be persisted
// and is not needed after the entry commits.
bool is_cross_site_reload_;
// Copy and assignment is explicitly allowed for this class.
};
} // namespace content
#endif // CONTENT_BROWSER_WEB_CONTENTS_NAVIGATION_ENTRY_IMPL_H_