Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(696)

Unified Diff: ios/web/web_state/ui/crw_web_controller.mm

Issue 2777243004: Allow URL loading if WebState::GetView was not called. (Closed)
Patch Set: N Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ios/web/test/web_int_test.mm ('k') | ios/web/webui/web_ui_mojo_inttest.mm » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ios/web/web_state/ui/crw_web_controller.mm
diff --git a/ios/web/web_state/ui/crw_web_controller.mm b/ios/web/web_state/ui/crw_web_controller.mm
index 5204ae4a1656e50bb3cc2cd284f5a327bef4315b..8215dc2c46c1c9b55c346b560d02d8ea8b2bc2ee 100644
--- a/ios/web/web_state/ui/crw_web_controller.mm
+++ b/ios/web/web_state/ui/crw_web_controller.mm
@@ -512,6 +512,8 @@ NSError* WKWebViewErrorWithSource(NSError* error, WKWebViewErrorSource source) {
// Creates a web view if it's not yet created.
- (void)ensureWebViewCreated;
+// Creates and configures |_containerView|.
+- (void)createContainerView;
// Creates a web view with given |config|. No-op if web view is already created.
- (void)ensureWebViewCreatedWithConfiguration:(WKWebViewConfiguration*)config;
// Returns a new autoreleased web view created with given configuration.
@@ -1842,7 +1844,7 @@ const NSTimeInterval kSnapshotOverlayTransition = 0.5;
// If the content view doesn't exist, the tab has either been evicted, or
// never displayed. Bail, and let the URL be loaded when the tab is shown.
if (!_containerView)
- return;
+ [self createContainerView];
// Reset current WebUI if one exists.
[self clearWebUI];
@@ -1903,31 +1905,7 @@ const NSTimeInterval kSnapshotOverlayTransition = 0.5;
- (void)triggerPendingLoad {
if (!_containerView) {
DCHECK(!_isBeingDestroyed);
- // Create the top-level parent view, which will contain the content (whether
- // native or web). Note, this needs to be created with a non-zero size
- // to allow for (native) subviews with autosize constraints to be correctly
- // processed.
- _containerView.reset(
- [[CRWWebControllerContainerView alloc] initWithDelegate:self]);
-
- // This will be resized later, but matching the final frame will minimize
- // re-rendering. Use the screen size because the application's key window
- // may still be nil.
- // TODO(crbug.com/688259): Stop subtracting status bar height.
- CGFloat statusBarHeight =
- [[UIApplication sharedApplication] statusBarFrame].size.height;
- CGRect containerViewFrame = [UIScreen mainScreen].bounds;
- containerViewFrame.origin.y += statusBarHeight;
- containerViewFrame.size.height -= statusBarHeight;
- _containerView.get().frame = containerViewFrame;
- DCHECK(!CGRectIsEmpty(_containerView.get().frame));
-
- // TODO(crbug.com/691116): Remove this workaround once tests are no longer
- // dependent upon this accessibility ID.
- if (!base::ios::IsRunningOnIOS10OrLater())
- [_containerView setAccessibilityIdentifier:@"Container View"];
-
- [_containerView addGestureRecognizer:[self touchTrackingRecognizer]];
+ [self createContainerView];
// Is |currentUrl| a web scheme or native chrome scheme.
web::NavigationItem* item = self.currentNavItem;
const GURL currentNavigationURL =
@@ -4004,6 +3982,34 @@ const NSTimeInterval kSnapshotOverlayTransition = 0.5;
[self loadCancelled];
}
+- (void)createContainerView {
+ // Create the top-level parent view, which will contain the content (whether
+ // native or web). Note, this needs to be created with a non-zero size
+ // to allow for (native) subviews with autosize constraints to be correctly
+ // processed.
+ _containerView.reset(
+ [[CRWWebControllerContainerView alloc] initWithDelegate:self]);
+
+ // This will be resized later, but matching the final frame will minimize
+ // re-rendering. Use the screen size because the application's key window
+ // may still be nil.
+ // TODO(crbug.com/688259): Stop subtracting status bar height.
+ CGFloat statusBarHeight =
+ [[UIApplication sharedApplication] statusBarFrame].size.height;
+ CGRect containerViewFrame = [UIScreen mainScreen].bounds;
+ containerViewFrame.origin.y += statusBarHeight;
+ containerViewFrame.size.height -= statusBarHeight;
+ _containerView.get().frame = containerViewFrame;
+ DCHECK(!CGRectIsEmpty(_containerView.get().frame));
+
+ // TODO(crbug.com/691116): Remove this workaround once tests are no longer
+ // dependent upon this accessibility ID.
+ if (!base::ios::IsRunningOnIOS10OrLater())
+ [_containerView setAccessibilityIdentifier:@"Container View"];
+
+ [_containerView addGestureRecognizer:[self touchTrackingRecognizer]];
+}
+
- (void)ensureWebViewCreated {
WKWebViewConfiguration* config =
[self webViewConfigurationProvider].GetWebViewConfiguration();
« no previous file with comments | « ios/web/test/web_int_test.mm ('k') | ios/web/webui/web_ui_mojo_inttest.mm » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698