Skip to content

Commit

Permalink
Fixed crash at TabGroupSyncFeatures.isTabGroupSyncEnabled (#26119)
Browse files Browse the repository at this point in the history
Call TabGroupUiCoordinator.initializeWithNative only when profile is ready

fixes brave/brave-browser#41766
  • Loading branch information
AlexeyBarabash authored Oct 21, 2024
1 parent c232084 commit 01038a1
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 0 deletions.
1 change: 1 addition & 0 deletions android/features/tab_ui/BUILD.gn
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ android_library("java") {
"//chrome/browser/data_sharing:tab_group_ui_java",
"//chrome/browser/flags:java",
"//chrome/browser/preferences:java",
"//chrome/browser/profiles/android:java",
"//chrome/browser/tab_ui/android:java",
"//chrome/browser/tabmodel:java",
"//chrome/browser/ui/android/layouts:java",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@
import org.chromium.chrome.browser.browser_controls.BrowserControlsStateProvider;
import org.chromium.chrome.browser.data_sharing.DataSharingTabManager;
import org.chromium.chrome.browser.layouts.LayoutStateProvider;
import org.chromium.chrome.browser.profiles.Profile;
import org.chromium.chrome.browser.profiles.ProfileManager;
import org.chromium.chrome.browser.tab_ui.TabContentManager;
import org.chromium.chrome.browser.tabmodel.IncognitoStateProvider;
import org.chromium.chrome.browser.tabmodel.IncognitoStateProvider.IncognitoStateObserver;
Expand All @@ -37,6 +39,7 @@ public class BraveTabGroupUiCoordinator extends TabGroupUiCoordinator {
// Own members.
private IncognitoStateProvider mIncognitoStateProvider;
private IncognitoStateObserver mIncognitoStateObserver;
private ProfileManager.Observer mProfileManagerObserver;

public BraveTabGroupUiCoordinator(
@NonNull Activity activity,
Expand Down Expand Up @@ -94,6 +97,41 @@ public void initializeWithNative(
Activity activity,
BottomControlsCoordinator.BottomControlsVisibilityController visibilityController,
Callback<Object> onModelTokenChange) {
// Fix for the null object crash at TabGroupSyncFeatures.isTabGroupSyncEnabled
// Stack:
// at TabGroupSyncFeatures.isTabGroupSyncEnabled (TabGroupSyncFeatures.java:18)
// at TabGroupUiMediator.<init> (TabGroupUiMediator.java:143)
// at TabGroupUiCoordinator.initializeWithNative (TabGroupUiCoordinator.java:238)
// at BraveTabGroupUiCoordinator.initializeWithNative (BraveTabGroupUiCoordinator.java:97)
// at BottomControlsCoordinator.lambda$new$1 (BottomControlsCoordinator.java:148)
//
// Profile at TabGroupUiCoordinator can be null.
// Upstream does not have this issue because they don't use BottomControlsCoordinator
if (ProfileManager.isInitialized()) {
callSuperInitializeWithNative(activity, visibilityController, onModelTokenChange);
} else {
// Profile is not yet ready, continue initialization when it will be ready
mProfileManagerObserver =
new ProfileManager.Observer() {
@Override
public void onProfileAdded(Profile profile) {
ProfileManager.removeObserver(mProfileManagerObserver);

callSuperInitializeWithNative(
activity, visibilityController, onModelTokenChange);
}

@Override
public void onProfileDestroyed(Profile profile) {}
};
ProfileManager.addObserver(mProfileManagerObserver);
}
}

private void callSuperInitializeWithNative(
Activity activity,
BottomControlsCoordinator.BottomControlsVisibilityController visibilityController,
Callback<Object> onModelTokenChange) {
super.initializeWithNative(activity, visibilityController, onModelTokenChange);

mIncognitoStateObserver =
Expand Down

0 comments on commit 01038a1

Please sign in to comment.