Index: ios/chrome/browser/tabs/tab_model.mm |
diff --git a/ios/chrome/browser/tabs/tab_model.mm b/ios/chrome/browser/tabs/tab_model.mm |
index 96e8eef16dfcbe91fd34e1314dd67ec9ead3ad3f..7a9a5acb901ab75f10be7a1405637df59b774fd3 100644 |
--- a/ios/chrome/browser/tabs/tab_model.mm |
+++ b/ios/chrome/browser/tabs/tab_model.mm |
@@ -549,15 +549,23 @@ web::WebState* GetOpenerForWebState(const WebStateList& web_state_list, |
return tab; |
} |
-- (void)insertTab:(Tab*)tab atIndex:(NSUInteger)index { |
+- (void)insertTab:(Tab*)tab |
+ atIndex:(NSUInteger)index |
+ transition:(ui::PageTransition)transition { |
DCHECK(tab); |
DCHECK(![_tabRetainer containsObject:tab]); |
- DCHECK_LE(index, static_cast<NSUInteger>(INT_MAX)); |
+ |
+ int insertion_index; |
+ if (index == TabModelConstants::kTabPositionAutomatically) { |
+ insertion_index = WebStateList::kInvalidIndex; |
+ } else { |
+ DCHECK_LE(index, static_cast<NSUInteger>(INT_MAX)); |
+ insertion_index = static_cast<int>(index); |
+ } |
[_tabRetainer addObject:tab]; |
- _webStateList.InsertWebState( |
- static_cast<int>(index), tab.webState, |
- GetOpenerForWebState(_webStateList, tab.webState)); |
+ _webStateList.AddWebState(insertion_index, transition, tab.webState, |
+ GetOpenerForWebState(_webStateList, tab.webState)); |
// Persist the session due to a new tab being inserted. If this is a |
// background tab (will not become active), saving now will capture the |
@@ -568,6 +576,14 @@ web::WebState* GetOpenerForWebState(const WebStateList& web_state_list, |
++_newTabCount; |
} |
+- (void)insertTab:(Tab*)tab atIndex:(NSUInteger)index { |
+ DCHECK(tab); |
+ DCHECK(![_tabRetainer containsObject:tab]); |
+ DCHECK_LE(index, static_cast<NSUInteger>(INT_MAX)); |
+ |
+ [self insertTab:tab atIndex:index transition:ui::PAGE_TRANSITION_GENERATED]; |
+} |
+ |
- (void)moveTab:(Tab*)tab toIndex:(NSUInteger)toIndex { |
DCHECK([_tabRetainer containsObject:tab]); |
DCHECK_LE(toIndex, static_cast<NSUInteger>(INT_MAX)); |
@@ -857,39 +873,7 @@ web::WebState* GetOpenerForWebState(const WebStateList& web_state_list, |
browserState:_browserState]); |
[tab webController].webUsageEnabled = webUsageEnabled_; |
- if ((PageTransitionCoreTypeIs(params.transition_type, |
- ui::PAGE_TRANSITION_LINK)) && |
- (index == TabModelConstants::kTabPositionAutomatically)) { |
- DCHECK(!parentTab || [self indexOfTab:parentTab] != NSNotFound); |
- // Assume tabs opened via link clicks are part of the same "task" as their |
- // parent and are grouped together. |
- TabModelOrderConstants::InsertionAdjacency adjacency = |
- inBackground ? TabModelOrderConstants::kAdjacentAfter |
- : TabModelOrderConstants::kAdjacentBefore; |
- index = [_orderController insertionIndexForTab:tab |
- transition:params.transition_type |
- opener:parentTab |
- adjacency:adjacency]; |
- } else { |
- // For all other types, respect what was passed to us, normalizing values |
- // that are too large. |
- if (index >= self.count) |
- index = [_orderController insertionIndexForAppending]; |
- } |
- |
- if (PageTransitionCoreTypeIs(params.transition_type, |
- ui::PAGE_TRANSITION_TYPED) && |
- index == self.count) { |
- // Also, any tab opened at the end of the TabStrip with a "TYPED" |
- // transition inherit group as well. This covers the cases where the user |
- // creates a New Tab (e.g. Ctrl+T, or clicks the New Tab button), or types |
- // in the address bar and presses Alt+Enter. This allows for opening a new |
- // Tab to quickly look up something. When this Tab is closed, the old one |
- // is re-selected, not the next-adjacent. |
- // TODO(crbug.com/661988): Make this work. |
- } |
- |
- [self insertTab:tab atIndex:index]; |
+ [self insertTab:tab atIndex:index transition:params.transition_type]; |
if (!inBackground && _tabUsageRecorder) |
_tabUsageRecorder->TabCreatedForSelection(tab); |
@@ -1087,7 +1071,7 @@ web::WebState* GetOpenerForWebState(const WebStateList& web_state_list, |
referrer:referrer |
windowName:windowName |
opener:nil |
- atIndex:[_orderController insertionIndexForAppending]]; |
+ atIndex:self.count]; |
} |
- (Tab*)insertTabWithURL:(const GURL&)URL |