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 855 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
866 if (![self.webController isViewAlive] && [parentTabModel_ tabUsageRecorder]) { | 866 if (![self.webController isViewAlive] && [parentTabModel_ tabUsageRecorder]) { |
867 [parentTabModel_ tabUsageRecorder]->RecordPageLoadStart(self); | 867 [parentTabModel_ tabUsageRecorder]->RecordPageLoadStart(self); |
868 } | 868 } |
869 return self.webState ? self.webState->GetView() : nil; | 869 return self.webState ? self.webState->GetView() : nil; |
870 } | 870 } |
871 | 871 |
872 - (UIView*)viewForPrinting { | 872 - (UIView*)viewForPrinting { |
873 return self.webController.viewForPrinting; | 873 return self.webController.viewForPrinting; |
874 } | 874 } |
875 | 875 |
876 - (NavigationManagerImpl*)navigationManager { | 876 - (web::NavigationManager*)navigationManager { |
877 if (!webStateImpl_) | 877 return webStateImpl_ ? webStateImpl_->GetNavigationManager() : nullptr; |
Eugene But (OOO till 7-30)
2017/02/28 21:39:47
You can use self.webState here, which returns publ
| |
878 return nil; | 878 } |
879 return &(webStateImpl_->GetNavigationManagerImpl()); | 879 |
880 - (web::NavigationManagerImpl*)navigationManagerImpl { | |
881 return webStateImpl_ ? &(webStateImpl_->GetNavigationManagerImpl()) : nullptr; | |
880 } | 882 } |
881 | 883 |
882 - (id<StoreKitLauncher>)storeKitLauncher { | 884 - (id<StoreKitLauncher>)storeKitLauncher { |
883 return storeKitLauncher_.get(); | 885 return storeKitLauncher_.get(); |
884 } | 886 } |
885 | 887 |
886 - (void)setStoreKitLauncher:(id<StoreKitLauncher>)storeKitLauncher { | 888 - (void)setStoreKitLauncher:(id<StoreKitLauncher>)storeKitLauncher { |
887 storeKitLauncher_.reset(storeKitLauncher); | 889 storeKitLauncher_.reset(storeKitLauncher); |
888 } | 890 } |
889 | 891 |
890 // Swap out the existing session history with a new list of navigations. Forces | 892 // Swap out the existing session history with a new list of navigations. Forces |
891 // the tab to reload to update the UI accordingly. This is ok because none of | 893 // the tab to reload to update the UI accordingly. This is ok because none of |
892 // the session history is stored in the tab; it's always fetched through the | 894 // the session history is stored in the tab; it's always fetched through the |
893 // navigation manager. | 895 // navigation manager. |
894 - (void)replaceHistoryWithNavigations: | 896 - (void)replaceHistoryWithNavigations: |
895 (const std::vector<sessions::SerializedNavigationEntry>&)navigations | 897 (const std::vector<sessions::SerializedNavigationEntry>&)navigations |
896 currentIndex:(NSInteger)currentIndex { | 898 currentIndex:(NSInteger)currentIndex { |
897 std::vector<std::unique_ptr<web::NavigationItem>> items = | 899 std::vector<std::unique_ptr<web::NavigationItem>> items = |
898 sessions::IOSSerializedNavigationBuilder::ToNavigationItems(navigations); | 900 sessions::IOSSerializedNavigationBuilder::ToNavigationItems(navigations); |
899 [self navigationManager]->ReplaceSessionHistory(std::move(items), | 901 [self navigationManagerImpl]->ReplaceSessionHistory(std::move(items), |
900 currentIndex); | 902 currentIndex); |
901 [self didReplaceSessionHistory]; | 903 [self didReplaceSessionHistory]; |
902 | 904 |
903 [self.webController loadCurrentURL]; | 905 [self.webController loadCurrentURL]; |
904 } | 906 } |
905 | 907 |
906 - (void)didReplaceSessionHistory { | 908 - (void)didReplaceSessionHistory { |
907 // Replace fullScreenController_ with a new sessionID when the navigation | 909 // Replace fullScreenController_ with a new sessionID when the navigation |
908 // manager changes. | 910 // manager changes. |
909 // TODO(crbug.com/661666): Consider just updating sessionID and not replacing | 911 // TODO(crbug.com/661666): Consider just updating sessionID and not replacing |
910 // |fullScreenController_|. | 912 // |fullScreenController_|. |
(...skipping 356 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1267 } | 1269 } |
1268 | 1270 |
1269 - (void)dismissModals { | 1271 - (void)dismissModals { |
1270 [openInController_ disable]; | 1272 [openInController_ disable]; |
1271 [self.webController dismissModals]; | 1273 [self.webController dismissModals]; |
1272 } | 1274 } |
1273 | 1275 |
1274 - (web::NavigationItem*)currentNavigationItem { | 1276 - (web::NavigationItem*)currentNavigationItem { |
1275 if (![self navigationManager]) | 1277 if (![self navigationManager]) |
1276 return nil; | 1278 return nil; |
1277 return [[self navigationManager]->GetSessionController() currentItem]; | 1279 return [[self navigationManagerImpl]->GetSessionController() currentItem]; |
1278 } | 1280 } |
1279 | 1281 |
1280 - (void)setShouldObserveInfoBarManager:(BOOL)shouldObserveInfoBarManager { | 1282 - (void)setShouldObserveInfoBarManager:(BOOL)shouldObserveInfoBarManager { |
1281 tabInfoBarObserver_->SetShouldObserveInfoBarManager( | 1283 tabInfoBarObserver_->SetShouldObserveInfoBarManager( |
1282 shouldObserveInfoBarManager); | 1284 shouldObserveInfoBarManager); |
1283 } | 1285 } |
1284 | 1286 |
1285 - (void)setShouldObserveFaviconChanges:(BOOL)shouldObserveFaviconChanges { | 1287 - (void)setShouldObserveFaviconChanges:(BOOL)shouldObserveFaviconChanges { |
1286 if (shouldObserveFaviconChanges) { | 1288 if (shouldObserveFaviconChanges) { |
1287 favicon::FaviconDriver* faviconDriver = | 1289 favicon::FaviconDriver* faviconDriver = |
(...skipping 30 matching lines...) Expand all Loading... | |
1318 | 1320 |
1319 - (BOOL)canGoForward { | 1321 - (BOOL)canGoForward { |
1320 return self.navigationManager && self.navigationManager->CanGoForward(); | 1322 return self.navigationManager && self.navigationManager->CanGoForward(); |
1321 } | 1323 } |
1322 | 1324 |
1323 - (void)goToItem:(const web::NavigationItem*)item { | 1325 - (void)goToItem:(const web::NavigationItem*)item { |
1324 DCHECK(item); | 1326 DCHECK(item); |
1325 | 1327 |
1326 if (self.navigationManager) { | 1328 if (self.navigationManager) { |
1327 CRWSessionController* sessionController = | 1329 CRWSessionController* sessionController = |
1328 self.navigationManager->GetSessionController(); | 1330 [self navigationManagerImpl]->GetSessionController(); |
1329 NSInteger itemIndex = [sessionController indexOfItem:item]; | 1331 NSInteger itemIndex = [sessionController indexOfItem:item]; |
1330 DCHECK_NE(itemIndex, NSNotFound); | 1332 DCHECK_NE(itemIndex, NSNotFound); |
1331 self.navigationManager->GoToIndex(itemIndex); | 1333 self.navigationManager->GoToIndex(itemIndex); |
1332 } | 1334 } |
1333 } | 1335 } |
1334 | 1336 |
1335 - (BOOL)openExternalURL:(const GURL&)url linkClicked:(BOOL)linkClicked { | 1337 - (BOOL)openExternalURL:(const GURL&)url linkClicked:(BOOL)linkClicked { |
1336 if (!externalAppLauncher_.get()) | 1338 if (!externalAppLauncher_.get()) |
1337 externalAppLauncher_.reset([[ExternalAppLauncher alloc] init]); | 1339 externalAppLauncher_.reset([[ExternalAppLauncher alloc] init]); |
1338 | 1340 |
(...skipping 29 matching lines...) Expand all Loading... | |
1368 | 1370 |
1369 if (!finalURL.is_valid()) { | 1371 if (!finalURL.is_valid()) { |
1370 return NO; | 1372 return NO; |
1371 } | 1373 } |
1372 } | 1374 } |
1373 | 1375 |
1374 if ([externalAppLauncher_ openURL:finalURL linkClicked:linkClicked]) { | 1376 if ([externalAppLauncher_ openURL:finalURL linkClicked:linkClicked]) { |
1375 // Clears pending navigation history after successfully launching the | 1377 // Clears pending navigation history after successfully launching the |
1376 // external app. | 1378 // external app. |
1377 DCHECK([self navigationManager]); | 1379 DCHECK([self navigationManager]); |
1378 [[self navigationManager]->GetSessionController() discardNonCommittedItems]; | 1380 [self navigationManager]->DiscardNonCommittedItems(); |
1379 // Ensure the UI reflects the current entry, not the just-discarded pending | 1381 // Ensure the UI reflects the current entry, not the just-discarded pending |
1380 // entry. | 1382 // entry. |
1381 [parentTabModel_ notifyTabChanged:self]; | 1383 [parentTabModel_ notifyTabChanged:self]; |
1382 return YES; | 1384 return YES; |
1383 } | 1385 } |
1384 return NO; | 1386 return NO; |
1385 } | 1387 } |
1386 | 1388 |
1387 - (void)webWillFinishHistoryNavigationFromEntry:(CRWSessionEntry*)fromEntry { | 1389 - (void)webWillFinishHistoryNavigationFromEntry:(CRWSessionEntry*)fromEntry { |
1388 [parentTabModel_ notifyTabChanged:self]; | 1390 [parentTabModel_ notifyTabChanged:self]; |
(...skipping 205 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1594 | 1596 |
1595 // TODO(crbug.com/228171): A hack in session_controller -addPendingItem | 1597 // TODO(crbug.com/228171): A hack in session_controller -addPendingItem |
1596 // discusses making tab responsible for distinguishing history stack | 1598 // discusses making tab responsible for distinguishing history stack |
1597 // navigation from new navigations. Because we want a new navigation here, we | 1599 // navigation from new navigations. Because we want a new navigation here, we |
1598 // use |PAGE_TRANSITION_FORM_SUBMIT|. When session_controller changes, so | 1600 // use |PAGE_TRANSITION_FORM_SUBMIT|. When session_controller changes, so |
1599 // should this. | 1601 // should this. |
1600 ui::PageTransition transition = | 1602 ui::PageTransition transition = |
1601 ui::PageTransitionFromInt(ui::PAGE_TRANSITION_FORM_SUBMIT); | 1603 ui::PageTransitionFromInt(ui::PAGE_TRANSITION_FORM_SUBMIT); |
1602 DCHECK([self navigationManager]); | 1604 DCHECK([self navigationManager]); |
1603 CRWSessionController* sessionController = | 1605 CRWSessionController* sessionController = |
1604 [self navigationManager]->GetSessionController(); | 1606 [self navigationManagerImpl]->GetSessionController(); |
1605 web::NavigationItem* lastUserItem = [sessionController lastUserItem]; | 1607 web::NavigationItem* lastUserItem = [sessionController lastUserItem]; |
1606 if (!lastUserItem) | 1608 if (!lastUserItem) |
1607 return; | 1609 return; |
1608 | 1610 |
1609 // |originalUrl| will be empty if a page was open by DOM. | 1611 // |originalUrl| will be empty if a page was open by DOM. |
1610 GURL reloadURL(lastUserItem->GetOriginalRequestURL()); | 1612 GURL reloadURL(lastUserItem->GetOriginalRequestURL()); |
1611 if (reloadURL.is_empty()) { | 1613 if (reloadURL.is_empty()) { |
1612 DCHECK(sessionController.openedByDOM); | 1614 DCHECK(sessionController.openedByDOM); |
1613 reloadURL = lastUserItem->GetVirtualURL(); | 1615 reloadURL = lastUserItem->GetVirtualURL(); |
1614 } | 1616 } |
(...skipping 18 matching lines...) Expand all Loading... | |
1633 DCHECK(U2FController_); | 1635 DCHECK(U2FController_); |
1634 [U2FController_ evaluateU2FResultFromU2FURL:URL webState:self.webState]; | 1636 [U2FController_ evaluateU2FResultFromU2FURL:URL webState:self.webState]; |
1635 } | 1637 } |
1636 | 1638 |
1637 #pragma mark - CRWWebDelegate and CRWWebStateObserver protocol methods. | 1639 #pragma mark - CRWWebDelegate and CRWWebStateObserver protocol methods. |
1638 | 1640 |
1639 // The web page wants to close its own window. | 1641 // The web page wants to close its own window. |
1640 - (void)webPageOrderedClose { | 1642 - (void)webPageOrderedClose { |
1641 // Only allow a web page to close itself if it was opened by DOM, or if there | 1643 // Only allow a web page to close itself if it was opened by DOM, or if there |
1642 // are no navigation items. | 1644 // are no navigation items. |
1643 DCHECK([[self navigationManager]->GetSessionController() isOpenedByDOM] || | 1645 DCHECK([[self navigationManagerImpl]->GetSessionController() isOpenedByDOM] || |
1644 ![self navigationManager]->GetItemCount()); | 1646 ![self navigationManager]->GetItemCount()); |
1645 [self closeThisTab]; | 1647 [self closeThisTab]; |
1646 } | 1648 } |
1647 | 1649 |
1648 // This method is invoked whenever the system believes the URL is about to | 1650 // This method is invoked whenever the system believes the URL is about to |
1649 // change, or immediately after any unexpected change of the URL. The apparent | 1651 // change, or immediately after any unexpected change of the URL. The apparent |
1650 // destination URL is included in the |url| parameter. | 1652 // destination URL is included in the |url| parameter. |
1651 // Warning: because of the present design it is possible for malicious websites | 1653 // Warning: because of the present design it is possible for malicious websites |
1652 // to invoke superflous instances of this delegate with artibrary URLs. | 1654 // to invoke superflous instances of this delegate with artibrary URLs. |
1653 // Ensure there is nothing here that could be a risk to the user beyond mild | 1655 // Ensure there is nothing here that could be a risk to the user beyond mild |
(...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1868 return YES; | 1870 return YES; |
1869 } | 1871 } |
1870 | 1872 |
1871 // Auto-open didn't work. Reset the auto-open flag. | 1873 // Auto-open didn't work. Reset the auto-open flag. |
1872 [metadata unsetShouldAutoOpenLinks]; | 1874 [metadata unsetShouldAutoOpenLinks]; |
1873 return NO; | 1875 return NO; |
1874 } | 1876 } |
1875 | 1877 |
1876 - (double)lastVisitedTimestamp { | 1878 - (double)lastVisitedTimestamp { |
1877 DCHECK([self navigationManager]); | 1879 DCHECK([self navigationManager]); |
1878 return | 1880 return [[self navigationManagerImpl]->GetSessionController() |
1879 [[self navigationManager]->GetSessionController() lastVisitedTimestamp]; | 1881 lastVisitedTimestamp]; |
1880 } | 1882 } |
1881 | 1883 |
1882 - (void)updateLastVisitedTimestamp { | 1884 - (void)updateLastVisitedTimestamp { |
1883 // Stores this information in self.history and it will be written into disc | 1885 // Stores this information in self.history and it will be written into disc |
1884 // with other information when needed. | 1886 // with other information when needed. |
1885 DCHECK([self navigationManager]); | 1887 DCHECK([self navigationManager]); |
1886 [[self navigationManager]->GetSessionController() | 1888 [[self navigationManagerImpl]->GetSessionController() |
1887 setLastVisitedTimestamp:[[NSDate date] timeIntervalSince1970]]; | 1889 setLastVisitedTimestamp:[[NSDate date] timeIntervalSince1970]]; |
1888 } | 1890 } |
1889 | 1891 |
1890 - (infobars::InfoBarManager*)infoBarManager { | 1892 - (infobars::InfoBarManager*)infoBarManager { |
1891 DCHECK(self.webState); | 1893 DCHECK(self.webState); |
1892 return InfoBarManagerImpl::FromWebState(self.webState); | 1894 return InfoBarManagerImpl::FromWebState(self.webState); |
1893 } | 1895 } |
1894 | 1896 |
1895 - (NSArray*)snapshotOverlays { | 1897 - (NSArray*)snapshotOverlays { |
1896 return [snapshotOverlayProvider_ snapshotOverlaysForTab:self]; | 1898 return [snapshotOverlayProvider_ snapshotOverlaysForTab:self]; |
(...skipping 335 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2232 | 2234 |
2233 - (TabModel*)parentTabModel { | 2235 - (TabModel*)parentTabModel { |
2234 return parentTabModel_; | 2236 return parentTabModel_; |
2235 } | 2237 } |
2236 | 2238 |
2237 - (FormInputAccessoryViewController*)inputAccessoryViewController { | 2239 - (FormInputAccessoryViewController*)inputAccessoryViewController { |
2238 return inputAccessoryViewController_.get(); | 2240 return inputAccessoryViewController_.get(); |
2239 } | 2241 } |
2240 | 2242 |
2241 @end | 2243 @end |
OLD | NEW |