From 49c34d0a46b0aacdb88c539215b9988bbbc354e7 Mon Sep 17 00:00:00 2001 From: Serg Date: Mon, 26 Jan 2026 14:13:05 -0500 Subject: [PATCH] [Android] Fixes a crash inside ReturnToChromeUtil.showHomeSurfaceUiOnNtp when HomeSurfaceTracker object is null. (#33408) [Android] Fixes a crash inside ReturnToChromeUtil.showHomeSurfaceUiOnNtp when HomeSurfaceTracker object is null. Resolves: https://github.com/brave/brave-browser/issues/52283 --- android/java/apk_for_test.flags | 1 + .../browser/tasks/BraveReturnToChromeUtil.java | 13 +++++++++++++ .../org/chromium/chrome/browser/BytecodeTest.java | 9 +++++++++ .../BraveReturnToChromeUtilClassAdapter.java | 5 +++++ 4 files changed, 28 insertions(+) diff --git a/android/java/apk_for_test.flags b/android/java/apk_for_test.flags index 59bcc45fd39..f68b1abcf94 100644 --- a/android/java/apk_for_test.flags +++ b/android/java/apk_for_test.flags @@ -644,6 +644,7 @@ -keep class org.chromium.chrome.browser.tasks.ReturnToChromeUtil { *** shouldShowNtpAsHomeSurfaceAtStartup(...); *** createNewTabAndShowHomeSurfaceUi(...); + *** showHomeSurfaceUiOnNtp(...); } -keep class org.chromium.chrome.browser.IntentHandler { diff --git a/android/java/org/chromium/chrome/browser/tasks/BraveReturnToChromeUtil.java b/android/java/org/chromium/chrome/browser/tasks/BraveReturnToChromeUtil.java index 9665f3b8b02..9b4c0b5db9d 100644 --- a/android/java/org/chromium/chrome/browser/tasks/BraveReturnToChromeUtil.java +++ b/android/java/org/chromium/chrome/browser/tasks/BraveReturnToChromeUtil.java @@ -143,4 +143,17 @@ public final class BraveReturnToChromeUtil { return ReturnToChromeUtil.createNewTabAndShowHomeSurfaceUi( tabCreator, homeSurfaceTracker, tabModelSelector, lastActiveTabUrl, lastActiveTab); } + + /** + * Shows the home surface UI on the given NTP. This is a wrapper around the upstream method that + * adds a null check for homeSurfaceTracker to prevent crashes when the tracker is not + * initialized. + */ + static void showHomeSurfaceUiOnNtp( + Tab ntpTab, Tab lastActiveTab, @Nullable HomeSurfaceTracker homeSurfaceTracker) { + if (homeSurfaceTracker == null) { + return; + } + ReturnToChromeUtil.showHomeSurfaceUiOnNtp(ntpTab, lastActiveTab, homeSurfaceTracker); + } } diff --git a/android/javatests/org/chromium/chrome/browser/BytecodeTest.java b/android/javatests/org/chromium/chrome/browser/BytecodeTest.java index e140a1a34e2..232b0399202 100644 --- a/android/javatests/org/chromium/chrome/browser/BytecodeTest.java +++ b/android/javatests/org/chromium/chrome/browser/BytecodeTest.java @@ -736,6 +736,15 @@ public class BytecodeTest { TabModelSelector.class, String.class, Tab.class)); + Assert.assertTrue( + methodExists( + "org/chromium/chrome/browser/tasks/ReturnToChromeUtil", + "showHomeSurfaceUiOnNtp", + MethodModifier.STATIC, + void.class, + Tab.class, + Tab.class, + HomeSurfaceTracker.class)); Assert.assertTrue( methodExists( "org/chromium/chrome/browser/IntentHandler", diff --git a/build/android/bytecode/java/org/brave/bytecode/BraveReturnToChromeUtilClassAdapter.java b/build/android/bytecode/java/org/brave/bytecode/BraveReturnToChromeUtilClassAdapter.java index b19f6a58829..574792de619 100644 --- a/build/android/bytecode/java/org/brave/bytecode/BraveReturnToChromeUtilClassAdapter.java +++ b/build/android/bytecode/java/org/brave/bytecode/BraveReturnToChromeUtilClassAdapter.java @@ -25,5 +25,10 @@ public class BraveReturnToChromeUtilClassAdapter extends BraveClassVisitor { sReturnToChromeUtilClassName, "createNewTabAndShowHomeSurfaceUi", sBraveReturnToChromeUtilClassName); + + changeMethodOwner( + sReturnToChromeUtilClassName, + "showHomeSurfaceUiOnNtp", + sBraveReturnToChromeUtilClassName); } }