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

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

Issue 2699833004: Add WebStateListOrderController to control WebState insertion. (Closed)
Patch Set: Address comments. Created 3 years, 10 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/chrome/browser/tabs/tab_model_order_controller.h" 5 #import "ios/chrome/browser/tabs/tab_model_order_controller.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 8
9 #if !defined(__has_feature) || !__has_feature(objc_arc) 9 #if !defined(__has_feature) || !__has_feature(objc_arc)
10 #error "This file requires ARC support." 10 #error "This file requires ARC support."
11 #endif 11 #endif
12 12
13 @implementation TabModelOrderController { 13 @implementation TabModelOrderController {
14 __weak TabModel* model_; 14 __weak TabModel* model_;
15 } 15 }
16 16
17 - (instancetype)initWithTabModel:(TabModel*)model { 17 - (instancetype)initWithTabModel:(TabModel*)model {
18 DCHECK(model); 18 DCHECK(model);
19 if ((self = [super init])) 19 if ((self = [super init]))
20 model_ = model; 20 model_ = model;
21 return self; 21 return self;
22 } 22 }
23 23
24 - (NSUInteger)insertionIndexForTab:(Tab*)newTab
25 transition:(ui::PageTransition)transition
26 opener:(Tab*)parentTab
27 adjacency:(TabModelOrderConstants::InsertionAdjacency)
28 adjacency {
29 if (model_.isEmpty)
30 return 0;
31
32 if (!parentTab)
33 return [self insertionIndexForAppending];
34
35 if (!PageTransitionCoreTypeIs(transition, ui::PAGE_TRANSITION_LINK))
36 return [self insertionIndexForAppending];
37
38 NSUInteger referenceIndex = [model_ indexOfTab:parentTab];
39 Tab* openLocation = [model_ lastTabWithOpener:parentTab];
40 if (openLocation)
41 referenceIndex = [model_ indexOfTab:openLocation];
42
43 DCHECK_NE(referenceIndex, static_cast<NSUInteger>(NSNotFound));
44 return referenceIndex + 1;
45 }
46
47 - (NSUInteger)insertionIndexForAppending {
48 return model_.count;
49 }
50
51 - (Tab*)determineNewSelectedTabFromRemovedTab:(Tab*)removedTab { 24 - (Tab*)determineNewSelectedTabFromRemovedTab:(Tab*)removedTab {
52 // While the desktop version of this code deals in indices, this deals in 25 // While the desktop version of this code deals in indices, this deals in
53 // actual tabs. As a result, the tab only needs to change iff the selection 26 // actual tabs. As a result, the tab only needs to change iff the selection
54 // is the tab that's removed. 27 // is the tab that's removed.
55 if (removedTab != model_.currentTab) 28 if (removedTab != model_.currentTab)
56 return model_.currentTab; 29 return model_.currentTab;
57 30
58 const NSUInteger numberOfTabs = model_.count; 31 const NSUInteger numberOfTabs = model_.count;
59 if (numberOfTabs < 2) 32 if (numberOfTabs < 2)
60 return nil; 33 return nil;
(...skipping 24 matching lines...) Expand all
85 NSUInteger selectedIndex = [model_ indexOfTab:removedTab]; 58 NSUInteger selectedIndex = [model_ indexOfTab:removedTab];
86 DCHECK(selectedIndex <= numberOfTabs - 1); 59 DCHECK(selectedIndex <= numberOfTabs - 1);
87 // Is the closing tab the last one? If so, return the penultimate tab. 60 // Is the closing tab the last one? If so, return the penultimate tab.
88 if (selectedIndex == numberOfTabs - 1) 61 if (selectedIndex == numberOfTabs - 1)
89 return [model_ tabAtIndex:selectedIndex - 1]; 62 return [model_ tabAtIndex:selectedIndex - 1];
90 // Otherwise return the next tab after the current tab. 63 // Otherwise return the next tab after the current tab.
91 return [model_ tabAtIndex:selectedIndex + 1]; 64 return [model_ tabAtIndex:selectedIndex + 1];
92 } 65 }
93 66
94 @end 67 @end
OLDNEW
« no previous file with comments | « ios/chrome/browser/tabs/tab_model_order_controller.h ('k') | ios/chrome/browser/tabs/tab_model_order_controller_unittest.mm » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698