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

Side by Side Diff: ios/chrome/browser/tabs/tab_model.mm

Issue 2720983002: Remove windowName from CRWSessionController. (Closed)
Patch Set: Address comments. 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
« no previous file with comments | « ios/chrome/browser/tabs/tab_model.h ('k') | ios/chrome/browser/tabs/tab_model_unittest.mm » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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/chrome/browser/tabs/tab_model.h" 5 #import "ios/chrome/browser/tabs/tab_model.h"
6 6
7 #include <cstdint> 7 #include <cstdint>
8 #include <utility> 8 #include <utility>
9 #include <vector> 9 #include <vector>
10 10
(...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after
187 // Used to ensure thread-safety of the certificate policy management code. 187 // Used to ensure thread-safety of the certificate policy management code.
188 base::CancelableTaskTracker _clearPoliciesTaskTracker; 188 base::CancelableTaskTracker _clearPoliciesTaskTracker;
189 } 189 }
190 190
191 // Session window for the contents of the tab model. 191 // Session window for the contents of the tab model.
192 @property(nonatomic, readonly) SessionWindowIOS* windowForSavingSession; 192 @property(nonatomic, readonly) SessionWindowIOS* windowForSavingSession;
193 193
194 // Returns YES if tab URL host indicates that tab is an NTP tab. 194 // Returns YES if tab URL host indicates that tab is an NTP tab.
195 - (BOOL)isNTPTab:(Tab*)tab; 195 - (BOOL)isNTPTab:(Tab*)tab;
196 196
197 // Opens a tab at the specified URL and registers its JS-supplied window name if
198 // appropriate. For certain transition types, will consult the order controller
199 // and thus may only use |index| as a hint. |parentTab| may be nil if there
200 // is no parent associated with this new tab, as may |windowName| if not
201 // applicable. |openedByDOM| is YES if the page was opened by DOM.
202 // The |index| parameter can be set to
203 // TabModelConstants::kTabPositionAutomatically if the caller doesn't have a
204 // preference for the position of the tab.
205 - (Tab*)insertTabWithLoadParams:
206 (const web::NavigationManager::WebLoadParams&)params
207 windowName:(NSString*)windowName
208 opener:(Tab*)parentTab
209 openedByDOM:(BOOL)openedByDOM
210 atIndex:(NSUInteger)index
211 inBackground:(BOOL)inBackground;
212
213 // Call to switch the selected tab. Broadcasts about the change in selection. 197 // Call to switch the selected tab. Broadcasts about the change in selection.
214 // It's ok for |newTab| to be nil in case the last tab is going away. In that 198 // It's ok for |newTab| to be nil in case the last tab is going away. In that
215 // case, the "tab deselected" notification gets sent, but no corresponding 199 // case, the "tab deselected" notification gets sent, but no corresponding
216 // "tab selected" notification is sent. |persist| indicates whether or not 200 // "tab selected" notification is sent. |persist| indicates whether or not
217 // the tab's state should be persisted in history upon switching. 201 // the tab's state should be persisted in history upon switching.
218 - (void)changeSelectedTabFrom:(Tab*)oldTab 202 - (void)changeSelectedTabFrom:(Tab*)oldTab
219 to:(Tab*)newTab 203 to:(Tab*)newTab
220 persistState:(BOOL)persist; 204 persistState:(BOOL)persist;
221 205
222 // Tells the snapshot cache the adjacent tab session ids. 206 // Tells the snapshot cache the adjacent tab session ids.
(...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after
418 402
419 - (NSUInteger)indexOfTab:(Tab*)tab { 403 - (NSUInteger)indexOfTab:(Tab*)tab {
420 int index = _webStateList.GetIndexOfWebState(tab.webState); 404 int index = _webStateList.GetIndexOfWebState(tab.webState);
421 if (index == WebStateList::kInvalidIndex) 405 if (index == WebStateList::kInvalidIndex)
422 return NSNotFound; 406 return NSNotFound;
423 407
424 DCHECK_GE(index, 0); 408 DCHECK_GE(index, 0);
425 return static_cast<NSUInteger>(index); 409 return static_cast<NSUInteger>(index);
426 } 410 }
427 411
428 - (Tab*)tabWithWindowName:(NSString*)windowName {
429 if (!windowName)
430 return nil;
431 for (Tab* tab in self) {
432 if ([windowName isEqualToString:tab.windowName]) {
433 return tab;
434 }
435 }
436 return nil;
437 }
438
439 - (Tab*)nextTabWithOpener:(Tab*)tab afterTab:(Tab*)afterTab { 412 - (Tab*)nextTabWithOpener:(Tab*)tab afterTab:(Tab*)afterTab {
440 int startIndex = WebStateList::kInvalidIndex; 413 int startIndex = WebStateList::kInvalidIndex;
441 if (afterTab) 414 if (afterTab)
442 startIndex = _webStateList.GetIndexOfWebState(afterTab.webState); 415 startIndex = _webStateList.GetIndexOfWebState(afterTab.webState);
443 416
444 if (startIndex == WebStateList::kInvalidIndex) 417 if (startIndex == WebStateList::kInvalidIndex)
445 startIndex = _webStateList.GetIndexOfWebState(tab.webState); 418 startIndex = _webStateList.GetIndexOfWebState(tab.webState);
446 419
447 const int index = _webStateList.GetIndexOfNextWebStateOpenedBy( 420 const int index = _webStateList.GetIndexOfNextWebStateOpenedBy(
448 tab.webState, startIndex, false); 421 tab.webState, startIndex, false);
(...skipping 20 matching lines...) Expand all
469 442
470 - (Tab*)openerOfTab:(Tab*)tab { 443 - (Tab*)openerOfTab:(Tab*)tab {
471 int index = _webStateList.GetIndexOfWebState(tab.webState); 444 int index = _webStateList.GetIndexOfWebState(tab.webState);
472 if (index == WebStateList::kInvalidIndex) 445 if (index == WebStateList::kInvalidIndex)
473 return nil; 446 return nil;
474 447
475 web::WebState* opener = _webStateList.GetOpenerOfWebStateAt(index); 448 web::WebState* opener = _webStateList.GetOpenerOfWebStateAt(index);
476 return opener ? LegacyTabHelper::GetTabForWebState(opener) : nil; 449 return opener ? LegacyTabHelper::GetTabForWebState(opener) : nil;
477 } 450 }
478 451
479 - (Tab*)insertOrUpdateTabWithURL:(const GURL&)URL 452 - (Tab*)insertTabWithURL:(const GURL&)URL
480 referrer:(const web::Referrer&)referrer 453 referrer:(const web::Referrer&)referrer
481 transition:(ui::PageTransition)transition 454 transition:(ui::PageTransition)transition
482 windowName:(NSString*)windowName 455 opener:(Tab*)parentTab
483 opener:(Tab*)parentTab 456 openedByDOM:(BOOL)openedByDOM
484 openedByDOM:(BOOL)openedByDOM 457 atIndex:(NSUInteger)index
485 atIndex:(NSUInteger)index 458 inBackground:(BOOL)inBackground {
486 inBackground:(BOOL)inBackground {
487 web::NavigationManager::WebLoadParams params(URL); 459 web::NavigationManager::WebLoadParams params(URL);
488 params.referrer = referrer; 460 params.referrer = referrer;
489 params.transition_type = transition; 461 params.transition_type = transition;
490 return [self insertOrUpdateTabWithLoadParams:params 462 return [self insertTabWithLoadParams:params
491 windowName:windowName 463 opener:parentTab
492 opener:parentTab 464 openedByDOM:openedByDOM
493 openedByDOM:openedByDOM 465 atIndex:index
494 atIndex:index 466 inBackground:inBackground];
495 inBackground:inBackground];
496 } 467 }
497 468
498 - (Tab*)insertOrUpdateTabWithLoadParams: 469 - (Tab*)insertTabWithLoadParams:
499 (const web::NavigationManager::WebLoadParams&)loadParams 470 (const web::NavigationManager::WebLoadParams&)params
500 windowName:(NSString*)windowName 471 opener:(Tab*)parentTab
501 opener:(Tab*)parentTab 472 openedByDOM:(BOOL)openedByDOM
502 openedByDOM:(BOOL)openedByDOM 473 atIndex:(NSUInteger)index
503 atIndex:(NSUInteger)index 474 inBackground:(BOOL)inBackground {
504 inBackground:(BOOL)inBackground { 475 DCHECK(_browserState);
505 // Find the tab for the given window name. If found, load with 476 base::scoped_nsobject<Tab> tab([[Tab alloc] initWithBrowserState:_browserState
506 // |originalParams| in it, otherwise create a new tab for it. 477 opener:parentTab
507 Tab* tab = [self tabWithWindowName:windowName]; 478 openedByDOM:openedByDOM
508 if (tab) { 479 model:self]);
509 // Updating a tab shouldn't be possible with web usage suspended, since 480 [tab webController].webUsageEnabled = webUsageEnabled_;
510 // whatever page would be driving it should also be suspended.
511 DCHECK(webUsageEnabled_);
512 481
513 web::NavigationManager::WebLoadParams updatedParams(loadParams); 482 [self insertTab:tab
514 updatedParams.is_renderer_initiated = (parentTab != nil); 483 atIndex:index
515 [tab.webController loadWithParams:updatedParams]; 484 opener:parentTab
485 transition:params.transition_type];
516 486
517 // Force the page to start loading even if it's in the background. 487 if (!inBackground && _tabUsageRecorder)
518 [tab.webController triggerPendingLoad]; 488 _tabUsageRecorder->TabCreatedForSelection(tab);
519 489
520 if (!inBackground) 490 [[tab webController] loadWithParams:params];
521 [self setCurrentTab:tab]; 491 // Force the page to start loading even if it's in the background.
522 } else { 492 if (webUsageEnabled_)
523 tab = [self insertTabWithLoadParams:loadParams 493 [[tab webController] triggerPendingLoad];
524 windowName:windowName 494 NSDictionary* userInfo = @{
525 opener:parentTab 495 kTabModelTabKey : tab,
526 openedByDOM:openedByDOM 496 kTabModelOpenInBackgroundKey : @(inBackground),
527 atIndex:index 497 };
528 inBackground:inBackground]; 498 [[NSNotificationCenter defaultCenter]
529 } 499 postNotificationName:kTabModelNewTabWillOpenNotification
500 object:self
501 userInfo:userInfo];
502
503 if (!inBackground)
504 [self setCurrentTab:tab];
530 505
531 return tab; 506 return tab;
532 } 507 }
533 508
534 - (Tab*)insertBlankTabWithTransition:(ui::PageTransition)transition 509 - (Tab*)insertBlankTabWithTransition:(ui::PageTransition)transition
535 opener:(Tab*)parentTab 510 opener:(Tab*)parentTab
536 openedByDOM:(BOOL)openedByDOM 511 openedByDOM:(BOOL)openedByDOM
537 atIndex:(NSUInteger)index 512 atIndex:(NSUInteger)index
538 inBackground:(BOOL)inBackground { 513 inBackground:(BOOL)inBackground {
539 GURL emptyURL; 514 GURL emptyURL;
540 web::NavigationManager::WebLoadParams params(emptyURL); 515 web::NavigationManager::WebLoadParams params(emptyURL);
541 params.transition_type = transition; 516 params.transition_type = transition;
542 // Tabs open by DOM are always renderer initiated. 517 // Tabs open by DOM are always renderer initiated.
543 params.is_renderer_initiated = openedByDOM; 518 params.is_renderer_initiated = openedByDOM;
544 return [self insertTabWithLoadParams:params 519 return [self insertTabWithLoadParams:params
545 windowName:nil
546 opener:parentTab 520 opener:parentTab
547 openedByDOM:openedByDOM 521 openedByDOM:openedByDOM
548 atIndex:index 522 atIndex:index
549 inBackground:inBackground]; 523 inBackground:inBackground];
550 } 524 }
551 525
552 - (Tab*)insertTabWithWebState:(std::unique_ptr<web::WebState>)webState 526 - (Tab*)insertTabWithWebState:(std::unique_ptr<web::WebState>)webState
553 atIndex:(NSUInteger)index { 527 atIndex:(NSUInteger)index {
554 DCHECK(_browserState); 528 DCHECK(_browserState);
555 DCHECK_EQ(webState->GetBrowserState(), _browserState); 529 DCHECK_EQ(webState->GetBrowserState(), _browserState);
(...skipping 314 matching lines...) Expand 10 before | Expand all | Expand 10 after
870 } 844 }
871 window.selectedIndex = [self indexOfTab:_currentTab]; 845 window.selectedIndex = [self indexOfTab:_currentTab];
872 return window; 846 return window;
873 } 847 }
874 848
875 - (BOOL)isNTPTab:(Tab*)tab { 849 - (BOOL)isNTPTab:(Tab*)tab {
876 std::string host = tab.url.host(); 850 std::string host = tab.url.host();
877 return host == kChromeUINewTabHost || host == kChromeUIBookmarksHost; 851 return host == kChromeUINewTabHost || host == kChromeUIBookmarksHost;
878 } 852 }
879 853
880 - (Tab*)insertTabWithLoadParams:
881 (const web::NavigationManager::WebLoadParams&)params
882 windowName:(NSString*)windowName
883 opener:(Tab*)parentTab
884 openedByDOM:(BOOL)openedByDOM
885 atIndex:(NSUInteger)index
886 inBackground:(BOOL)inBackground {
887 DCHECK(_browserState);
888 base::scoped_nsobject<Tab> tab([[Tab alloc]
889 initWithWindowName:windowName
890 opener:parentTab
891 openedByDOM:openedByDOM
892 model:self
893 browserState:_browserState]);
894 [tab webController].webUsageEnabled = webUsageEnabled_;
895
896 [self insertTab:tab
897 atIndex:index
898 opener:parentTab
899 transition:params.transition_type];
900
901 if (!inBackground && _tabUsageRecorder)
902 _tabUsageRecorder->TabCreatedForSelection(tab);
903
904 [[tab webController] loadWithParams:params];
905 // Force the page to start loading even if it's in the background.
906 if (webUsageEnabled_)
907 [[tab webController] triggerPendingLoad];
908 NSDictionary* userInfo = @{
909 kTabModelTabKey : tab,
910 kTabModelOpenInBackgroundKey : @(inBackground),
911 };
912 [[NSNotificationCenter defaultCenter]
913 postNotificationName:kTabModelNewTabWillOpenNotification
914 object:self
915 userInfo:userInfo];
916
917 if (!inBackground)
918 [self setCurrentTab:tab];
919
920 return tab;
921 }
922
923 - (void)changeSelectedTabFrom:(Tab*)oldTab 854 - (void)changeSelectedTabFrom:(Tab*)oldTab
924 to:(Tab*)newTab 855 to:(Tab*)newTab
925 persistState:(BOOL)persist { 856 persistState:(BOOL)persist {
926 if (oldTab) { 857 if (oldTab) {
927 // Save state, such as scroll position, before switching tabs. 858 // Save state, such as scroll position, before switching tabs.
928 if (oldTab != newTab && persist) 859 if (oldTab != newTab && persist)
929 [oldTab recordStateInHistory]; 860 [oldTab recordStateInHistory];
930 [self postNotificationName:kTabModelTabDeselectedNotification 861 [self postNotificationName:kTabModelTabDeselectedNotification
931 withTab:oldTab]; 862 withTab:oldTab];
932 } 863 }
(...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after
1103 - (void)applicationWillEnterForeground:(NSNotification*)notify { 1034 - (void)applicationWillEnterForeground:(NSNotification*)notify {
1104 if (_tabUsageRecorder) { 1035 if (_tabUsageRecorder) {
1105 _tabUsageRecorder->AppWillEnterForeground(); 1036 _tabUsageRecorder->AppWillEnterForeground();
1106 } 1037 }
1107 } 1038 }
1108 1039
1109 @end 1040 @end
1110 1041
1111 @implementation TabModel (PrivateForTestingOnly) 1042 @implementation TabModel (PrivateForTestingOnly)
1112 1043
1113 - (Tab*)addTabWithURL:(const GURL&)URL 1044 - (Tab*)addTabWithURL:(const GURL&)URL referrer:(const web::Referrer&)referrer {
1114 referrer:(const web::Referrer&)referrer
1115 windowName:(NSString*)windowName {
1116 return [self insertTabWithURL:URL 1045 return [self insertTabWithURL:URL
1117 referrer:referrer 1046 referrer:referrer
1118 windowName:windowName
1119 opener:nil 1047 opener:nil
1120 atIndex:self.count]; 1048 atIndex:self.count];
1121 } 1049 }
1122 1050
1123 - (Tab*)insertTabWithURL:(const GURL&)URL 1051 - (Tab*)insertTabWithURL:(const GURL&)URL
1124 referrer:(const web::Referrer&)referrer 1052 referrer:(const web::Referrer&)referrer
1125 windowName:(NSString*)windowName
1126 opener:(Tab*)parentTab 1053 opener:(Tab*)parentTab
1127 atIndex:(NSUInteger)index { 1054 atIndex:(NSUInteger)index {
1128 DCHECK(_browserState); 1055 DCHECK(_browserState);
1129 base::scoped_nsobject<Tab> tab([[Tab alloc] 1056 base::scoped_nsobject<Tab> tab([[Tab alloc] initWithBrowserState:_browserState
1130 initWithWindowName:windowName 1057 opener:parentTab
1131 opener:parentTab 1058 openedByDOM:NO
1132 openedByDOM:NO 1059 model:self]);
1133 model:self
1134 browserState:_browserState]);
1135 web::NavigationManager::WebLoadParams params(URL); 1060 web::NavigationManager::WebLoadParams params(URL);
1136 params.referrer = referrer; 1061 params.referrer = referrer;
1137 params.transition_type = ui::PAGE_TRANSITION_TYPED; 1062 params.transition_type = ui::PAGE_TRANSITION_TYPED;
1138 [[tab webController] loadWithParams:params]; 1063 [[tab webController] loadWithParams:params];
1139 [tab webController].webUsageEnabled = webUsageEnabled_; 1064 [tab webController].webUsageEnabled = webUsageEnabled_;
1140 [self insertTab:tab atIndex:index opener:parentTab]; 1065 [self insertTab:tab atIndex:index opener:parentTab];
1141 return tab; 1066 return tab;
1142 } 1067 }
1143 1068
1144 @end 1069 @end
OLDNEW
« no previous file with comments | « ios/chrome/browser/tabs/tab_model.h ('k') | ios/chrome/browser/tabs/tab_model_unittest.mm » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698