Commit 8a5c1395 authored by David Maunder's avatar David Maunder Committed by Commit Bot

Move PersistedTabData to Tab module

Currently PersistedTabData is in chrome/android. This causes problems
as we migrate tab fields to the CriticalPersistedTabData UserData
object.

Bug: 1105667
Change-Id: I4364df3dc70723f2f522714afac64ee4d2c1d757
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2300328Reviewed-by: default avatarDavid Trainor <dtrainor@chromium.org>
Commit-Queue: David Maunder <davidjm@chromium.org>
Cr-Commit-Position: refs/heads/master@{#789679}
parent c929f156
......@@ -272,7 +272,6 @@ android_library("chrome_java") {
":chrome_public_android_manifest",
":chrome_public_apk_template_resources",
":chrome_version_constants",
":critical_persisted_tab_data_proto_java",
":partner_location_descriptor_proto_java",
":update_proto_java",
":usage_stats_proto_java",
......@@ -717,11 +716,6 @@ proto_java_library("partner_location_descriptor_proto_java") {
sources = [ "$proto_path/partner_location_descriptor.proto" ]
}
proto_java_library("critical_persisted_tab_data_proto_java") {
proto_path = "java/src/org/chromium/chrome/browser/tab/state/proto"
sources = [ "$proto_path/critical_persisted_tab_data.proto" ]
}
proto_java_library("update_proto_java") {
proto_path = "java/src/org/chromium/chrome/browser/omaha/metrics"
sources = [ "$proto_path/update_success_tracking.proto" ]
......
......@@ -1526,14 +1526,6 @@ chrome_java_sources = [
"java/src/org/chromium/chrome/browser/tab/TabWebContentsObserver.java",
"java/src/org/chromium/chrome/browser/tab/TabWebContentsUserData.java",
"java/src/org/chromium/chrome/browser/tab/TrustedCdn.java",
"java/src/org/chromium/chrome/browser/tab/state/CriticalPersistedTabData.java",
"java/src/org/chromium/chrome/browser/tab/state/EncryptedFilePersistedTabDataStorage.java",
"java/src/org/chromium/chrome/browser/tab/state/FilePersistedTabDataStorage.java",
"java/src/org/chromium/chrome/browser/tab/state/MockPersistedTabData.java",
"java/src/org/chromium/chrome/browser/tab/state/PersistedTabData.java",
"java/src/org/chromium/chrome/browser/tab/state/PersistedTabDataConfiguration.java",
"java/src/org/chromium/chrome/browser/tab/state/PersistedTabDataFactory.java",
"java/src/org/chromium/chrome/browser/tab/state/PersistedTabDataStorage.java",
"java/src/org/chromium/chrome/browser/tabbed_mode/TabbedAppMenuPropertiesDelegate.java",
"java/src/org/chromium/chrome/browser/tabbed_mode/TabbedNavigationBarColorController.java",
"java/src/org/chromium/chrome/browser/tabbed_mode/TabbedRootUiCoordinator.java",
......
......@@ -23,15 +23,26 @@ android_library("java") {
"java/src/org/chromium/chrome/browser/tab/TabWebContentsDelegateAndroid.java",
"java/src/org/chromium/chrome/browser/tab/WebContentsState.java",
"java/src/org/chromium/chrome/browser/tab/WebContentsStateBridge.java",
"java/src/org/chromium/chrome/browser/tab/state/CriticalPersistedTabData.java",
"java/src/org/chromium/chrome/browser/tab/state/EncryptedFilePersistedTabDataStorage.java",
"java/src/org/chromium/chrome/browser/tab/state/FilePersistedTabDataStorage.java",
"java/src/org/chromium/chrome/browser/tab/state/MockPersistedTabData.java",
"java/src/org/chromium/chrome/browser/tab/state/PersistedTabData.java",
"java/src/org/chromium/chrome/browser/tab/state/PersistedTabDataConfiguration.java",
"java/src/org/chromium/chrome/browser/tab/state/PersistedTabDataFactory.java",
"java/src/org/chromium/chrome/browser/tab/state/PersistedTabDataStorage.java",
]
# TabSelectionType, TabLaunchType
srcjar_deps = [ "//chrome/browser/ui:tab_model_enums_java" ]
deps = [
":critical_persisted_tab_data_proto_java",
":jni_headers",
"//base:base_java",
"//base:base_java",
"//base:jni_java",
"//chrome/browser/android/crypto:java",
"//chrome/browser/contextmenu:java",
"//chrome/browser/profiles/android:java",
"//chrome/browser/ui/android/native_page:java",
......@@ -43,6 +54,8 @@ android_library("java") {
"//components/find_in_page/android:java",
"//components/navigation_interception/android:navigation_interception_java",
"//content/public/android:content_java",
"//third_party/android_deps:androidx_core_core_java",
"//third_party/android_deps:com_google_protobuf_protobuf_javalite_java",
"//ui/android:ui_full_java",
]
......@@ -68,3 +81,8 @@ source_set("android_internal") {
"//content/public/browser",
]
}
proto_java_library("critical_persisted_tab_data_proto_java") {
proto_path = "java/src/org/chromium/chrome/browser/tab/state/proto"
sources = [ "$proto_path/critical_persisted_tab_data.proto" ]
}
......@@ -3,7 +3,9 @@ noparent = True
include_rules = [
"-chrome",
"+base/android/java/src/org/chromium/base",
"+chrome/browser/android/crypto/java",
"+chrome/browser/contextmenu/java",
"+chrome/browser/tab/java",
"+chrome/browser/profiles/android/java",
"+chrome/browser/ui/android/native_page",
"+components/browser_ui/util/android/java",
......
......@@ -4,6 +4,8 @@
package org.chromium.chrome.browser.tab.state;
import android.graphics.Color;
import androidx.annotation.VisibleForTesting;
import com.google.protobuf.ByteString;
......@@ -12,14 +14,7 @@ import com.google.protobuf.InvalidProtocolBufferException;
import org.chromium.base.Callback;
import org.chromium.base.Log;
import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.tab.TabAssociatedApp;
import org.chromium.chrome.browser.tab.TabImpl;
import org.chromium.chrome.browser.tab.TabLaunchType;
import org.chromium.chrome.browser.tab.TabState;
import org.chromium.chrome.browser.tab.TabStateExtractor;
import org.chromium.chrome.browser.tab.TabStateFileManager;
import org.chromium.chrome.browser.tab.TabThemeColorHelper;
import org.chromium.chrome.browser.tab.WebContentsState;
import org.chromium.chrome.browser.tab.proto.CriticalPersistedTabData.CriticalPersistedTabDataProto;
import java.util.Locale;
......@@ -32,6 +27,8 @@ public class CriticalPersistedTabData extends PersistedTabData {
private static final Class<CriticalPersistedTabData> USER_DATA_KEY =
CriticalPersistedTabData.class;
private static final int UNSPECIFIED_THEME_COLOR = Color.TRANSPARENT;
private int mParentId;
private int mRootId;
private long mTimestampMillis;
......@@ -126,31 +123,16 @@ public class CriticalPersistedTabData extends PersistedTabData {
@VisibleForTesting(otherwise = VisibleForTesting.PRIVATE)
public static CriticalPersistedTabData build(Tab tab) {
TabImpl tabImpl = (TabImpl) tab;
// TODO(crbug.com/1059634) this can be removed once we access all fields
// from CriticalPersistedTabData
// The following is only needed as an interim measure until all
// fields are migrated to {@link CriticalPersistedTabData}. At that point
// This function will only be used to acquire the {@link CriticalPersistedTabData}
// from the {@link Tab}.
if (tabImpl.isInitialized()) {
WebContentsState webContentsState = TabStateExtractor.getWebContentsState(tabImpl);
PersistedTabDataConfiguration config = PersistedTabDataConfiguration.get(
CriticalPersistedTabData.class, tab.isIncognito());
CriticalPersistedTabData criticalPersistedTabData = new CriticalPersistedTabData(tab,
tab.getParentId(), tab.getId(), tab.getTimestampMillis(),
webContentsState != null ? TabStateFileManager.getContentStateByteArray(
webContentsState.buffer())
: null,
WebContentsState.CONTENTS_STATE_CURRENT_VERSION, TabAssociatedApp.getAppId(tab),
TabThemeColorHelper.isUsingColorFromTabContents(tab)
? TabThemeColorHelper.getColor(tab)
: TabState.UNSPECIFIED_THEME_COLOR,
tab.getLaunchTypeAtInitialTabCreation(), config.storage, config.id);
return criticalPersistedTabData;
}
CriticalPersistedTabData criticalPersistedTabData = new CriticalPersistedTabData(tab);
criticalPersistedTabData.setRootId(tab.getId());
PersistedTabDataConfiguration config = PersistedTabDataConfiguration.get(
CriticalPersistedTabData.class, tab.isIncognito());
// CriticalPersistedTabData is initialized with default values
CriticalPersistedTabData criticalPersistedTabData =
new CriticalPersistedTabData(tab, tab.getParentId(), tab.getId(),
tab.getTimestampMillis(), null, -1, "", UNSPECIFIED_THEME_COLOR,
tab.getLaunchTypeAtInitialTabCreation() == null
? TabLaunchType.FROM_LINK
: tab.getLaunchTypeAtInitialTabCreation(),
config.storage, config.id);
return criticalPersistedTabData;
}
......
......@@ -4,18 +4,20 @@
package org.chromium.chrome.browser.tab.state;
import android.content.Context;
import androidx.annotation.MainThread;
import androidx.annotation.VisibleForTesting;
import androidx.core.util.AtomicFile;
import org.chromium.base.Callback;
import org.chromium.base.ContextUtils;
import org.chromium.base.Log;
import org.chromium.base.StreamUtil;
import org.chromium.base.ThreadUtils;
import org.chromium.base.metrics.RecordHistogram;
import org.chromium.base.task.AsyncTask;
import org.chromium.base.task.PostTask;
import org.chromium.chrome.browser.tabpersistence.TabStateDirectory;
import org.chromium.content_public.browser.UiThreadTaskTraits;
import java.io.File;
......@@ -36,6 +38,16 @@ public class FilePersistedTabDataStorage implements PersistedTabDataStorage {
};
private static final int DECREMENT_SEMAPHORE_VAL = 1;
private static final String sBaseDirName = "persisted_tab_data_storage";
private static class BaseStorageDirectoryHolder {
private static File sDirectory;
static {
sDirectory =
ContextUtils.getApplicationContext().getDir(sBaseDirName, Context.MODE_PRIVATE);
}
}
@VisibleForTesting(otherwise = VisibleForTesting.PRIVATE)
protected LinkedList<StorageRequest> mQueue = new LinkedList<>();
......@@ -86,10 +98,14 @@ public class FilePersistedTabDataStorage implements PersistedTabDataStorage {
@VisibleForTesting(otherwise = VisibleForTesting.PRIVATE)
protected File getFile(int tabId, String dataId) {
return new File(TabStateDirectory.getOrCreateTabbedModeStateDirectory(),
return new File(getOrCreateBaseStorageDirectory(),
String.format(Locale.ENGLISH, "%d%s", tabId, dataId));
}
public static File getOrCreateBaseStorageDirectory() {
return BaseStorageDirectoryHolder.sDirectory;
}
/**
* Request for saving, restoring and deleting {@link PersistedTabData}
*/
......
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