Commit f03b448c authored by eugenebut's avatar eugenebut Committed by Commit bot

[ios] Retry injection of windowID if it has failed.

windowID injection will fail if WKUserScript has not been injected yet
and __crWeb object is not present. windowID injection is critical for
many features to function and on failure it should be retried.

So far injection failure has been observed only in KIF test.

BUG=628316

Review-Url: https://codereview.chromium.org/2161463002
Cr-Commit-Position: refs/heads/master@{#406146}
parent 0be4d34d
...@@ -2523,9 +2523,21 @@ const NSTimeInterval kSnapshotOverlayTransition = 0.5; ...@@ -2523,9 +2523,21 @@ const NSTimeInterval kSnapshotOverlayTransition = 0.5;
// an umbrella manager). // an umbrella manager).
if ([script length]) { if ([script length]) {
// Every injection except windowID requires windowID check. // Every injection except windowID requires windowID check.
if (JSInjectionManagerClass != [CRWJSWindowIdManager class]) if (JSInjectionManagerClass != [CRWJSWindowIdManager class]) {
script = [self scriptByAddingWindowIDCheckForScript:script]; script = [self scriptByAddingWindowIDCheckForScript:script];
web::ExecuteJavaScript(_webView, script, nil); web::ExecuteJavaScript(_webView, script, nil);
} else {
web::ExecuteJavaScript(_webView, script, ^(id, NSError* error) {
// TODO(crbug.com/628832): Refactor retry logic.
if (error.code == WKErrorJavaScriptExceptionOccurred) {
// This can happen if WKUserScript has not been injected yet.
// Retry if that's the case, because windowID injection is critical
// for the system to function.
[_injectedScriptManagers removeObject:JSInjectionManagerClass];
[self injectWindowID];
}
});
}
} }
[_injectedScriptManagers addObject:JSInjectionManagerClass]; [_injectedScriptManagers addObject:JSInjectionManagerClass];
} }
......
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