Commit 056b3197 authored by David Maunder's avatar David Maunder Committed by Chromium LUCI CQ

Fix crash when openerAppId is null in CriticalPersistedTabData

Protocol buffers do not allow fields to be null so openerAppId is
converted to an empty string if it is null on serialize() and then
converted back again on deserialize().

Bug: 1161980
Change-Id: Id0cedad8b47b1f40938c934536c18769d874ca71
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2611899Reviewed-by: default avatarYusuf Ozuysal <yusufo@chromium.org>
Commit-Queue: David Maunder <davidjm@chromium.org>
Cr-Commit-Position: refs/heads/master@{#840448}
parent 95d619c5
...@@ -252,4 +252,20 @@ public class CriticalPersistedTabDataTest { ...@@ -252,4 +252,20 @@ public class CriticalPersistedTabDataTest {
CriticalPersistedTabData.getContentStateByteArray( CriticalPersistedTabData.getContentStateByteArray(
deserialized.getWebContentsState().buffer())); deserialized.getWebContentsState().buffer()));
} }
@UiThreadTest
@SmallTest
@Test
public void testOpenerAppIdNull() {
Tab tab = mockTab(TAB_ID, false);
CriticalPersistedTabData criticalPersistedTabData = new CriticalPersistedTabData(tab, "",
"", PARENT_ID, ROOT_ID, TIMESTAMP, WEB_CONTENTS_STATE, CONTENT_STATE_VERSION, null,
THEME_COLOR, LAUNCH_TYPE_AT_CREATION);
byte[] serialized = criticalPersistedTabData.serialize();
PersistedTabDataConfiguration config = PersistedTabDataConfiguration.get(
ShoppingPersistedTabData.class, tab.isIncognito());
CriticalPersistedTabData deserialized =
new CriticalPersistedTabData(tab, serialized, config.getStorage(), config.getId());
Assert.assertEquals(null, deserialized.getOpenerAppId());
}
} }
...@@ -225,7 +225,9 @@ public class CriticalPersistedTabData extends PersistedTabData { ...@@ -225,7 +225,9 @@ public class CriticalPersistedTabData extends PersistedTabData {
: new GURL(mWebContentsState.getVirtualUrlFromState()); : new GURL(mWebContentsState.getVirtualUrlFromState());
mTitle = mWebContentsState.getDisplayTitleFromState(); mTitle = mWebContentsState.getDisplayTitleFromState();
mContentStateVersion = criticalPersistedTabDataProto.getContentStateVersion(); mContentStateVersion = criticalPersistedTabDataProto.getContentStateVersion();
mOpenerAppId = criticalPersistedTabDataProto.getOpenerAppId(); mOpenerAppId = TextUtils.isEmpty(criticalPersistedTabDataProto.getOpenerAppId())
? null
: criticalPersistedTabDataProto.getOpenerAppId();
mThemeColor = criticalPersistedTabDataProto.getThemeColor(); mThemeColor = criticalPersistedTabDataProto.getThemeColor();
mTabLaunchTypeAtCreation = mTabLaunchTypeAtCreation =
getLaunchType(criticalPersistedTabDataProto.getLaunchTypeAtCreation()); getLaunchType(criticalPersistedTabDataProto.getLaunchTypeAtCreation());
...@@ -369,7 +371,7 @@ public class CriticalPersistedTabData extends PersistedTabData { ...@@ -369,7 +371,7 @@ public class CriticalPersistedTabData extends PersistedTabData {
: ByteString.copyFrom( : ByteString.copyFrom(
getContentStateByteArray(webContentsState.buffer()))) getContentStateByteArray(webContentsState.buffer())))
.setContentStateVersion(mContentStateVersion) .setContentStateVersion(mContentStateVersion)
.setOpenerAppId(mOpenerAppId) .setOpenerAppId(mOpenerAppId == null ? "" : mOpenerAppId)
.setThemeColor(mThemeColor) .setThemeColor(mThemeColor)
.setLaunchTypeAtCreation(getLaunchType(mTabLaunchTypeAtCreation)) .setLaunchTypeAtCreation(getLaunchType(mTabLaunchTypeAtCreation))
.build() .build()
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment