From 0d05c9c6917bb8c4b5276ef11548c43af2405278 Mon Sep 17 00:00:00 2001 From: Xi Han Date: Mon, 5 Jun 2023 17:33:41 +0000 Subject: [PATCH] [StartTablet] Fix assert error ReturnToChromeUtil.willAddTab. (cherry picked from commit 2aab169e530ea857d8bd3a8bba64b2639ac21c91) Bug: 1450004 Change-Id: I736c2a0a4e7ddad6ce93285dcc120577f432d289 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4574994 Commit-Queue: Xi Han Reviewed-by: Theresa Sullivan Cr-Original-Commit-Position: refs/heads/main@{#1152024} Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4589270 Reviewed-by: Calder Kitagawa Cr-Commit-Position: refs/branch-heads/5790@{#358} Cr-Branched-From: 1d71a337b1f6e707a13ae074dca1e2c34905eb9f-refs/heads/main@{#1148114} --- .../browser/tasks/ReturnToChromeUtil.java | 18 ++++++++++++++++-- .../tasks/ReturnToChromeUtilUnitTest.java | 1 + 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tasks/ReturnToChromeUtil.java b/chrome/android/java/src/org/chromium/chrome/browser/tasks/ReturnToChromeUtil.java index af0a20457b926..57e5c8839441f 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/tasks/ReturnToChromeUtil.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/tasks/ReturnToChromeUtil.java @@ -587,11 +587,25 @@ public static Tab createNewTabAndShowHomeSurfaceUi(@NonNull TabCreator tabCreato TabModelObserver observer = new TabModelObserver() { @Override public void willAddTab(Tab tab, int type) { - assert TextUtils.equals(lastActiveTabUrl, tab.getUrl().getSpec()) - : "The URL of first Tab restored doesn't match the URL of the last active Tab read from the Tab state metadata file!"; + boolean isTabExpected = + TextUtils.equals(lastActiveTabUrl, tab.getUrl().getSpec()); + assert isTabExpected + : "The URL of first Tab restored doesn't match the URL of the last active " + + "Tab read from the Tab state metadata file! Existing Tab count = %d" + + tabModelSelector.getModel(false).getCount() + + "."; + if (!isTabExpected) { + return; + } showHomeSurfaceUiOnNtp(ntpTab, tab, homeSurfaceTracker); tabModelSelector.getModel(false).removeObserver(this); } + + @Override + public void restoreCompleted() { + // This would be no-op if the observer has been removed in willAddTab(). + tabModelSelector.getModel(false).removeObserver(this); + } }; tabModelSelector.getModel(false).addObserver(observer); } else { diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/tasks/ReturnToChromeUtilUnitTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/tasks/ReturnToChromeUtilUnitTest.java index ca9a76b5d2e72..1d98c14a3d2cb 100644 --- a/chrome/android/junit/src/org/chromium/chrome/browser/tasks/ReturnToChromeUtilUnitTest.java +++ b/chrome/android/junit/src/org/chromium/chrome/browser/tasks/ReturnToChromeUtilUnitTest.java @@ -828,6 +828,7 @@ public void testColdStartupWithOnlyLastActiveTabUrl() { mTabCreater, mHomeSurfaceTracker, mTabModelSelector, JUnitTestGURLs.URL_1, null); verify(mCurrentTabModel).addObserver(mTabModelObserverCaptor.capture()); + // Verifies if the added Tab matches the tracking URL, call showHomeSurfaceUi(). mTabModelObserverCaptor.getValue().willAddTab(mTab1, TabLaunchType.FROM_RESTORE); verify(mNewTabPage).showHomeSurfaceUi(eq(mTab1)); verify(mHomeSurfaceTracker).updateHomeSurfaceAndTrackingTabs(eq(mNtpTab), eq(mTab1));