OLD | NEW |
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/chrome/browser/tabs/tab.h" | 5 #import "ios/chrome/browser/tabs/tab.h" |
6 | 6 |
7 #import <CoreLocation/CoreLocation.h> | 7 #import <CoreLocation/CoreLocation.h> |
8 #import <UIKit/UIKit.h> | 8 #import <UIKit/UIKit.h> |
9 | 9 |
10 #include <utility> | 10 #include <utility> |
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
179 NSString* const kTabIDKey = @"TabID"; | 179 NSString* const kTabIDKey = @"TabID"; |
180 | 180 |
181 // The key under which the opener Tab ID is stored in the WebState's | 181 // The key under which the opener Tab ID is stored in the WebState's |
182 // serializable user data. | 182 // serializable user data. |
183 NSString* const kOpenerIDKey = @"OpenerID"; | 183 NSString* const kOpenerIDKey = @"OpenerID"; |
184 | 184 |
185 // The key under which the opener navigation index is stored in the WebState's | 185 // The key under which the opener navigation index is stored in the WebState's |
186 // serializable user data. | 186 // serializable user data. |
187 NSString* const kOpenerNavigationIndexKey = @"OpenerNavigationIndex"; | 187 NSString* const kOpenerNavigationIndexKey = @"OpenerNavigationIndex"; |
188 | 188 |
| 189 // The key under which the last visited timestamp is stored in the WebState's |
| 190 // serializable user data. |
| 191 NSString* const kLastVisitedTimestampKey = @"LastVisitedTimestamp"; |
| 192 |
189 // Name of histogram for recording the state of the tab when the renderer is | 193 // Name of histogram for recording the state of the tab when the renderer is |
190 // terminated. | 194 // terminated. |
191 const char kRendererTerminationStateHistogram[] = | 195 const char kRendererTerminationStateHistogram[] = |
192 "Tab.StateAtRendererTermination"; | 196 "Tab.StateAtRendererTermination"; |
193 | 197 |
194 // Referrer used for clicks on article suggestions on the NTP. | 198 // Referrer used for clicks on article suggestions on the NTP. |
195 const char kChromeContentSuggestionsReferrer[] = | 199 const char kChromeContentSuggestionsReferrer[] = |
196 "https://www.googleapis.com/auth/chrome-content-suggestions"; | 200 "https://www.googleapis.com/auth/chrome-content-suggestions"; |
197 | 201 |
198 // Enum corresponding to UMA's TabForegroundState, for | 202 // Enum corresponding to UMA's TabForegroundState, for |
(...skipping 335 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
534 if (self) { | 538 if (self) { |
535 propertyReleaser_Tab_.Init(self, [Tab class]); | 539 propertyReleaser_Tab_.Init(self, [Tab class]); |
536 tabHistoryContext_.reset(new TabHistoryContext()); | 540 tabHistoryContext_.reset(new TabHistoryContext()); |
537 parentTabModel_ = parentModel; | 541 parentTabModel_ = parentModel; |
538 browserState_ = | 542 browserState_ = |
539 ios::ChromeBrowserState::FromBrowserState(webState->GetBrowserState()); | 543 ios::ChromeBrowserState::FromBrowserState(webState->GetBrowserState()); |
540 | 544 |
541 webStateImpl_.reset(static_cast<web::WebStateImpl*>(webState.release())); | 545 webStateImpl_.reset(static_cast<web::WebStateImpl*>(webState.release())); |
542 webStateObserver_.reset( | 546 webStateObserver_.reset( |
543 new web::WebStateObserverBridge(webStateImpl_.get(), self)); | 547 new web::WebStateObserverBridge(webStateImpl_.get(), self)); |
| 548 [self updateLastVisitedTimestamp]; |
544 | 549 |
545 // Do not respect |attachTabHelpers| as this tab helper is required for | 550 // Do not respect |attachTabHelpers| as this tab helper is required for |
546 // proper conversion from WebState to Tab. | 551 // proper conversion from WebState to Tab. |
547 LegacyTabHelper::CreateForWebState(webStateImpl_.get(), self); | 552 LegacyTabHelper::CreateForWebState(webStateImpl_.get(), self); |
548 | 553 |
549 [self.webController setDelegate:self]; | 554 [self.webController setDelegate:self]; |
550 | 555 |
551 NSString* sessionID = self.tabId; | 556 NSString* sessionID = self.tabId; |
552 DCHECK(sessionID); | 557 DCHECK(sessionID); |
553 snapshotManager_.reset([[SnapshotManager alloc] init]); | 558 snapshotManager_.reset([[SnapshotManager alloc] init]); |
(...skipping 1315 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1869 linkClicked:linkClicked]) { | 1874 linkClicked:linkClicked]) { |
1870 return YES; | 1875 return YES; |
1871 } | 1876 } |
1872 | 1877 |
1873 // Auto-open didn't work. Reset the auto-open flag. | 1878 // Auto-open didn't work. Reset the auto-open flag. |
1874 [metadata unsetShouldAutoOpenLinks]; | 1879 [metadata unsetShouldAutoOpenLinks]; |
1875 return NO; | 1880 return NO; |
1876 } | 1881 } |
1877 | 1882 |
1878 - (double)lastVisitedTimestamp { | 1883 - (double)lastVisitedTimestamp { |
1879 DCHECK([self navigationManager]); | 1884 DCHECK(self.webState); |
1880 return [[self navigationManagerImpl]->GetSessionController() | 1885 web::SerializableUserDataManager* userDataManager = |
1881 lastVisitedTimestamp]; | 1886 web::SerializableUserDataManager::FromWebState(self.webState); |
| 1887 id<NSCoding> lastVisitedTimestamp = |
| 1888 userDataManager->GetValueForSerializationKey(kLastVisitedTimestampKey); |
| 1889 return lastVisitedTimestamp |
| 1890 ? base::mac::ObjCCastStrict<NSNumber>(lastVisitedTimestamp) |
| 1891 .doubleValue |
| 1892 : 0.; |
1882 } | 1893 } |
1883 | 1894 |
1884 - (void)updateLastVisitedTimestamp { | 1895 - (void)updateLastVisitedTimestamp { |
1885 // Stores this information in self.history and it will be written into disc | 1896 DCHECK(self.webState); |
1886 // with other information when needed. | 1897 web::SerializableUserDataManager* userDataManager = |
1887 DCHECK([self navigationManager]); | 1898 web::SerializableUserDataManager::FromWebState(self.webState); |
1888 [[self navigationManagerImpl]->GetSessionController() | 1899 userDataManager->AddSerializableData(@([[NSDate date] timeIntervalSince1970]), |
1889 setLastVisitedTimestamp:[[NSDate date] timeIntervalSince1970]]; | 1900 kLastVisitedTimestampKey); |
1890 } | 1901 } |
1891 | 1902 |
1892 - (infobars::InfoBarManager*)infoBarManager { | 1903 - (infobars::InfoBarManager*)infoBarManager { |
1893 DCHECK(self.webState); | 1904 DCHECK(self.webState); |
1894 return InfoBarManagerImpl::FromWebState(self.webState); | 1905 return InfoBarManagerImpl::FromWebState(self.webState); |
1895 } | 1906 } |
1896 | 1907 |
1897 - (NSArray*)snapshotOverlays { | 1908 - (NSArray*)snapshotOverlays { |
1898 return [snapshotOverlayProvider_ snapshotOverlaysForTab:self]; | 1909 return [snapshotOverlayProvider_ snapshotOverlaysForTab:self]; |
1899 } | 1910 } |
(...skipping 334 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2234 | 2245 |
2235 - (TabModel*)parentTabModel { | 2246 - (TabModel*)parentTabModel { |
2236 return parentTabModel_; | 2247 return parentTabModel_; |
2237 } | 2248 } |
2238 | 2249 |
2239 - (FormInputAccessoryViewController*)inputAccessoryViewController { | 2250 - (FormInputAccessoryViewController*)inputAccessoryViewController { |
2240 return inputAccessoryViewController_.get(); | 2251 return inputAccessoryViewController_.get(); |
2241 } | 2252 } |
2242 | 2253 |
2243 @end | 2254 @end |
OLD | NEW |