Commit 826facbc authored by David Jean's avatar David Jean Committed by Commit Bot

[ios] Fix two multi-window crashes

Fixed crash on exit with connectedScenes empty while the last scene tries
to get interfaceProvider from it.

Fixed crash with disconnected states remaining as dangling pointer
observers in AppState

Bug: 1114586
Change-Id: I4865d261082e81c2684065f97a8a6d94ffd2164d
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2374785Reviewed-by: default avatarMark Cogan <marq@chromium.org>
Commit-Queue: David Jean <djean@chromium.org>
Cr-Commit-Position: refs/heads/master@{#801332}
parent 8f6bc5e3
......@@ -652,7 +652,10 @@ void MainControllerAuthenticationServiceDelegate::ClearBrowsingData(
if (self.appState.foregroundActiveScene) {
return self.appState.foregroundActiveScene.interfaceProvider;
}
return self.appState.connectedScenes[0].interfaceProvider;
NSArray<SceneState*>* connectedScenes = self.appState.connectedScenes;
return connectedScenes.count == 0 ? nil
: connectedScenes[0].interfaceProvider;
}
- (BOOL)isFirstLaunchAfterUpgrade {
......
......@@ -216,7 +216,6 @@ const char kMultiWindowOpenInNewWindowHistogram[] =
if (self) {
_sceneState = sceneState;
[_sceneState addObserver:self];
[_sceneState.appState addObserver:self];
// The window is necessary very early in the app/scene lifecycle, so it
// should be created right away.
// When multiwindow is supported, the window is created by SceneDelegate,
......@@ -503,6 +502,8 @@ const char kMultiWindowOpenInNewWindowHistogram[] =
[self startUpChromeUI];
}
[self.sceneState.appState addObserver:self];
self.hasInitializedUI = YES;
}
......@@ -676,6 +677,8 @@ const char kMultiWindowOpenInNewWindowHistogram[] =
self.browserViewWrangler = nil;
self.hasInitializedUI = NO;
[self.sceneState.appState removeObserver:self];
}
#pragma mark - First Run
......
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