Skip to content

Commit

Permalink
[Android] Fix crash when signing out from CBD
Browse files Browse the repository at this point in the history
The crash was caused by a scenario where ClearBrowsingDataFragment is
hosted in SettingsActivity indirectly via
ClearBrowsingDataTabsFragment (disable QuickDeleteAndroidFollowup
to trigger this behavior).
When ClearBrowsingDataFragment is instantiated indirectly - the code
in SettingsActivity to inject SnackbarManager doesn't trigger, so
mSnackbarManager in ClearBrowsingDataFragment was null, causing a
crash. This CL changes how ClearBrowsingDataFragment obtains
SnackbarManager (this code no longer depends on how
ClearBrowsingDataFragment is instantiated) and thus fixes the crash.

Bug: 344531913
Change-Id: I9dfb058528d877e206378083f36fd87e0782ecbb
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5625862
Reviewed-by: Samar Chehade-Lepleux <samarchehade@google.com>
Commit-Queue: Samar Chehade-Lepleux <samarchehade@google.com>
Auto-Submit: Boris Sazonov <bsazonov@chromium.org>
Code-Coverage: findit-for-me@appspot.gserviceaccount.com <findit-for-me@appspot.gserviceaccount.com>
Cr-Commit-Position: refs/heads/main@{#1314509}
  • Loading branch information
Boris Sazonov authored and Chromium LUCI CQ committed Jun 13, 2024
1 parent fc26a88 commit b9ea978
Show file tree
Hide file tree
Showing 3 changed files with 2 additions and 11 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -243,7 +243,6 @@ public void setShouldAnnounceCounterResult(boolean value) {

private Profile mProfile;
private SigninManager mSigninManager;
private SnackbarManager mSnackbarManager;

private ProgressDialog mProgressDialog;
private Item[] mItems;
Expand Down Expand Up @@ -788,18 +787,14 @@ SpannableString buildSignOutOfChromeText() {
requireContext(), createSignOutOfChromeCallback())));
}

public void setSnackbarManager(SnackbarManager snackbarManager) {
mSnackbarManager = snackbarManager;
}

private Callback<View> createSignOutOfChromeCallback() {
return view ->
SignOutCoordinator.startSignOutFlow(
requireContext(),
mProfile,
getFragmentManager(),
((ModalDialogManagerHolder) getActivity()).getModalDialogManager(),
mSnackbarManager,
((SnackbarManager.SnackbarManageable) getActivity()).getSnackbarManager(),
SignoutReason.USER_CLICKED_SIGNOUT_FROM_CLEAR_BROWSING_DATA_PAGE,
() -> {});
}
Expand Down Expand Up @@ -925,7 +920,6 @@ private Activity getLastFocusedActivity() {

/** A method to show the post-delete snack-bar confirmation. */
private void showSnackbar() {
// This snack bar is not shown from SettingsActivity. So we can't use mSnackbarManager.
SnackbarManager snackbarManager = null;
Activity activity = getLastFocusedActivity();
if (activity instanceof SnackbarManager.SnackbarManageable) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,6 @@
import org.chromium.chrome.browser.autofill.settings.AutofillLocalIbanEditor;
import org.chromium.chrome.browser.back_press.BackPressHelper;
import org.chromium.chrome.browser.back_press.SecondaryActivityBackPressUma.SecondaryActivity;
import org.chromium.chrome.browser.browsing_data.ClearBrowsingDataFragment;
import org.chromium.chrome.browser.browsing_data.ClearBrowsingDataFragmentBasic;
import org.chromium.chrome.browser.feedback.FragmentHelpAndFeedbackLauncher;
import org.chromium.chrome.browser.feedback.HelpAndFeedbackLauncherImpl;
Expand Down Expand Up @@ -374,9 +373,6 @@ public void onAttachedToWindow() {
((PrivacySandboxSettingsBaseFragment) fragment)
.setSnackbarManager(getSnackbarManager());
}
if (fragment instanceof ClearBrowsingDataFragment) {
((ClearBrowsingDataFragment) fragment).setSnackbarManager(mSnackbarManager);
}
if (fragment instanceof AccountManagementFragment) {
((AccountManagementFragment) fragment).setSnackbarManager(mSnackbarManager);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@ public static void startSignOutFlow(
@SignoutReason int signOutReason,
Runnable onSignOut) {
ThreadUtils.assertOnUiThread();
assert snackbarManager != null;
assert onSignOut != null;
validateSignOutReason(profile, signOutReason);

Expand Down

0 comments on commit b9ea978

Please sign in to comment.