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