0

[TabGroups] Fix crash when restoring grouped tab in app like browsers

The crash happens when a grouped tab is restored into a browser that
does not support tab groups. In this scenario, we will touch multiple
different kinds of CHECKS / nullptr dereferences which will crash the
browser.

Changes:
- CHECK TabGroupModel, TabStripModel, and TabGroup have values before
use in BrowserLiveTabContext::SetVisualDataForGroup and
BrowserLiveTabContext::GetVisualDataForGroup
- Restore the grouped tab as an ungrouped tab if there is no
TabGroupModel for the browser
- Adds a regression test for this specific scenario

Change-Id: I0230b7a7c86c31c77740488ce8959de77bd20865
Bug: 368139715
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5888488
Commit-Queue: Darryl James <dljames@chromium.org>
Reviewed-by: Eshwar Stalin <estalin@chromium.org>
Reviewed-by: Steven Luong <stluong@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1360585}
This commit is contained in:
dljames
2024-09-26 16:44:32 +00:00
committed by Chromium LUCI CQ
parent 8bfc04ecb8
commit 0d930717b9
3 changed files with 66 additions and 7 deletions

@ -10,6 +10,7 @@
#include <vector>
#include "base/compiler_specific.h"
#include "base/gtest_prod_util.h"
#include "components/prefs/pref_change_registrar.h"
#include "components/sessions/core/sessions_export.h"
#include "components/sessions/core/tab_restore_service.h"
@ -65,6 +66,8 @@ class SESSIONS_EXPORT TabRestoreServiceImpl : public TabRestoreService {
private:
friend class ::TabRestoreServiceImplTest;
FRIEND_TEST_ALL_PREFIXES(TabRestoreTest,
RestoreGroupInBrowserThatDoesNotSupportGroups);
class PersistenceDelegate;
void UpdatePersistenceDelegate();