Commit 43e756dd authored by Mark Cogan's avatar Mark Cogan Committed by Commit Bot

[iOS] Move dispatcher to Browser.

As the first step in making coordinators more consistent in their
public APIs and internal usage of Browser, CommandDispatcher is moving
to be created and owned by Browser instances.

Note that this still leaves us with two dispatchers per scene; one for
regular tabs and one for OTR tabs. Untangling that is a separate (and
more painful) effort.

This change should have no direct side effects

Change-Id: I81211a33616cf3c47cc8c286da09166bf1003d8d
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1940244
Commit-Queue: Mark Cogan <marq@chromium.org>
Reviewed-by: default avatarStepan Khapugin <stkhapugin@chromium.org>
Cr-Commit-Position: refs/heads/master@{#720017}
parent 4e25b3ef
...@@ -16,6 +16,7 @@ source_set("main") { ...@@ -16,6 +16,7 @@ source_set("main") {
"//ios/chrome/browser/browser_state", "//ios/chrome/browser/browser_state",
"//ios/chrome/browser/sessions:serialisation", "//ios/chrome/browser/sessions:serialisation",
"//ios/chrome/browser/tabs", "//ios/chrome/browser/tabs",
"//ios/chrome/browser/ui/commands",
"//ios/chrome/browser/web_state_list", "//ios/chrome/browser/web_state_list",
] ]
configs += [ "//build/config/compiler:enable_arc" ] configs += [ "//build/config/compiler:enable_arc" ]
...@@ -34,6 +35,7 @@ source_set("test_support") { ...@@ -34,6 +35,7 @@ source_set("test_support") {
"//base", "//base",
"//ios/chrome/browser/browser_state", "//ios/chrome/browser/browser_state",
"//ios/chrome/browser/tabs", "//ios/chrome/browser/tabs",
"//ios/chrome/browser/ui/commands",
"//ios/chrome/browser/web_state_list", "//ios/chrome/browser/web_state_list",
] ]
configs += [ "//build/config/compiler:enable_arc" ] configs += [ "//build/config/compiler:enable_arc" ]
......
...@@ -11,6 +11,7 @@ ...@@ -11,6 +11,7 @@
#include "base/supports_user_data.h" #include "base/supports_user_data.h"
class BrowserObserver; class BrowserObserver;
@class CommandDispatcher;
@class TabModel; @class TabModel;
class WebStateList; class WebStateList;
...@@ -40,6 +41,9 @@ class Browser : public base::SupportsUserData { ...@@ -40,6 +41,9 @@ class Browser : public base::SupportsUserData {
// Accessor for the WebStateList. // Accessor for the WebStateList.
virtual WebStateList* GetWebStateList() const = 0; virtual WebStateList* GetWebStateList() const = 0;
// Accessor for the CommandDispatcher.
virtual CommandDispatcher* GetCommandDispatcher() const = 0;
// Adds and removes observers. // Adds and removes observers.
virtual void AddObserver(BrowserObserver* observer) = 0; virtual void AddObserver(BrowserObserver* observer) = 0;
virtual void RemoveObserver(BrowserObserver* observer) = 0; virtual void RemoveObserver(BrowserObserver* observer) = 0;
......
...@@ -11,6 +11,7 @@ ...@@ -11,6 +11,7 @@
#include "base/macros.h" #include "base/macros.h"
#include "base/observer_list.h" #include "base/observer_list.h"
@class SceneState;
@class TabModel; @class TabModel;
class WebStateList; class WebStateList;
class WebStateListDelegate; class WebStateListDelegate;
...@@ -26,14 +27,16 @@ class ChromeBrowserState; ...@@ -26,14 +27,16 @@ class ChromeBrowserState;
// See src/docs/ios/objects.md for more information. // See src/docs/ios/objects.md for more information.
class BrowserImpl : public Browser { class BrowserImpl : public Browser {
public: public:
// Constructs a BrowserImpl attached to |browser_state|. // Constructs a BrowserImpl attached to |browser_state| in the context of
explicit BrowserImpl(ios::ChromeBrowserState* browser_state); // |scene_state|
BrowserImpl(ios::ChromeBrowserState* browser_state);
~BrowserImpl() override; ~BrowserImpl() override;
// Browser. // Browser.
ios::ChromeBrowserState* GetBrowserState() const override; ios::ChromeBrowserState* GetBrowserState() const override;
TabModel* GetTabModel() const override; TabModel* GetTabModel() const override;
WebStateList* GetWebStateList() const override; WebStateList* GetWebStateList() const override;
CommandDispatcher* GetCommandDispatcher() const override;
void AddObserver(BrowserObserver* observer) override; void AddObserver(BrowserObserver* observer) override;
void RemoveObserver(BrowserObserver* observer) override; void RemoveObserver(BrowserObserver* observer) override;
...@@ -48,6 +51,7 @@ class BrowserImpl : public Browser { ...@@ -48,6 +51,7 @@ class BrowserImpl : public Browser {
__strong TabModel* tab_model_; __strong TabModel* tab_model_;
std::unique_ptr<WebStateListDelegate> web_state_list_delegate_; std::unique_ptr<WebStateListDelegate> web_state_list_delegate_;
std::unique_ptr<WebStateList> web_state_list_; std::unique_ptr<WebStateList> web_state_list_;
__strong CommandDispatcher* command_dispatcher_;
base::ObserverList<BrowserObserver, /* check_empty= */ true> observers_; base::ObserverList<BrowserObserver, /* check_empty= */ true> observers_;
DISALLOW_COPY_AND_ASSIGN(BrowserImpl); DISALLOW_COPY_AND_ASSIGN(BrowserImpl);
......
...@@ -11,6 +11,7 @@ ...@@ -11,6 +11,7 @@
#import "ios/chrome/browser/main/browser_web_state_list_delegate.h" #import "ios/chrome/browser/main/browser_web_state_list_delegate.h"
#import "ios/chrome/browser/sessions/session_service_ios.h" #import "ios/chrome/browser/sessions/session_service_ios.h"
#import "ios/chrome/browser/tabs/tab_model.h" #import "ios/chrome/browser/tabs/tab_model.h"
#import "ios/chrome/browser/ui/commands/command_dispatcher.h"
#import "ios/chrome/browser/web_state_list/web_state_list.h" #import "ios/chrome/browser/web_state_list/web_state_list.h"
#import "ios/chrome/browser/web_state_list/web_state_list_delegate.h" #import "ios/chrome/browser/web_state_list/web_state_list_delegate.h"
...@@ -19,7 +20,8 @@ ...@@ -19,7 +20,8 @@
#endif #endif
BrowserImpl::BrowserImpl(ios::ChromeBrowserState* browser_state) BrowserImpl::BrowserImpl(ios::ChromeBrowserState* browser_state)
: browser_state_(browser_state) { : browser_state_(browser_state),
command_dispatcher_([[CommandDispatcher alloc] init]) {
DCHECK(browser_state_); DCHECK(browser_state_);
web_state_list_delegate_ = std::make_unique<BrowserWebStateListDelegate>(); web_state_list_delegate_ = std::make_unique<BrowserWebStateListDelegate>();
...@@ -60,6 +62,10 @@ WebStateList* BrowserImpl::GetWebStateList() const { ...@@ -60,6 +62,10 @@ WebStateList* BrowserImpl::GetWebStateList() const {
return web_state_list_.get(); return web_state_list_.get();
} }
CommandDispatcher* BrowserImpl::GetCommandDispatcher() const {
return command_dispatcher_;
}
void BrowserImpl::AddObserver(BrowserObserver* observer) { void BrowserImpl::AddObserver(BrowserObserver* observer) {
observers_.AddObserver(observer); observers_.AddObserver(observer);
} }
......
...@@ -27,6 +27,7 @@ class TestBrowser : public Browser { ...@@ -27,6 +27,7 @@ class TestBrowser : public Browser {
ios::ChromeBrowserState* GetBrowserState() const override; ios::ChromeBrowserState* GetBrowserState() const override;
TabModel* GetTabModel() const override; TabModel* GetTabModel() const override;
WebStateList* GetWebStateList() const override; WebStateList* GetWebStateList() const override;
CommandDispatcher* GetCommandDispatcher() const override;
void AddObserver(BrowserObserver* observer) override; void AddObserver(BrowserObserver* observer) override;
void RemoveObserver(BrowserObserver* observer) override; void RemoveObserver(BrowserObserver* observer) override;
...@@ -34,6 +35,7 @@ class TestBrowser : public Browser { ...@@ -34,6 +35,7 @@ class TestBrowser : public Browser {
ios::ChromeBrowserState* browser_state_ = nullptr; ios::ChromeBrowserState* browser_state_ = nullptr;
TabModel* tab_model_ = nil; TabModel* tab_model_ = nil;
WebStateList* web_state_list_ = nullptr; WebStateList* web_state_list_ = nullptr;
__strong CommandDispatcher* command_dispatcher_ = nil;
base::ObserverList<BrowserObserver, /* check_empty= */ true> observers_; base::ObserverList<BrowserObserver, /* check_empty= */ true> observers_;
DISALLOW_COPY_AND_ASSIGN(TestBrowser); DISALLOW_COPY_AND_ASSIGN(TestBrowser);
......
...@@ -6,6 +6,7 @@ ...@@ -6,6 +6,7 @@
#include "ios/chrome/browser/main/browser_observer.h" #include "ios/chrome/browser/main/browser_observer.h"
#import "ios/chrome/browser/tabs/tab_model.h" #import "ios/chrome/browser/tabs/tab_model.h"
#import "ios/chrome/browser/ui/commands/command_dispatcher.h"
#if !defined(__has_feature) || !__has_feature(objc_arc) #if !defined(__has_feature) || !__has_feature(objc_arc)
#error "This file requires ARC support." #error "This file requires ARC support."
...@@ -15,11 +16,14 @@ TestBrowser::TestBrowser(ios::ChromeBrowserState* browser_state, ...@@ -15,11 +16,14 @@ TestBrowser::TestBrowser(ios::ChromeBrowserState* browser_state,
TabModel* tab_model) TabModel* tab_model)
: browser_state_(browser_state), : browser_state_(browser_state),
tab_model_(tab_model), tab_model_(tab_model),
web_state_list_(tab_model_.webStateList) {} web_state_list_(tab_model_.webStateList),
command_dispatcher_([[CommandDispatcher alloc] init]) {}
TestBrowser::TestBrowser(ios::ChromeBrowserState* browser_state, TestBrowser::TestBrowser(ios::ChromeBrowserState* browser_state,
WebStateList* web_state_list) WebStateList* web_state_list)
: browser_state_(browser_state), web_state_list_(web_state_list) {} : browser_state_(browser_state),
web_state_list_(web_state_list),
command_dispatcher_([[CommandDispatcher alloc] init]) {}
TestBrowser::~TestBrowser() { TestBrowser::~TestBrowser() {
for (auto& observer : observers_) { for (auto& observer : observers_) {
...@@ -39,6 +43,10 @@ WebStateList* TestBrowser::GetWebStateList() const { ...@@ -39,6 +43,10 @@ WebStateList* TestBrowser::GetWebStateList() const {
return web_state_list_; return web_state_list_;
} }
CommandDispatcher* TestBrowser::GetCommandDispatcher() const {
return command_dispatcher_;
}
void TestBrowser::AddObserver(BrowserObserver* observer) { void TestBrowser::AddObserver(BrowserObserver* observer) {
observers_.AddObserver(observer); observers_.AddObserver(observer);
} }
......
...@@ -69,8 +69,8 @@ ...@@ -69,8 +69,8 @@
// Whether the coordinator is started. // Whether the coordinator is started.
@property(nonatomic, assign, getter=isStarted) BOOL started; @property(nonatomic, assign, getter=isStarted) BOOL started;
// Handles command dispatching. // Handles command dispatching, provided by the Browser instance.
@property(nonatomic, strong) CommandDispatcher* dispatcher; @property(nonatomic, weak) CommandDispatcher* dispatcher;
// The coordinator managing the container view controller. // The coordinator managing the container view controller.
@property(nonatomic, strong) @property(nonatomic, strong)
...@@ -158,13 +158,20 @@ ...@@ -158,13 +158,20 @@
#pragma mark - ChromeCoordinator #pragma mark - ChromeCoordinator
- (instancetype)initWithBaseViewController:(UIViewController*)viewController
browser:(Browser*)browser {
if (self = [super initWithBaseViewController:viewController
browser:browser]) {
_dispatcher = browser->GetCommandDispatcher();
}
return self;
}
- (void)start { - (void)start {
if (self.started) if (self.started)
return; return;
DCHECK(self.browserState); DCHECK(self.browserState);
DCHECK(!self.viewController); DCHECK(!self.viewController);
self.dispatcher = [[CommandDispatcher alloc] init];
[self startBrowserContainer]; [self startBrowserContainer];
[self createViewController]; [self createViewController];
[self startChildCoordinators]; [self startChildCoordinators];
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment