Prevent endless recursion in WebTestWithWebState::LoadHtml.

Instead of recursively reloading html, this function now waits until
the script execution is possible.

Bug: 814709
Cq-Include-Trybots: master.tryserver.chromium.mac:ios-simulator-cronet;master.tryserver.chromium.mac:ios-simulator-full-configs
Change-Id: I45a6bc7413d2a508aaa4b6af123c243f96b8bc42
Reviewed-on: https://chromium-review.googlesource.com/934628
Reviewed-by: Sylvain Defresne <sdefresne@chromium.org>
Commit-Queue: Eugene But <eugenebut@chromium.org>
Cr-Commit-Position: refs/heads/master@{#539151}
diff --git a/ios/web/public/test/web_test_with_web_state.mm b/ios/web/public/test/web_test_with_web_state.mm
index 69177149d..9737f70 100644
--- a/ios/web/public/test/web_test_with_web_state.mm
+++ b/ios/web/public/test/web_test_with_web_state.mm
@@ -22,6 +22,7 @@
 
 using testing::WaitUntilConditionOrTimeout;
 using testing::kWaitForJSCompletionTimeout;
+using testing::kWaitForPageLoadTimeout;
 
 namespace {
 // Returns CRWWebController for the given |web_state|.
@@ -125,12 +126,11 @@
     return web_controller.loadPhase == PAGE_LOADED;
   });
 
-  // Reload the page if script execution is not possible. Script execution will
-  // fail if WKUserScript was not injected by WKWebView (which sometimes happens
-  // after -[WKWebView loadHTMLString:baseURL:]).
-  if (![ExecuteJavaScript(@"0;") isEqual:@0]) {
-    LoadHtml(html, url);
-  }
+  // Wait until the script execution is possible. Script execution will fail if
+  // WKUserScript was not jet injected by WKWebView.
+  ASSERT_TRUE(WaitUntilConditionOrTimeout(kWaitForPageLoadTimeout, ^bool {
+    return [ExecuteJavaScript(@"0;") isEqual:@0];
+  }));
 }
 
 void WebTestWithWebState::LoadHtml(NSString* html) {