Index: ios/web/navigation/crw_session_controller.h |
diff --git a/ios/web/navigation/crw_session_controller.h b/ios/web/navigation/crw_session_controller.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..b6eb972fba44b6368b8305506216f961243bf81e |
--- /dev/null |
+++ b/ios/web/navigation/crw_session_controller.h |
@@ -0,0 +1,159 @@ |
+// Copyright 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 IOS_WEB_NAVIGATION_CRW_SESSION_CONTROLLER_H_ |
+#define IOS_WEB_NAVIGATION_CRW_SESSION_CONTROLLER_H_ |
+ |
+#import <Foundation/Foundation.h> |
+#include <vector> |
+ |
+#include "ui/base/page_transition_types.h" |
+#include "url/gurl.h" |
+ |
+@class CRWSessionEntry; |
+@class CRWSessionCertificatePolicyManager; |
+@class XCallbackParameters; |
+ |
+namespace web { |
+class NavigationManagerImpl; |
+struct Referrer; |
+struct SSLStatus; |
+} |
+ |
+// A CRWSessionController is similar to a NavigationController object in desktop |
+// Chrome. It maintains information needed to save/restore a tab with its |
+// complete session history. There is one of these for each tab. |
+// TODO(stuartmorgan): Move under NavigationManager, and consider merging into |
+// NavigationManager. |
+@interface CRWSessionController : NSObject<NSCoding, NSCopying> |
+ |
Eugene But (OOO till 7-30)
2015/03/23 22:51:57
Not sure how far you ant to go with improvements.
|
+@property(nonatomic, readonly, retain) NSString* tabId; |
+@property(nonatomic, readonly, assign) NSInteger currentNavigationIndex; |
+@property(nonatomic, readonly, assign) NSInteger previousNavigationIndex; |
+@property(nonatomic, readonly, retain) NSArray* entries; |
+@property(nonatomic, copy) NSString* windowName; |
+// Indicates whether the page was opened by DOM (e.g. with |window.open| |
+// JavaScript call or by clicking a link with |_blank| target). |
+@property(nonatomic, readonly, getter=isOpenedByDOM) BOOL openedByDOM; |
+@property(nonatomic, readonly, retain) |
+ CRWSessionCertificatePolicyManager* sessionCertificatePolicyManager; |
+// Returns the current entry in the session list, or the pending entry if there |
+// is a navigation in progress. |
+@property(nonatomic, readonly) CRWSessionEntry* currentEntry; |
+// Returns the entry that should be displayed to users (e.g., in the omnibox). |
+@property(nonatomic, readonly) CRWSessionEntry* visibleEntry; |
+// Returns the pending entry, if any. |
+@property(nonatomic, readonly) CRWSessionEntry* pendingEntry; |
+// Returns the transient entry, if any. |
+@property(nonatomic, readonly) CRWSessionEntry* transientEntry; |
+// Returns the last committed entry. |
+@property(nonatomic, readonly) CRWSessionEntry* lastCommittedEntry; |
+// Returns the previous entry in the session list, or nil if there isn't any. |
+@property(nonatomic, readonly) CRWSessionEntry* previousEntry; |
+@property(nonatomic, assign) NSTimeInterval lastVisitedTimestamp; |
+@property(nonatomic, readonly, copy) NSString* openerId; |
+@property(nonatomic, readonly, assign) NSInteger openerNavigationIndex; |
+@property(nonatomic, retain) XCallbackParameters* xCallbackParameters; |
+ |
+// CRWSessionController doesn't have public constructors. New |
+// CRWSessionControllers are created by deserialization, or via a |
+// NavigationManager. |
+ |
+// Sets the corresponding NavigationManager. |
+- (void)setNavigationManager:(web::NavigationManagerImpl*)navigationManager; |
+ |
+// Add a new entry with the given url, referrer, and navigation type, making it |
+// the current entry. If |url| is the same as the current entry's url, this |
+// does nothing. |referrer| may be nil if there isn't one. The entry starts |
+// out as pending, and will be lost unless |-commitPendingEntry| is called. |
+- (void)addPendingEntry:(const GURL&)url |
+ referrer:(const web::Referrer&)referrer |
+ transition:(ui::PageTransition)type |
+ rendererInitiated:(BOOL)rendererInitiated; |
+ |
+// Updates the URL of the yet to be committed pending entry. Useful for page |
+// redirects. Does nothing if there is no pending entry. |
+- (void)updatePendingEntry:(const GURL&)url; |
+ |
+// Commits the current pending entry. No changes are made to the entry during |
+// this process, it is just moved from pending to committed. |
+// TODO(pinkerton): Desktop Chrome broadcasts a notification here, should we? |
+- (void)commitPendingEntry; |
+ |
+// Adds a transient entry with the given information. A transient entry will be |
+// discarded on any navigation. |
+// TODO(stuartmorgan): Make this work more like upstream, where the entry can |
+// be made from outside and then handed in, instead of having to pass a bunch |
+// of construction params here. |
+- (void)addTransientEntry:(const GURL&)url |
+ title:(const base::string16&)title |
+ sslStatus:(const web::SSLStatus*)status; |
+ |
+// Creates a new CRWSessionEntry with the given URL and state object. A state |
+// object is a serialized generic JavaScript object that contains details of the |
+// UI's state for a given CRWSessionEntry/URL. The current entry's URL is the |
+// new entry's referrer. |
+- (void)pushNewEntryWithURL:(const GURL&)url stateObject:(NSString*)stateObject; |
+// Updates the URL and state object for the current entry. |
+- (void)updateCurrentEntryWithURL:(const GURL&)url |
+ stateObject:(NSString*)stateObject; |
+ |
+- (void)discardNonCommittedEntries; |
+ |
+// Returns YES if there is a pending entry. |
+- (BOOL)hasPendingEntry; |
+ |
+// Copies history state from the given CRWSessionController and adds it to this |
+// controller. If |replaceState|, replaces the state of this controller with |
+// the state of |otherSession|, instead of appending. |
+- (void)copyStateFromAndPrune:(CRWSessionController*)otherSession |
+ replaceState:(BOOL)replaceState; |
+ |
+// Returns YES if there are entries to go back or forward to, given the |
+// current entry. |
+- (BOOL)canGoBack; |
+- (BOOL)canGoForward; |
+// Adjusts the current entry to reflect the navigation in the corresponding |
+// direction in history. |
+- (void)goBack; |
+- (void)goForward; |
+// Calls goBack or goForward the appropriate number of times to adjust |
+// currentNavigationIndex_ by delta. |
+- (void)goDelta:(int)delta; |
+// Sets |currentNavigationIndex_| to the index of |entry| if |entries_| contains |
+// |entry|. |
+- (void)goToEntry:(CRWSessionEntry*)entry; |
+ |
+// Removes the entry at |index| after discarding any noncomitted entries. |
+// |index| must not be the index of the last committed entry, or a noncomitted |
+// entry. |
+- (void)removeEntryAtIndex:(NSInteger)index; |
+ |
+// Returns an array containing all of the non-redirected CRWSessionEntry objects |
+// whose index in |entries_| is less than |currentNavigationIndex_|. |
+- (NSArray*)backwardEntries; |
+ |
+// Returns an array containing all of the non-redirected CRWSessionEntry objects |
+// whose index in |entries_| is greater than |currentNavigationIndex_|. |
+- (NSArray*)forwardEntries; |
+ |
+// Returns the URLs in the entries that are redirected to the current entry. |
+- (std::vector<GURL>)currentRedirectedUrls; |
+ |
+// Determines if navigation between the two given entries is a push state |
+// navigation. Entries can be passed in in any order. |
+- (BOOL)isPushStateNavigationBetweenEntry:(CRWSessionEntry*)firstEntry |
+ andEntry:(CRWSessionEntry*)secondEntry; |
+ |
+// Find the most recent session entry that is not a redirect. Returns nil if |
+// |entries_| is empty. |
+- (CRWSessionEntry*)lastUserEntry; |
+ |
+// Set |useDesktopUserAgentForNextPendingEntry_| to YES if there is no pending |
+// entry, otherwise set |useDesktopUserAgent| in the pending entry. |
+- (void)useDesktopUserAgentForNextPendingEntry; |
+ |
+@end |
+ |
+#endif // IOS_WEB_NAVIGATION_CRW_SESSION_CONTROLLER_H_ |