Commit 17b7bd6a authored by Mark Cogan's avatar Mark Cogan Committed by Commit Bot

[ios clean] Fix crashes.

This CL fixes a couple of common crashes in CSChromium.

- Entering a URL on the NTP caused a crash because the webState wasn't enabled
when it was navigating. This is fixed by setting webUsageEnabled during
-loadGURLFromLocationBar:transition:

- Tapping some buttons in the toolbar would cause a crash in the tab container
VC's -canPerformAction:withSender:, which was creating an array with objects
that might be nil. This method was only needed to plumb responder chain events
into contained view controllers, which has long since been replaced by 
dispatchers.

Also, per the ObjC style guide, the exception raised in -subviewConstraints is
replaced with a NOTREACHED().

Bug: 
Change-Id: Ic22bc6decfde97530434c95f318b72cf637aaf24
Reviewed-on: https://chromium-review.googlesource.com/594947Reviewed-by: default avatarEd Chin <edchin@chromium.org>
Commit-Queue: Mark Cogan <marq@chromium.org>
Cr-Commit-Position: refs/heads/master@{#491949}
parent 3d930f74
...@@ -86,6 +86,7 @@ ...@@ -86,6 +86,7 @@
transition:(ui::PageTransition)transition { transition:(ui::PageTransition)transition {
web::WebState* webState = _webStateList->GetActiveWebState(); web::WebState* webState = _webStateList->GetActiveWebState();
DCHECK(webState); DCHECK(webState);
webState->SetWebUsageEnabled(true);
if (url.SchemeIs(url::kJavaScriptScheme)) { if (url.SchemeIs(url::kJavaScriptScheme)) {
// TODO(crbug.com/708341): Percent-unescape the url content first. // TODO(crbug.com/708341): Percent-unescape the url content first.
......
...@@ -39,6 +39,7 @@ source_set("tab_ui") { ...@@ -39,6 +39,7 @@ source_set("tab_ui") {
"tab_container_view_controller.mm", "tab_container_view_controller.mm",
] ]
deps = [ deps = [
"//base",
"//ios/clean/chrome/browser/ui", "//ios/clean/chrome/browser/ui",
"//ios/clean/chrome/browser/ui/transitions", "//ios/clean/chrome/browser/ui/transitions",
"//ios/clean/chrome/browser/ui/transitions/animators", "//ios/clean/chrome/browser/ui/transitions/animators",
......
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
#import "ios/clean/chrome/browser/ui/tab/tab_container_view_controller.h" #import "ios/clean/chrome/browser/ui/tab/tab_container_view_controller.h"
#import "base/logging.h"
#import "ios/clean/chrome/browser/ui/transitions/animators/swap_from_above_animator.h" #import "ios/clean/chrome/browser/ui/transitions/animators/swap_from_above_animator.h"
#import "ios/clean/chrome/browser/ui/transitions/containment_transition_context.h" #import "ios/clean/chrome/browser/ui/transitions/containment_transition_context.h"
#import "ios/clean/chrome/browser/ui/transitions/containment_transitioning_delegate.h" #import "ios/clean/chrome/browser/ui/transitions/containment_transitioning_delegate.h"
...@@ -31,10 +32,6 @@ CGFloat kTabStripHeight = 120.0f; ...@@ -31,10 +32,6 @@ CGFloat kTabStripHeight = 120.0f;
@property(nonatomic, strong) NSLayoutConstraint* tabStripHeightConstraint; @property(nonatomic, strong) NSLayoutConstraint* tabStripHeightConstraint;
@property(nonatomic, strong) NSLayoutConstraint* toolbarHeightConstraint; @property(nonatomic, strong) NSLayoutConstraint* toolbarHeightConstraint;
// Cache for forwarding methods to child view controllers.
@property(nonatomic, assign) SEL actionToForward;
@property(nonatomic, weak) UIResponder* forwardingTarget;
// Abstract base method for subclasses to implement. // Abstract base method for subclasses to implement.
// Returns constraints for tabStrip, toolbar, and content subviews. // Returns constraints for tabStrip, toolbar, and content subviews.
- (Constraints*)subviewConstraints; - (Constraints*)subviewConstraints;
...@@ -54,8 +51,6 @@ CGFloat kTabStripHeight = 120.0f; ...@@ -54,8 +51,6 @@ CGFloat kTabStripHeight = 120.0f;
@synthesize contentView = _contentView; @synthesize contentView = _contentView;
@synthesize tabStripHeightConstraint = _tabStripHeightConstraint; @synthesize tabStripHeightConstraint = _tabStripHeightConstraint;
@synthesize toolbarHeightConstraint = _toolbarHeightConstraint; @synthesize toolbarHeightConstraint = _toolbarHeightConstraint;
@synthesize actionToForward = _actionToForward;
@synthesize forwardingTarget = _forwardingTarget;
@synthesize containmentTransitioningDelegate = @synthesize containmentTransitioningDelegate =
_containmentTransitioningDelegate; _containmentTransitioningDelegate;
...@@ -225,33 +220,6 @@ CGFloat kTabStripHeight = 120.0f; ...@@ -225,33 +220,6 @@ CGFloat kTabStripHeight = 120.0f;
return CGRectNull; return CGRectNull;
} }
#pragma mark - UIResponder
// Before forwarding actions up the responder chain, give both contained
// view controllers a chance to handle them.
- (BOOL)canPerformAction:(SEL)action withSender:(id)sender {
self.actionToForward = nullptr;
self.forwardingTarget = nil;
for (UIResponder* responder in
@[ self.contentViewController, self.toolbarViewController ]) {
if ([responder canPerformAction:action withSender:sender]) {
self.actionToForward = action;
self.forwardingTarget = responder;
return YES;
}
}
return [super canPerformAction:action withSender:sender];
}
#pragma mark - NSObject method forwarding
- (id)forwardingTargetForSelector:(SEL)aSelector {
if (aSelector == self.actionToForward) {
return self.forwardingTarget;
}
return nil;
}
#pragma mark - Tab Strip actions. #pragma mark - Tab Strip actions.
- (void)hideTabStrip:(id)sender { - (void)hideTabStrip:(id)sender {
...@@ -261,9 +229,7 @@ CGFloat kTabStripHeight = 120.0f; ...@@ -261,9 +229,7 @@ CGFloat kTabStripHeight = 120.0f;
#pragma mark - Abstract methods to be overriden by subclass #pragma mark - Abstract methods to be overriden by subclass
- (Constraints*)subviewConstraints { - (Constraints*)subviewConstraints {
[NSException NOTREACHED() << "You must override -subviewConstraints in a subclass";
raise:NSInternalInconsistencyException
format:@"You must override %@ in a subclass", NSStringFromSelector(_cmd)];
return nil; return nil;
} }
......
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