15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 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) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CONTENT_PUBLIC_BROWSER_NAVIGATION_CONTROLLER_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CONTENT_PUBLIC_BROWSER_NAVIGATION_CONTROLLER_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <map> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string> 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <vector> 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/ref_counted.h" 137d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "base/strings/string16.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/common/content_export.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/global_request_id.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/common/page_transition_types.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/common/referrer.h" 187dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "url/gurl.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace base { 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class RefCountedMemory; 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace base 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content { 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class BrowserContext; 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class NavigationEntry; 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SessionStorageNamespace; 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebContents; 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 33ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch// Used to store the mapping of a StoragePartition id to 34ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch// SessionStorageNamespace. 35ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochtypedef std::map<std::string, scoped_refptr<SessionStorageNamespace> > 36ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch SessionStorageNamespaceMap; 37ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// A NavigationController maintains the back-forward list for a WebContents and 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// manages all navigation within that list. 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Each NavigationController belongs to one WebContents; each WebContents has 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// exactly one NavigationController. 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class NavigationController { 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enum ReloadType { 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NO_RELOAD, // Normal load. 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RELOAD, // Normal (cache-validating) reload. 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RELOAD_IGNORING_CACHE, // Reload bypassing the cache (shift-reload). 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RELOAD_ORIGINAL_REQUEST_URL // Reload using the original request URL. 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Load type used in LoadURLParams. 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enum LoadURLType { 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // For loads that do not fall into any types below. 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LOAD_TYPE_DEFAULT, 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // An http post load request initiated from browser side. 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The post data is passed in |browser_initiated_post_data|. 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LOAD_TYPE_BROWSER_INITIATED_HTTP_POST, 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Loads a 'data:' scheme URL with specified base URL and a history entry 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // URL. This is only safe to be used for browser-initiated data: URL 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // navigations, since it shows arbitrary content as if it comes from 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |virtual_url_for_data_url|. 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LOAD_TYPE_DATA 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Adding new LoadURLType? Also update LoadUrlParams.java static constants. 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // User agent override type used in LoadURLParams. 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enum UserAgentOverrideOption { 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Use the override value from the previous NavigationEntry in the 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // NavigationController. 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UA_OVERRIDE_INHERIT, 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Use the default user agent. 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UA_OVERRIDE_FALSE, 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Use the user agent override, if it's available. 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UA_OVERRIDE_TRUE 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Adding new UserAgentOverrideOption? Also update LoadUrlParams.java 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // static constants. 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enum RestoreType { 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Indicates the restore is from the current session. For example, restoring 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // a closed tab. 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RESTORE_CURRENT_SESSION, 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Restore from the previous session. 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RESTORE_LAST_SESSION_EXITED_CLEANLY, 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RESTORE_LAST_SESSION_CRASHED, 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Creates a navigation entry and translates the virtual url to a real one. 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This is a general call; prefer LoadURL[FromRenderer]/TransferURL below. 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Extra headers are separated by \n. 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CONTENT_EXPORT static NavigationEntry* CreateNavigationEntry( 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& url, 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const Referrer& referrer, 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PageTransition transition, 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_renderer_initiated, 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& extra_headers, 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserContext* browser_context); 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Extra optional parameters for LoadURLWithParams. 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct CONTENT_EXPORT LoadURLParams { 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The url to load. This field is required. 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL url; 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // See LoadURLType comments above. 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadURLType load_type; 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // PageTransition for this load. See PageTransition for details. 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Note the default value in constructor below. 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PageTransition transition_type; 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Referrer for this load. Empty if none. 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Referrer referrer; 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Extra headers for this load, separated by \n. 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string extra_headers; 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // True for renderer-initiated navigations. This is 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // important for tracking whether to display pending URLs. 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_renderer_initiated; 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // User agent override for this load. See comments in 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // UserAgentOverrideOption definition. 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UserAgentOverrideOption override_user_agent; 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Marks the new navigation as being transferred from one RVH to another. 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // In this case the browser can recycle the old request once the new 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // renderer wants to navigate. Identifies the request ID of the old request. 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GlobalRequestID transferred_global_request_id; 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Used in LOAD_TYPE_DATA loads only. Used for specifying a base URL 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // for pages loaded via data URLs. 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL base_url_for_data_url; 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Used in LOAD_TYPE_DATA loads only. URL displayed to the user for 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // data loads. 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL virtual_url_for_data_url; 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Used in LOAD_TYPE_BROWSER_INITIATED_HTTP_POST loads only. Carries the 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // post data of the load. Ownership is transferred to NavigationController 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // after LoadURLWithParams call. 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<base::RefCountedMemory> browser_initiated_post_data; 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // True if this URL should be able to access local resources. 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool can_load_local_resources; 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 154ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch // Indicates whether this navigation should replace the current 155ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch // navigation entry. 156ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch bool should_replace_current_entry; 1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Used to specify which frame to navigate. If empty, the main frame is 1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // navigated. This is currently only used in tests. 1602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string frame_name; 1612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 162c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Indicates that during this navigation, the session history should be 163c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // cleared such that the resulting page is the first and only entry of the 164c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // session history. 165c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // 166c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // The clearing is done asynchronously, and completes when this navigation 167c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // commits. 168c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool should_clear_history_list; 169c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) explicit LoadURLParams(const GURL& url); 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ~LoadURLParams(); 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Allows copying of LoadURLParams struct. 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadURLParams(const LoadURLParams& other); 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadURLParams& operator=(const LoadURLParams& other); 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Disables checking for a repost and prompting the user. This is used during 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // testing. 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CONTENT_EXPORT static void DisablePromptOnRepost(); 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~NavigationController() {} 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the web contents associated with this controller. It can never be 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // NULL. 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual WebContents* GetWebContents() const = 0; 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Get/set the browser context for this controller. It can never be NULL. 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual BrowserContext* GetBrowserContext() const = 0; 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetBrowserContext(BrowserContext* browser_context) = 0; 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Initializes this NavigationController with the given saved navigations, 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // using |selected_navigation| as the currently loaded entry. Before this call 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the controller should be unused (there should be no current entry). |type| 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // indicates where the restor comes from. This takes ownership of the 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // NavigationEntrys in |entries| and clears it out. This is used for session 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // restore. 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void Restore(int selected_navigation, 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RestoreType type, 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<NavigationEntry*>* entries) = 0; 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Entries ------------------------------------------------------------------- 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // There are two basic states for entries: pending and committed. When an 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // entry is navigated to, a request is sent to the server. While that request 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // has not been responded to, the NavigationEntry is pending. Once data is 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // received for that entry, that NavigationEntry is committed. 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // A transient entry is an entry that, when the user navigates away, is 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // removed and discarded rather than being added to the back-forward list. 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Transient entries are useful for interstitial pages and the like. 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Active entry -------------------------------------------------------------- 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the active entry, which is the transient entry if any, the pending 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // entry if a navigation is in progress or the last committed entry otherwise. 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // NOTE: This can be NULL!! 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If you are trying to get the current state of the NavigationController, 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // this is the method you will typically want to call. If you want to display 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the active entry to the user (e.g., in the location bar), use 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // GetVisibleEntry instead. 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual NavigationEntry* GetActiveEntry() const = 0; 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the same entry as GetActiveEntry, except that it ignores pending 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // history navigation entries. This should be used when displaying info to 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the user, so that the location bar and other indicators do not update for 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // a back/forward navigation until the pending entry commits. This approach 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // guards against URL spoofs on slow history navigations. 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual NavigationEntry* GetVisibleEntry() const = 0; 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the index from which we would go back/forward or reload. This is 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the last_committed_entry_index_ if pending_entry_index_ is -1. Otherwise, 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // it is the pending_entry_index_. 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual int GetCurrentEntryIndex() const = 0; 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the last committed entry, which may be null if there are no 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // committed entries. 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual NavigationEntry* GetLastCommittedEntry() const = 0; 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the index of the last committed entry. 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual int GetLastCommittedEntryIndex() const = 0; 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns true if the source for the current entry can be viewed. 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool CanViewSource() const = 0; 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Navigation list ----------------------------------------------------------- 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the number of entries in the NavigationController, excluding 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the pending entry if there is one, but including the transient entry if 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // any. 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual int GetEntryCount() const = 0; 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual NavigationEntry* GetEntryAtIndex(int index) const = 0; 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the entry at the specified offset from current. Returns NULL 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // if out of bounds. 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual NavigationEntry* GetEntryAtOffset(int offset) const = 0; 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Pending entry ------------------------------------------------------------- 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Discards the pending and transient entries if any. 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void DiscardNonCommittedEntries() = 0; 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the pending entry corresponding to the navigation that is 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // currently in progress, or null if there is none. 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual NavigationEntry* GetPendingEntry() const = 0; 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the index of the pending entry or -1 if the pending entry 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // corresponds to a new navigation (created via LoadURL). 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual int GetPendingEntryIndex() const = 0; 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Transient entry ----------------------------------------------------------- 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the transient entry if any. This is an entry which is removed and 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // discarded if any navigation occurs. Note that the returned entry is owned 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // by the navigation controller and may be deleted at any time. 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual NavigationEntry* GetTransientEntry() const = 0; 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Adds an entry that is returned by GetActiveEntry(). The entry is 2812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // transient: any navigation causes it to be removed and discarded. The 2822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // NavigationController becomes the owner of |entry| and deletes it when 2832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // it discards it. This is useful with interstitial pages that need to be 2842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // represented as an entry, but should go away when the user navigates away 2852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // from them. 2862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Note that adding a transient entry does not change the active contents. 2872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void SetTransientEntry(NavigationEntry* entry) = 0; 2882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // New navigations ----------------------------------------------------------- 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Loads the specified URL, specifying extra http headers to add to the 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // request. Extra headers are separated by \n. 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void LoadURL(const GURL& url, 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const Referrer& referrer, 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PageTransition type, 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& extra_headers) = 0; 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // More general version of LoadURL. See comments in LoadURLParams for 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // using |params|. 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void LoadURLWithParams(const LoadURLParams& params) = 0; 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Loads the current page if this NavigationController was restored from 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // history and the current page has not loaded yet. 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void LoadIfNecessary() = 0; 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Renavigation -------------------------------------------------------------- 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Navigation relative to the "current entry" 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool CanGoBack() const = 0; 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool CanGoForward() const = 0; 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool CanGoToOffset(int offset) const = 0; 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void GoBack() = 0; 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void GoForward() = 0; 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Navigates to the specified absolute index. 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void GoToIndex(int index) = 0; 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Navigates to the specified offset from the "current entry". Does nothing if 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the offset is out of bounds. 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void GoToOffset(int offset) = 0; 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Reloads the current entry. If |check_for_repost| is true and the current 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // entry has POST data the user is prompted to see if they really want to 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // reload the page. In nearly all cases pass in true. If a transient entry 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // is showing, initiates a new navigation to its URL. 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void Reload(bool check_for_repost) = 0; 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Like Reload(), but don't use caches (aka "shift-reload"). 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void ReloadIgnoringCache(bool check_for_repost) = 0; 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Reloads the current entry using the original URL used to create it. This 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // is used for cases where the user wants to refresh a page using a different 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // user agent after following a redirect. 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void ReloadOriginalRequestURL(bool check_for_repost) = 0; 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Removing of entries ------------------------------------------------------- 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 338a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch // Removes the entry at the specified |index|. This call discards any 339a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch // transient entries. If the index is the last committed index or the pending 340a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch // entry, this does nothing and returns false. 341a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch virtual bool RemoveEntryAtIndex(int index) = 0; 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Random -------------------------------------------------------------------- 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Session storage depends on dom_storage that depends on WebKit::WebString, 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // which cannot be used on iOS. 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if !defined(OS_IOS) 348ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch // Returns all the SessionStorageNamespace objects that this 349ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch // NavigationController knows about. 350ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch virtual const SessionStorageNamespaceMap& 351ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch GetSessionStorageNamespaceMap() const = 0; 352ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 353ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch // TODO(ajwong): Remove this once prerendering, instant, and session restore 354ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch // are migrated. 355ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch virtual SessionStorageNamespace* GetDefaultSessionStorageNamespace() = 0; 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Sets the max restored page ID this NavigationController has seen, if it 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // was restored from a previous session. 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetMaxRestoredPageID(int32 max_id) = 0; 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the largest restored page ID seen in this navigation controller, 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // if it was restored from a previous session. (-1 otherwise) 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual int32 GetMaxRestoredPageID() const = 0; 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns true if a reload happens when activated (SetActive(true) is 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // invoked). This is true for session/tab restore and cloned tabs. 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool NeedsReload() const = 0; 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Cancels a repost that brought up a warning. 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void CancelPendingReload() = 0; 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Continues a repost that brought up a warning. 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void ContinuePendingReload() = 0; 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns true if we are navigating to the URL the tab is opened with. 3762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Returns false after the initial navigation has committed. 3772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual bool IsInitialNavigation() const = 0; 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3797dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // Broadcasts the NOTIFICATION_NAV_ENTRY_CHANGED notification for the given 3807dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // entry (which must be at the given index). This will keep things in sync 3817dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // like the saved session. 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void NotifyEntryChanged(const NavigationEntry* entry, int index) = 0; 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Copies the navigation state from the given controller to this one. This 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // one should be empty (just created). 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void CopyStateFrom(const NavigationController& source) = 0; 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // A variant of CopyStateFrom. Removes all entries from this except the last 389868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // committed entry, and inserts all entries from |source| before and including 390868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // its last committed entry. For example: 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // source: A B *C* D 392868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // this: E F *G* 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // result: A B C *G* 394868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // If there is a pending entry after *G* in |this|, it is also preserved. 395868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // This ignores any pending or transient entries in |source|. Callers must 396868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // ensure that |CanPruneAllButVisible| returns true before calling this, or it 397868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // will crash. 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void CopyStateFromAndPrune(NavigationController* source) = 0; 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 400868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Returns whether it is safe to call PruneAllButVisible or 401868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // CopyStateFromAndPrune. There must be a last committed entry, no transient 402868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // entry, and if there is a pending entry, it must be new and not an existing 403868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // entry. 404868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // 405868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // If there were no last committed entry, the pending entry might not commit, 406868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // leaving us with a blank page. This is unsafe when used with 407868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // |CopyStateFromAndPrune|, which would show an existing entry above the blank 408868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // page. 409868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // If there were a transient entry, we would not want to prune the other 410868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // entries, which the transient entry could be referring to. 411868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // If there were an existing pending entry, we could not prune the last 412868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // committed entry, in case it did not commit. That would leave us with no 413868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // sensible place to put the pending entry when it did commit, after all other 414868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // entries are pruned. For example, it could be going back several entries. 415868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // (New pending entries are safe, because they can always commit to the end.) 416868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) virtual bool CanPruneAllButVisible() = 0; 417868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 418868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Removes all the entries except the last committed entry. If there is a new 419868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // pending navigation it is preserved. Callers must ensure 420868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // |CanPruneAllButVisible| returns true before calling this, or it will crash. 421868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) virtual void PruneAllButVisible() = 0; 4222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Clears all screenshots associated with navigation entries in this 4242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // controller. Useful to reduce memory consumption in low-memory situations. 4252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void ClearAllScreenshots() = 0; 4262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 4282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // This interface should only be implemented inside content. 4292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) friend class NavigationControllerImpl; 4302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NavigationController() {} 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace content 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // CONTENT_PUBLIC_BROWSER_NAVIGATION_CONTROLLER_H_ 436