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

Unified Diff: chrome/android/java/src/org/chromium/chrome/browser/offlinepages/OfflinePageUtils.java

Issue 1894703002: [Offline pages] Removing offline pages from Bookmarks UI (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Marking more methods as visible for testing Created 4 years, 8 months 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/offlinepages/OfflinePageUtils.java
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/offlinepages/OfflinePageUtils.java b/chrome/android/java/src/org/chromium/chrome/browser/offlinepages/OfflinePageUtils.java
index 9333a7c9575e7ef45edf2aab3bc6f70fff26c773..3ffb456f354fc4ab4b2271103b2d230a54aa0596 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/offlinepages/OfflinePageUtils.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/offlinepages/OfflinePageUtils.java
@@ -4,14 +4,12 @@
package org.chromium.chrome.browser.offlinepages;
-import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.BatteryManager;
import android.os.Environment;
-import org.chromium.base.Callback;
import org.chromium.base.Log;
import org.chromium.base.metrics.RecordHistogram;
import org.chromium.base.metrics.RecordUserAction;
@@ -22,8 +20,9 @@ import org.chromium.chrome.browser.snackbar.SnackbarManager;
import org.chromium.chrome.browser.snackbar.SnackbarManager.SnackbarController;
import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.tabmodel.TabModelSelector;
-import org.chromium.components.offlinepages.FeatureMode;
+import org.chromium.components.bookmarks.BookmarkId;
import org.chromium.content_public.browser.LoadUrlParams;
+import org.chromium.content_public.browser.WebContents;
import org.chromium.net.ConnectionType;
import org.chromium.net.NetworkChangeNotifier;
import org.chromium.ui.base.PageTransition;
@@ -55,80 +54,53 @@ public class OfflinePageUtils {
}
/**
- * Returns true if the stoarge is almost full which indicates that the user probably needs to
- * free up some space.
- */
- public static boolean isStorageAlmostFull() {
- return getFreeSpaceInBytes() < STORAGE_ALMOST_FULL_THRESHOLD_BYTES;
- }
-
- /**
* Returns true if the network is connected.
*/
public static boolean isConnected() {
return NetworkChangeNotifier.isOnline();
}
+ /*
+ * Save an offline copy for the bookmarked page asynchronously.
+ *
+ * @param bookmarkId The ID of the page to save an offline copy.
+ * @param tab A {@link Tab} object.
+ * @param callback The callback to be invoked when the offline copy is saved.
+ */
+ public static void saveBookmarkOffline(BookmarkId bookmarkId, Tab tab) {
+ // If bookmark ID is missing there is nothing to save here.
+ if (bookmarkId == null) return;
+
+ // Making sure the feature is enabled.
+ if (!OfflinePageBridge.isEnabled()) return;
+
+ // Making sure tab is worth keeping.
+ if (shouldSkipSavingTabOffline(tab)) return;
+
+ OfflinePageBridge offlinePageBridge = OfflinePageBridge.getForProfile(tab.getProfile());
+ if (offlinePageBridge == null) return;
+
+ WebContents webContents = tab.getWebContents();
+ ClientId clientId = ClientId.createClientIdForBookmarkId(bookmarkId);
+
+ // TODO(fgorski): Ensure that request is queued if the model is not loaded.
+ offlinePageBridge.savePage(webContents, clientId, new OfflinePageBridge.SavePageCallback() {
+ @Override
+ public void onSavePageDone(int savePageResult, String url, long offlineId) {
+ // TODO(fgorski): Decide if we need to do anything with result.
+ // Perhaps some UMA reporting, but that can really happen someplace else.
+ }
+ });
+ }
+
/**
- * Finds out the appropriate resource ID of UI string shown to the user.
- * @param stringResId The resource ID of UI string used when 'bookmarks' name is used in UI
- * strings.
- * return The resource ID of UI string shown to the user, depending on the experiment.
+ * Indicates whether we should skip saving the given tab as an offline page.
+ * A tab shouldn't be saved offline if it shows an error page or a sad tab page.
*/
- public static int getStringId(int stringResId) {
- if (!OfflinePageBridge.isEnabled()) {
- return stringResId;
- }
- if (OfflinePageBridge.getFeatureMode() != FeatureMode.ENABLED_AS_SAVED_PAGES) {
- return stringResId;
- }
- if (stringResId == R.string.bookmark_action_bar_delete) {
- return R.string.offline_pages_action_bar_delete;
- } else if (stringResId == R.string.bookmark_action_bar_move) {
- return R.string.offline_pages_action_bar_move;
- } else if (stringResId == R.string.bookmark_action_bar_search) {
- return R.string.offline_pages_action_bar_search;
- } else if (stringResId == R.string.edit_bookmark) {
- return R.string.offline_pages_edit_item;
- } else if (stringResId == R.string.bookmark_drawer_all_items) {
- return R.string.offline_pages_all_items;
- } else if (stringResId == R.string.bookmark_title_bar_all_items) {
- return R.string.offline_pages_all_items;
- } else if (stringResId == R.string.bookmarks) {
- return R.string.offline_pages_saved_pages;
- } else if (stringResId == R.string.menu_bookmarks) {
- return R.string.menu_bookmarks_offline_pages;
- } else if (stringResId == R.string.ntp_bookmarks) {
- return R.string.offline_pages_ntp_button_name;
- } else if (stringResId == R.string.accessibility_ntp_toolbar_btn_bookmarks) {
- return R.string.offline_pages_ntp_button_accessibility;
- } else if (stringResId == R.string.bookmarks_folder_empty) {
- return R.string.offline_pages_folder_empty;
- } else if (stringResId == R.string.new_tab_incognito_message) {
- return R.string.offline_pages_new_tab_incognito_message;
- } else if (stringResId == R.string.offline_pages_as_bookmarks_page_saved) {
- return R.string.offline_pages_page_saved;
- } else if (stringResId == R.string.offline_pages_as_bookmarks_page_saved_folder) {
- return R.string.offline_pages_page_saved_folder;
- } else if (stringResId == R.string.offline_pages_as_bookmarks_page_skipped) {
- return R.string.offline_pages_page_skipped;
- } else if (stringResId
- == R.string.offline_pages_as_bookmarks_page_saved_storage_near_full) {
- return R.string.offline_pages_page_saved_storage_near_full;
- } else if (stringResId == R.string.offline_pages_as_bookmarks_page_failed_to_save) {
- return R.string.offline_pages_page_failed_to_save;
- } else if (stringResId
- == R.string.offline_pages_as_bookmarks_page_failed_to_save_storage_near_full) {
- return R.string.offline_pages_page_failed_to_save_storage_near_full;
- } else if (stringResId == R.string.offline_pages_as_bookmarks_storage_space_message) {
- return R.string.offline_pages_storage_space_message;
- } else if (stringResId == R.string.offline_pages_as_bookmarks_viewing_offline_page) {
- return R.string.offline_pages_viewing_offline_page;
- } else if (stringResId == R.string.offline_pages_as_bookmarks_offline_page_size) {
- return R.string.bookmark_offline_page_size;
- } else {
- return stringResId;
- }
+ private static boolean shouldSkipSavingTabOffline(Tab tab) {
+ WebContents webContents = tab.getWebContents();
+ return tab.isShowingErrorPage() || tab.isShowingSadTab() || webContents == null
+ || webContents.isDestroyed() || webContents.isIncognito();
}
/**
@@ -190,69 +162,16 @@ public class OfflinePageUtils {
if (tabId == Tab.INVALID_TAB_ID) return;
Log.d(TAG, "showReloadSnackbar called with controller " + snackbarController);
- final int snackbarTextId = getStringId(R.string.offline_pages_viewing_offline_page);
- Snackbar snackbar = Snackbar.make(context.getString(snackbarTextId), snackbarController,
- Snackbar.TYPE_ACTION)
- .setSingleLine(false)
- .setAction(context.getString(R.string.reload), tabId);
+ Snackbar snackbar =
+ Snackbar.make(context.getString(R.string.offline_pages_viewing_offline_page),
+ snackbarController, Snackbar.TYPE_ACTION)
+ .setSingleLine(false)
+ .setAction(context.getString(R.string.reload), tabId);
snackbar.setDuration(SNACKBAR_DURATION);
snackbarManager.showSnackbar(snackbar);
}
/**
- * Creates a snackbar controller for a case where "Free up space" button is shown to clean up
- * space taken by the offline pages.
- */
- public static SnackbarController createSnackbarControllerForFreeUpSpaceButton(
- final OfflinePageBridge offlinePageBridge, final SnackbarManager snackbarManager,
- final Activity activity) {
- return new SnackbarController() {
- @Override
- public void onDismissNoAction(Object actionData) {
- // This method will be called only if the snackbar is dismissed by timeout.
- RecordUserAction.record(
- "OfflinePages.SaveStatusSnackbar.FreeUpSpaceButtonNotClicked");
- }
-
- @Override
- public void onAction(Object actionData) {
- RecordUserAction.record("OfflinePages.SaveStatusSnackbar.FreeUpSpaceButtonClicked");
- Callback<OfflinePageStorageSpacePolicy> callback =
- getStorageSpacePolicyCallback(offlinePageBridge, snackbarManager, activity);
-
- OfflinePageStorageSpacePolicy.create(offlinePageBridge, callback);
- }
- };
- }
-
- private static Callback<OfflinePageStorageSpacePolicy> getStorageSpacePolicyCallback(
- final OfflinePageBridge offlinePageBridge, final SnackbarManager snackbarManager,
- final Activity activity) {
- return new Callback<OfflinePageStorageSpacePolicy>() {
- @Override
- public void onResult(OfflinePageStorageSpacePolicy policy) {
- if (policy.hasPagesToCleanUp()) {
- OfflinePageFreeUpSpaceCallback callback = new OfflinePageFreeUpSpaceCallback() {
- @Override
- public void onFreeUpSpaceDone() {
- snackbarManager.showSnackbar(
- OfflinePageFreeUpSpaceDialog.createStorageClearedSnackbar(
- activity));
- }
- @Override
- public void onFreeUpSpaceCancelled() {}
- };
- OfflinePageFreeUpSpaceDialog dialog =
- OfflinePageFreeUpSpaceDialog.newInstance(offlinePageBridge, callback);
- dialog.show(activity.getFragmentManager(), null);
- } else {
- OfflinePageOpenStorageSettingsDialog.showDialog(activity);
- }
- }
- };
- }
-
- /**
* Gets a snackbar controller that we can use to show our snackbar.
* @param tabModelSelector used to retrieve a tab by ID
*/

Powered by Google App Engine
This is Rietveld 408576698