summaryrefslogtreecommitdiffstats
path: root/chrome/browser/navigation_entry.h
diff options
context:
space:
mode:
authorinitial.commit <initial.commit@0039d316-1c4b-4281-b951-d872f2087c98>2008-07-26 23:55:29 +0000
committerinitial.commit <initial.commit@0039d316-1c4b-4281-b951-d872f2087c98>2008-07-26 23:55:29 +0000
commit09911bf300f1a419907a9412154760efd0b7abc3 (patch)
treef131325fb4e2ad12c6d3504ab75b16dd92facfed /chrome/browser/navigation_entry.h
parent586acc5fe142f498261f52c66862fa417c3d52d2 (diff)
downloadchromium_src-09911bf300f1a419907a9412154760efd0b7abc3.zip
chromium_src-09911bf300f1a419907a9412154760efd0b7abc3.tar.gz
chromium_src-09911bf300f1a419907a9412154760efd0b7abc3.tar.bz2
Add chrome to the repository.
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@15 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/navigation_entry.h')
-rw-r--r--chrome/browser/navigation_entry.h285
1 files changed, 285 insertions, 0 deletions
diff --git a/chrome/browser/navigation_entry.h b/chrome/browser/navigation_entry.h
new file mode 100644
index 0000000..222daf4
--- /dev/null
+++ b/chrome/browser/navigation_entry.h
@@ -0,0 +1,285 @@
+// Copyright 2008, Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+#ifndef CHROME_BROWSER_NAVIGATION_ENTRY_H__
+#define CHROME_BROWSER_NAVIGATION_ENTRY_H__
+
+#include "base/basictypes.h"
+#include "base/scoped_ptr.h"
+#include "chrome/app/theme/theme_resources.h"
+#include "chrome/browser/security_style.h"
+#include "chrome/browser/site_instance.h"
+#include "chrome/browser/tab_contents_type.h"
+#include "chrome/common/page_transition_types.h"
+#include "googleurl/src/gurl.h"
+#include "skia/include/SkBitmap.h"
+
+////////////////////////////////////////////////////////////////////////////////
+//
+// NavigationEntry class
+//
+// A NavigationEntry is a data structure that captures all the information
+// required to recreate a browsing state. This includes some opaque binary
+// state as provided by the TabContents as well as some clear text title and
+// URL which is used for our user interface.
+//
+////////////////////////////////////////////////////////////////////////////////
+class NavigationEntry {
+ public:
+ // The type of the page an entry corresponds to. Used by ui tests.
+ enum PageType {
+ NORMAL_PAGE = 0,
+ ERROR_PAGE,
+ INTERSTITIAL_PAGE
+ };
+
+ // Flags used for the page security content status.
+ enum {
+ NORMAL_CONTENT = 0, // neither of the 2 cases below.
+ MIXED_CONTENT = 1 << 0, // https page containing http resources.
+ UNSAFE_CONTENT = 1 << 1 // https page containing broken https resources.
+ };
+
+ // Use this to get a new unique ID during construction.
+ static int GetUniqueID();
+
+ // Create a new NavigationEntry.
+ explicit NavigationEntry(TabContentsType type);
+ NavigationEntry(TabContentsType type,
+ SiteInstance* instance,
+ int page_id,
+ const GURL& url,
+ const std::wstring& title,
+ PageTransition::Type transition_type);
+
+ ~NavigationEntry() {
+ }
+
+ // Return the TabContents type required to display this entry. Immutable
+ // because a tab can never change its type.
+ TabContentsType GetType() const { return type_; }
+
+ // Accessors for the unique ID of this entry. A unique ID is preserved across
+ // commits and redirects, which means that sometimes a NavigationEntry's
+ // unique ID needs to be set (e.g. when creating a committed entry to
+ // correspond to a to-be-deleted pending entry, the pending entry's ID must be
+ // copied).
+ int unique_id() const { return unique_id_; }
+ void set_unique_id(int unique_id) { unique_id_ = unique_id; }
+
+ void SetSiteInstance(SiteInstance* site_instance);
+ SiteInstance* site_instance() const { return site_instance_; }
+
+ void SetURL(const GURL& url) { url_ = url; }
+ const GURL& GetURL() const { return url_; }
+
+ // Set / Get the security style.
+ void SetSecurityStyle(SecurityStyle security_style) {
+ security_style_ = security_style;
+ }
+ SecurityStyle GetSecurityStyle() const { return security_style_; }
+
+ // Set / Get the page type.
+ void SetPageType(PageType page_type) { page_type_ = page_type; }
+ PageType GetPageType() const { return page_type_; }
+
+ void SetDisplayURL(const GURL& url) {
+ display_url_ = (url == url_) ? GURL() : url;
+ }
+ bool HasDisplayURL() const { return !display_url_.is_empty(); }
+ const GURL& GetDisplayURL() const {
+ return display_url_.is_empty() ? url_ : display_url_;
+ }
+
+ void SetTitle(const std::wstring& title) { title_ = title; }
+ const std::wstring& GetTitle() const { return title_; }
+
+ // WARNING: This state is saved to the database and used to restore previous
+ // states. If you write a custom TabContents and provide your own state make
+ // sure you have the ability to modify the format in the future while being
+ // able to deal with older versions.
+ void SetContentState(const std::string& state);
+ const std::string& GetContentState() const { return state_; }
+
+ void SetPageID(int page_id) { page_id_ = page_id; }
+ int32 GetPageID() const { return page_id_; }
+
+ void SetTransitionType(PageTransition::Type transition_type) {
+ transition_type_ = transition_type;
+ }
+ PageTransition::Type GetTransitionType() const { return transition_type_; }
+
+ // Sets the URL of the favicon.
+ void SetFavIconURL(const GURL& favicon_url) { favicon_url_ = favicon_url; }
+
+ // Returns the URL of the favicon. This may be empty if we don't know the
+ // favicon, or didn't succesfully load it before navigating to another page.
+ const GURL& GetFavIconURL() const { return favicon_url_; }
+
+ // Sets the favicon for the page.
+ void SetFavIcon(const SkBitmap& favicon) { favicon_ = favicon; }
+
+ // Returns the favicon for the page. If the icon has not been explicitly set,
+ // or is empty, this returns the default favicon.
+ // As loading the favicon happens asynchronously, it is possible for this to
+ // return the default favicon even though the page has a favicon other than
+ // the default.
+ const SkBitmap& GetFavIcon() const { return favicon_; }
+
+ // Whether the favicon is valid. The favicon is valid if it represents the
+ // true favicon of the site.
+ void SetValidFavIcon(bool valid_fav_icon) {
+ valid_fav_icon_ = valid_fav_icon;
+ }
+ bool IsValidFavIcon() const { return valid_fav_icon_; }
+
+ void SetUserTypedURL(const GURL& user_typed_url) {
+ user_typed_url_ = user_typed_url;
+ }
+ const GURL& GetUserTypedURL() const { return user_typed_url_; }
+
+ // If the user typed url is valid it is returned, otherwise url is returned.
+ const GURL& GetUserTypedURLOrURL() const {
+ return user_typed_url_.is_valid() ? user_typed_url_ : url_;
+ }
+
+ void SetSSLCertID(int ssl_cert_id) { ssl_cert_id_ = ssl_cert_id; }
+ int GetSSLCertID() const { return ssl_cert_id_; }
+
+ void SetSSLCertStatus(int ssl_cert_status) {
+ ssl_cert_status_ = ssl_cert_status;
+ }
+ int GetSSLCertStatus() const { return ssl_cert_status_; }
+
+ void SetSSLSecurityBits(int security_bits) {
+ ssl_security_bits_ = security_bits;
+ }
+ int GetSSLSecurityBits() const { return ssl_security_bits_; }
+
+ // Whether this page which is served over https contains http sub-resources.
+ void SetHasMixedContent() {
+ content_status_ |= MIXED_CONTENT;
+ }
+ bool HasMixedContent() const {
+ return (content_status_ & MIXED_CONTENT) == MIXED_CONTENT;
+ }
+
+ // Whether this page which is served over https contains https sub-resources
+ // with cert errors.
+ void SetHasUnsafeContent() {
+ content_status_ |= UNSAFE_CONTENT;
+ }
+ bool HasUnsafeContent() const {
+ return (content_status_ & UNSAFE_CONTENT) == UNSAFE_CONTENT;
+ }
+
+ // Copies all the security states (security style, SSL info -cert id, status
+ // and bits-, mixed/unsafe content status) in this entry from the specified
+ // |entry|.
+ void CopySSLInfoFrom(const NavigationEntry& entry);
+
+ // Used by UI tests.
+ int GetContentStatus() const { return content_status_; }
+
+ void ResetSSLStates();
+
+ bool HasPostData() const { return has_post_data_; }
+
+ void SetHasPostData(bool has_post_data) { has_post_data_ = has_post_data; }
+
+ // See comment above field.
+ void set_restored(bool restored) { restored_ = restored; }
+ bool restored() const { return restored_; }
+
+ 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
+
+ // Unique IDs only really need to distinguish the various existing entries
+ // from each other, rather than be unique over all time; so it doesn't matter
+ // if this eventually wraps.
+ static int unique_id_counter_;
+
+ TabContentsType type_;
+
+ int unique_id_;
+
+ // If this entry is a TAB_CONTENTS_WEB, then keep a pointer to the
+ // SiteInstance that it belongs to. This allows us to reuse the same
+ // process if the user goes Back across site boundaries. If the process is
+ // gone by the time the user clicks Back, a new process will be created.
+ // This is NULL if this entry's type is not TAB_CONTENT_WEB.
+ scoped_refptr<SiteInstance> site_instance_;
+
+ // Describes the current page that the tab represents. This is not relevant
+ // for all tab contents types.
+ int32 page_id_;
+
+ GURL url_;
+ // The URL the user typed in. May be invalid.
+ GURL user_typed_url_;
+ SecurityStyle security_style_;
+ std::wstring title_;
+ GURL favicon_url_;
+ GURL display_url_;
+
+ // SSL related info.
+ int ssl_cert_id_;
+ int ssl_cert_status_;
+ int ssl_security_bits_;
+
+ int content_status_;
+
+ std::string state_;
+
+ // The favorite icon for this entry.
+ SkBitmap favicon_;
+
+ PageType page_type_;
+
+ bool valid_fav_icon_;
+
+ // True if this navigation needs to send post data in order to be displayed
+ // properly.
+ bool has_post_data_;
+
+ // The transition type indicates what the user did to move to this page from
+ // the previous page.
+ PageTransition::Type transition_type_;
+
+ // Was this entry created from session/tab restore? If so this is true and
+ // gets set to false once we navigate to it
+ // (NavigationControllerBase::DidNavigateToEntry).
+ bool restored_;
+};
+
+#endif // CHROME_BROWSER_NAVIGATION_ENTRY_H__