blob: a17a7e4479d27a42a86cebe35959aad730b8dc46 [file] [log] [blame]
// Copyright 2014 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 IOS_WEB_PUBLIC_NAVIGATION_ITEM_H_
#define IOS_WEB_PUBLIC_NAVIGATION_ITEM_H_
#include "base/memory/scoped_ptr.h"
#include "base/strings/string16.h"
#include "base/time/time.h"
#include "ui/base/page_transition_types.h"
class GURL;
namespace web {
struct FaviconStatus;
struct Referrer;
struct SSLStatus;
// A NavigationItem is a data structure that captures all the information
// required to recreate a browsing state. It represents one point in the
// chain of navigation managed by a NavigationManager.
class NavigationItem {
public:
virtual ~NavigationItem() {}
// Creates a new NavigationItem.
static scoped_ptr<NavigationItem> Create();
// Page-related stuff --------------------------------------------------------
// 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).
virtual int GetUniqueID() const = 0;
// The actual URL of the page. For some about pages, this may be a scary
// data: URL or something like that. Use GetVirtualURL() below for showing to
// the user.
virtual void SetURL(const GURL& url) = 0;
virtual const GURL& GetURL() const = 0;
// The referring URL. Can be empty.
virtual void SetReferrer(const Referrer& referrer) = 0;
virtual const Referrer& GetReferrer() const = 0;
// The virtual URL, when nonempty, will override the actual URL of the page
// when we display it to the user. This allows us to have nice and friendly
// URLs that the user sees for things like about: URLs, but actually feed
// the renderer a data URL that results in the content loading.
//
// GetVirtualURL() will return the URL to display to the user in all cases, so
// if there is no overridden display URL, it will return the actual one.
virtual void SetVirtualURL(const GURL& url) = 0;
virtual const GURL& GetVirtualURL() const = 0;
// The title as set by the page. This will be empty if there is no title set.
// The caller is responsible for detecting when there is no title and
// displaying the appropriate "Untitled" label if this is being displayed to
// the user.
virtual void SetTitle(const base::string16& title) = 0;
virtual const base::string16& GetTitle() const = 0;
// Describes the current page that the tab represents. This is the ID that the
// renderer generated for the page and is how we can tell new versus
// renavigations.
virtual void SetPageID(int page_id) = 0;
virtual int32 GetPageID() const = 0;
// Page-related helpers ------------------------------------------------------
// Returns the title to be displayed on the tab. This could be the title of
// the page if it is available or the URL. |languages| is the list of
// accpeted languages (e.g., prefs::kAcceptLanguages) or empty if proper
// URL formatting isn't needed (e.g., unit tests).
virtual const base::string16& GetTitleForDisplay(
const std::string& languages) const = 0;
// Tracking stuff ------------------------------------------------------------
// The transition type indicates what the user did to move to this page from
// the previous page.
virtual void SetTransitionType(ui::PageTransition transition_type) = 0;
virtual ui::PageTransition GetTransitionType() const = 0;
// The favicon data and tracking information. See web::FaviconStatus.
virtual const FaviconStatus& GetFavicon() const = 0;
virtual FaviconStatus& GetFavicon() = 0;
// All the SSL flags and state. See web::SSLStatus.
virtual const SSLStatus& GetSSL() const = 0;
virtual SSLStatus& GetSSL() = 0;
// The time at which the last known local navigation has
// completed. (A navigation can be completed more than once if the
// page is reloaded.)
//
// If GetTimestamp() returns a null time, that means that either:
//
// - this navigation hasn't completed yet;
// - this navigation was restored and for some reason the
// timestamp wasn't available;
// - or this navigation was copied from a foreign session.
virtual void SetTimestamp(base::Time timestamp) = 0;
virtual base::Time GetTimestamp() const = 0;
};
} // namespace web
#endif // IOS_WEB_PUBLIC_NAVIGATION_ITEM_H_