Commit e9b6002c authored by Kurt Horimoto's avatar Kurt Horimoto Committed by Commit Bot

[iOS] Broadcast the main content UI in addition to toolbar height.

Bug: 778014
Cq-Include-Trybots: master.tryserver.chromium.mac:ios-simulator-cronet;master.tryserver.chromium.mac:ios-simulator-full-configs
Change-Id: Id8f56f26497bd89c25494a2ae6a210c2e0445d0f
Reviewed-on: https://chromium-review.googlesource.com/802997
Commit-Queue: Kurt Horimoto <kkhorimoto@chromium.org>
Reviewed-by: default avatarKurt Horimoto <kkhorimoto@chromium.org>
Reviewed-by: default avatarMark Cogan <marq@chromium.org>
Cr-Commit-Position: refs/heads/master@{#521496}
parent 7be49f33
...@@ -316,11 +316,14 @@ source_set("ui_internal") { ...@@ -316,11 +316,14 @@ source_set("ui_internal") {
"//ios/chrome/browser/ui/first_run", "//ios/chrome/browser/ui/first_run",
"//ios/chrome/browser/ui/fullscreen", "//ios/chrome/browser/ui/fullscreen",
"//ios/chrome/browser/ui/fullscreen:legacy_fullscreen", "//ios/chrome/browser/ui/fullscreen:legacy_fullscreen",
"//ios/chrome/browser/ui/fullscreen:new_fullscreen",
"//ios/chrome/browser/ui/history", "//ios/chrome/browser/ui/history",
"//ios/chrome/browser/ui/history_popup:coordinator", "//ios/chrome/browser/ui/history_popup:coordinator",
"//ios/chrome/browser/ui/history_popup/requirements", "//ios/chrome/browser/ui/history_popup/requirements",
"//ios/chrome/browser/ui/keyboard", "//ios/chrome/browser/ui/keyboard",
"//ios/chrome/browser/ui/main:feature_flags", "//ios/chrome/browser/ui/main:feature_flags",
"//ios/chrome/browser/ui/main_content:main_content_ui",
"//ios/chrome/browser/ui/main_content:main_content_ui_broadcasting_util",
"//ios/chrome/browser/ui/ntp", "//ios/chrome/browser/ui/ntp",
"//ios/chrome/browser/ui/ntp:modal_ntp", "//ios/chrome/browser/ui/ntp:modal_ntp",
"//ios/chrome/browser/ui/ntp:ntp_controller", "//ios/chrome/browser/ui/ntp:ntp_controller",
...@@ -346,6 +349,7 @@ source_set("ui_internal") { ...@@ -346,6 +349,7 @@ source_set("ui_internal") {
"//ios/chrome/browser/ui/tabs:coordinator", "//ios/chrome/browser/ui/tabs:coordinator",
"//ios/chrome/browser/ui/tabs/requirements", "//ios/chrome/browser/ui/tabs/requirements",
"//ios/chrome/browser/ui/toolbar:toolbar_ui", "//ios/chrome/browser/ui/toolbar:toolbar_ui",
"//ios/chrome/browser/ui/toolbar:toolbar_ui_broadcasting_util",
"//ios/chrome/browser/ui/toolbar/public:toolbar_base_feature", "//ios/chrome/browser/ui/toolbar/public:toolbar_base_feature",
"//ios/chrome/browser/ui/tools_menu", "//ios/chrome/browser/ui/tools_menu",
"//ios/chrome/browser/ui/tools_menu:configuration", "//ios/chrome/browser/ui/tools_menu:configuration",
......
...@@ -143,6 +143,8 @@ ...@@ -143,6 +143,8 @@
#import "ios/chrome/browser/ui/external_search/external_search_coordinator.h" #import "ios/chrome/browser/ui/external_search/external_search_coordinator.h"
#import "ios/chrome/browser/ui/find_bar/find_bar_controller_ios.h" #import "ios/chrome/browser/ui/find_bar/find_bar_controller_ios.h"
#import "ios/chrome/browser/ui/first_run/welcome_to_chrome_view_controller.h" #import "ios/chrome/browser/ui/first_run/welcome_to_chrome_view_controller.h"
#import "ios/chrome/browser/ui/fullscreen/fullscreen_controller.h"
#import "ios/chrome/browser/ui/fullscreen/fullscreen_controller_factory.h"
#import "ios/chrome/browser/ui/fullscreen/fullscreen_features.h" #import "ios/chrome/browser/ui/fullscreen/fullscreen_features.h"
#import "ios/chrome/browser/ui/fullscreen/legacy_fullscreen_controller.h" #import "ios/chrome/browser/ui/fullscreen/legacy_fullscreen_controller.h"
#import "ios/chrome/browser/ui/history_popup/requirements/tab_history_presentation.h" #import "ios/chrome/browser/ui/history_popup/requirements/tab_history_presentation.h"
...@@ -150,6 +152,10 @@ ...@@ -150,6 +152,10 @@
#import "ios/chrome/browser/ui/key_commands_provider.h" #import "ios/chrome/browser/ui/key_commands_provider.h"
#import "ios/chrome/browser/ui/location_bar_notification_names.h" #import "ios/chrome/browser/ui/location_bar_notification_names.h"
#import "ios/chrome/browser/ui/main/main_feature_flags.h" #import "ios/chrome/browser/ui/main/main_feature_flags.h"
#import "ios/chrome/browser/ui/main_content/main_content_ui.h"
#import "ios/chrome/browser/ui/main_content/main_content_ui_broadcasting_util.h"
#import "ios/chrome/browser/ui/main_content/main_content_ui_state.h"
#import "ios/chrome/browser/ui/main_content/web_scroll_view_main_content_ui_forwarder.h"
#import "ios/chrome/browser/ui/ntp/modal_ntp.h" #import "ios/chrome/browser/ui/ntp/modal_ntp.h"
#import "ios/chrome/browser/ui/ntp/new_tab_page_controller.h" #import "ios/chrome/browser/ui/ntp/new_tab_page_controller.h"
#import "ios/chrome/browser/ui/ntp/recent_tabs/recent_tabs_handset_coordinator.h" #import "ios/chrome/browser/ui/ntp/recent_tabs/recent_tabs_handset_coordinator.h"
...@@ -184,6 +190,7 @@ ...@@ -184,6 +190,7 @@
#include "ios/chrome/browser/ui/toolbar/toolbar_model_ios.h" #include "ios/chrome/browser/ui/toolbar/toolbar_model_ios.h"
#import "ios/chrome/browser/ui/toolbar/toolbar_snapshot_providing.h" #import "ios/chrome/browser/ui/toolbar/toolbar_snapshot_providing.h"
#import "ios/chrome/browser/ui/toolbar/toolbar_ui.h" #import "ios/chrome/browser/ui/toolbar/toolbar_ui.h"
#import "ios/chrome/browser/ui/toolbar/toolbar_ui_broadcasting_util.h"
#import "ios/chrome/browser/ui/toolbar/web_toolbar_controller.h" #import "ios/chrome/browser/ui/toolbar/web_toolbar_controller.h"
#import "ios/chrome/browser/ui/tools_menu/public/tools_menu_configuration_provider.h" #import "ios/chrome/browser/ui/tools_menu/public/tools_menu_configuration_provider.h"
#import "ios/chrome/browser/ui/tools_menu/public/tools_menu_presentation_provider.h" #import "ios/chrome/browser/ui/tools_menu/public/tools_menu_presentation_provider.h"
...@@ -393,6 +400,7 @@ NSString* const kBrowserViewControllerSnackbarCategory = ...@@ -393,6 +400,7 @@ NSString* const kBrowserViewControllerSnackbarCategory =
InfobarContainerStateDelegate, InfobarContainerStateDelegate,
KeyCommandsPlumbing, KeyCommandsPlumbing,
NetExportTabHelperDelegate, NetExportTabHelperDelegate,
MainContentUI,
ManageAccountsDelegate, ManageAccountsDelegate,
MFMailComposeViewControllerDelegate, MFMailComposeViewControllerDelegate,
NewTabPageControllerObserver, NewTabPageControllerObserver,
...@@ -573,6 +581,12 @@ NSString* const kBrowserViewControllerSnackbarCategory = ...@@ -573,6 +581,12 @@ NSString* const kBrowserViewControllerSnackbarCategory =
// The toolbar UI updater for the toolbar managed by |_toolbarCoordinator|. // The toolbar UI updater for the toolbar managed by |_toolbarCoordinator|.
LegacyToolbarUIUpdater* _toolbarUIUpdater; LegacyToolbarUIUpdater* _toolbarUIUpdater;
// The main content UI updater for the content displayed by this BVC.
MainContentUIStateUpdater* _mainContentUIUpdater;
// The forwarder for web scroll view interation events.
WebScrollViewMainContentUIForwarder* _webMainContentUIForwarder;
// Coordinator for the External Search UI. // Coordinator for the External Search UI.
ExternalSearchCoordinator* _externalSearchCoordinator; ExternalSearchCoordinator* _externalSearchCoordinator;
...@@ -606,6 +620,8 @@ NSString* const kBrowserViewControllerSnackbarCategory = ...@@ -606,6 +620,8 @@ NSString* const kBrowserViewControllerSnackbarCategory =
// Whether the controller's view is currently visible. // Whether the controller's view is currently visible.
// YES from viewDidAppear to viewWillDisappear. // YES from viewDidAppear to viewWillDisappear.
@property(nonatomic, assign) BOOL viewVisible; @property(nonatomic, assign) BOOL viewVisible;
// Whether the controller should broadcast its UI.
@property(nonatomic, assign, getter=isBroadcasting) BOOL broadcasting;
// Whether the controller is currently dismissing a presented view controller. // Whether the controller is currently dismissing a presented view controller.
@property(nonatomic, assign, getter=isDismissingModal) BOOL dismissingModal; @property(nonatomic, assign, getter=isDismissingModal) BOOL dismissingModal;
// Returns YES if the toolbar has not been scrolled out by fullscreen. // Returns YES if the toolbar has not been scrolled out by fullscreen.
...@@ -732,9 +748,9 @@ NSString* const kBrowserViewControllerSnackbarCategory = ...@@ -732,9 +748,9 @@ NSString* const kBrowserViewControllerSnackbarCategory =
- (UIImageView*)pageFullScreenOpenCloseAnimationView; - (UIImageView*)pageFullScreenOpenCloseAnimationView;
// Updates the toolbar display based on the current tab. // Updates the toolbar display based on the current tab.
- (void)updateToolbar; - (void)updateToolbar;
// Starts or stops broadcasting the toolbar UI depending on whether the BVC is // Starts or stops broadcasting the toolbar UI and main content UI depending on
// visible and active. // whether the BVC is visible and active.
- (void)updateToolbarBroadcastState; - (void)updateBroadcastState;
// Updates |dialogPresenter|'s |active| property to account for the BVC's // Updates |dialogPresenter|'s |active| property to account for the BVC's
// |active|, |visible|, and |inNewTabAnimation| properties. // |active|, |visible|, and |inNewTabAnimation| properties.
- (void)updateDialogPresenterActiveState; - (void)updateDialogPresenterActiveState;
...@@ -909,6 +925,7 @@ bubblePresenterForFeature:(const base::Feature&)feature ...@@ -909,6 +925,7 @@ bubblePresenterForFeature:(const base::Feature&)feature
@synthesize active = _active; @synthesize active = _active;
@synthesize visible = _visible; @synthesize visible = _visible;
@synthesize viewVisible = _viewVisible; @synthesize viewVisible = _viewVisible;
@synthesize broadcasting = _broadcasting;
@synthesize dismissingModal = _dismissingModal; @synthesize dismissingModal = _dismissingModal;
@synthesize hideStatusBar = _hideStatusBar; @synthesize hideStatusBar = _hideStatusBar;
@synthesize activityOverlayCoordinator = _activityOverlayCoordinator; @synthesize activityOverlayCoordinator = _activityOverlayCoordinator;
...@@ -1044,7 +1061,7 @@ applicationCommandEndpoint:(id<ApplicationCommands>)applicationCommandEndpoint { ...@@ -1044,7 +1061,7 @@ applicationCommandEndpoint:(id<ApplicationCommands>)applicationCommandEndpoint {
[_model setWebUsageEnabled:active]; [_model setWebUsageEnabled:active];
[self updateDialogPresenterActiveState]; [self updateDialogPresenterActiveState];
[self updateToolbarBroadcastState]; [self updateBroadcastState];
if (active) { if (active) {
// Make sure the tab (if any; it's possible to get here without a current // Make sure the tab (if any; it's possible to get here without a current
...@@ -1068,7 +1085,7 @@ applicationCommandEndpoint:(id<ApplicationCommands>)applicationCommandEndpoint { ...@@ -1068,7 +1085,7 @@ applicationCommandEndpoint:(id<ApplicationCommands>)applicationCommandEndpoint {
[_model setPrimary:primary]; [_model setPrimary:primary];
if (primary) { if (primary) {
[self updateDialogPresenterActiveState]; [self updateDialogPresenterActiveState];
[self updateToolbarBroadcastState]; [self updateBroadcastState];
} else { } else {
self.dialogPresenter.active = false; self.dialogPresenter.active = false;
} }
...@@ -1155,7 +1172,42 @@ applicationCommandEndpoint:(id<ApplicationCommands>)applicationCommandEndpoint { ...@@ -1155,7 +1172,42 @@ applicationCommandEndpoint:(id<ApplicationCommands>)applicationCommandEndpoint {
_viewVisible = viewVisible; _viewVisible = viewVisible;
self.visible = viewVisible; self.visible = viewVisible;
[self updateDialogPresenterActiveState]; [self updateDialogPresenterActiveState];
[self updateToolbarBroadcastState]; [self updateBroadcastState];
}
- (void)setBroadcasting:(BOOL)broadcasting {
if (_broadcasting == broadcasting)
return;
_broadcasting = broadcasting;
if (base::FeatureList::IsEnabled(fullscreen::features::kNewFullscreen)) {
// TODO(crbug.com/790886): Use the Browser's broadcaster once Browsers are
// supported.
ChromeBroadcaster* broadcaster = FullscreenControllerFactory::GetInstance()
->GetForBrowserState(_browserState)
->broadcaster();
if (_broadcasting) {
_toolbarUIUpdater = [[LegacyToolbarUIUpdater alloc]
initWithToolbarUI:[[ToolbarUIState alloc] init]
toolbarOwner:self
webStateList:[_model webStateList]];
[_toolbarUIUpdater startUpdating];
StartBroadcastingToolbarUI(_toolbarUIUpdater.toolbarUI, broadcaster);
_mainContentUIUpdater = [[MainContentUIStateUpdater alloc]
initWithState:[[MainContentUIState alloc] init]];
_webMainContentUIForwarder = [[WebScrollViewMainContentUIForwarder alloc]
initWithUpdater:_mainContentUIUpdater
webStateList:[_model webStateList]];
StartBroadcastingMainContentUI(self, broadcaster);
} else {
StopBroadcastingToolbarUI(broadcaster);
StopBroadcastingMainContentUI(broadcaster);
[_toolbarUIUpdater stopUpdating];
_toolbarUIUpdater = nil;
_mainContentUIUpdater = nil;
[_webMainContentUIForwarder disconnect];
_webMainContentUIForwarder = nil;
}
}
} }
- (BOOL)isToolbarOnScreen { - (BOOL)isToolbarOnScreen {
...@@ -1167,7 +1219,7 @@ applicationCommandEndpoint:(id<ApplicationCommands>)applicationCommandEndpoint { ...@@ -1167,7 +1219,7 @@ applicationCommandEndpoint:(id<ApplicationCommands>)applicationCommandEndpoint {
return; return;
_inNewTabAnimation = inNewTabAnimation; _inNewTabAnimation = inNewTabAnimation;
[self updateDialogPresenterActiveState]; [self updateDialogPresenterActiveState];
[self updateToolbarBroadcastState]; [self updateBroadcastState];
} }
- (BOOL)isInNewTabAnimation { - (BOOL)isInNewTabAnimation {
...@@ -1276,7 +1328,7 @@ applicationCommandEndpoint:(id<ApplicationCommands>)applicationCommandEndpoint { ...@@ -1276,7 +1328,7 @@ applicationCommandEndpoint:(id<ApplicationCommands>)applicationCommandEndpoint {
[super viewDidAppear:animated]; [super viewDidAppear:animated];
self.viewVisible = YES; self.viewVisible = YES;
[self updateDialogPresenterActiveState]; [self updateDialogPresenterActiveState];
[self updateToolbarBroadcastState]; [self updateBroadcastState];
// |viewDidAppear| can be called after |browserState| is destroyed. Since // |viewDidAppear| can be called after |browserState| is destroyed. Since
// |presentBubblesIfEligible| requires that |self.browserState| is not NULL, // |presentBubblesIfEligible| requires that |self.browserState| is not NULL,
...@@ -1310,7 +1362,7 @@ applicationCommandEndpoint:(id<ApplicationCommands>)applicationCommandEndpoint { ...@@ -1310,7 +1362,7 @@ applicationCommandEndpoint:(id<ApplicationCommands>)applicationCommandEndpoint {
- (void)viewWillDisappear:(BOOL)animated { - (void)viewWillDisappear:(BOOL)animated {
self.viewVisible = NO; self.viewVisible = NO;
[self updateDialogPresenterActiveState]; [self updateDialogPresenterActiveState];
[self updateToolbarBroadcastState]; [self updateBroadcastState];
[[_model currentTab] wasHidden]; [[_model currentTab] wasHidden];
[_bookmarkInteractionController dismissSnackbar]; [_bookmarkInteractionController dismissSnackbar];
if (IsIPadIdiom() && _infoBarContainer) { if (IsIPadIdiom() && _infoBarContainer) {
...@@ -1866,7 +1918,7 @@ applicationCommandEndpoint:(id<ApplicationCommands>)applicationCommandEndpoint { ...@@ -1866,7 +1918,7 @@ applicationCommandEndpoint:(id<ApplicationCommands>)applicationCommandEndpoint {
[_dispatcher startDispatchingToTarget:_toolbarCoordinator [_dispatcher startDispatchingToTarget:_toolbarCoordinator
forProtocol:@protocol(OmniboxFocuser)]; forProtocol:@protocol(OmniboxFocuser)];
[_toolbarCoordinator setTabCount:[_model count]]; [_toolbarCoordinator setTabCount:[_model count]];
[self updateToolbarBroadcastState]; [self updateBroadcastState];
if (_voiceSearchController) if (_voiceSearchController)
_voiceSearchController->SetDelegate( _voiceSearchController->SetDelegate(
[_toolbarCoordinator voiceSearchDelegate]); [_toolbarCoordinator voiceSearchDelegate]);
...@@ -2124,22 +2176,9 @@ applicationCommandEndpoint:(id<ApplicationCommands>)applicationCommandEndpoint { ...@@ -2124,22 +2176,9 @@ applicationCommandEndpoint:(id<ApplicationCommands>)applicationCommandEndpoint {
} }
} }
- (void)updateToolbarBroadcastState { - (void)updateBroadcastState {
BOOL shouldBroadcast = self.broadcasting =
self.active && self.viewVisible && !self.inNewTabAnimation; self.active && self.viewVisible && !self.inNewTabAnimation;
BOOL broadcasting = _toolbarUIUpdater != nil;
if (shouldBroadcast == broadcasting)
return;
if (shouldBroadcast) {
_toolbarUIUpdater = [[LegacyToolbarUIUpdater alloc]
initWithToolbarUI:[[ToolbarUIState alloc] init]
toolbarOwner:self
webStateList:[_model webStateList]];
[_toolbarUIUpdater startUpdating];
} else {
[_toolbarUIUpdater stopUpdating];
_toolbarUIUpdater = nil;
}
} }
- (void)updateDialogPresenterActiveState { - (void)updateDialogPresenterActiveState {
...@@ -3899,6 +3938,12 @@ bubblePresenterForFeature:(const base::Feature&)feature ...@@ -3899,6 +3938,12 @@ bubblePresenterForFeature:(const base::Feature&)feature
[_toolbarCoordinator focusOmnibox]; [_toolbarCoordinator focusOmnibox];
} }
#pragma mark - MainContentUI
- (MainContentUIState*)mainContentUIState {
return _mainContentUIUpdater.state;
}
#pragma mark - UIResponder #pragma mark - UIResponder
- (NSArray*)keyCommands { - (NSArray*)keyCommands {
......
...@@ -24,6 +24,8 @@ source_set("main_content_ui") { ...@@ -24,6 +24,8 @@ source_set("main_content_ui") {
"main_content_ui.h", "main_content_ui.h",
"main_content_ui_state.h", "main_content_ui_state.h",
"main_content_ui_state.mm", "main_content_ui_state.mm",
"web_scroll_view_main_content_ui_forwarder.h",
"web_scroll_view_main_content_ui_forwarder.mm",
] ]
configs += [ "//build/config/compiler:enable_arc" ] configs += [ "//build/config/compiler:enable_arc" ]
...@@ -32,6 +34,8 @@ source_set("main_content_ui") { ...@@ -32,6 +34,8 @@ source_set("main_content_ui") {
"//base", "//base",
"//ios/chrome/browser/ui:ui_util", "//ios/chrome/browser/ui:ui_util",
"//ios/chrome/browser/ui/broadcaster", "//ios/chrome/browser/ui/broadcaster",
"//ios/chrome/browser/web_state_list",
"//ios/web/public",
] ]
} }
......
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef IOS_CHROME_BROWSER_UI_MAIN_CONTENT_WEB_SCROLL_VIEW_MAIN_CONTENT_UI_FORWARDER_H_
#define IOS_CHROME_BROWSER_UI_MAIN_CONTENT_WEB_SCROLL_VIEW_MAIN_CONTENT_UI_FORWARDER_H_
#import <Foundation/Foundation.h>
@class MainContentUIStateUpdater;
class WebStateList;
// Helper object that forwards a CRWWebViewScrollViewProxy events to a
// MainContentUIStateUpdater.
@interface WebScrollViewMainContentUIForwarder : NSObject
// Designated initializer for a forwarder that sends the scroll events from
// |webStateList|'s active WebState's scroll view proxy to |updater|.
- (nullable instancetype)initWithUpdater:
(nonnull MainContentUIStateUpdater*)updater
webStateList:(nonnull WebStateList*)webStateList
NS_DESIGNATED_INITIALIZER;
- (nullable instancetype)init NS_UNAVAILABLE;
// Instructs the forwarder to stop observing the WebStateList and the active
// WebState's scroll view proxy.
- (void)disconnect;
@end
#endif // IOS_CHROME_BROWSER_UI_MAIN_CONTENT_WEB_SCROLL_VIEW_MAIN_CONTENT_UI_FORWARDER_H_
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#import "ios/chrome/browser/ui/main_content/web_scroll_view_main_content_ui_forwarder.h"
#include "base/logging.h"
#include "base/memory/ptr_util.h"
#import "ios/chrome/browser/ui/main_content/main_content_ui_state.h"
#import "ios/chrome/browser/web_state_list/web_state_list.h"
#import "ios/chrome/browser/web_state_list/web_state_list_observer_bridge.h"
#import "ios/web/public/web_state/ui/crw_web_view_proxy.h"
#import "ios/web/public/web_state/ui/crw_web_view_scroll_view_proxy.h"
#import "ios/web/public/web_state/web_state.h"
#if !defined(__has_feature) || !__has_feature(objc_arc)
#error "This file requires ARC support."
#endif
@interface WebScrollViewMainContentUIForwarder ()<
CRWWebViewScrollViewProxyObserver,
WebStateListObserving> {
// The observer bridge.
std::unique_ptr<WebStateListObserver> _bridge;
}
// The updater being driven by this object.
@property(nonatomic, readonly, strong) MainContentUIStateUpdater* updater;
// The WebStateList whose active WebState's scroll state is being forwaded.
@property(nonatomic, readonly) WebStateList* webStateList;
// The scroll view proxy whose scroll events are forwarded to |updater|.
@property(nonatomic, readonly, strong) CRWWebViewScrollViewProxy* proxy;
@end
@implementation WebScrollViewMainContentUIForwarder
@synthesize updater = _updater;
@synthesize webStateList = _webStateList;
@synthesize proxy = _proxy;
- (instancetype)initWithUpdater:(MainContentUIStateUpdater*)updater
webStateList:(WebStateList*)webStateList {
if (self = [super init]) {
_updater = updater;
DCHECK(_updater);
_webStateList = webStateList;
DCHECK(_webStateList);
_bridge = base::MakeUnique<WebStateListObserverBridge>(self);
_webStateList->AddObserver(_bridge.get());
web::WebState* activeWebState = webStateList->GetActiveWebState();
if (activeWebState) {
_proxy = activeWebState->GetWebViewProxy().scrollViewProxy;
[_proxy addObserver:self];
}
}
return self;
}
- (void)dealloc {
[self disconnect];
}
#pragma mark Accessors
- (void)setProxy:(CRWWebViewScrollViewProxy*)proxy {
if (_proxy == proxy)
return;
[_proxy removeObserver:self];
_proxy = proxy;
[_proxy addObserver:self];
}
#pragma mark Public
- (void)disconnect {
self.webStateList->RemoveObserver(_bridge.get());
_bridge = nullptr;
self.proxy = nil;
}
#pragma mark CRWWebViewScrollViewObserver
- (void)webViewScrollViewDidScroll:
(CRWWebViewScrollViewProxy*)webViewScrollViewProxy {
[self.updater scrollViewDidScrollToOffset:self.proxy.contentOffset];
}
- (void)webViewScrollViewWillBeginDragging:
(CRWWebViewScrollViewProxy*)webViewScrollViewProxy {
[self.updater
scrollViewWillBeginDraggingWithGesture:self.proxy.panGestureRecognizer];
}
- (void)webViewScrollViewWillEndDragging:
(CRWWebViewScrollViewProxy*)webViewScrollViewProxy
withVelocity:(CGPoint)velocity
targetContentOffset:(inout CGPoint*)targetContentOffset {
[self.updater
scrollViewDidEndDraggingWithGesture:self.proxy.panGestureRecognizer
residualVelocity:velocity];
}
- (void)webViewScrollViewDidEndDecelerating:
(CRWWebViewScrollViewProxy*)webViewScrollViewProxy {
[self.updater scrollViewDidEndDecelerating];
}
#pragma mark - WebStateListObserving
- (void)webStateList:(WebStateList*)webStateList
didChangeActiveWebState:(web::WebState*)newWebState
oldWebState:(web::WebState*)oldWebState
atIndex:(int)atIndex
userAction:(BOOL)userAction {
self.proxy = newWebState->GetWebViewProxy().scrollViewProxy;
}
@end
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