Patches for next release 88.0.4324.207

This commit is contained in:
csagan5 2021-02-28 20:10:46 +01:00
parent e64e4be007
commit 973ede4ad1
10 changed files with 413 additions and 188 deletions

View file

@ -21,6 +21,7 @@ enable_platform_hevc=true
enable_remoting=false
enable_reporting=true
enable_vr=false
exclude_unwind_tables=false
ffmpeg_branding="Chrome"
fieldtrial_testing_like_official_build=true
icu_use_data_file=true
@ -37,5 +38,6 @@ use_errorprone_java_compiler=false
use_gnome_keyring=false
use_official_google_api_keys=false
use_openh264=true
use_rtti=false
use_sysroot=false
webview_includes_weblayer=false

View file

@ -1 +1 @@
88.0.4324.187
88.0.4324.207

View file

@ -158,4 +158,6 @@ Ignore-enterprise-policies-for-secure-DNS.patch
Fix-favicons-fallback-search.patch
Enable-app-overflow-menu-icons-by-default.patch
Add-menu-item-to-bookmark-all-tabs.patch
Add-flag-for-save-data-header.patch
Add-option-to-force-tablet-UI.patch
Automated-domain-substitution.patch

View file

@ -4,27 +4,28 @@ Subject: Add exit menu item
Corrected Exit functionality
---
chrome/android/java/res/menu/main_menu.xml | 4 ++++
chrome/android/java/res/menu/main_menu.xml | 5 +++++
chrome/android/java/res/menu/main_menu_regroup.xml | 3 +++
.../org/chromium/chrome/browser/ChromeTabbedActivity.java | 3 +++
.../src/org/chromium/chrome/browser/app/ChromeActivity.java | 6 ++++++
.../chrome/browser/init/ChromeLifetimeController.java | 6 +++++-
.../browser/ui/android/strings/android_chrome_strings.grd | 3 +++
6 files changed, 24 insertions(+), 1 deletion(-)
6 files changed, 25 insertions(+), 1 deletion(-)
diff --git a/chrome/android/java/res/menu/main_menu.xml b/chrome/android/java/res/menu/main_menu.xml
--- a/chrome/android/java/res/menu/main_menu.xml
+++ b/chrome/android/java/res/menu/main_menu.xml
@@ -119,6 +119,8 @@
@@ -119,6 +119,9 @@
android:icon="@drawable/vr_headset" />
<item android:id="@+id/managed_by_menu_id"
android:title="@string/managed" />
+ <item android:id="@+id/exit_id"
+ android:title="@string/menu_exit" />
+ android:title="@string/menu_exit"
+ android:icon="@drawable/ic_exit_to_app_white_24dp" />
</group>
<!-- Items shown only in the tab switcher -->
@@ -153,6 +155,8 @@
@@ -153,6 +156,8 @@
<item android:id="@id/preferences_id"
android:title="@string/menu_settings"
android:icon="@drawable/settings_cog" />
@ -42,7 +43,7 @@ diff --git a/chrome/android/java/res/menu/main_menu_regroup.xml b/chrome/android
android:title="@string/managed" />
+ <item android:id="@+id/exit_id"
+ android:title="@string/menu_exit"
+ android:icon="@drawable/ic_exit_to_app_white_24dp"/>
+ android:icon="@drawable/ic_exit_to_app_white_24dp" />
</group>
<!-- Items shown only in the tab switcher -->

View file

@ -0,0 +1,99 @@
From: Wengling Chen <feiyu2817@gmail.com>
Date: Mon, 1 Feb 2021 19:18:55 +0200
Subject: Add flag for save-data-header
---
chrome/browser/about_flags.cc | 4 ++++
chrome/browser/flag_descriptions.cc | 4 ++++
chrome/browser/flag_descriptions.h | 3 +++
content/browser/loader/browser_initiated_resource_request.cc | 5 +++--
services/network/public/cpp/features.cc | 4 ++++
services/network/public/cpp/features.h | 2 ++
6 files changed, 20 insertions(+), 2 deletions(-)
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
--- a/chrome/browser/about_flags.cc
+++ b/chrome/browser/about_flags.cc
@@ -4302,6 +4302,10 @@ const FeatureEntry kFeatureEntries[] = {
flag_descriptions::kDisableKeepaliveFetchDescription, kOsAll,
FEATURE_VALUE_TYPE(network::features::kDisableKeepaliveFetch)},
+ {"enable-save-data-header", flag_descriptions::kEnableSaveDataHeaderName,
+ flag_descriptions::kEnableSaveDataHeaderDescription, kOsAndroid,
+ FEATURE_VALUE_TYPE(network::features::kEnableSaveDataHeader)},
+
{"delay-async-script-execution",
flag_descriptions::kDelayAsyncScriptExecutionName,
flag_descriptions::kDelayAsyncScriptExecutionDescription, kOsAll,
diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc
--- a/chrome/browser/flag_descriptions.cc
+++ b/chrome/browser/flag_descriptions.cc
@@ -904,6 +904,10 @@ const char kDisableKeepaliveFetchDescription[] =
"Disable fetch with keepalive set "
"(https://fetch.spec.whatwg.org/#request-keepalive-flag).";
+const char kEnableSaveDataHeaderName[] = "Enable save-data header";
+const char kEnableSaveDataHeaderDescription[] =
+ "Enable save-data header without enabling Data Saver.";
+
const char kExperimentalAccessibilityLanguageDetectionName[] =
"Experimental accessibility language detection";
const char kExperimentalAccessibilityLanguageDetectionDescription[] =
diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h
--- a/chrome/browser/flag_descriptions.h
+++ b/chrome/browser/flag_descriptions.h
@@ -510,6 +510,9 @@ extern const char kDiagnosticsAppDescription[];
extern const char kDisableKeepaliveFetchName[];
extern const char kDisableKeepaliveFetchDescription[];
+extern const char kEnableSaveDataHeaderName[];
+extern const char kEnableSaveDataHeaderDescription[];
+
extern const char kMemlogName[];
extern const char kMemlogDescription[];
extern const char kMemlogModeMinimal[];
diff --git a/content/browser/loader/browser_initiated_resource_request.cc b/content/browser/loader/browser_initiated_resource_request.cc
--- a/content/browser/loader/browser_initiated_resource_request.cc
+++ b/content/browser/loader/browser_initiated_resource_request.cc
@@ -40,9 +40,10 @@ void UpdateAdditionalHeadersForBrowserInitiatedRequest(
// Set the Save-Data header if appropriate.
// https://tools.ietf.org/html/draft-grigorik-http-client-hints-03#section-7
- if (GetContentClient()->browser()->IsDataSaverEnabled(browser_context) &&
+ if ((GetContentClient()->browser()->IsDataSaverEnabled(browser_context) &&
!base::GetFieldTrialParamByFeatureAsBool(features::kDataSaverHoldback,
- "holdback_web", false)) {
+ "holdback_web", false)) ||
+ base::FeatureList::IsEnabled(network::features::kEnableSaveDataHeader)) {
if (should_update_existing_headers) {
headers->RemoveHeader("Save-Data");
}
diff --git a/services/network/public/cpp/features.cc b/services/network/public/cpp/features.cc
--- a/services/network/public/cpp/features.cc
+++ b/services/network/public/cpp/features.cc
@@ -150,6 +150,10 @@ const base::FeatureParam<std::string>
const base::Feature kDisableKeepaliveFetch{"DisableKeepaliveFetch",
base::FEATURE_DISABLED_BY_DEFAULT};
+// Enable save-data header seprately, without enabled data reduction service
+const base::Feature kEnableSaveDataHeader{"EnableSaveDataHeader",
+ base::FEATURE_DISABLED_BY_DEFAULT};
+
// Attach the origin of the destination URL to the "origin" header
const base::Feature
kDeriveOriginFromUrlForNeitherGetNorHeadRequestWhenHavingSpecialAccess{
diff --git a/services/network/public/cpp/features.h b/services/network/public/cpp/features.h
--- a/services/network/public/cpp/features.h
+++ b/services/network/public/cpp/features.h
@@ -58,6 +58,8 @@ extern const base::FeatureParam<std::string>
COMPONENT_EXPORT(NETWORK_CPP)
extern const base::Feature kDisableKeepaliveFetch;
COMPONENT_EXPORT(NETWORK_CPP)
+extern const base::Feature kEnableSaveDataHeader;
+COMPONENT_EXPORT(NETWORK_CPP)
extern const base::Feature
kDeriveOriginFromUrlForNeitherGetNorHeadRequestWhenHavingSpecialAccess;
COMPONENT_EXPORT(NETWORK_CPP)
--
2.17.1

View file

@ -24,39 +24,39 @@ Subject: Add menu item to bookmark all tabs
diff --git a/chrome/android/java/res/menu/main_menu.xml b/chrome/android/java/res/menu/main_menu.xml
--- a/chrome/android/java/res/menu/main_menu.xml
+++ b/chrome/android/java/res/menu/main_menu.xml
@@ -119,6 +119,9 @@
android:icon="@drawable/vr_headset" />
<item android:id="@+id/managed_by_menu_id"
android:title="@string/managed" />
@@ -57,6 +57,9 @@
<item android:id="@+id/all_bookmarks_menu_id"
android:title="@string/menu_bookmarks"
android:icon="@drawable/btn_star_filled" />
+ <item android:id="@+id/bookmark_all_tabs_menu_id"
+ android:title="@string/menu_bookmark_all_tabs"
+ android:icon="@drawable/ic_folder_blue_24dp" />
<item android:id="@+id/recent_tabs_menu_id"
android:title="@string/menu_recent_tabs"
android:icon="@drawable/devices_black_24dp" />
@@ -154,6 +157,9 @@
android:checkable="true" />
</menu>
</item>
+ <item android:id="@+id/bookmark_all_tabs_menu_id"
+ android:title="@string/menu_bookmark_all_tabs"
+ android:icon="@drawable/ic_folder_blue_24dp" />
<item android:id="@+id/exit_id"
android:title="@string/menu_exit" />
</group>
@@ -155,6 +158,9 @@
<item android:id="@id/preferences_id"
android:title="@string/menu_settings"
android:icon="@drawable/settings_cog" />
+ <item android:id="@+id/bookmark_all_tabs_menu_id"
+ android:title="@string/menu_bookmark_all_tabs"
+ android:icon="@drawable/ic_folder_blue_24dp" />
<item android:id="@+id/exit_id"
android:title="@string/menu_exit" />
</group>
diff --git a/chrome/android/java/res/menu/main_menu_regroup.xml b/chrome/android/java/res/menu/main_menu_regroup.xml
--- a/chrome/android/java/res/menu/main_menu_regroup.xml
+++ b/chrome/android/java/res/menu/main_menu_regroup.xml
@@ -184,6 +184,9 @@
android:icon="@drawable/vr_headset" />
<item android:id="@+id/managed_by_menu_id"
android:title="@string/managed" />
+ <item android:id="@+id/bookmark_all_tabs_menu_id"
+ android:title="@string/menu_bookmark_all_tabs"
+ android:icon="@drawable/ic_folder_blue_24dp" />
<item android:id="@+id/exit_id"
android:title="@string/menu_exit"
android:icon="@drawable/ic_exit_to_app_white_24dp"/>
@@ -32,6 +32,9 @@
android:title="@string/accessibility_menu_bookmark"
android:titleCondensed="@string/menu_bookmark"
android:icon="@drawable/btn_star"/>
+ <item android:id="@+id/bookmark_all_tabs_menu_id"
+ android:title="@string/menu_bookmark_all_tabs"
+ android:icon="@drawable/ic_folder_blue_24dp" />
<item android:id="@+id/offline_page_id"
android:title="@string/download_page"
android:titleCondensed="@string/menu_download"
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java

View file

@ -4,14 +4,14 @@ Subject: Add menu item to view source
---
chrome/android/java/res/menu/custom_tabs_menu.xml | 3 +++
chrome/android/java/res/menu/main_menu.xml | 2 ++
chrome/android/java/res/menu/main_menu.xml | 3 +++
chrome/android/java/res/menu/main_menu_regroup.xml | 3 +++
.../chrome/browser/ChromeTabbedActivity.java | 2 ++
.../chrome/browser/app/ChromeActivity.java | 2 ++
.../app/appmenu/AppMenuPropertiesDelegateImpl.java | 14 ++++++++++++++
.../CustomTabAppMenuPropertiesDelegate.java | 1 +
.../ui/android/strings/android_chrome_strings.grd | 3 +++
8 files changed, 30 insertions(+)
8 files changed, 31 insertions(+)
diff --git a/chrome/android/java/res/menu/custom_tabs_menu.xml b/chrome/android/java/res/menu/custom_tabs_menu.xml
--- a/chrome/android/java/res/menu/custom_tabs_menu.xml
@ -29,12 +29,13 @@ diff --git a/chrome/android/java/res/menu/custom_tabs_menu.xml b/chrome/android/
diff --git a/chrome/android/java/res/menu/main_menu.xml b/chrome/android/java/res/menu/main_menu.xml
--- a/chrome/android/java/res/menu/main_menu.xml
+++ b/chrome/android/java/res/menu/main_menu.xml
@@ -91,6 +91,8 @@
@@ -91,6 +91,9 @@
<item android:id="@+id/add_to_homescreen_id"
android:title="@string/menu_add_to_homescreen"
android:icon="@drawable/ic_add_to_home_screen" />
+ <item android:id="@+id/view_source_id"
+ android:title="@string/view_source" />
+ android:title="@string/view_source"
+ android:icon="@drawable/default_favicon" />
<item android:id="@+id/open_webapk_id"
android:title="@string/menu_open_webapk"
android:icon="@drawable/ic_add_to_home_screen" />
@ -47,7 +48,7 @@ diff --git a/chrome/android/java/res/menu/main_menu_regroup.xml b/chrome/android
android:icon="@drawable/ic_add_to_home_screen" />
+ <item android:id="@+id/view_source_id"
+ android:title="@string/view_source"
+ android:icon="@drawable/ic_drive_document_24dp" />
+ android:icon="@drawable/default_favicon" />
<item android:id="@+id/open_webapk_id"
android:title="@string/menu_open_webapk"
android:icon="@drawable/ic_add_to_home_screen" />

View file

@ -0,0 +1,172 @@
From: Wengling Chen <feiyu2817@gmail.com>
Date: Mon, 1 Feb 2021 19:18:55 +0200
Subject: Add option to force tablet UI
---
.../android/java/res/xml/accessibility_preferences.xml | 5 +++++
.../accessibility/settings/AccessibilitySettings.java | 10 ++++++++++
.../browser/toolbar/top/ToolbarControlContainer.java | 2 +-
.../browser/preferences/ChromePreferenceKeys.java | 1 +
.../preferences/GrandfatheredChromePreferenceKeys.java | 1 +
.../ui/android/strings/android_chrome_strings.grd | 6 ++++++
components/BUILD.gn | 4 ++--
ui/android/BUILD.gn | 1 +
.../src/org/chromium/ui/base/DeviceFormFactor.java | 5 +++++
9 files changed, 32 insertions(+), 3 deletions(-)
diff --git a/chrome/android/java/res/xml/accessibility_preferences.xml b/chrome/android/java/res/xml/accessibility_preferences.xml
--- a/chrome/android/java/res/xml/accessibility_preferences.xml
+++ b/chrome/android/java/res/xml/accessibility_preferences.xml
@@ -29,6 +29,11 @@
android:key="captions"
android:title="@string/accessibility_captions_title"/>
+ <org.chromium.components.browser_ui.settings.ChromeBaseCheckBoxPreference
+ android:key="force_tablet_ui"
+ android:summary="@string/force_tablet_ui_summary"
+ android:title="@string/force_tablet_ui_title" />
+
<Preference
android:fragment="org.chromium.chrome.browser.image_descriptions.ImageDescriptionsSettings"
android:key="image_descriptions"
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/accessibility/settings/AccessibilitySettings.java b/chrome/android/java/src/org/chromium/chrome/browser/accessibility/settings/AccessibilitySettings.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/accessibility/settings/AccessibilitySettings.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/accessibility/settings/AccessibilitySettings.java
@@ -35,6 +35,7 @@ public class AccessibilitySettings
static final String PREF_CAPTIONS = "captions";
static final String PREF_IMAGE_DESCRIPTIONS = "image_descriptions";
+ static final String PREF_FORCE_TABLET_UI = "force_tablet_ui";
private TextScalePreference mTextScalePref;
private ChromeBaseCheckBoxPreference mForceEnableZoomPref;
private boolean mRecordFontSizeChangeOnStop;
@@ -80,6 +81,12 @@ public class AccessibilitySettings
.getBoolean(Pref.READER_FOR_ACCESSIBILITY));
readerForAccessibilityPref.setOnPreferenceChangeListener(this);
+ ChromeBaseCheckBoxPreference forceTabletUiPref =
+ (ChromeBaseCheckBoxPreference) findPreference(PREF_FORCE_TABLET_UI);
+ forceTabletUiPref.setChecked(SharedPreferencesManager.getInstance().readBoolean(
+ ChromePreferenceKeys.FLAGS_FORCE_TABLET_UI_ENABLED, false));
+ forceTabletUiPref.setOnPreferenceChangeListener(this);
+
ChromeBaseCheckBoxPreference mAccessibilityTabSwitcherPref =
(ChromeBaseCheckBoxPreference) findPreference(
ChromePreferenceKeys.ACCESSIBILITY_TAB_SWITCHER);
@@ -131,6 +138,9 @@ public class AccessibilitySettings
mFontSizePrefs.setUserFontScaleFactor((Float) newValue);
} else if (PREF_FORCE_ENABLE_ZOOM.equals(preference.getKey())) {
mFontSizePrefs.setForceEnableZoomFromUser((Boolean) newValue);
+ } else if (PREF_FORCE_TABLET_UI.equals(preference.getKey())) {
+ SharedPreferencesManager.getInstance().writeBoolean(
+ ChromePreferenceKeys.FLAGS_FORCE_TABLET_UI_ENABLED, (Boolean) newValue);
} else if (PREF_READER_FOR_ACCESSIBILITY.equals(preference.getKey())) {
UserPrefs.get(Profile.getLastUsedRegularProfile())
.setBoolean(Pref.READER_FOR_ACCESSIBILITY, (Boolean) newValue);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarControlContainer.java b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarControlContainer.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarControlContainer.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarControlContainer.java
@@ -110,7 +110,7 @@ public class ToolbarControlContainer extends OptimizedFrameLayout implements Con
// On tablet, draw a fake tab strip and toolbar until the compositor is
// ready to draw the real tab strip. (On phone, the toolbar is made entirely
// of Android views, which are already initialized.)
- setBackgroundResource(R.drawable.toolbar_background);
+// setBackgroundResource(R.drawable.toolbar_background);
}
}
diff --git a/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java b/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java
--- a/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java
+++ b/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java
@@ -441,6 +441,7 @@ public final class ChromePreferenceKeys {
public static final String FONT_USER_SET_FORCE_ENABLE_ZOOM = "user_set_force_enable_zoom";
public static final String HISTORY_SHOW_HISTORY_INFO = "history_home_show_info";
+ public static final String FLAGS_FORCE_TABLET_UI_ENABLED = "force_tablet_ui_enabled";
/** Keys used to save settings related to homepage. */
public static final String HOMEPAGE_CUSTOM_URI = "homepage_custom_uri";
diff --git a/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/GrandfatheredChromePreferenceKeys.java b/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/GrandfatheredChromePreferenceKeys.java
--- a/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/GrandfatheredChromePreferenceKeys.java
+++ b/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/GrandfatheredChromePreferenceKeys.java
@@ -100,6 +100,7 @@ public class GrandfatheredChromePreferenceKeys {
ChromePreferenceKeys.FLAGS_CACHED_SWAP_PIXEL_FORMAT_TO_FIX_CONVERT_FROM_TRANSLUCENT,
ChromePreferenceKeys.FLAGS_CACHED_TAB_GROUPS_ANDROID_ENABLED,
ChromePreferenceKeys.FONT_USER_FONT_SCALE_FACTOR,
+ ChromePreferenceKeys.FLAGS_FORCE_TABLET_UI_ENABLED,
ChromePreferenceKeys.FONT_USER_SET_FORCE_ENABLE_ZOOM,
ChromePreferenceKeys.HISTORY_SHOW_HISTORY_INFO,
ChromePreferenceKeys.HOMEPAGE_CUSTOM_URI,
diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chrome/browser/ui/android/strings/android_chrome_strings.grd
--- a/chrome/browser/ui/android/strings/android_chrome_strings.grd
+++ b/chrome/browser/ui/android/strings/android_chrome_strings.grd
@@ -1140,6 +1140,12 @@ Your Google account may have other forms of browsing history like searches and a
<message name="IDS_SAFE_BROWSING_NO_PROTECTION_CONFIRMATION_DIALOG_CONFIRM" desc="Message for Safe Browsing no protection confirmation button.">
Turn off
</message>
+ <message name="IDS_FORCE_TABLET_UI_SUMMARY" desc="Summary of the preference that allows the user to force chromium to use tablet UI.">
+ Open chromium in Tablet Mode
+ </message>
+ <message name="IDS_FORCE_TABLET_UI_TITLE" desc="Title of the preference that allows the user to update force tablet UI settings.">
+ Force Tablet Mode
+ </message>
<!-- Accessibility preferences -->
<message name="IDS_PREFS_ACCESSIBILITY" desc="Title of Accessibility settings, which allows the user to change webpage font sizes. [CHAR-LIMIT=32]">
diff --git a/components/BUILD.gn b/components/BUILD.gn
--- a/components/BUILD.gn
+++ b/components/BUILD.gn
@@ -475,7 +475,7 @@ test("components_unittests") {
# On LaCrOS, tests use ash-chrome as a window manager, thus the dependency.
# On other platforms, no components should depend on Chrome.
- if (!chromeos_is_browser_only) {
+ if (!chromeos_is_browser_only && !is_android) {
assert_no_deps = [ "//chrome/*" ]
}
@@ -719,7 +719,7 @@ if (!is_ios && !is_fuchsia) {
# On LaCrOS, tests use ash-chrome as a window manager, thus the dependency.
# On other platforms, no components should depend on Chrome.
- if (!chromeos_is_browser_only) {
+ if (!chromeos_is_browser_only && !is_android) {
assert_no_deps = [ "//chrome/*" ]
}
}
diff --git a/ui/android/BUILD.gn b/ui/android/BUILD.gn
--- a/ui/android/BUILD.gn
+++ b/ui/android/BUILD.gn
@@ -359,6 +359,7 @@ android_library("ui_no_recycler_view_java") {
":ui_utils_java",
"//base:base_java",
"//base:jni_java",
+ "//chrome/browser/preferences:java",
"//third_party/android_deps:androidx_annotation_annotation_java",
"//third_party/android_deps:androidx_appcompat_appcompat_java",
"//third_party/android_deps:androidx_appcompat_appcompat_resources_java",
diff --git a/ui/android/java/src/org/chromium/ui/base/DeviceFormFactor.java b/ui/android/java/src/org/chromium/ui/base/DeviceFormFactor.java
--- a/ui/android/java/src/org/chromium/ui/base/DeviceFormFactor.java
+++ b/ui/android/java/src/org/chromium/ui/base/DeviceFormFactor.java
@@ -11,6 +11,8 @@ import androidx.annotation.UiThread;
import org.chromium.base.ContextUtils;
import org.chromium.base.ThreadUtils;
import org.chromium.base.annotations.CalledByNative;
+import org.chromium.chrome.browser.preferences.ChromePreferenceKeys;
+import org.chromium.chrome.browser.preferences.SharedPreferencesManager;
import org.chromium.ui.R;
import org.chromium.ui.display.DisplayAndroid;
import org.chromium.ui.display.DisplayUtil;
@@ -60,6 +62,9 @@ public class DeviceFormFactor {
* E.g. http://developer.samsung.com/samsung-dex/testing
*/
public static boolean isNonMultiDisplayContextOnTablet(Context context) {
+ if (SharedPreferencesManager.getInstance().readBoolean(
+ ChromePreferenceKeys.FLAGS_FORCE_TABLET_UI_ENABLED, false))
+ return true;
return detectScreenWidthBucket(context) >= SCREEN_BUCKET_TABLET;
}
--
2.17.1

View file

@ -5300,7 +5300,7 @@ diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descripti
"extension-content-script-fetches";
const char kCrossOriginOpenerPolicyReportingName[] =
@@ -1990,7 +1990,7 @@ const char kIntensiveWakeUpThrottlingName[] =
@@ -1994,7 +1994,7 @@ const char kIntensiveWakeUpThrottlingName[] =
const char kIntensiveWakeUpThrottlingDescription[] =
"When enabled, wake ups from DOM Timers are limited to 1 per minute in a "
"page that has been hidden for 5 minutes. For additional details, see "
@ -8149,7 +8149,7 @@ diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chro
</message>
<message name="IDS_ANDROID_HISTORY_BLOCKED_SITE" desc="The text displayed in the history page indicating that a visit to a web site was blocked due to an administrator policy.">
Blocked site
@@ -1347,7 +1347,7 @@ Your Google account may have other forms of browsing history like searches and a
@@ -1353,7 +1353,7 @@ Your Google account may have other forms of browsing history like searches and a
In Lite mode, Chrome loads pages faster and uses up to 60 percent less data. To optimize the pages that you visit, Chrome sends your web traffic to Google. <ph name="BEGIN_LINK">&lt;link&gt;</ph>Learn more<ph name="END_LINK">&lt;/link&gt;</ph>
</message>
<message name="IDS_DATA_REDUCTION_PROMO_LEARN_MORE_URL" desc="URL for Lite mode help center article" translateable="false">
@ -8158,7 +8158,7 @@ diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chro
</message>
<message name="IDS_DATA_REDUCTION_ENABLE_BUTTON_LITE_MODE" desc="Button the user presses if they want to enable Lite mode" >
Turn on Lite mode
@@ -1516,10 +1516,10 @@ Your Google account may have other forms of browsing history like searches and a
@@ -1522,10 +1522,10 @@ Your Google account may have other forms of browsing history like searches and a
Waiting for details of parents.
</message>
<message name="IDS_ACCOUNT_MANAGEMENT_ONE_PARENT_NAME" desc="String for name of single parent for child account.">
@ -8171,7 +8171,7 @@ diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chro
</message>
<message name="IDS_ACCOUNT_MANAGEMENT_CHILD_CONTENT_TITLE" desc="Title of the Content setting, which controls which websites a child is allowed to visit.">
Content
@@ -1578,22 +1578,22 @@ Your Google account may have other forms of browsing history like searches and a
@@ -1584,22 +1584,22 @@ Your Google account may have other forms of browsing history like searches and a
Google Terms of Service
</message>
<message name="IDS_GOOGLE_TERMS_OF_SERVICE_URL" desc="URL for Google terms of service" translateable="false">
@ -8198,7 +8198,7 @@ diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chro
</message>
<!-- Sign-in strings -->
@@ -1610,7 +1610,7 @@ Your Google account may have other forms of browsing history like searches and a
@@ -1616,7 +1616,7 @@ Your Google account may have other forms of browsing history like searches and a
Also clear your Chrome data from this device
</message>
<message name="IDS_SIGNOUT_MANAGED_ACCOUNT_MESSAGE" desc="Message to display for sign out of Chrome dialog when the account has enterprise management, and all user data will be erased">
@ -8207,7 +8207,7 @@ diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chro
</message>
<message name="IDS_SIGN_IN_GETTING_ACCOUNT_MANAGEMENT_POLICY" desc="Title of progress bar dialog for getting management policy">
Contacting Google. This may take a minute…
@@ -1758,7 +1758,7 @@ To change this setting, <ph name="BEGIN_LINK">&lt;resetlink&gt;</ph>reset sync<p
@@ -1764,7 +1764,7 @@ To change this setting, <ph name="BEGIN_LINK">&lt;resetlink&gt;</ph>reset sync<p
<!-- Bluetooth Picker UI strings -->
<message name="IDS_BLUETOOTH_DIALOG_TITLE" desc="The header message shown on top of the dialog that lets the user pick a Bluetooth device for the site to pair with. Shown above a list of Bluetooth devices discovered. ">
@ -8216,7 +8216,7 @@ diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chro
<message name="IDS_BLUETOOTH_SEARCHING" desc="The message shown in the Bluetooth picker dialog while scanning for devices.">
<ph name="BEGIN_LINK">&lt;link&gt;</ph>Get help<ph name="END_LINK">&lt;/link&gt;</ph> while scanning for devices…
</message>
@@ -1803,7 +1803,7 @@ To change this setting, <ph name="BEGIN_LINK">&lt;resetlink&gt;</ph>reset sync<p
@@ -1809,7 +1809,7 @@ To change this setting, <ph name="BEGIN_LINK">&lt;resetlink&gt;</ph>reset sync<p
<!-- Bluetooth Scanning Prompt strings -->
<message name="IDS_BLUETOOTH_SCANNING_PROMPT_ORIGIN" desc="The label that is used to introduce Bluetooth scanning prompt details to the user when it is from a website.">
@ -8225,7 +8225,7 @@ diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chro
</message>
<message name="IDS_BLUETOOTH_SCANNING_DEVICE_UNKNOWN" desc="Text to identify Bluetooth devices of unknown or unsupported class.">
Unknown or unsupported device (<ph name="DEVICE_ID">%1$s<ex>A1:B2:C3:D4:E5:F6</ex></ph>)
@@ -2262,7 +2262,7 @@ To change this setting, <ph name="BEGIN_LINK">&lt;resetlink&gt;</ph>reset sync<p
@@ -2268,7 +2268,7 @@ To change this setting, <ph name="BEGIN_LINK">&lt;resetlink&gt;</ph>reset sync<p
This page may differ from the online version.
</message>
<message name="IDS_PAGE_INFO_PREVIEW_LOAD_ORIGINAL" desc="This text, when clicked, loads the original page from its origin without any treatments. This text is shown in the page info bubble when the currently viewed page has been modified to be a lighter and faster version of the original page.">
@ -8234,7 +8234,7 @@ diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chro
</message>
<message name="IDS_PAGE_INFO_CONNECTION_PAINT_PREVIEW" desc="Message to display in the page info bubble when viewing a preview of a page.">
You are viewing a preview of this page
@@ -3575,7 +3575,7 @@ Data from your Incognito session will only be cleared from Chrome when you <ph n
@@ -3581,7 +3581,7 @@ Data from your Incognito session will only be cleared from Chrome when you <ph n
<!-- WebUsb Picker UI strings -->
<message name="IDS_USB_CHOOSER_DIALOG_PROMPT" desc="The text that is used to introduce the USB chooser dialog to the user.">
@ -8243,7 +8243,7 @@ diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chro
</message>
<message name="IDS_USB_CHOOSER_DIALOG_NO_DEVICES_FOUND_PROMPT" desc="The label shown to the user to inform them that no USB devices were found matching the requirements that the application provided.">
No compatible devices found
@@ -3614,7 +3614,7 @@ Data from your Incognito session will only be cleared from Chrome when you <ph n
@@ -3620,7 +3620,7 @@ Data from your Incognito session will only be cleared from Chrome when you <ph n
Running in Chrome
</message>
<message name="IDS_TWA_RUNNING_IN_CHROME_V2" desc="Updated message on a snackbar indicating that the current Activity may use Chrome data (the rest of the app may not be).">
@ -8252,7 +8252,7 @@ diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chro
</message>
<message name="IDS_GOT_IT" desc="Button for the user to accept a disclosure/message">
Got it
@@ -3869,7 +3869,7 @@ Data from your Incognito session will only be cleared from Chrome when you <ph n
@@ -3875,7 +3875,7 @@ Data from your Incognito session will only be cleared from Chrome when you <ph n
Sending to <ph name="device_name">%1$s<ex>Tanya's Pixel 2</ex></ph>...
</message>
<message name="IDS_SEND_TAB_TO_SELF_NOTIFICATION_CONTEXT_TEXT" desc="Text displayed as the second line of a notification indicating the domain and the device the tab is shared from.">

View file

@ -13,11 +13,11 @@ Fix RestoreForeignSessionTab by recreating the tab (issue #681)
chrome/android/chrome_java_sources.gni | 2 +
.../java/res/layout/adblock_editor.xml | 67 ++++
chrome/android/java/res/values/values.xml | 2 +
.../java/res/xml/adblock_preferences.xml | 43 ++
.../java/res/xml/adblock_preferences.xml | 43 +++
.../android/java/res/xml/main_preferences.xml | 5 +
.../chrome/browser/app/ChromeActivity.java | 21 +
.../chrome/browser/app/ChromeActivity.java | 21 ++
.../browser/settings/AdBlockEditor.java | 93 +++++
.../browser/settings/AdBlockPreferences.java | 173 ++++++++
.../browser/settings/AdBlockPreferences.java | 173 +++++++++
.../chrome/browser/tabmodel/TabModelImpl.java | 2 +-
chrome/app/generated_resources.grd | 46 +++
chrome/browser/after_startup_task_utils.cc | 5 +
@ -27,19 +27,18 @@ Fix RestoreForeignSessionTab by recreating the tab (issue #681)
chrome/browser/chrome_browser_main.cc | 2 +
.../browser/chrome_content_browser_client.cc | 16 -
chrome/browser/flags/BUILD.gn | 14 +-
.../flags/android/adblock_updater_bridge.cc | 101 +++++
.../flags/android/adblock_updater_bridge.cc | 101 ++++++
.../flags/android/adblock_updater_bridge.h | 33 ++
.../flags/android/cached_feature_flags.cc | 1 +
.../flags/android/cached_feature_flags.h | 2 +
.../browser/flags/AdblockUpdaterBridge.java | 105 +++++
.../browser/flags/AdblockUpdaterBridge.java | 105 ++++++
chrome/browser/prefs/browser_prefs.cc | 1 +
.../sessions/session_restore_android.cc | 4 +-
.../strings/android_chrome_strings.grd | 14 +
components/component_updater/BUILD.gn | 6 +
.../adblock_updater_service.cc | 378 ++++++++++++++++++
.../adblock_updater_service.h | 127 ++++++
.../download_filters_task.cc | 237 +++++++++++
.../component_updater/download_filters_task.h | 131 ++++++
.../adblock_updater_service.cc | 337 ++++++++++++++++++
.../adblock_updater_service.h | 126 +++++++
.../download_filters_task.cc | 236 ++++++++++++
.../component_updater/download_filters_task.h | 131 +++++++
...ent_subresource_filter_throttle_manager.cc | 11 +
.../content/browser/ruleset_publisher.h | 2 +
.../content/browser/ruleset_publisher_impl.cc | 5 +
@ -51,7 +50,7 @@ Fix RestoreForeignSessionTab by recreating the tab (issue #681)
.../browser/subresource_filter_features.cc | 113 +-----
.../core/common/common_features.cc | 2 +-
.../navigation_throttle_runner.cc | 5 -
42 files changed, 1722 insertions(+), 141 deletions(-)
41 files changed, 1678 insertions(+), 141 deletions(-)
create mode 100644 chrome/android/java/res/layout/adblock_editor.xml
create mode 100644 chrome/android/java/res/xml/adblock_preferences.xml
create mode 100644 chrome/android/java/src/org/chromium/chrome/browser/settings/AdBlockEditor.java
@ -474,7 +473,7 @@ new file mode 100644
+
+ SpinnerPreference spinner = (SpinnerPreference) findPreference(PREF_ADBLOCK_FREQUENCY_SPINNER);
+ TimeFrequencySpinnerOption[] spinnerOptions = getTimeFrequencySpinnerOptions();
+ int selectedTimeFrequency = AdblockUpdaterBridge.getAdBlockUpdateTimeFrequency();
+ int selectedTimeFrequency = AdblockUpdaterBridge.getAdBlockUpdateFrequencyInDays();
+ int spinnerOptionIndex = -1;
+ for (int i = 0; i < spinnerOptions.length; ++i) {
+ if (spinnerOptions[i].getDays() == selectedTimeFrequency) {
@ -484,7 +483,7 @@ new file mode 100644
+ }
+ spinner.setOptions(spinnerOptions, spinnerOptionIndex);
+ spinner.setOnPreferenceChangeListener((preference, newValue) -> {
+ AdblockUpdaterBridge.setAdBlockUpdateTimeFrequency(
+ AdblockUpdaterBridge.setAdBlockUpdateFrequency(
+ ((TimeFrequencySpinnerOption) newValue).getDays());
+ return true;
+ });
@ -500,7 +499,7 @@ new file mode 100644
+ startUpdateButton.setOnPreferenceClickListener(new OnPreferenceClickListener() {
+ @Override
+ public boolean onPreferenceClick(Preference preference) {
+ AdblockUpdaterBridge.AdBlockStartCheck(AdBlockPreferences.this);
+ AdblockUpdaterBridge.AdBlockUpdate(AdBlockPreferences.this);
+ return true;
+ }
+ });
@ -513,7 +512,7 @@ new file mode 100644
+ currentIndexVersion.setSummary(
+ AdblockUpdaterBridge.getAdBlockMostRecentIndexedVersion() +
+ "\n" + getString(R.string.adblock_last_checked_text) +
+ " " + df.format(AdblockUpdaterBridge.getAdBlockLastUpdate()));
+ " " + df.format(AdblockUpdaterBridge.getAdBlockLastSuccessfulUpdate()));
+ }
+
+ public static String GetAdBlockMessage(@AdblockEvent int event, @AdblockError int error) {
@ -938,31 +937,31 @@ new file mode 100644
+ return base::android::ConvertUTF8ToJavaString(env, url);
+}
+
+static jint JNI_AdblockUpdaterBridge_GetAdBlockUpdateTimeFrequency(JNIEnv* env) {
+ int value = g_browser_process->adblock_updater()->GetAdBlockUpdateTimeFrequency();
+static jint JNI_AdblockUpdaterBridge_GetAdBlockUpdateFrequencyInDays(JNIEnv* env) {
+ int value = g_browser_process->adblock_updater()->GetAdBlockUpdateFrequencyInDays();
+ return value;
+}
+
+static void JNI_AdblockUpdaterBridge_SetAdBlockUpdateTimeFrequency(JNIEnv* env, jint days) {
+ g_browser_process->adblock_updater()->SetAdBlockUpdateTimeFrequency(days);
+static void JNI_AdblockUpdaterBridge_SetAdBlockUpdateFrequency(JNIEnv* env, jint days) {
+ g_browser_process->adblock_updater()->SetAdBlockUpdateFrequency(days);
+}
+
+static jlong JNI_AdblockUpdaterBridge_GetAdBlockLastOkUpdate(JNIEnv* env) {
+ long value = g_browser_process->adblock_updater()->GetLastOkUpdate();
+static jlong JNI_AdblockUpdaterBridge_GetAdBlockLastSuccessfulUpdate(JNIEnv* env) {
+ long value = g_browser_process->adblock_updater()->GetLastSuccessfulUpdateMs();
+ return value;
+}
+
+static jlong JNI_AdblockUpdaterBridge_GetAdBlockLastUpdate(JNIEnv* env) {
+ long value = g_browser_process->adblock_updater()->GetLastUpdate();
+ long value = g_browser_process->adblock_updater()->GetLastUpdateMs();
+ return value;
+}
+
+static void JNI_AdblockUpdaterBridge_AdBlockStartCheckOnDemand(JNIEnv* env) {
+static void JNI_AdblockUpdaterBridge_AdBlockUpdate(JNIEnv* env) {
+ adblock_updater::AdBlockUpdaterService* client = g_browser_process->adblock_updater();
+ if (client == nullptr) return;
+
+ JNI_AdblockUpdaterBridge_AdBlockRegisterCallback(env);
+ client->OnDemandUpdate(adblock_updater::Callback());
+ client->OnDemandUpdate(true, adblock_updater::Callback());
+}
+
+static void JNI_AdblockUpdaterBridge_AdBlockRegisterCallback(JNIEnv* env) {
@ -1012,14 +1011,6 @@ new file mode 100644
+} // namespace chrome
+
+#endif // CHROME_BROWSER_FLAGS_ANDROID_ADBLOCK_UPDATER_BRIDGE_H_
diff --git a/chrome/browser/flags/android/cached_feature_flags.cc b/chrome/browser/flags/android/cached_feature_flags.cc
--- a/chrome/browser/flags/android/cached_feature_flags.cc
+++ b/chrome/browser/flags/android/cached_feature_flags.cc
@@ -41,3 +41,4 @@ static jboolean JNI_CachedFeatureFlags_IsNetworkServiceWarmUpEnabled(
return content::IsOutOfProcessNetworkService() &&
base::FeatureList::IsEnabled(features::kWarmUpNetworkProcess);
}
+
diff --git a/chrome/browser/flags/android/cached_feature_flags.h b/chrome/browser/flags/android/cached_feature_flags.h
--- a/chrome/browser/flags/android/cached_feature_flags.h
+++ b/chrome/browser/flags/android/cached_feature_flags.h
@ -1087,20 +1078,20 @@ new file mode 100644
+ return AdblockUpdaterBridgeJni.get().getAdBlockFiltersURL();
+ }
+
+ public static int getAdBlockUpdateTimeFrequency() {
+ return AdblockUpdaterBridgeJni.get().getAdBlockUpdateTimeFrequency();
+ public static int getAdBlockUpdateFrequencyInDays() {
+ return AdblockUpdaterBridgeJni.get().getAdBlockUpdateFrequencyInDays();
+ }
+
+ public static void setAdBlockUpdateTimeFrequency(int number_of_days) {
+ AdblockUpdaterBridgeJni.get().setAdBlockUpdateTimeFrequency(number_of_days);
+ public static void setAdBlockUpdateFrequency(int days) {
+ AdblockUpdaterBridgeJni.get().setAdBlockUpdateFrequency(days);
+ }
+
+ public static String getAdBlockMostRecentIndexedVersion() {
+ return AdblockUpdaterBridgeJni.get().getAdBlockMostRecentIndexedVersion();
+ }
+
+ public static Date getAdBlockLastOkUpdate() {
+ long millis = AdblockUpdaterBridgeJni.get().getAdBlockLastOkUpdate();
+ public static Date getAdBlockLastSuccessfulUpdate() {
+ long millis = AdblockUpdaterBridgeJni.get().getAdBlockLastSuccessfulUpdate();
+ return new Date(millis);
+ }
+
@ -1109,9 +1100,9 @@ new file mode 100644
+ return new Date(millis);
+ }
+
+ public static void AdBlockStartCheck(AdblockCallback callback) {
+ public static void AdBlockUpdate(AdblockCallback callback) {
+ observer = new WeakReference<AdblockCallback>(callback);
+ AdblockUpdaterBridgeJni.get().adBlockStartCheckOnDemand();
+ AdblockUpdaterBridgeJni.get().adBlockUpdate();
+ }
+
+ public static void AdBlockRegisterCallback(AdblockCallback callback) {
@ -1135,10 +1126,10 @@ new file mode 100644
+ String getAdBlockFiltersURL();
+ String getAdBlockMostRecentIndexedVersion();
+ long getAdBlockLastUpdate();
+ long getAdBlockLastOkUpdate();
+ int getAdBlockUpdateTimeFrequency();
+ void setAdBlockUpdateTimeFrequency(int number_of_days);
+ void adBlockStartCheckOnDemand();
+ long getAdBlockLastSuccessfulUpdate();
+ int getAdBlockUpdateFrequencyInDays();
+ void setAdBlockUpdateFrequency(int number_of_days);
+ void adBlockUpdate();
+ void adBlockRegisterCallback();
+ }
+}
@ -1211,7 +1202,7 @@ diff --git a/components/component_updater/adblock_updater_service.cc b/component
new file mode 100644
--- /dev/null
+++ b/components/component_updater/adblock_updater_service.cc
@@ -0,0 +1,378 @@
@@ -0,0 +1,337 @@
+/*
+ This file is part of Bromite.
+
@ -1263,16 +1254,14 @@ new file mode 100644
+// Holds the URL to an indexed subresource filters file.
+const char kAdBlockFiltersCheckFrequency[] = "adblock.check_frequency";
+
+// Last check time
+// Last update check time
+const char kAdBlockLastCheckTime[] = "adblock.last_check_time";
+
+// Last check time (only with ok)
+// Last successful update check time
+const char kAdBlockLastCheckTimeOk[] = "adblock.last_check_time_ok";
+
+// all constants express seconds
+// these could be made configurable
+const int initial_check_delay = 5,
+ on_demand_check_delay = 60; // minimum 1 minute between each on-demand check
+const int initial_check_delay_in_seconds = 5,
+ defaultFiltersCheckFrequencyInDays = 7;
+
+AdBlockUpdaterService::AdBlockUpdaterService(
+ scoped_refptr<network::SharedURLLoaderFactory> shared_url_network_factory,
@ -1316,34 +1305,36 @@ new file mode 100644
+void AdBlockUpdaterService::Start() {
+ DCHECK(thread_checker_.CalledOnValidThread());
+
+ // avoid multiple scheduling
+ // avoid multiple scheduling during browser initialization
+ if (scheduled_)
+ return;
+ scheduled_ = true;
+
+ StartWithDelay(initial_check_delay);
+ StartWithDelay(initial_check_delay_in_seconds);
+}
+
+void AdBlockUpdaterService::StartWithDelay(int delay) {
+ int days = GetAdBlockUpdateTimeFrequency();
+ if (days < 0) days = 7;
+ next_check_delay_ = 60*60*24*days;
+void AdBlockUpdaterService::StartWithDelay(int delay_in_seconds) {
+ int days = GetAdBlockUpdateFrequencyInDays();
+ if (days < 0)
+ days = defaultFiltersCheckFrequencyInDays;
+ next_check_delay_in_seconds_ = 60*60*24*days;
+
+ if (delay <= 0) delay = next_check_delay_;
+ if (delay_in_seconds < 0)
+ delay_in_seconds = 0;
+
+ scheduler_->Stop();
+ if (next_check_delay_ == 0) {
+ if (next_check_delay_in_seconds_ == 0) {
+ LOG(INFO) << "AdBlockUpdaterService: disabled by user.";
+ } else {
+ LOG(INFO) << "AdBlockUpdaterService: starting up. "
+ << "First update attempt will take place in "
+ << delay << " seconds. "
+ << delay_in_seconds << " seconds. "
+ << "Next update attempt will take place in "
+ << next_check_delay_ << " seconds. ";
+ << next_check_delay_in_seconds_ << " seconds. ";
+
+ scheduler_->Schedule(
+ base::TimeDelta::FromSeconds(delay),
+ base::TimeDelta::FromSeconds(next_check_delay_),
+ base::TimeDelta::FromSeconds(delay_in_seconds),
+ base::TimeDelta::FromSeconds(next_check_delay_in_seconds_),
+ base::Bind(&AdBlockUpdaterService::OnDemandScheduledUpdate,
+ base::Unretained(this)), base::DoNothing());
+ }
@ -1356,62 +1347,24 @@ new file mode 100644
+ AdblockError error) { std::move(on_finished).Run(); },
+ std::move(on_finished));
+
+ OnDemandUpdateAsNeeded(false, std::move(on_finished_callback));
+ OnDemandUpdate(false, std::move(on_finished_callback));
+}
+
+bool AdBlockUpdaterService::OnDemandUpdate(Callback on_finished) {
+ return OnDemandUpdateAsNeeded(true, std::move(on_finished));
+}
+
+bool AdBlockUpdaterService::OnDemandUpdateAsNeeded(bool is_foreground, Callback on_finished) {
+bool AdBlockUpdaterService::OnDemandUpdate(bool is_foreground, Callback on_finished) {
+ DCHECK(thread_checker_.CalledOnValidThread());
+
+ if (is_updating_) {
+ LOG(INFO) << "AdBlockUpdaterService: update in progress. Please wait.";
+ LOG(INFO) << "AdBlockUpdaterService: update in progress";
+ NotifyObservers(AdblockEvent::ADBLOCK_CHECKING_FOR_UPDATES, AdblockError::UPDATE_IN_PROGRESS);
+ return false;
+ }
+
+ last_update_ = pref_service_->GetTime(kAdBlockLastCheckTime);
+
+ auto version = ruleset_service_->GetMostRecentlyIndexedVersion();
+ base::Time t = base::Time();
+ if (ConvertVersionToTime(version.content_version, &t)==true) {
+ // Check if the request is too soon.
+ if (!last_update_.is_null()) {
+ int deltaCheck = is_foreground == false ? next_check_delay_ : on_demand_check_delay;
+ base::TimeDelta delta = base::Time::Now() - last_update_;
+ if (delta < base::TimeDelta::FromSeconds(deltaCheck)) {
+ LOG(INFO) << "AdBlockUpdaterService: update delayed. Wait "
+ << (base::TimeDelta::FromSeconds(deltaCheck)-delta);
+ return false;
+ }
+ }
+ }
+
+ OnDemandUpdateInternal(is_foreground, std::move(on_finished));
+ return true;
+}
+
+void AdBlockUpdaterService::OnDemandUpdateInternal(bool is_foreground, Callback on_finished) {
+ DCHECK(thread_checker_.CalledOnValidThread());
+
+ if (is_updating_) {
+ base::ThreadTaskRunnerHandle::Get()->PostTask(
+ FROM_HERE, base::BindOnce(std::move(on_finished),
+ AdblockError::UPDATE_IN_PROGRESS));
+ return;
+ }
+ is_updating_ = true;
+ last_update_ = base::Time::Now();
+ pref_service_->SetTime(kAdBlockLastCheckTime, last_update_);
+
+ auto version = ruleset_service_->GetMostRecentlyIndexedVersion();
+ base::Time t = base::Time();
+ LOG(INFO) << "AdBlockUpdaterService: MostRecentIndexedVersion = " << version.content_version;
+ ConvertVersionToTime(version.content_version, &t);
+
+ NotifyObservers(AdblockEvent::ADBLOCK_CHECKING_FOR_UPDATES, AdblockError::NONE);
+ base::Time t = base::Time();
+ auto version = ruleset_service_->GetMostRecentlyIndexedVersion();
+ ConvertVersionToTime(version.content_version, &t);
+
+ std::string filters_url_ = pref_service_->GetString(kAdBlockFiltersURL);
+ auto task = base::MakeRefCounted<DownloadFiltersTask>(
@ -1425,11 +1378,11 @@ new file mode 100644
+ base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE,
+ base::BindOnce(&DownloadFiltersTask::Run, base::Unretained(task.get())));
+ tasks_.insert(task);
+
+ return true;
+}
+
+bool AdBlockUpdaterService::ConvertVersionToTime(const std::string& version, base::Time* t)
+{
+ *t = base::Time();
+bool AdBlockUpdaterService::ConvertVersionToTime(const std::string& version, base::Time* t) {
+ if (version.empty()) {
+ LOG(INFO) << "AdBlockUpdaterService: version is empty";
+ return false;
@ -1439,12 +1392,12 @@ new file mode 100644
+ std::vector<std::string> tokens =
+ base::SplitString(version, ".", base::KEEP_WHITESPACE, base::SPLIT_WANT_ALL);
+ int i = 0;
+ bool failed = false;
+ bool success = true;
+ for (const std::string& token : tokens) {
+ // parse as number
+ int n = 0;
+ if (!base::StringToInt(token, &n)) {
+ failed = true;
+ success = false;
+ break;
+ }
+
@ -1466,21 +1419,21 @@ new file mode 100644
+ e.hour = n / 60;
+ break;
+ default:
+ failed = true;
+ success = false;
+ break;
+ }
+ }
+
+ if (failed) {
+ if (!success) {
+ LOG(WARNING) << "AdBlockUpdaterService: failed to parse most recent version as x.y.z.w dot-separated integers";
+ } else {
+ if (!base::Time::FromUTCExploded(e, t)) {
+ failed = true;
+ success = false;
+ LOG(WARNING) << "AdBlockUpdaterService: failed to convert version to time.";
+ }
+ }
+
+ return failed;
+ return success;
+}
+
+void AdBlockUpdaterService::OnUpdateComplete(Callback on_finished,
@ -1549,7 +1502,6 @@ new file mode 100644
+
+void AdBlockUpdaterService::SetAdBlockFiltersURL(const std::string url) {
+ pref_service_->SetString(kAdBlockFiltersURL, url);
+ pref_service_->SetTime(kAdBlockLastCheckTime, base::Time());
+}
+
+std::string AdBlockUpdaterService::GetMostRecentIndexedVersion() {
@ -1557,23 +1509,21 @@ new file mode 100644
+ return version.content_version;
+}
+
+long AdBlockUpdaterService::GetLastUpdate() {
+long AdBlockUpdaterService::GetLastUpdateMs() {
+ return pref_service_->GetTime(kAdBlockLastCheckTime).ToJavaTime();
+}
+
+long AdBlockUpdaterService::GetLastOkUpdate() {
+ base::Time lastOk = pref_service_->GetTime(kAdBlockLastCheckTimeOk);
+ return lastOk.ToJavaTime();
+long AdBlockUpdaterService::GetLastSuccessfulUpdateMs() {
+ return pref_service_->GetTime(kAdBlockLastCheckTimeOk).ToJavaTime();
+}
+
+int AdBlockUpdaterService::GetAdBlockUpdateTimeFrequency() {
+int AdBlockUpdaterService::GetAdBlockUpdateFrequencyInDays() {
+ return pref_service_->GetInteger(kAdBlockFiltersCheckFrequency);
+}
+
+void AdBlockUpdaterService::SetAdBlockUpdateTimeFrequency(int days) {
+void AdBlockUpdaterService::SetAdBlockUpdateFrequency(int days) {
+ if (pref_service_->GetInteger(kAdBlockFiltersCheckFrequency) != days) {
+ pref_service_->SetInteger(kAdBlockFiltersCheckFrequency, days);
+ pref_service_->SetTime(kAdBlockLastCheckTime, base::Time());
+ StartWithDelay(0);
+ }
+}
@ -1581,7 +1531,7 @@ new file mode 100644
+// static
+void AdBlockUpdaterService::RegisterPrefs(PrefRegistrySimple* registry) {
+ registry->RegisterStringPref(kAdBlockFiltersURL, std::string());
+ registry->RegisterIntegerPref(kAdBlockFiltersCheckFrequency, 7);
+ registry->RegisterIntegerPref(kAdBlockFiltersCheckFrequency, defaultFiltersCheckFrequencyInDays);
+ registry->RegisterTimePref(kAdBlockLastCheckTime, base::Time());
+ registry->RegisterTimePref(kAdBlockLastCheckTimeOk, base::Time());
+
@ -1594,7 +1544,7 @@ diff --git a/components/component_updater/adblock_updater_service.h b/components
new file mode 100644
--- /dev/null
+++ b/components/component_updater/adblock_updater_service.h
@@ -0,0 +1,127 @@
@@ -0,0 +1,126 @@
+/*
+ This file is part of Bromite.
+
@ -1674,19 +1624,19 @@ new file mode 100644
+ void SetAdBlockFiltersURL(const std::string url);
+ std::string GetMostRecentIndexedVersion();
+
+ // return date/time (in millis) of last successfully request
+ long GetLastOkUpdate();
+ // timestamp (in UNIX epoch milliseconds) of last successful update request
+ long GetLastSuccessfulUpdateMs();
+
+ // return date/time (in millis) of last request
+ long GetLastUpdate();
+ // timestamp (in UNIX epoch milliseconds) of last update request
+ long GetLastUpdateMs();
+
+ // Get/Set check interval (in days)
+ int GetAdBlockUpdateTimeFrequency();
+ void SetAdBlockUpdateTimeFrequency(int days);
+ int GetAdBlockUpdateFrequencyInDays();
+ void SetAdBlockUpdateFrequency(int days);
+
+ // To be called for an user-triggered update.
+ // Will not result in an actual update if the last update was too recently triggered.
+ bool OnDemandUpdate(Callback on_finished);
+ // called with is_foreground=true for on-demand updates
+ // will always check for an update
+ bool OnDemandUpdate(bool is_foreground, Callback on_finished);
+
+ static void RegisterPrefs(PrefRegistrySimple* registry);
+
@ -1695,11 +1645,10 @@ new file mode 100644
+
+ void NotifyObservers(AdblockEvent event, AdblockError error);
+ void OnDemandScheduledUpdate(component_updater::UpdateScheduler::OnFinishedCallback on_finished);
+ bool OnDemandUpdateAsNeeded(bool is_foreground, Callback on_finished);
+ void OnDemandUpdateInternal(bool is_foreground, Callback on_finished);
+ void OnUpdateComplete(Callback callback, scoped_refptr<DownloadFiltersTask> task, AdblockError error);
+ void RulesetPublishedCallback();
+
+ // returns false if conversion fails
+ bool ConvertVersionToTime(const std::string& version, base::Time* t);
+
+ base::ObserverList<Observer>::Unchecked observer_list_;
@ -1715,7 +1664,7 @@ new file mode 100644
+
+ bool is_updating_ = false;
+ bool scheduled_ = false;
+ int next_check_delay_;
+ int next_check_delay_in_seconds_;
+ std::set<scoped_refptr<DownloadFiltersTask>> tasks_;
+};
+
@ -1726,7 +1675,7 @@ diff --git a/components/component_updater/download_filters_task.cc b/components/
new file mode 100644
--- /dev/null
+++ b/components/component_updater/download_filters_task.cc
@@ -0,0 +1,237 @@
@@ -0,0 +1,236 @@
+/*
+ This file is part of Bromite.
+
@ -1910,8 +1859,7 @@ new file mode 100644
+ : base::TimeDelta();
+
+ // Consider a 5xx response from the server as an indication to terminate
+ // the request and avoid overloading the server in this case.
+ // is not accepting requests for the moment.
+ // the request and avoid overloading the server.
+ int error = -1;
+ if (!file_path.empty() && response_code_ == 200) {
+ DCHECK_EQ(0, net_error);