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 2ab2910edd6fe1478aa2312c141628c68cd87dbc..029477de93eb634563febb55c0a542088590de17 100644 |
--- a/ios/web/web_state/ui/crw_web_controller.mm |
+++ b/ios/web/web_state/ui/crw_web_controller.mm |
@@ -363,9 +363,6 @@ void CancelAllTouches(UIScrollView* web_scroll_view) { |
- (NSData*)currentPOSTData; |
- (NSDictionary*)currentHttpHeaders; |
-// Have the current web view load the request. If needed, it will add |
-// information to let the network stack access the requestGroupID. |
-- (void)loadRequest:(NSMutableURLRequest*)request; |
// Finds all the scrollviews in the view hierarchy and makes sure they do not |
// interfere with scroll to top when tapping the statusbar. |
- (void)optOutScrollsToTopForSubviews; |
@@ -1179,18 +1176,8 @@ const NSTimeInterval kSnapshotOverlayTransition = 0.5; |
} |
- (void)loadRequest:(NSMutableURLRequest*)request { |
- DCHECK(web::GetWebClient()); |
- GURL url = net::GURLWithNSURL(request.URL); |
- // TODO(stuartmorgan): See if WKWebView has the same issue; if not, this can |
- // move into the subclass. |
- if (web::GetWebClient()->IsAppSpecificURL(url)) { |
- // Sub requests of a chrome:// page will not contain the user agent. |
- // Instead use the username part of the URL to allow the network stack to |
- // associate a request to the correct tab. |
- request.URL = web::AddRequestGroupIDToURL( |
- request.URL, _webStateImpl->GetRequestGroupID()); |
- } |
- [self loadWebRequest:request]; |
+ // Subclasses must implement this method. |
+ NOTREACHED(); |
} |
- (void)registerLoadRequest:(const GURL&)requestURL |
@@ -1504,7 +1491,7 @@ const NSTimeInterval kSnapshotOverlayTransition = 0.5; |
return; |
// Reset current WebUI if one exists. |
- _webStateImpl->ClearWebUI(); |
+ [self clearWebUI]; |
// Precaution, so that the outgoing URL is registered, to reduce the risk of |
// it being seen as a fresh URL later by the same method (and new page change |
@@ -1520,17 +1507,17 @@ const NSTimeInterval kSnapshotOverlayTransition = 0.5; |
// Remove the interstitial before doing anything else. |
[self clearInterstitials]; |
- const GURL currentUrl = [self currentNavigationURL]; |
+ const GURL currentURL = [self currentNavigationURL]; |
// If it's a chrome URL, but not a native one, create the WebUI instance. |
- if (web::GetWebClient()->IsAppSpecificURL(currentUrl) && |
- ![_nativeProvider hasControllerForURL:currentUrl]) { |
- _webStateImpl->CreateWebUI(currentUrl); |
+ if (web::GetWebClient()->IsAppSpecificURL(currentURL) && |
+ ![_nativeProvider hasControllerForURL:currentURL]) { |
+ [self createWebUIForURL:currentURL]; |
} |
// Loading a new url, must check here if it's a native chrome URL and |
// replace the appropriate view if so, or transition back to a web view from |
// a native view. |
- if ([self shouldLoadURLInNativeView:currentUrl]) { |
+ if ([self shouldLoadURLInNativeView:currentURL]) { |
[self loadCurrentURLInNativeView]; |
} else { |
[self loadCurrentURLInWebView]; |
@@ -2065,11 +2052,18 @@ const NSTimeInterval kSnapshotOverlayTransition = 0.5; |
DLOG(WARNING) << "JS message parameter not found: arguments"; |
return NO; |
} |
+ _webStateImpl->OnScriptCommandReceived( |
+ messageContent, *message, currentURL, |
+ context[web::kUserIsInteractingKey]); |
_webStateImpl->ProcessWebUIMessage(currentURL, messageContent, |
*arguments); |
+ return YES; |
} |
} |
- return YES; |
+ |
+ DLOG(WARNING) |
+ << "chrome.send message not handled because WebUI was not found."; |
+ return NO; |
} |
- (BOOL)handleConsoleMessage:(base::DictionaryValue*)message |
@@ -2898,6 +2892,17 @@ const NSTimeInterval kSnapshotOverlayTransition = 0.5; |
} |
#pragma mark - |
+#pragma mark WebUI |
+ |
+- (void)createWebUIForURL:(const GURL&)URL { |
+ _webStateImpl->CreateWebUI(URL); |
+} |
+ |
+- (void)clearWebUI { |
+ _webStateImpl->ClearWebUI(); |
+} |
+ |
+#pragma mark - |
#pragma mark UIGestureRecognizerDelegate |
- (BOOL)gestureRecognizer:(UIGestureRecognizer*)gestureRecognizer |
@@ -3572,6 +3577,11 @@ const NSTimeInterval kSnapshotOverlayTransition = 0.5; |
[self loadWebHTMLString:html forURL:url]; |
} |
+- (void)loadHTML:(NSString*)HTML forAppSpecificURL:(const GURL&)URL { |
+ CHECK(web::GetWebClient()->IsAppSpecificURL(URL)); |
+ [self loadHTML:HTML forURL:URL]; |
+} |
+ |
- (void)stopLoading { |
web::RecordAction(UserMetricsAction("Stop")); |
// Discard the pending and transient entried before notifying the tab model |