Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 1 // Copyright 2012 The Chromium Authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 #ifndef IOS_WEB_NAVIGATION_CRW_SESSION_CONTROLLER_H_ | |
| 6 #define IOS_WEB_NAVIGATION_CRW_SESSION_CONTROLLER_H_ | |
| 7 | |
| 8 #import <Foundation/Foundation.h> | |
| 9 #include <vector> | |
| 10 | |
| 11 #include "ui/base/page_transition_types.h" | |
| 12 #include "url/gurl.h" | |
| 13 | |
| 14 @class CRWSessionEntry; | |
| 15 @class CRWSessionCertificatePolicyManager; | |
| 16 @class XCallbackParameters; | |
| 17 | |
| 18 namespace web { | |
| 19 class NavigationManagerImpl; | |
| 20 struct Referrer; | |
| 21 struct SSLStatus; | |
| 22 } | |
| 23 | |
| 24 // A CRWSessionController is similar to a NavigationController object in desktop | |
| 25 // Chrome. It maintains information needed to save/restore a tab with its | |
| 26 // complete session history. There is one of these for each tab. | |
| 27 // TODO(stuartmorgan): Move under NavigationManager, and consider merging into | |
| 28 // NavigationManager. | |
| 29 @interface CRWSessionController : NSObject<NSCoding, NSCopying> | |
| 30 | |
|
Eugene But (OOO till 7-30)
2015/03/23 22:51:57
Not sure how far you ant to go with improvements.
| |
| 31 @property(nonatomic, readonly, retain) NSString* tabId; | |
| 32 @property(nonatomic, readonly, assign) NSInteger currentNavigationIndex; | |
| 33 @property(nonatomic, readonly, assign) NSInteger previousNavigationIndex; | |
| 34 @property(nonatomic, readonly, retain) NSArray* entries; | |
| 35 @property(nonatomic, copy) NSString* windowName; | |
| 36 // Indicates whether the page was opened by DOM (e.g. with |window.open| | |
| 37 // JavaScript call or by clicking a link with |_blank| target). | |
| 38 @property(nonatomic, readonly, getter=isOpenedByDOM) BOOL openedByDOM; | |
| 39 @property(nonatomic, readonly, retain) | |
| 40 CRWSessionCertificatePolicyManager* sessionCertificatePolicyManager; | |
| 41 // Returns the current entry in the session list, or the pending entry if there | |
| 42 // is a navigation in progress. | |
| 43 @property(nonatomic, readonly) CRWSessionEntry* currentEntry; | |
| 44 // Returns the entry that should be displayed to users (e.g., in the omnibox). | |
| 45 @property(nonatomic, readonly) CRWSessionEntry* visibleEntry; | |
| 46 // Returns the pending entry, if any. | |
| 47 @property(nonatomic, readonly) CRWSessionEntry* pendingEntry; | |
| 48 // Returns the transient entry, if any. | |
| 49 @property(nonatomic, readonly) CRWSessionEntry* transientEntry; | |
| 50 // Returns the last committed entry. | |
| 51 @property(nonatomic, readonly) CRWSessionEntry* lastCommittedEntry; | |
| 52 // Returns the previous entry in the session list, or nil if there isn't any. | |
| 53 @property(nonatomic, readonly) CRWSessionEntry* previousEntry; | |
| 54 @property(nonatomic, assign) NSTimeInterval lastVisitedTimestamp; | |
| 55 @property(nonatomic, readonly, copy) NSString* openerId; | |
| 56 @property(nonatomic, readonly, assign) NSInteger openerNavigationIndex; | |
| 57 @property(nonatomic, retain) XCallbackParameters* xCallbackParameters; | |
| 58 | |
| 59 // CRWSessionController doesn't have public constructors. New | |
| 60 // CRWSessionControllers are created by deserialization, or via a | |
| 61 // NavigationManager. | |
| 62 | |
| 63 // Sets the corresponding NavigationManager. | |
| 64 - (void)setNavigationManager:(web::NavigationManagerImpl*)navigationManager; | |
| 65 | |
| 66 // Add a new entry with the given url, referrer, and navigation type, making it | |
| 67 // the current entry. If |url| is the same as the current entry's url, this | |
| 68 // does nothing. |referrer| may be nil if there isn't one. The entry starts | |
| 69 // out as pending, and will be lost unless |-commitPendingEntry| is called. | |
| 70 - (void)addPendingEntry:(const GURL&)url | |
| 71 referrer:(const web::Referrer&)referrer | |
| 72 transition:(ui::PageTransition)type | |
| 73 rendererInitiated:(BOOL)rendererInitiated; | |
| 74 | |
| 75 // Updates the URL of the yet to be committed pending entry. Useful for page | |
| 76 // redirects. Does nothing if there is no pending entry. | |
| 77 - (void)updatePendingEntry:(const GURL&)url; | |
| 78 | |
| 79 // Commits the current pending entry. No changes are made to the entry during | |
| 80 // this process, it is just moved from pending to committed. | |
| 81 // TODO(pinkerton): Desktop Chrome broadcasts a notification here, should we? | |
| 82 - (void)commitPendingEntry; | |
| 83 | |
| 84 // Adds a transient entry with the given information. A transient entry will be | |
| 85 // discarded on any navigation. | |
| 86 // TODO(stuartmorgan): Make this work more like upstream, where the entry can | |
| 87 // be made from outside and then handed in, instead of having to pass a bunch | |
| 88 // of construction params here. | |
| 89 - (void)addTransientEntry:(const GURL&)url | |
| 90 title:(const base::string16&)title | |
| 91 sslStatus:(const web::SSLStatus*)status; | |
| 92 | |
| 93 // Creates a new CRWSessionEntry with the given URL and state object. A state | |
| 94 // object is a serialized generic JavaScript object that contains details of the | |
| 95 // UI's state for a given CRWSessionEntry/URL. The current entry's URL is the | |
| 96 // new entry's referrer. | |
| 97 - (void)pushNewEntryWithURL:(const GURL&)url stateObject:(NSString*)stateObject; | |
| 98 // Updates the URL and state object for the current entry. | |
| 99 - (void)updateCurrentEntryWithURL:(const GURL&)url | |
| 100 stateObject:(NSString*)stateObject; | |
| 101 | |
| 102 - (void)discardNonCommittedEntries; | |
| 103 | |
| 104 // Returns YES if there is a pending entry. | |
| 105 - (BOOL)hasPendingEntry; | |
| 106 | |
| 107 // Copies history state from the given CRWSessionController and adds it to this | |
| 108 // controller. If |replaceState|, replaces the state of this controller with | |
| 109 // the state of |otherSession|, instead of appending. | |
| 110 - (void)copyStateFromAndPrune:(CRWSessionController*)otherSession | |
| 111 replaceState:(BOOL)replaceState; | |
| 112 | |
| 113 // Returns YES if there are entries to go back or forward to, given the | |
| 114 // current entry. | |
| 115 - (BOOL)canGoBack; | |
| 116 - (BOOL)canGoForward; | |
| 117 // Adjusts the current entry to reflect the navigation in the corresponding | |
| 118 // direction in history. | |
| 119 - (void)goBack; | |
| 120 - (void)goForward; | |
| 121 // Calls goBack or goForward the appropriate number of times to adjust | |
| 122 // currentNavigationIndex_ by delta. | |
| 123 - (void)goDelta:(int)delta; | |
| 124 // Sets |currentNavigationIndex_| to the index of |entry| if |entries_| contains | |
| 125 // |entry|. | |
| 126 - (void)goToEntry:(CRWSessionEntry*)entry; | |
| 127 | |
| 128 // Removes the entry at |index| after discarding any noncomitted entries. | |
| 129 // |index| must not be the index of the last committed entry, or a noncomitted | |
| 130 // entry. | |
| 131 - (void)removeEntryAtIndex:(NSInteger)index; | |
| 132 | |
| 133 // Returns an array containing all of the non-redirected CRWSessionEntry objects | |
| 134 // whose index in |entries_| is less than |currentNavigationIndex_|. | |
| 135 - (NSArray*)backwardEntries; | |
| 136 | |
| 137 // Returns an array containing all of the non-redirected CRWSessionEntry objects | |
| 138 // whose index in |entries_| is greater than |currentNavigationIndex_|. | |
| 139 - (NSArray*)forwardEntries; | |
| 140 | |
| 141 // Returns the URLs in the entries that are redirected to the current entry. | |
| 142 - (std::vector<GURL>)currentRedirectedUrls; | |
| 143 | |
| 144 // Determines if navigation between the two given entries is a push state | |
| 145 // navigation. Entries can be passed in in any order. | |
| 146 - (BOOL)isPushStateNavigationBetweenEntry:(CRWSessionEntry*)firstEntry | |
| 147 andEntry:(CRWSessionEntry*)secondEntry; | |
| 148 | |
| 149 // Find the most recent session entry that is not a redirect. Returns nil if | |
| 150 // |entries_| is empty. | |
| 151 - (CRWSessionEntry*)lastUserEntry; | |
| 152 | |
| 153 // Set |useDesktopUserAgentForNextPendingEntry_| to YES if there is no pending | |
| 154 // entry, otherwise set |useDesktopUserAgent| in the pending entry. | |
| 155 - (void)useDesktopUserAgentForNextPendingEntry; | |
| 156 | |
| 157 @end | |
| 158 | |
| 159 #endif // IOS_WEB_NAVIGATION_CRW_SESSION_CONTROLLER_H_ | |
| OLD | NEW |