Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(5597)

Unified Diff: chrome/android/java/src/org/chromium/chrome/browser/tabmodel/document/StorageDelegate.java

Issue 802343003: Upstream DocumentTabModelImpl and related classes (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Moved package, added OWNERS Created 6 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/android/java/src/org/chromium/chrome/browser/tabmodel/document/StorageDelegate.java
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/document/StorageDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/document/StorageDelegate.java
new file mode 100644
index 0000000000000000000000000000000000000000..2d2f7fe15bbf64766dec01337bfab2d07a428bb5
--- /dev/null
+++ b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/document/StorageDelegate.java
@@ -0,0 +1,154 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.chrome.browser.tabmodel.document;
+
+import android.content.Context;
+import android.util.Log;
+
+import org.chromium.base.ApplicationStatus;
+import org.chromium.chrome.browser.TabState;
+import org.chromium.chrome.browser.util.StreamUtil;
+
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+
+/**
+ * Contains functions for interacting with the file system.
+ */
+public class StorageDelegate {
+ private static final String TAG = "StorageDelegate";
+
+ /** Filename to use for the DocumentTabModel that stores regular tabs. */
+ private static final String REGULAR_FILE_NAME = "chrome_document_activity.store";
+
+ /** Directory to store TabState files in. */
+ private static final String STATE_DIRECTORY = "ChromeDocumentActivity";
+
+ /** The buffer size to use when reading the DocumentTabModel file, set to 4k bytes. */
+ private static final int BUF_SIZE = 0x1000;
+
+ /** Whether this is dealing with incognito state. */
+ protected final boolean mIsIncognito;
+
+ public StorageDelegate(boolean isIncognito) {
+ mIsIncognito = isIncognito;
+ }
+
+ /**
+ * Reads the file containing the minimum info required to restore the state of the
+ * {@link DocumentTabModel}.
+ * @return Byte buffer containing the task file's data, or null if it wasn't read.
+ */
+ public byte[] readTaskFileBytes() {
+ // Incognito mode doesn't save its state out.
+ if (mIsIncognito) return null;
+
+ // Read in the file.
+ byte[] bytes = null;
+ FileInputStream streamIn = null;
+ try {
+ String filename = getFilename();
+ streamIn = ApplicationStatus.getApplicationContext().openFileInput(filename);
+
+ // Read the file from the file into the out stream.
+ ByteArrayOutputStream streamOut = new ByteArrayOutputStream();
+ byte[] buf = new byte[BUF_SIZE];
+ int r;
+ while ((r = streamIn.read(buf)) != -1) {
+ streamOut.write(buf, 0, r);
+ }
+ bytes = streamOut.toByteArray();
+ } catch (FileNotFoundException e) {
+ Log.e(TAG, "DocumentTabModel file not found.");
+ } catch (IOException e) {
+ Log.e(TAG, "I/O exception", e);
+ } finally {
+ StreamUtil.closeQuietly(streamIn);
+ }
+
+ return bytes;
+ }
+
+ /**
+ * Writes the file containing the minimum info required to restore the state of the
+ * {@link DocumentTabModel}.
+ * @param isIncognito Whether the TabModel is incognito.
+ * @param bytes Byte buffer containing the tab's data.
+ */
+ public void writeTaskFileBytes(byte[] bytes) {
+ // Incognito mode doesn't save its state out.
+ if (mIsIncognito) return;
+
+ FileOutputStream outputStream = null;
+ try {
+ outputStream = ApplicationStatus.getApplicationContext().openFileOutput(
+ getFilename(), Context.MODE_PRIVATE);
+ outputStream.write(bytes);
+ } catch (FileNotFoundException e) {
+ Log.e(TAG, "DocumentTabModel file not found", e);
+ } catch (IOException e) {
+ Log.e(TAG, "I/O exception", e);
+ } finally {
+ StreamUtil.closeQuietly(outputStream);
+ }
+ }
+
+ /** @return The directory that stores the TabState files. */
+ public File getStateDirectory() {
+ return ApplicationStatus.getApplicationContext().getDir(
+ STATE_DIRECTORY, Context.MODE_PRIVATE);
+ }
+
+ /**
+ * Restores the TabState with the given ID.
+ * @param tabId ID of the Tab.
+ * @return TabState for the Tab.
+ */
+ public TabState restoreTabState(int tabId) {
+ return TabState.restoreTabState(getTabFile(tabId), mIsIncognito);
+ }
+
+ /**
+ * Saves the TabState with the given ID.
+ * @param tabId ID of the Tab.
+ * @param state TabState for the Tab.
+ */
+ public void saveTabState(int tabId, TabState state) {
+ FileOutputStream stream = null;
+ try {
+ stream = new FileOutputStream(getTabFile(tabId));
+ TabState.saveState(stream, state, mIsIncognito);
+ } catch (FileNotFoundException exception) {
+ Log.e(TAG, "Failed to save out tab state for tab " + tabId, exception);
+ } catch (IOException exception) {
+ Log.e(TAG, "Failed to save out tab state.", exception);
+ } finally {
+ StreamUtil.closeQuietly(stream);
+ }
+ }
+
+ /**
+ * Deletes the TabState file for the given ID.
+ * @param tabId ID of the TabState file to delete.
+ */
+ public void deleteTabStateFile(int tabId) {
+ boolean success = getTabFile(tabId).delete();
+ if (!success) Log.w(TAG, "Failed to delete file for tab " + tabId);
+ }
+
+ private File getTabFile(int tabId) {
+ String tabStateFilename = TabState.getTabStateFilename(tabId, mIsIncognito);
+ return new File(getStateDirectory(), tabStateFilename);
+ }
+
+ /** @return the filename of the persisted TabModel state. */
+ private String getFilename() {
+ return mIsIncognito ? null : REGULAR_FILE_NAME;
+ }
+}

Powered by Google App Engine
This is Rietveld 408576698