[Android] Delete older browsing history.
Added new timerange OLDER_THAN_30_DAYS to delete the browsing history.
Added feature flag for the new timeperiod option in UI.
Added GetPeriodEnd() in BrowsingDataCounter. Subclasses need to take
GetPeriodEnd() into use in separate CLs.
Bug: 243833
Cq-Include-Trybots: master.tryserver.chromium.mac:ios-simulator-cronet;master.tryserver.chromium.mac:ios-simulator-full-configs
Change-Id: I35a605d54e88ea757bac20de382855c3bfef6bd7
Reviewed-on: https://chromium-review.googlesource.com/765488
Commit-Queue: Christian Dullweber <[email protected]>
Reviewed-by: Martin Šrámek <[email protected]>
Reviewed-by: Sylvain Defresne <[email protected]>
Reviewed-by: Ted Choc <[email protected]>
Reviewed-by: Ilya Sherman <[email protected]>
Reviewed-by: Christian Dullweber <[email protected]>
Cr-Commit-Position: refs/heads/master@{#517094}
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeFeatureList.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeFeatureList.java
index ea4067e..d3bba081 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeFeatureList.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeFeatureList.java
@@ -171,6 +171,7 @@
public static final String CHROME_HOME_SWIPE_VELOCITY_FEATURE = "ChromeHomeSwipeLogicVelocity";
public static final String CHROME_MEMEX = "ChromeMemex";
public static final String CHROME_SMART_SELECTION = "ChromeSmartSelection";
+ public static final String CLEAR_OLD_BROWSING_DATA = "ClearOldBrowsingData";
public static final String CONTENT_SUGGESTIONS_FAVICONS_FROM_NEW_SERVER =
"ContentSuggestionsFaviconsFromNewServer";
public static final String CONTENT_SUGGESTIONS_NOTIFICATIONS =
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/privacy/ClearBrowsingDataPreferences.java b/chrome/android/java/src/org/chromium/chrome/browser/preferences/privacy/ClearBrowsingDataPreferences.java
index 34c909f..45ad652 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/preferences/privacy/ClearBrowsingDataPreferences.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/preferences/privacy/ClearBrowsingDataPreferences.java
@@ -37,8 +37,10 @@
import org.chromium.chrome.browser.preferences.privacy.BrowsingDataCounterBridge.BrowsingDataCounterCallback;
import org.chromium.chrome.browser.widget.TintedDrawable;
+import java.util.ArrayList;
import java.util.Arrays;
import java.util.EnumSet;
+import java.util.List;
import java.util.concurrent.TimeUnit;
/**
@@ -355,18 +357,23 @@
private TimePeriodSpinnerOption[] getTimePeriodSpinnerOptions() {
Activity activity = getActivity();
- TimePeriodSpinnerOption[] options = new TimePeriodSpinnerOption[] {
- new TimePeriodSpinnerOption(TimePeriod.LAST_HOUR,
- activity.getString(R.string.clear_browsing_data_tab_period_hour)),
- new TimePeriodSpinnerOption(TimePeriod.LAST_DAY,
- activity.getString(R.string.clear_browsing_data_tab_period_24_hours)),
- new TimePeriodSpinnerOption(TimePeriod.LAST_WEEK,
- activity.getString(R.string.clear_browsing_data_tab_period_7_days)),
- new TimePeriodSpinnerOption(TimePeriod.FOUR_WEEKS,
- activity.getString(R.string.clear_browsing_data_tab_period_four_weeks)),
- new TimePeriodSpinnerOption(TimePeriod.ALL_TIME,
- activity.getString(R.string.clear_browsing_data_tab_period_everything))};
- return options;
+ List<TimePeriodSpinnerOption> options = new ArrayList<>();
+ options.add(new TimePeriodSpinnerOption(TimePeriod.LAST_HOUR,
+ activity.getString(R.string.clear_browsing_data_tab_period_hour)));
+ options.add(new TimePeriodSpinnerOption(TimePeriod.LAST_DAY,
+ activity.getString(R.string.clear_browsing_data_tab_period_24_hours)));
+ options.add(new TimePeriodSpinnerOption(TimePeriod.LAST_WEEK,
+ activity.getString(R.string.clear_browsing_data_tab_period_7_days)));
+ options.add(new TimePeriodSpinnerOption(TimePeriod.FOUR_WEEKS,
+ activity.getString(R.string.clear_browsing_data_tab_period_four_weeks)));
+ if (ChromeFeatureList.isEnabled(ChromeFeatureList.CLEAR_OLD_BROWSING_DATA)) {
+ options.add(new TimePeriodSpinnerOption(TimePeriod.OLDER_THAN_30_DAYS,
+ activity.getString(
+ R.string.clear_browsing_data_tab_period_older_than_30_days)));
+ }
+ options.add(new TimePeriodSpinnerOption(TimePeriod.ALL_TIME,
+ activity.getString(R.string.clear_browsing_data_tab_period_everything)));
+ return options.toArray(new TimePeriodSpinnerOption[0]);
}
/**
diff --git a/chrome/android/java/strings/android_chrome_strings.grd b/chrome/android/java/strings/android_chrome_strings.grd
index e3e8d89..126e1e2 100644
--- a/chrome/android/java/strings/android_chrome_strings.grd
+++ b/chrome/android/java/strings/android_chrome_strings.grd
@@ -654,6 +654,9 @@
<message name="IDS_CLEAR_BROWSING_DATA_TAB_PERIOD_FOUR_WEEKS" desc="The option to delete browsing data from the last 4 weeks.">
Last 4 weeks
</message>
+ <message name="IDS_CLEAR_BROWSING_DATA_TAB_PERIOD_OLDER_THAN_30_DAYS" desc="The option to delete browsing data older than 30 days.">
+ Older than 30 days
+ </message>
<message name="IDS_CLEAR_BROWSING_DATA_TAB_PERIOD_EVERYTHING" desc="The option to delete browsing data from the beginning of time.">
All time
</message>
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
index 0635c5b8..c664266 100644
--- a/chrome/browser/about_flags.cc
+++ b/chrome/browser/about_flags.cc
@@ -1241,6 +1241,9 @@
FEATURE_VALUE_TYPE(features::kWebRtcUseEchoCanceller3)},
#endif // ENABLE_WEBRTC
#if defined(OS_ANDROID)
+ {"clear-old-browsing-data", flag_descriptions::kClearOldBrowsingDataName,
+ flag_descriptions::kClearOldBrowsingDataDescription, kOsAndroid,
+ FEATURE_VALUE_TYPE(features::kClearOldBrowsingData)},
{"enable-osk-overscroll", flag_descriptions::kEnableOskOverscrollName,
flag_descriptions::kEnableOskOverscrollDescription, kOsAndroid,
SINGLE_VALUE_TYPE(switches::kEnableOSKOverscroll)},
diff --git a/chrome/browser/android/chrome_feature_list.cc b/chrome/browser/android/chrome_feature_list.cc
index 327132d..5d754cb5 100644
--- a/chrome/browser/android/chrome_feature_list.cc
+++ b/chrome/browser/android/chrome_feature_list.cc
@@ -40,6 +40,7 @@
// in other locations in the code base (e.g. chrome/, components/, etc).
const base::Feature* kFeaturesExposedToJava[] = {
&autofill::kAutofillScanCardholderName,
+ &features::kClearOldBrowsingData,
&features::kCopylessPaste,
&features::kDownloadsForeground,
&features::kImportantSitesInCbd,
diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc
index 78d4f20..2b6d116d 100644
--- a/chrome/browser/flag_descriptions.cc
+++ b/chrome/browser/flag_descriptions.cc
@@ -1698,6 +1698,11 @@
"Enables Chrome Memex homepage on Android. Restricted to opted-in "
"Googlers.";
+const char kClearOldBrowsingDataName[] = "Clear older browsing data";
+const char kClearOldBrowsingDataDescription[] =
+ "Enables clearing of browsing data which is older than a given time "
+ "period.";
+
const char kContentSuggestionsCategoryOrderName[] =
"Default content suggestions category order (e.g. on NTP)";
const char kContentSuggestionsCategoryOrderDescription[] =
diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h
index be4d7f87..515d216 100644
--- a/chrome/browser/flag_descriptions.h
+++ b/chrome/browser/flag_descriptions.h
@@ -1046,6 +1046,9 @@
extern const char kChromeMemexName[];
extern const char kChromeMemexDescription[];
+extern const char kClearOldBrowsingDataName[];
+extern const char kClearOldBrowsingDataDescription[];
+
extern const char kContentSuggestionsCategoryOrderName[];
extern const char kContentSuggestionsCategoryOrderDescription[];
diff --git a/chrome/common/chrome_features.cc b/chrome/common/chrome_features.cc
index 1f1da4c..87fd1ee3 100644
--- a/chrome/common/chrome_features.cc
+++ b/chrome/common/chrome_features.cc
@@ -146,6 +146,12 @@
const base::Feature kCheckInstallabilityForBannerOnLoad{
"CheckInstallabilityForBannerOnLoad", base::FEATURE_DISABLED_BY_DEFAULT};
+#if defined(OS_ANDROID)
+// Enables clearing of browsing data which is older than given time period.
+const base::Feature kClearOldBrowsingData{"ClearOldBrowsingData",
+ base::FEATURE_DISABLED_BY_DEFAULT};
+#endif
+
const base::Feature kClickToOpenPDFPlaceholder{
"ClickToOpenPDFPlaceholder", base::FEATURE_DISABLED_BY_DEFAULT};
diff --git a/chrome/common/chrome_features.h b/chrome/common/chrome_features.h
index 958778a..8886cb4 100644
--- a/chrome/common/chrome_features.h
+++ b/chrome/common/chrome_features.h
@@ -75,6 +75,10 @@
extern const base::Feature kCheckInstallabilityForBannerOnLoad;
+#if defined(OS_ANDROID)
+extern const base::Feature kClearOldBrowsingData;
+#endif
+
extern const base::Feature kClickToOpenPDFPlaceholder;
extern const base::Feature kClipboardContentSetting;
diff --git a/components/browsing_data/core/browsing_data_utils.cc b/components/browsing_data/core/browsing_data_utils.cc
index 973d2e4..d404e99 100644
--- a/components/browsing_data/core/browsing_data_utils.cc
+++ b/components/browsing_data/core/browsing_data_utils.cc
@@ -34,6 +34,7 @@
diff = base::TimeDelta::FromHours(4 * 7 * 24);
break;
case TimePeriod::ALL_TIME:
+ case TimePeriod::OLDER_THAN_30_DAYS:
delete_begin_time = base::Time();
break;
}
@@ -41,7 +42,9 @@
}
base::Time CalculateEndDeleteTime(TimePeriod time_period) {
- // No TimePeriod currently supports the second time bound.
+ if (time_period == TimePeriod::OLDER_THAN_30_DAYS) {
+ return base::Time::Now() - base::TimeDelta::FromDays(30);
+ }
return base::Time::Max();
}
@@ -64,6 +67,10 @@
base::RecordAction(
base::UserMetricsAction("ClearBrowsingData_Everything"));
break;
+ case TimePeriod::OLDER_THAN_30_DAYS:
+ base::RecordAction(
+ base::UserMetricsAction("ClearBrowsingData_OlderThan30Days"));
+ break;
}
}
@@ -89,6 +96,10 @@
base::RecordAction(base::UserMetricsAction(
"ClearBrowsingData_TimePeriodChanged_Everything"));
break;
+ case TimePeriod::OLDER_THAN_30_DAYS:
+ base::RecordAction(base::UserMetricsAction(
+ "ClearBrowsingData_TimePeriodChanged_OlderThan30Days"));
+ break;
}
}
diff --git a/components/browsing_data/core/browsing_data_utils.h b/components/browsing_data/core/browsing_data_utils.h
index 0a3ff6d0..6c5d00e 100644
--- a/components/browsing_data/core/browsing_data_utils.h
+++ b/components/browsing_data/core/browsing_data_utils.h
@@ -43,7 +43,8 @@
LAST_WEEK,
FOUR_WEEKS,
ALL_TIME,
- TIME_PERIOD_LAST = ALL_TIME
+ OLDER_THAN_30_DAYS,
+ TIME_PERIOD_LAST = OLDER_THAN_30_DAYS
};
// Calculate the begin time for the deletion range specified by |time_period|.
diff --git a/components/browsing_data/core/counters/browsing_data_counter.cc b/components/browsing_data/core/counters/browsing_data_counter.cc
index 62befe0..7e4edb3 100644
--- a/components/browsing_data/core/counters/browsing_data_counter.cc
+++ b/components/browsing_data/core/counters/browsing_data_counter.cc
@@ -58,6 +58,12 @@
return CalculateBeginDeleteTime(static_cast<TimePeriod>(*period_));
}
+base::Time BrowsingDataCounter::GetPeriodEnd() {
+ if (period_.GetPrefName().empty())
+ return base::Time::Max();
+ return CalculateEndDeleteTime(static_cast<TimePeriod>(*period_));
+}
+
void BrowsingDataCounter::Restart() {
DCHECK(initialized_);
if (state_ == State::IDLE) {
diff --git a/components/browsing_data/core/counters/browsing_data_counter.h b/components/browsing_data/core/counters/browsing_data_counter.h
index 3173a6d..bc52224 100644
--- a/components/browsing_data/core/counters/browsing_data_counter.h
+++ b/components/browsing_data/core/counters/browsing_data_counter.h
@@ -142,6 +142,9 @@
// Calculates the beginning of the counting period as |period_| before now.
base::Time GetPeriodStart();
+ // Calculates the ending of the counting period.
+ base::Time GetPeriodEnd();
+
// Returns if this counter belongs to a preference on the default, basic or
// advanced CBD tab.
ClearBrowsingDataTab GetTab() const;
diff --git a/ios/chrome/app/strings/ios_strings.grd b/ios/chrome/app/strings/ios_strings.grd
index c301049..c25048e 100644
--- a/ios/chrome/app/strings/ios_strings.grd
+++ b/ios/chrome/app/strings/ios_strings.grd
@@ -465,6 +465,9 @@
<message name="IDS_IOS_CLEAR_BROWSING_DATA_TIME_RANGE_OPTION_LAST_FOUR_WEEKS" desc="Label of a time range option. This is used to specify that the user wishes to clear their browsing data for the last 4 weeks. In titlecase. [Length: 22em] [iOS only]">
Last 4 Weeks
</message>
+ <message name="IDS_IOS_CLEAR_BROWSING_DATA_TIME_RANGE_OPTION_OLDER_THAN_30_DAYS" desc="Label of a time range option. This is used to specify that the user wishes to clear their browsing data that is older than 30 days. In titlecase. [Length: 22em] [iOS only]">
+ Older than 30 days
+ </message>
<message name="IDS_IOS_CLEAR_BROWSING_DATA_TIME_RANGE_OPTION_PAST_DAY" desc="Label of a time range option. This is used to specify that the user wishes to clear their browsing data for the past day. In titlecase. [Length: 22em] [iOS only]">
Past Day
</message>
diff --git a/ios/chrome/browser/browsing_data/ios_chrome_browsing_data_remover.mm b/ios/chrome/browser/browsing_data/ios_chrome_browsing_data_remover.mm
index c9f0a12..4b1ac40 100644
--- a/ios/chrome/browser/browsing_data/ios_chrome_browsing_data_remover.mm
+++ b/ios/chrome/browser/browsing_data/ios_chrome_browsing_data_remover.mm
@@ -113,6 +113,10 @@
case browsing_data::TimePeriod::ALL_TIME:
base::RecordAction(UserMetricsAction("ClearBrowsingData_Everything"));
break;
+ case browsing_data::TimePeriod::OLDER_THAN_30_DAYS:
+ base::RecordAction(
+ UserMetricsAction("ClearBrowsingData_OlderThan30Days"));
+ break;
}
return new IOSChromeBrowsingDataRemover(
browser_state, browsing_data::CalculateBeginDeleteTime(period),
diff --git a/ios/chrome/browser/ui/settings/time_range_selector_collection_view_controller.mm b/ios/chrome/browser/ui/settings/time_range_selector_collection_view_controller.mm
index b8ede33..ab20aff 100644
--- a/ios/chrome/browser/ui/settings/time_range_selector_collection_view_controller.mm
+++ b/ios/chrome/browser/ui/settings/time_range_selector_collection_view_controller.mm
@@ -37,7 +37,8 @@
IDS_IOS_CLEAR_BROWSING_DATA_TIME_RANGE_OPTION_PAST_DAY,
IDS_IOS_CLEAR_BROWSING_DATA_TIME_RANGE_OPTION_PAST_WEEK,
IDS_IOS_CLEAR_BROWSING_DATA_TIME_RANGE_OPTION_LAST_FOUR_WEEKS,
- IDS_IOS_CLEAR_BROWSING_DATA_TIME_RANGE_OPTION_BEGINNING_OF_TIME};
+ IDS_IOS_CLEAR_BROWSING_DATA_TIME_RANGE_OPTION_BEGINNING_OF_TIME,
+ IDS_IOS_CLEAR_BROWSING_DATA_TIME_RANGE_OPTION_OLDER_THAN_30_DAYS};
static_assert(
arraysize(kStringIDS) ==
diff --git a/tools/metrics/actions/actions.xml b/tools/metrics/actions/actions.xml
index d6ae308..cab1031 100644
--- a/tools/metrics/actions/actions.xml
+++ b/tools/metrics/actions/actions.xml
@@ -3383,6 +3383,14 @@
<description>Please enter the description of this user action.</description>
</action>
+<action name="ClearBrowsingData_OlderThan30Days">
+ <owner>[email protected]</owner>
+ <owner>[email protected]</owner>
+ <description>
+ Browsing data has been cleared for older than 30 days timeperiod.
+ </description>
+</action>
+
<action name="ClearBrowsingData_Passwords">
<owner>Please list the metric's owners. Add more owner tags as needed.</owner>
<description>Please enter the description of this user action.</description>
@@ -3451,6 +3459,12 @@
<description>Time period in CBD was changed.</description>
</action>
+<action name="ClearBrowsingData_TimePeriodChanged_OlderThan30Days">
+ <owner>[email protected]</owner>
+ <owner>[email protected]</owner>
+ <description>Time period in CBD was changed to OlderThan30Days.</description>
+</action>
+
<action name="ClearSelection">
<owner>Please list the metric's owners. Add more owner tags as needed.</owner>
<description>Please enter the description of this user action.</description>
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml
index cce7dad..fcb4ed41 100644
--- a/tools/metrics/histograms/enums.xml
+++ b/tools/metrics/histograms/enums.xml
@@ -24371,6 +24371,7 @@
<int value="-1778993296" label="ContextualSearchMlTapSuppression:disabled"/>
<int value="-1772172557" label="enable-osk-overscroll"/>
<int value="-1767470652" label="out-of-process-pdf"/>
+ <int value="-1755301960" label="ClearOldBrowsingData:enabled"/>
<int value="-1751928267" label="disable-icon-ntp"/>
<int value="-1749176684" label="PauseBackgroundTabs:disabled"/>
<int value="-1746767834" label="ssl-interstitial-v2-gray"/>
@@ -25592,6 +25593,7 @@
<int value="1697189972" label="WebPaymentsSingleAppUiSkip:disabled"/>
<int value="1700394127" label="OverlayScrollbar:disabled"/>
<int value="1701972870" label="NTPSnippetsIncreasedVisibility:enabled"/>
+ <int value="1702090999" label="ClearOldBrowsingData:disabled"/>
<int value="1702821235" label="WebAssembly:enabled"/>
<int value="1705724232" label="use-android-midi-api"/>
<int value="1713230497" label="ColorCorrectRendering:disabled"/>