Index: ios/chrome/browser/ui/browser_view_controller.mm |
diff --git a/ios/chrome/browser/ui/browser_view_controller.mm b/ios/chrome/browser/ui/browser_view_controller.mm |
index 0f622e410015f4fb09f9aaefd66ceb7c2a65f59d..83c9169509dbf9898081739f550efcc1d2a1aa58 100644 |
--- a/ios/chrome/browser/ui/browser_view_controller.mm |
+++ b/ios/chrome/browser/ui/browser_view_controller.mm |
@@ -169,6 +169,7 @@ |
#include "ios/public/provider/chrome/browser/voice/voice_search_controller.h" |
#include "ios/public/provider/chrome/browser/voice/voice_search_controller_delegate.h" |
#include "ios/public/provider/chrome/browser/voice/voice_search_provider.h" |
+#import "ios/shared/chrome/browser/ui/commands/command_dispatcher.h" |
#import "ios/shared/chrome/browser/ui/tools_menu/tools_menu_configuration.h" |
#include "ios/web/public/active_state_manager.h" |
#include "ios/web/public/navigation_item.h" |
@@ -400,6 +401,9 @@ NSString* const kNativeControllerTemporaryKey = @"NativeControllerTemporaryKey"; |
// Handles presentation of JavaScript dialogs. |
std::unique_ptr<JavaScriptDialogPresenterImpl> _javaScriptDialogPresenter; |
+ // Handles command dispatching. |
+ CommandDispatcher* _dispatcher; |
+ |
// Keyboard commands provider. It offloads most of the keyboard commands |
// management off of the BVC. |
KeyCommandsProvider* _keyCommandsProvider; |
@@ -948,6 +952,12 @@ class BrowserBookmarkModelBridge : public bookmarks::BookmarkModelObserver { |
_nativeControllersForTabIDs = [NSMapTable strongToWeakObjectsMapTable]; |
_dialogPresenter = [[DialogPresenter alloc] initWithDelegate:self |
presentingViewController:self]; |
+ _dispatcher = [[CommandDispatcher alloc] init]; |
+ [_dispatcher startDispatchingToTarget:self |
+ forProtocol:@protocol(UrlLoader)]; |
+ [_dispatcher startDispatchingToTarget:self |
+ forProtocol:@protocol(WebToolbarDelegate)]; |
+ |
_javaScriptDialogPresenter.reset( |
new JavaScriptDialogPresenterImpl(_dialogPresenter)); |
_webStateDelegate.reset(new web::WebStateDelegateBridge(self)); |
@@ -976,6 +986,10 @@ class BrowserBookmarkModelBridge : public bookmarks::BookmarkModelObserver { |
} |
- (void)dealloc { |
+ [_dispatcher stopDispatchingForProtocol:@protocol(OmniboxFocuser)]; |
+ [_dispatcher stopDispatchingForProtocol:@protocol(UrlLoader)]; |
+ [_dispatcher stopDispatchingForProtocol:@protocol(WebToolbarDelegate)]; |
+ |
_tabStripController = nil; |
_infoBarContainer = nil; |
_readingListMenuNotifier = nil; |
@@ -1762,6 +1776,8 @@ class BrowserBookmarkModelBridge : public bookmarks::BookmarkModelObserver { |
newWebToolbarControllerWithDelegate:self |
urlLoader:self |
preloadProvider:_preloadController]; |
+ [_dispatcher startDispatchingToTarget:_toolbarController |
+ forProtocol:@protocol(OmniboxFocuser)]; |
[_toolbarController setTabCount:[_model count]]; |
if (_voiceSearchController) |
_voiceSearchController->SetDelegate(_toolbarController); |
@@ -3029,7 +3045,8 @@ class BrowserBookmarkModelBridge : public bookmarks::BookmarkModelObserver { |
colorCache:_dominantColorCache |
webToolbarDelegate:self |
tabModel:_model |
- parentViewController:self]; |
+ parentViewController:self |
+ dispatcher:_dispatcher]; |
pageController.swipeRecognizerProvider = self.sideSwipeController; |
// Panel is always NTP for iPhone. |