Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(171)

Side by Side Diff: ios/web/navigation/crw_session_controller.mm

Issue 2722013002: Use custom user data to serialize Tab last visited timestamp. (Closed)
Patch Set: Rebase. Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2012 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #import "ios/web/navigation/crw_session_controller.h" 5 #import "ios/web/navigation/crw_session_controller.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <algorithm> 9 #include <algorithm>
10 #include <utility> 10 #include <utility>
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
55 55
56 // The transient entry, if any. A transient entry is discarded on any 56 // The transient entry, if any. A transient entry is discarded on any
57 // navigation, and is used for representing interstitials that need to be 57 // navigation, and is used for representing interstitials that need to be
58 // represented in the session. It backs the property of the same name and 58 // represented in the session. It backs the property of the same name and
59 // should only be set through its setter. 59 // should only be set through its setter.
60 base::scoped_nsobject<CRWSessionEntry> _transientEntry; 60 base::scoped_nsobject<CRWSessionEntry> _transientEntry;
61 61
62 // Stores the certificate policies decided by the user. 62 // Stores the certificate policies decided by the user.
63 CRWSessionCertificatePolicyManager* _sessionCertificatePolicyManager; 63 CRWSessionCertificatePolicyManager* _sessionCertificatePolicyManager;
64 64
65 // The timestamp of the last time this tab is visited, represented in time
66 // interval since 1970.
67 NSTimeInterval _lastVisitedTimestamp;
68
69 // The browser state associated with this CRWSessionController; 65 // The browser state associated with this CRWSessionController;
70 web::BrowserState* _browserState; // weak 66 web::BrowserState* _browserState; // weak
71 67
72 // Time smoother for navigation entry timestamps; see comment in 68 // Time smoother for navigation entry timestamps; see comment in
73 // navigation_controller_impl.h 69 // navigation_controller_impl.h
74 web::TimeSmoother _timeSmoother; 70 web::TimeSmoother _timeSmoother;
75 } 71 }
76 72
77 // Redefine as readwrite. 73 // Redefine as readwrite.
78 @property(nonatomic, readwrite, assign) NSInteger currentNavigationIndex; 74 @property(nonatomic, readwrite, assign) NSInteger currentNavigationIndex;
(...skipping 26 matching lines...) Expand all
105 // Returns a NavigationItemList containing the NavigationItems from |entries|. 101 // Returns a NavigationItemList containing the NavigationItems from |entries|.
106 - (web::NavigationItemList)itemListForEntryList:(NSArray*)entries; 102 - (web::NavigationItemList)itemListForEntryList:(NSArray*)entries;
107 @end 103 @end
108 104
109 @implementation CRWSessionController 105 @implementation CRWSessionController
110 106
111 @synthesize currentNavigationIndex = _currentNavigationIndex; 107 @synthesize currentNavigationIndex = _currentNavigationIndex;
112 @synthesize previousNavigationIndex = _previousNavigationIndex; 108 @synthesize previousNavigationIndex = _previousNavigationIndex;
113 @synthesize pendingItemIndex = _pendingItemIndex; 109 @synthesize pendingItemIndex = _pendingItemIndex;
114 @synthesize entries = _entries; 110 @synthesize entries = _entries;
115 @synthesize lastVisitedTimestamp = _lastVisitedTimestamp;
116 @synthesize openedByDOM = _openedByDOM; 111 @synthesize openedByDOM = _openedByDOM;
117 @synthesize sessionCertificatePolicyManager = _sessionCertificatePolicyManager; 112 @synthesize sessionCertificatePolicyManager = _sessionCertificatePolicyManager;
118 113
119 - (instancetype)initWithBrowserState:(web::BrowserState*)browserState 114 - (instancetype)initWithBrowserState:(web::BrowserState*)browserState
120 openedByDOM:(BOOL)openedByDOM { 115 openedByDOM:(BOOL)openedByDOM {
121 self = [super init]; 116 self = [super init];
122 if (self) { 117 if (self) {
123 _openedByDOM = openedByDOM; 118 _openedByDOM = openedByDOM;
124 _browserState = browserState; 119 _browserState = browserState;
125 _entries = [NSMutableArray array]; 120 _entries = [NSMutableArray array];
126 _lastVisitedTimestamp = [[NSDate date] timeIntervalSince1970];
127 _currentNavigationIndex = -1; 121 _currentNavigationIndex = -1;
128 _previousNavigationIndex = -1; 122 _previousNavigationIndex = -1;
129 _pendingItemIndex = -1; 123 _pendingItemIndex = -1;
130 _sessionCertificatePolicyManager = 124 _sessionCertificatePolicyManager =
131 [[CRWSessionCertificatePolicyManager alloc] init]; 125 [[CRWSessionCertificatePolicyManager alloc] init];
132 } 126 }
133 return self; 127 return self;
134 } 128 }
135 129
136 - (instancetype)initWithBrowserState:(web::BrowserState*)browserState 130 - (instancetype)initWithBrowserState:(web::BrowserState*)browserState
(...skipping 12 matching lines...) Expand all
149 } 143 }
150 self.currentNavigationIndex = currentIndex; 144 self.currentNavigationIndex = currentIndex;
151 // Prior to M34, 0 was used as "no index" instead of -1; adjust for that. 145 // Prior to M34, 0 was used as "no index" instead of -1; adjust for that.
152 if (![_entries count]) 146 if (![_entries count])
153 self.currentNavigationIndex = -1; 147 self.currentNavigationIndex = -1;
154 if (_currentNavigationIndex >= static_cast<NSInteger>(items.size())) { 148 if (_currentNavigationIndex >= static_cast<NSInteger>(items.size())) {
155 self.currentNavigationIndex = static_cast<NSInteger>(items.size()) - 1; 149 self.currentNavigationIndex = static_cast<NSInteger>(items.size()) - 1;
156 } 150 }
157 _previousNavigationIndex = -1; 151 _previousNavigationIndex = -1;
158 _pendingItemIndex = -1; 152 _pendingItemIndex = -1;
159 _lastVisitedTimestamp = [[NSDate date] timeIntervalSince1970];
160 _sessionCertificatePolicyManager = 153 _sessionCertificatePolicyManager =
161 [[CRWSessionCertificatePolicyManager alloc] init]; 154 [[CRWSessionCertificatePolicyManager alloc] init];
162 } 155 }
163 return self; 156 return self;
164 } 157 }
165 158
166 - (id)copyWithZone:(NSZone*)zone { 159 - (id)copyWithZone:(NSZone*)zone {
167 CRWSessionController* copy = [[[self class] alloc] init]; 160 CRWSessionController* copy = [[[self class] alloc] init];
168 copy->_openedByDOM = _openedByDOM; 161 copy->_openedByDOM = _openedByDOM;
169 copy->_currentNavigationIndex = _currentNavigationIndex; 162 copy->_currentNavigationIndex = _currentNavigationIndex;
170 copy->_previousNavigationIndex = _previousNavigationIndex; 163 copy->_previousNavigationIndex = _previousNavigationIndex;
171 copy->_pendingItemIndex = _pendingItemIndex; 164 copy->_pendingItemIndex = _pendingItemIndex;
172 copy->_lastVisitedTimestamp = _lastVisitedTimestamp;
173 copy->_entries = 165 copy->_entries =
174 [[NSMutableArray alloc] initWithArray:_entries copyItems:YES]; 166 [[NSMutableArray alloc] initWithArray:_entries copyItems:YES];
175 copy->_sessionCertificatePolicyManager = 167 copy->_sessionCertificatePolicyManager =
176 [_sessionCertificatePolicyManager copy]; 168 [_sessionCertificatePolicyManager copy];
177 return copy; 169 return copy;
178 } 170 }
179 171
180 - (void)setCurrentNavigationIndex:(NSInteger)currentNavigationIndex { 172 - (void)setCurrentNavigationIndex:(NSInteger)currentNavigationIndex {
181 if (_currentNavigationIndex != currentNavigationIndex) { 173 if (_currentNavigationIndex != currentNavigationIndex) {
182 _currentNavigationIndex = currentNavigationIndex; 174 _currentNavigationIndex = currentNavigationIndex;
(...skipping 24 matching lines...) Expand all
207 } 199 }
208 } 200 }
209 201
210 - (void)setBrowserState:(web::BrowserState*)browserState { 202 - (void)setBrowserState:(web::BrowserState*)browserState {
211 _browserState = browserState; 203 _browserState = browserState;
212 DCHECK(!_navigationManager || 204 DCHECK(!_navigationManager ||
213 _navigationManager->GetBrowserState() == _browserState); 205 _navigationManager->GetBrowserState() == _browserState);
214 } 206 }
215 207
216 - (NSString*)description { 208 - (NSString*)description {
217 return [NSString 209 return [NSString stringWithFormat:@"current index: %" PRIdNS
218 stringWithFormat:@"last visit: %f\ncurrent index: %" PRIdNS 210 @"\nprevious index: %" PRIdNS
219 @"\nprevious index: %" PRIdNS 211 @"\npending index: %" PRIdNS
220 @"\npending index: %" PRIdNS 212 @"\n%@\npending: %@\ntransient: %@\n",
221 @"\n%@\npending: %@\ntransient: %@\n", 213 _currentNavigationIndex,
222 _lastVisitedTimestamp, _currentNavigationIndex, 214 _previousNavigationIndex, _pendingItemIndex,
223 _previousNavigationIndex, _pendingItemIndex, _entries, 215 _entries, _pendingEntry.get(),
224 _pendingEntry.get(), _transientEntry.get()]; 216 _transientEntry.get()];
225 } 217 }
226 218
227 - (web::NavigationItemList)items { 219 - (web::NavigationItemList)items {
228 return [self itemListForEntryList:self.entries]; 220 return [self itemListForEntryList:self.entries];
229 } 221 }
230 222
231 - (web::NavigationItemImpl*)currentItem { 223 - (web::NavigationItemImpl*)currentItem {
232 return self.currentEntry.navigationItemImpl; 224 return self.currentEntry.navigationItemImpl;
233 } 225 }
234 226
(...skipping 461 matching lines...) Expand 10 before | Expand all | Expand 10 after
696 } 688 }
697 689
698 - (web::NavigationItemList)itemListForEntryList:(NSArray*)entries { 690 - (web::NavigationItemList)itemListForEntryList:(NSArray*)entries {
699 web::NavigationItemList list(entries.count); 691 web::NavigationItemList list(entries.count);
700 for (size_t index = 0; index < entries.count; ++index) 692 for (size_t index = 0; index < entries.count; ++index)
701 list[index] = [entries[index] navigationItem]; 693 list[index] = [entries[index] navigationItem];
702 return list; 694 return list;
703 } 695 }
704 696
705 @end 697 @end
OLDNEW
« no previous file with comments | « ios/web/navigation/crw_session_controller.h ('k') | ios/web/navigation/crw_session_storage_unittest.mm » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698