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