1// Copyright 2020 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#import "ios/chrome/browser/ui/tab_switcher/tab_strip/tab_strip_coordinator.h" 6 7#include "base/check_op.h" 8#import "ios/chrome/browser/browser_state/chrome_browser_state.h" 9#import "ios/chrome/browser/main/browser.h" 10#import "ios/chrome/browser/ui/tab_switcher/tab_strip/tab_strip_mediator.h" 11#import "ios/chrome/browser/ui/tab_switcher/tab_strip/tab_strip_view_controller.h" 12#import "ios/chrome/browser/web_state_list/web_state_list.h" 13 14#if !defined(__has_feature) || !__has_feature(objc_arc) 15#error "This file requires ARC support." 16#endif 17 18@protocol TabStripContaining; 19 20@interface TabStripCoordinator () 21 22// Mediator for updating the TabStrip when the WebStateList changes. 23@property(nonatomic, strong) TabStripMediator* mediator; 24 25@property TabStripViewController* tabStripViewController; 26 27@end 28 29@implementation TabStripCoordinator 30 31#pragma mark - ChromeCoordinator 32 33- (instancetype)initWithBrowser:(Browser*)browser { 34 DCHECK(browser); 35 return [super initWithBaseViewController:nil browser:browser]; 36} 37 38- (void)start { 39 if (self.tabStripViewController) 40 return; 41 42 self.tabStripViewController = [[TabStripViewController alloc] init]; 43 if (@available(iOS 13, *)) { 44 self.tabStripViewController.overrideUserInterfaceStyle = 45 self.browser->GetBrowserState()->IsOffTheRecord() 46 ? UIUserInterfaceStyleDark 47 : UIUserInterfaceStyleUnspecified; 48 } 49 50 self.mediator = 51 [[TabStripMediator alloc] initWithConsumer:self.tabStripViewController]; 52 self.mediator.webStateList = self.browser->GetWebStateList(); 53 54 self.tabStripViewController.faviconDataSource = self.mediator; 55} 56 57- (void)stop { 58 [self.mediator disconnect]; 59 self.mediator = nil; 60 self.tabStripViewController = nil; 61} 62 63#pragma mark - Properties 64 65- (UIViewController*)viewController { 66 return self.tabStripViewController; 67} 68 69- (void)setLongPressDelegate:(id<PopupMenuLongPressDelegate>)longPressDelegate { 70 _longPressDelegate = longPressDelegate; 71} 72 73- (UIView<TabStripContaining>*)view { 74 return static_cast<UIView<TabStripContaining>*>(self.viewController.view); 75} 76 77#pragma mark - Public 78 79- (void)hideTabStrip:(BOOL)hidden { 80 self.tabStripViewController.view.hidden = hidden; 81} 82 83@end 84