stage 1 - android version

This commit is contained in:
Carmelo Messina
2023-06-14 09:02:52 +02:00
parent 65e8efafc3
commit 829aacfc96
18 changed files with 1884 additions and 2197 deletions
@@ -17,35 +17,23 @@ Subject: Viewport Protection Site Setting
.../views/page_info/page_info_view_factory.cc | 3 +
.../settings_localized_strings_provider.cc | 7 ++
.../ui/webui/settings/site_settings_helper.cc | 1 +
.../browser_ui/site_settings/android/BUILD.gn | 3 +
.../BromiteCustomContentSettingImpl.java | 1 +
.../BromiteViewportContentSetting.java | 86 +++++++++++++++++++
.../site_settings/SiteSettingsCategory.java | 5 +-
.../strings/android/browser_ui_strings.grd | 1 +
.../browser_ui/strings/android/viewport.grdp | 18 ++++
components/components_strings.grd | 1 +
.../core/browser/content_settings_registry.cc | 15 +++-
.../core/browser/content_settings_utils.cc | 2 +
.../core/common/content_settings.cc | 4 +-
.../core/common/content_settings.h | 1 +
.../core/common/content_settings.mojom | 1 +
.../common/content_settings_mojom_traits.cc | 3 +-
.../common/content_settings_mojom_traits.h | 5 ++
.../core/common/content_settings_types.h | 2 +
.../renderer/content_settings_agent_impl.cc | 9 ++
.../renderer/content_settings_agent_impl.h | 1 +
.../impl/BromiteViewportContentSetting.java | 88 +++++++++++++++++++
.../bromite_content_settings/viewport.grdp | 18 ++++
.../bromite_content_settings/viewport.inc | 13 +++
.../bromite_content_settings/VIEWPORT.inc | 1 +
third_party/blink/common/features.cc | 2 +-
.../platform/web_content_settings_client.h | 2 +
.../renderer/core/frame/local_dom_window.cc | 1 +
third_party/blink/renderer/core/page/page.cc | 2 +
35 files changed, 234 insertions(+), 6 deletions(-)
create mode 100644 components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/BromiteViewportContentSetting.java
create mode 100644 components/browser_ui/strings/android/viewport.grdp
.../renderer/core/frame/local_dom_window.cc | 2 +
third_party/blink/renderer/core/page/page.cc | 3 +
21 files changed, 201 insertions(+), 1 deletion(-)
create mode 100644 components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/impl/BromiteViewportContentSetting.java
create mode 100644 components/browser_ui/strings/android/bromite_content_settings/viewport.grdp
create mode 100644 components/content_settings/core/browser/bromite_content_settings/viewport.inc
create mode 100644 components/content_settings/core/common/bromite_content_settings/VIEWPORT.inc
diff --git a/chrome/app/settings_strings.grdp b/chrome/app/settings_strings.grdp
--- a/chrome/app/settings_strings.grdp
+++ b/chrome/app/settings_strings.grdp
@@ -4424,6 +4424,25 @@
@@ -4434,6 +4434,25 @@
Not allowed to use WebRTC
</message>
@@ -235,7 +223,7 @@ diff --git a/chrome/browser/ui/views/page_info/page_info_view_factory.cc b/chrom
diff --git a/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc b/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc
--- a/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc
+++ b/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc
@@ -2555,6 +2555,13 @@ void AddSiteSettingsStrings(content::WebUIDataSource* html_source,
@@ -2556,6 +2556,13 @@ void AddSiteSettingsStrings(content::WebUIDataSource* html_source,
{"siteSettingsWebRTCAllowedExceptions",IDS_SETTINGS_SITE_SETTINGS_WEBRTC_ALLOWED_EXCEPTIONS},
{"siteSettingsWebRTCBlockedExceptions", IDS_SETTINGS_SITE_SETTINGS_WEBRTC_BLOCKED_EXCEPTIONS},
{"siteSettingsWebRTCMidSentence", IDS_SITE_SETTINGS_WEBRTC_TITLE},
@@ -260,35 +248,11 @@ diff --git a/chrome/browser/ui/webui/settings/site_settings_helper.cc b/chrome/b
// Add new content settings here if a corresponding Javascript string
// representation for it is not required, for example if the content setting
diff --git a/components/browser_ui/site_settings/android/BUILD.gn b/components/browser_ui/site_settings/android/BUILD.gn
--- a/components/browser_ui/site_settings/android/BUILD.gn
+++ b/components/browser_ui/site_settings/android/BUILD.gn
@@ -112,6 +112,9 @@ android_library("java") {
sources += [
"java/src/org/chromium/components/browser_ui/site_settings/BromiteWebRTCContentSetting.java",
]
+ sources += [
+ "java/src/org/chromium/components/browser_ui/site_settings/BromiteViewportContentSetting.java",
+ ]
annotation_processor_deps = [ "//base/android/jni_generator:jni_processor" ]
resources_package = "org.chromium.components.browser_ui.site_settings"
deps = [
diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/BromiteCustomContentSettingImpl.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/BromiteCustomContentSettingImpl.java
--- a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/BromiteCustomContentSettingImpl.java
+++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/BromiteCustomContentSettingImpl.java
@@ -45,6 +45,7 @@ public abstract class BromiteCustomContentSettingImpl {
mItemList = new ArrayList<BromiteCustomContentSetting>();
mItemList.add(new BromiteWebGLContentSetting());
mItemList.add(new BromiteWebRTCContentSetting());
+ mItemList.add(new BromiteViewportContentSetting());
}
public static SiteSettingsCategory createFromType(
diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/BromiteViewportContentSetting.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/BromiteViewportContentSetting.java
diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/impl/BromiteViewportContentSetting.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/impl/BromiteViewportContentSetting.java
new file mode 100644
--- /dev/null
+++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/BromiteViewportContentSetting.java
@@ -0,0 +1,86 @@
+++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/impl/BromiteViewportContentSetting.java
@@ -0,0 +1,88 @@
+/*
+ This file is part of Bromite.
+
@@ -306,8 +270,11 @@ new file mode 100644
+ along with Bromite. If not, see <https://www.gnu.org/licenses/>.
+*/
+
+package org.chromium.components.browser_ui.site_settings;
+package org.chromium.components.browser_ui.site_settings.impl;
+
+import org.chromium.components.browser_ui.site_settings.R;
+
+import org.chromium.components.browser_ui.site_settings.BromiteCustomContentSetting;
+import org.chromium.components.browser_ui.site_settings.ContentSettingsResources;
+import org.chromium.components.browser_ui.site_settings.SiteSettingsCategory;
+import org.chromium.components.content_settings.ContentSettingValues;
@@ -323,7 +290,6 @@ new file mode 100644
+public class BromiteViewportContentSetting extends BromiteCustomContentSetting {
+ public BromiteViewportContentSetting() {
+ super(/*contentSettingsType*/ ContentSettingsType.VIEWPORT,
+ /*siteSettingsCategory*/ SiteSettingsCategory.Type.VIEWPORT,
+ /*defaultEnabledValue*/ ContentSettingValues.ALLOW,
+ /*defaultDisabledValue*/ ContentSettingValues.BLOCK,
+ /*allowException*/ true,
@@ -375,46 +341,10 @@ new file mode 100644
+ return value != ContentSettingValues.BLOCK;
+ }
+}
diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettingsCategory.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettingsCategory.java
--- a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettingsCategory.java
+++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettingsCategory.java
@@ -48,7 +48,7 @@ public class SiteSettingsCategory {
Type.USE_STORAGE, Type.AUTO_DARK_WEB_CONTENT, Type.REQUEST_DESKTOP_SITE,
Type.FEDERATED_IDENTITY_API, Type.THIRD_PARTY_COOKIES, Type.SITE_DATA, Type.ANTI_ABUSE,
Type.TIMEZONE_OVERRIDE, Type.AUTOPLAY, Type.JAVASCRIPT_JIT, Type.IMAGES,
- Type.NUM_ENTRIES, Type.WEBGL, Type.WEBRTC})
+ Type.NUM_ENTRIES, Type.WEBGL, Type.WEBRTC, Type.VIEWPORT})
@Retention(RetentionPolicy.SOURCE)
public @interface Type {
// All updates here must also be reflected in {@link #preferenceKey(int)
@@ -88,10 +88,11 @@ public class SiteSettingsCategory {
int IMAGES = 32;
int WEBGL = 33;
int WEBRTC = 34;
+ int VIEWPORT = 35;
/**
* Number of handled categories used for calculating array sizes.
*/
- int NUM_ENTRIES = 35;
+ int NUM_ENTRIES = 36;
}
private final BrowserContextHandle mBrowserContextHandle;
diff --git a/components/browser_ui/strings/android/browser_ui_strings.grd b/components/browser_ui/strings/android/browser_ui_strings.grd
--- a/components/browser_ui/strings/android/browser_ui_strings.grd
+++ b/components/browser_ui/strings/android/browser_ui_strings.grd
@@ -176,6 +176,7 @@
<part file="site_settings.grdp" />
<part file="webgl.grdp" />
<part file="webrtc.grdp" />
+ <part file="viewport.grdp" />
<message name="IDS_GOT_IT" desc="Button for the user to accept a disclosure/message" formatter_data="android_java">
Got it
diff --git a/components/browser_ui/strings/android/viewport.grdp b/components/browser_ui/strings/android/viewport.grdp
diff --git a/components/browser_ui/strings/android/bromite_content_settings/viewport.grdp b/components/browser_ui/strings/android/bromite_content_settings/viewport.grdp
new file mode 100644
--- /dev/null
+++ b/components/browser_ui/strings/android/viewport.grdp
+++ b/components/browser_ui/strings/android/bromite_content_settings/viewport.grdp
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<grit-part>
@@ -434,32 +364,11 @@ new file mode 100644
+ Disabled
+ </message>
+</grit-part>
diff --git a/components/components_strings.grd b/components/components_strings.grd
--- a/components/components_strings.grd
+++ b/components/components_strings.grd
@@ -339,6 +339,7 @@
<part file="browser_ui/strings/android/webgl.grdp" />
<part file="browser_ui/strings/android/webrtc.grdp" />
+ <part file="browser_ui/strings/android/viewport.grdp" />
<if expr="not is_ios">
<part file="history_clusters_strings.grdp" />
</if>
diff --git a/components/content_settings/core/browser/content_settings_registry.cc b/components/content_settings/core/browser/content_settings_registry.cc
--- a/components/content_settings/core/browser/content_settings_registry.cc
+++ b/components/content_settings/core/browser/content_settings_registry.cc
@@ -627,12 +627,25 @@ void ContentSettingsRegistry::Init() {
/*valid_settings=*/{CONTENT_SETTING_ALLOW,
CONTENT_SETTING_BLOCK},
WebsiteSettingsInfo::TOP_ORIGIN_ONLY_SCOPE,
- WebsiteSettingsRegistry::PLATFORM_ANDROID,
+ WebsiteSettingsRegistry::ALL_PLATFORMS,
ContentSettingsInfo::INHERIT_IN_INCOGNITO,
ContentSettingsInfo::EXCEPTIONS_ON_SECURE_AND_INSECURE_ORIGINS,
/*show_into_info_page*/ true,
/*permission_type_ui*/ IDS_SITE_SETTINGS_TYPE_WEBRTC,
/*permission_type_ui_mid_sentence*/ IDS_SITE_SETTINGS_TYPE_WEBRTC_MID_SENTENCE);
+
diff --git a/components/content_settings/core/browser/bromite_content_settings/viewport.inc b/components/content_settings/core/browser/bromite_content_settings/viewport.inc
new file mode 100644
--- /dev/null
+++ b/components/content_settings/core/browser/bromite_content_settings/viewport.inc
@@ -0,0 +1,13 @@
+ Register(ContentSettingsType::VIEWPORT, "viewport", CONTENT_SETTING_ALLOW,
+ WebsiteSettingsInfo::SYNCABLE,
+ /*allowlisted_schemes=*/{},
@@ -470,134 +379,15 @@ diff --git a/components/content_settings/core/browser/content_settings_registry.
+ ContentSettingsInfo::INHERIT_IN_INCOGNITO,
+ ContentSettingsInfo::EXCEPTIONS_ON_SECURE_AND_INSECURE_ORIGINS,
+ /*show_into_info_page*/ true,
+ /*is_renderer_content_setting*/ true,
+ /*permission_type_ui*/ IDS_SITE_SETTINGS_TYPE_VIEWPORT,
+ /*permission_type_ui_mid_sentence*/ IDS_SITE_SETTINGS_TYPE_VIEWPORT_MID_SENTENCE);
}
void ContentSettingsRegistry::Register(
diff --git a/components/content_settings/core/browser/content_settings_utils.cc b/components/content_settings/core/browser/content_settings_utils.cc
--- a/components/content_settings/core/browser/content_settings_utils.cc
+++ b/components/content_settings/core/browser/content_settings_utils.cc
@@ -162,6 +162,8 @@ void GetRendererContentSettingRules(const HostContentSettingsMap* map,
&(rules->webgl_rules));
map->GetSettingsForOneType(ContentSettingsType::WEBRTC,
&(rules->webrtc_rules));
+ map->GetSettingsForOneType(ContentSettingsType::VIEWPORT,
+ &(rules->viewport_rules));
}
bool IsMorePermissive(ContentSetting a, ContentSetting b) {
diff --git a/components/content_settings/core/common/content_settings.cc b/components/content_settings/core/common/content_settings.cc
--- a/components/content_settings/core/common/content_settings.cc
+++ b/components/content_settings/core/common/content_settings.cc
@@ -221,7 +221,8 @@ bool RendererContentSettingRules::IsRendererContentSetting(
content_type == ContentSettingsType::AUTO_DARK_WEB_CONTENT ||
content_type == ContentSettingsType::TIMEZONE_OVERRIDE ||
content_type == ContentSettingsType::WEBGL ||
- content_type == ContentSettingsType::WEBRTC;
+ content_type == ContentSettingsType::WEBRTC ||
+ content_type == ContentSettingsType::VIEWPORT;
}
void RendererContentSettingRules::FilterRulesByOutermostMainFrameURL(
@@ -235,6 +236,7 @@ void RendererContentSettingRules::FilterRulesByOutermostMainFrameURL(
FilterRulesForType(autoplay_rules, outermost_main_frame_url);
FilterRulesForType(webgl_rules, outermost_main_frame_url);
FilterRulesForType(webrtc_rules, outermost_main_frame_url);
+ FilterRulesForType(viewport_rules, outermost_main_frame_url);
}
RendererContentSettingRules::RendererContentSettingRules() = default;
diff --git a/components/content_settings/core/common/content_settings.h b/components/content_settings/core/common/content_settings.h
--- a/components/content_settings/core/common/content_settings.h
+++ b/components/content_settings/core/common/content_settings.h
@@ -98,6 +98,7 @@ struct RendererContentSettingRules {
std::string timezone_override_value;
ContentSettingsForOneType webgl_rules;
ContentSettingsForOneType webrtc_rules;
+ ContentSettingsForOneType viewport_rules;
};
namespace content_settings {
diff --git a/components/content_settings/core/common/content_settings.mojom b/components/content_settings/core/common/content_settings.mojom
--- a/components/content_settings/core/common/content_settings.mojom
+++ b/components/content_settings/core/common/content_settings.mojom
@@ -83,4 +83,5 @@ struct RendererContentSettingRules {
string timezone_override_value;
array<ContentSettingPatternSource> webgl_rules;
array<ContentSettingPatternSource> webrtc_rules;
+ array<ContentSettingPatternSource> viewport_rules;
};
diff --git a/components/content_settings/core/common/content_settings_mojom_traits.cc b/components/content_settings/core/common/content_settings_mojom_traits.cc
--- a/components/content_settings/core/common/content_settings_mojom_traits.cc
+++ b/components/content_settings/core/common/content_settings_mojom_traits.cc
@@ -107,7 +107,8 @@ bool StructTraits<content_settings::mojom::RendererContentSettingRulesDataView,
data.ReadTimezoneOverrideRules(&out->timezone_override_rules) &&
data.ReadTimezoneOverrideValue(&out->timezone_override_value) &&
data.ReadWebglRules(&out->webgl_rules) &&
- data.ReadWebrtcRules(&out->webrtc_rules);
+ data.ReadWebrtcRules(&out->webrtc_rules) &&
+ data.ReadViewportRules(&out->viewport_rules);
}
} // namespace mojo
diff --git a/components/content_settings/core/common/content_settings_mojom_traits.h b/components/content_settings/core/common/content_settings_mojom_traits.h
--- a/components/content_settings/core/common/content_settings_mojom_traits.h
+++ b/components/content_settings/core/common/content_settings_mojom_traits.h
@@ -175,6 +175,11 @@ struct StructTraits<
return r.webrtc_rules;
}
+ static const std::vector<ContentSettingPatternSource>& viewport_rules(
+ const RendererContentSettingRules& r) {
+ return r.viewport_rules;
+ }
+
static bool Read(
content_settings::mojom::RendererContentSettingRulesDataView data,
RendererContentSettingRules* out);
diff --git a/components/content_settings/core/common/content_settings_types.h b/components/content_settings/core/common/content_settings_types.h
--- a/components/content_settings/core/common/content_settings_types.h
+++ b/components/content_settings/core/common/content_settings_types.h
@@ -281,6 +281,8 @@ enum class ContentSettingsType : int32_t {
WEBRTC,
diff --git a/components/content_settings/core/common/bromite_content_settings/VIEWPORT.inc b/components/content_settings/core/common/bromite_content_settings/VIEWPORT.inc
new file mode 100644
--- /dev/null
+++ b/components/content_settings/core/common/bromite_content_settings/VIEWPORT.inc
@@ -0,0 +1 @@
+ VIEWPORT,
+
// Setting to indicate whether browser should allow signing into a website via
// the browser FedCM API.
FEDERATED_IDENTITY_API,
diff --git a/components/content_settings/renderer/content_settings_agent_impl.cc b/components/content_settings/renderer/content_settings_agent_impl.cc
--- a/components/content_settings/renderer/content_settings_agent_impl.cc
+++ b/components/content_settings/renderer/content_settings_agent_impl.cc
@@ -459,6 +459,15 @@ bool ContentSettingsAgentImpl::AllowWebRTC(bool enabled_per_settings) {
url::Origin(frame->GetDocument().GetSecurityOrigin()).GetURL());
}
+bool ContentSettingsAgentImpl::AllowViewportChange(bool enabled_per_settings) {
+ if (!content_setting_rules_)
+ return false;
+ blink::WebLocalFrame* frame = render_frame()->GetWebFrame();
+ return CONTENT_SETTING_ALLOW == GetContentSettingFromRules(
+ content_setting_rules_->viewport_rules,
+ url::Origin(frame->GetDocument().GetSecurityOrigin()).GetURL());
+}
+
bool ContentSettingsAgentImpl::IsAllowlistedForContentSettings() const {
if (should_allowlist_)
return true;
diff --git a/components/content_settings/renderer/content_settings_agent_impl.h b/components/content_settings/renderer/content_settings_agent_impl.h
--- a/components/content_settings/renderer/content_settings_agent_impl.h
+++ b/components/content_settings/renderer/content_settings_agent_impl.h
@@ -101,6 +101,7 @@ class ContentSettingsAgentImpl
bool ShouldAutoupgradeMixedContent() override;
bool AllowWebgl(bool enabled_per_settings) override;
bool AllowWebRTC(bool enabled_per_settings) override;
+ bool AllowViewportChange(bool enabled_per_settings) override;
bool allow_running_insecure_content() const {
return allow_running_insecure_content_;
diff --git a/third_party/blink/common/features.cc b/third_party/blink/common/features.cc
--- a/third_party/blink/common/features.cc
+++ b/third_party/blink/common/features.cc
@@ -610,38 +400,28 @@ diff --git a/third_party/blink/common/features.cc b/third_party/blink/common/fea
BASE_FEATURE(kPrivacySandboxAdsAPIs,
"PrivacySandboxAdsAPIs", // disabled by default
diff --git a/third_party/blink/public/platform/web_content_settings_client.h b/third_party/blink/public/platform/web_content_settings_client.h
--- a/third_party/blink/public/platform/web_content_settings_client.h
+++ b/third_party/blink/public/platform/web_content_settings_client.h
@@ -103,6 +103,8 @@ class WebContentSettingsClient {
virtual bool AllowWebRTC(bool default_value) { return default_value; }
+ virtual bool AllowViewportChange(bool default_value) { return default_value; }
+
// Reports that passive mixed content was found at the provided URL.
virtual void PassiveInsecureContentFound(const WebURL&) {}
diff --git a/third_party/blink/renderer/core/frame/local_dom_window.cc b/third_party/blink/renderer/core/frame/local_dom_window.cc
--- a/third_party/blink/renderer/core/frame/local_dom_window.cc
+++ b/third_party/blink/renderer/core/frame/local_dom_window.cc
@@ -2322,6 +2322,7 @@ DOMWindow* LocalDOMWindow::open(v8::Isolate* isolate,
@@ -2322,6 +2322,8 @@ DOMWindow* LocalDOMWindow::open(v8::Isolate* isolate,
// var w = window.open()
// var not_emulated_screen_info = w.screen
bool protection_enabled = base::FeatureList::IsEnabled(features::kViewportProtection);
+ protection_enabled |= GetFrame()->GetContentSettingsClient()->AllowViewportChange(false);
+ protection_enabled |= GetFrame()->GetContentSettingsClient()->AllowContentSetting(
+ ContentSettingsType::VIEWPORT, false);
result.frame->GetPage()->CalculateEmulatedScreenSetting(
To<LocalFrame>(result.frame),
/*force*/ protection_enabled);
diff --git a/third_party/blink/renderer/core/page/page.cc b/third_party/blink/renderer/core/page/page.cc
--- a/third_party/blink/renderer/core/page/page.cc
+++ b/third_party/blink/renderer/core/page/page.cc
@@ -884,6 +884,8 @@ void Page::UpdateAcceleratedCompositingSettings() {
@@ -884,6 +884,9 @@ void Page::UpdateAcceleratedCompositingSettings() {
void Page::CalculateEmulatedScreenSetting(LocalFrame* frame, bool force) {
bool isEnabled = base::FeatureList::IsEnabled(features::kViewportProtection);
+ blink::WebContentSettingsClient* settings = frame->GetContentSettingsClient();
+ isEnabled |= (settings && settings->AllowViewportChange(false));
+ isEnabled |= (settings && settings->AllowContentSetting(
+ ContentSettingsType::VIEWPORT, /*default_value*/ false));
if (isEnabled || force) {
// this is the maximum (and minimum) value which in percentage
// corresponds to +- 0.03%
@@ -34,7 +34,7 @@ The feature is controlled by a feature flag (default enabled)
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
@@ -7794,6 +7794,11 @@ const FeatureEntry kFeatureEntries[] = {
@@ -7803,6 +7803,11 @@ const FeatureEntry kFeatureEntries[] = {
FEATURE_VALUE_TYPE(paint_preview::kPaintPreviewDemo)},
#endif // BUILDFLAG(ENABLE_PAINT_PREVIEW) && BUILDFLAG(IS_ANDROID)
@@ -49,7 +49,7 @@ diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
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
@@ -7106,6 +7106,12 @@ const char kPaintPreviewDemoDescription[] =
@@ -7119,6 +7119,12 @@ const char kPaintPreviewDemoDescription[] =
"previews.";
#endif // ENABLE_PAINT_PREVIEW && BUILDFLAG(IS_ANDROID)
@@ -65,7 +65,7 @@ diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descripti
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
@@ -4124,6 +4124,9 @@ extern const char kPaintPreviewDemoName[];
@@ -4133,6 +4133,9 @@ extern const char kPaintPreviewDemoName[];
extern const char kPaintPreviewDemoDescription[];
#endif // ENABLE_PAINT_PREVIEW && BUILDFLAG(IS_ANDROID)
@@ -92,7 +92,7 @@ diff --git a/third_party/blink/common/features.cc b/third_party/blink/common/fea
diff --git a/third_party/blink/public/common/features.h b/third_party/blink/public/common/features.h
--- a/third_party/blink/public/common/features.h
+++ b/third_party/blink/public/common/features.h
@@ -919,6 +919,9 @@ BLINK_COMMON_EXPORT extern const base::FeatureParam<
@@ -924,6 +924,9 @@ BLINK_COMMON_EXPORT extern const base::FeatureParam<
// base url inheritance behavior from https://crbug.com/1356658.
BLINK_COMMON_EXPORT BASE_DECLARE_FEATURE(kNewBaseUrlInheritanceBehavior);
@@ -650,7 +650,7 @@ diff --git a/third_party/blink/renderer/core/page/page.h b/third_party/blink/ren
diff --git a/third_party/blink/renderer/platform/runtime_enabled_features.json5 b/third_party/blink/renderer/platform/runtime_enabled_features.json5
--- a/third_party/blink/renderer/platform/runtime_enabled_features.json5
+++ b/third_party/blink/renderer/platform/runtime_enabled_features.json5
@@ -1823,8 +1823,8 @@
@@ -1819,8 +1819,8 @@
// as a speculative site compatibility measure, because web authors may
// assume that screen dimensions match window.innerWidth/innerHeight while
// a page is fullscreen, but that is not always true. crbug.com/1367416
@@ -17,13 +17,12 @@ Subject: WIN ADDTO Add webGL site setting
.../views/page_info/page_info_view_factory.cc | 3 +++
.../settings_localized_strings_provider.cc | 7 ++++++
.../ui/webui/settings/site_settings_helper.cc | 1 +
.../core/browser/content_settings_registry.cc | 2 +-
15 files changed, 76 insertions(+), 1 deletion(-)
14 files changed, 75 insertions(+)
diff --git a/chrome/app/settings_strings.grdp b/chrome/app/settings_strings.grdp
--- a/chrome/app/settings_strings.grdp
+++ b/chrome/app/settings_strings.grdp
@@ -4386,6 +4386,25 @@
@@ -4396,6 +4396,25 @@
Random Timezone override
</message>
@@ -213,7 +212,7 @@ diff --git a/chrome/browser/ui/views/page_info/page_info_view_factory.cc b/chrom
diff --git a/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc b/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc
--- a/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc
+++ b/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc
@@ -2541,6 +2541,13 @@ void AddSiteSettingsStrings(content::WebUIDataSource* html_source,
@@ -2542,6 +2542,13 @@ void AddSiteSettingsStrings(content::WebUIDataSource* html_source,
{"siteSettingsTimezoneOverrideAllowedExceptions",IDS_SETTINGS_SITE_SETTINGS_TIMEZONE_OVERRIDE_ALLOWED_EXCEPTIONS},
{"siteSettingsTimezoneOverrideBlockedExceptions", IDS_SETTINGS_SITE_SETTINGS_TIMEZONE_OVERRIDE_BLOCKED_EXCEPTIONS},
{"siteSettingsTimezoneOverrideMidSentence", IDS_SITE_SETTINGS_TIMEZONE_OVERRIDE_TITLE},
@@ -238,17 +237,5 @@ diff --git a/chrome/browser/ui/webui/settings/site_settings_helper.cc b/chrome/b
// Add new content settings here if a corresponding Javascript string
// representation for it is not required, for example if the content setting
diff --git a/components/content_settings/core/browser/content_settings_registry.cc b/components/content_settings/core/browser/content_settings_registry.cc
--- a/components/content_settings/core/browser/content_settings_registry.cc
+++ b/components/content_settings/core/browser/content_settings_registry.cc
@@ -614,7 +614,7 @@ void ContentSettingsRegistry::Init() {
/*valid_settings=*/{CONTENT_SETTING_ALLOW,
CONTENT_SETTING_BLOCK},
WebsiteSettingsInfo::TOP_ORIGIN_ONLY_SCOPE,
- WebsiteSettingsRegistry::PLATFORM_ANDROID,
+ WebsiteSettingsRegistry::ALL_PLATFORMS,
ContentSettingsInfo::INHERIT_IN_INCOGNITO,
ContentSettingsInfo::EXCEPTIONS_ON_SECURE_AND_INSECURE_ORIGINS,
/*show_into_info_page*/ true,
--
2.25.1
@@ -22,7 +22,7 @@ Subject: WIN ADDTO Add webRTC site settings
diff --git a/chrome/app/settings_strings.grdp b/chrome/app/settings_strings.grdp
--- a/chrome/app/settings_strings.grdp
+++ b/chrome/app/settings_strings.grdp
@@ -4405,6 +4405,25 @@
@@ -4415,6 +4415,25 @@
Not allowed to use webgl
</message>
@@ -212,7 +212,7 @@ diff --git a/chrome/browser/ui/views/page_info/page_info_view_factory.cc b/chrom
diff --git a/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc b/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc
--- a/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc
+++ b/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc
@@ -2548,6 +2548,13 @@ void AddSiteSettingsStrings(content::WebUIDataSource* html_source,
@@ -2549,6 +2549,13 @@ void AddSiteSettingsStrings(content::WebUIDataSource* html_source,
{"siteSettingsWebglAllowedExceptions",IDS_SETTINGS_SITE_SETTINGS_WEBGL_ALLOWED_EXCEPTIONS},
{"siteSettingsWebglBlockedExceptions", IDS_SETTINGS_SITE_SETTINGS_WEBGL_BLOCKED_EXCEPTIONS},
{"siteSettingsWebglMidSentence", IDS_SITE_SETTINGS_WEBGL_TITLE},
@@ -1,21 +0,0 @@
From: Your Name <you@example.com>
Date: Thu, 13 Oct 2022 10:26:13 +0000
Subject: WIN ADDTO Content settings infrastructure
---
components/content_settings/core/common/content_settings.cc | 1 +
1 file changed, 1 insertion(+)
diff --git a/components/content_settings/core/common/content_settings.cc b/components/content_settings/core/common/content_settings.cc
--- a/components/content_settings/core/common/content_settings.cc
+++ b/components/content_settings/core/common/content_settings.cc
@@ -143,6 +143,7 @@ ContentSetting IntToContentSetting(int content_setting) {
int ContentSettingTypeToHistogramValue(ContentSettingsType content_setting,
size_t* num_values) {
*num_values = std::size(kHistogramValue);
+ if ((true)) return 0;
// Verify the array is sorted by enum type and contains all values.
DCHECK(std::is_sorted(std::begin(kHistogramValue), std::end(kHistogramValue),
--
2.25.1
@@ -0,0 +1,22 @@
From: Your Name <you@example.com>
Date: Tue, 13 Jun 2023 15:52:08 +0000
Subject: WIN ADDTO JIT site settings (fixup)
---
.../ui/webui/settings/settings_localized_strings_provider.cc | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc b/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc
--- a/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc
+++ b/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc
@@ -2534,7 +2534,7 @@ void AddSiteSettingsStrings(content::WebUIDataSource* html_source,
{"siteSettingsJavascriptJITBlocked", IDS_SETTINGS_SITE_SETTINGS_JAVASCRIPT_JIT_BLOCKED},
{"siteSettingsJavascriptJITAllowedExceptions",IDS_SETTINGS_SITE_SETTINGS_JAVASCRIPT_JIT_ALLOWED_EXCEPTIONS},
{"siteSettingsJavascriptJITBlockedExceptions", IDS_SETTINGS_SITE_SETTINGS_JAVASCRIPT_JIT_BLOCKED_EXCEPTIONS},
- {"siteSettingsJavascriptJITMidSentence", IDS_SITE_SETTINGS_TYPE_JAVASCRIPT_JIT},
+ {"siteSettingsJavascriptJITMidSentence", IDS_JAVASCRIPT_JIT_PERMISSION_TITLE},
{"siteSettingsTimezoneOverride", IDS_SITE_SETTINGS_TIMEZONE_OVERRIDE_TITLE},
{"siteSettingsTimezoneOverrideDescription", IDS_SETTINGS_SITE_SETTINGS_TIMEZONE_OVERRIDE_DESCRIPTION},
{"siteSettingsTimezoneOverrideAllowed", IDS_SETTINGS_SITE_SETTINGS_TIMEZONE_OVERRIDE_ALLOWED},
--
2.25.1
@@ -23,7 +23,7 @@ Subject: WIN ADDTO JIT site settings
diff --git a/chrome/app/settings_strings.grdp b/chrome/app/settings_strings.grdp
--- a/chrome/app/settings_strings.grdp
+++ b/chrome/app/settings_strings.grdp
@@ -4348,6 +4348,25 @@
@@ -4358,6 +4358,25 @@
Not allowed to autoplay
</message>
@@ -213,10 +213,10 @@ diff --git a/chrome/browser/ui/views/page_info/page_info_view_factory.cc b/chrom
diff --git a/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc b/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc
--- a/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc
+++ b/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc
@@ -2527,6 +2527,13 @@ void AddSiteSettingsStrings(content::WebUIDataSource* html_source,
@@ -2528,6 +2528,13 @@ void AddSiteSettingsStrings(content::WebUIDataSource* html_source,
{"siteSettingsAutoplayAllowedExceptions",IDS_SETTINGS_SITE_SETTINGS_AUTOPLAY_ALLOWED_EXCEPTIONS},
{"siteSettingsAutoplayBlockedExceptions", IDS_SETTINGS_SITE_SETTINGS_AUTOPLAY_BLOCKED_EXCEPTIONS},
{"siteSettingsAutoplayMidSentence", IDS_SITE_SETTINGS_TYPE_AUTOPLAY},
{"siteSettingsAutoplayMidSentence", IDS_AUTOPLAY_PERMISSION_TITLE},
+ {"siteSettingsJavascriptJIT", IDS_SITE_SETTINGS_JAVASCRIPT_JIT_TITLE},
+ {"siteSettingsJavascriptJITDescription", IDS_SETTINGS_SITE_SETTINGS_JAVASCRIPT_JIT_DESCRIPTION},
+ {"siteSettingsJavascriptJITAllowed", IDS_SETTINGS_SITE_SETTINGS_JAVASCRIPT_JIT_ALLOWED},
@@ -257,7 +257,7 @@ diff --git a/chrome/browser/ui/webui/settings/site_settings_helper.cc b/chrome/b
diff --git a/components/content_settings/core/browser/content_settings_registry.cc b/components/content_settings/core/browser/content_settings_registry.cc
--- a/components/content_settings/core/browser/content_settings_registry.cc
+++ b/components/content_settings/core/browser/content_settings_registry.cc
@@ -511,7 +511,8 @@ void ContentSettingsRegistry::Init() {
@@ -518,7 +518,8 @@ void ContentSettingsRegistry::Init() {
ContentSettingsInfo::EXCEPTIONS_ON_SECURE_ORIGINS_ONLY);
Register(ContentSettingsType::JAVASCRIPT_JIT, "javascript-jit",
@@ -22,7 +22,7 @@ Subject: WIN ADDTO Revert the removal to block autoplay
diff --git a/chrome/app/settings_strings.grdp b/chrome/app/settings_strings.grdp
--- a/chrome/app/settings_strings.grdp
+++ b/chrome/app/settings_strings.grdp
@@ -4329,6 +4329,25 @@
@@ -4339,6 +4339,25 @@
Control how your browsing history is used to personalize Search and more
</message>
@@ -212,7 +212,7 @@ diff --git a/chrome/browser/ui/views/page_info/page_info_view_factory.cc b/chrom
diff --git a/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc b/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc
--- a/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc
+++ b/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc
@@ -2520,6 +2520,13 @@ void AddSearchEnginesStrings(content::WebUIDataSource* html_source) {
@@ -2521,6 +2521,13 @@ void AddSearchEnginesStrings(content::WebUIDataSource* html_source) {
void AddSiteSettingsStrings(content::WebUIDataSource* html_source,
Profile* profile) {
static constexpr webui::LocalizedString kLocalizedStrings[] = {
@@ -222,7 +222,7 @@ diff --git a/chrome/browser/ui/webui/settings/settings_localized_strings_provide
+ {"siteSettingsAutoplayBlocked", IDS_SETTINGS_SITE_SETTINGS_AUTOPLAY_BLOCKED},
+ {"siteSettingsAutoplayAllowedExceptions",IDS_SETTINGS_SITE_SETTINGS_AUTOPLAY_ALLOWED_EXCEPTIONS},
+ {"siteSettingsAutoplayBlockedExceptions", IDS_SETTINGS_SITE_SETTINGS_AUTOPLAY_BLOCKED_EXCEPTIONS},
+ {"siteSettingsAutoplayMidSentence", IDS_SITE_SETTINGS_TYPE_AUTOPLAY},
+ {"siteSettingsAutoplayMidSentence", IDS_AUTOPLAY_PERMISSION_TITLE},
{"addSite", IDS_SETTINGS_ADD_SITE},
{"addSiteTitle", IDS_SETTINGS_ADD_SITE_TITLE},
#if BUILDFLAG(IS_CHROMEOS_ASH)
@@ -23,7 +23,7 @@ Subject: WIN ADDTO Timezone customization
diff --git a/chrome/app/settings_strings.grdp b/chrome/app/settings_strings.grdp
--- a/chrome/app/settings_strings.grdp
+++ b/chrome/app/settings_strings.grdp
@@ -4367,6 +4367,25 @@
@@ -4377,6 +4377,25 @@
Not allowed to Javascript JIT
</message>
@@ -213,7 +213,7 @@ diff --git a/chrome/browser/ui/views/page_info/page_info_view_factory.cc b/chrom
diff --git a/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc b/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc
--- a/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc
+++ b/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc
@@ -2534,6 +2534,13 @@ void AddSiteSettingsStrings(content::WebUIDataSource* html_source,
@@ -2535,6 +2535,13 @@ void AddSiteSettingsStrings(content::WebUIDataSource* html_source,
{"siteSettingsJavascriptJITAllowedExceptions",IDS_SETTINGS_SITE_SETTINGS_JAVASCRIPT_JIT_ALLOWED_EXCEPTIONS},
{"siteSettingsJavascriptJITBlockedExceptions", IDS_SETTINGS_SITE_SETTINGS_JAVASCRIPT_JIT_BLOCKED_EXCEPTIONS},
{"siteSettingsJavascriptJITMidSentence", IDS_SITE_SETTINGS_TYPE_JAVASCRIPT_JIT},
@@ -241,14 +241,14 @@ diff --git a/chrome/browser/ui/webui/settings/site_settings_helper.cc b/chrome/b
diff --git a/components/content_settings/core/browser/content_settings_registry.cc b/components/content_settings/core/browser/content_settings_registry.cc
--- a/components/content_settings/core/browser/content_settings_registry.cc
+++ b/components/content_settings/core/browser/content_settings_registry.cc
@@ -566,7 +566,7 @@ void ContentSettingsRegistry::Init() {
@@ -577,7 +577,7 @@ void ContentSettingsRegistry::Init() {
CONTENT_SETTING_ASK, // custom timezone, default UTC
CONTENT_SETTING_BLOCK}, // random
WebsiteSettingsInfo::TOP_ORIGIN_ONLY_SCOPE,
- WebsiteSettingsRegistry::PLATFORM_ANDROID,
+ WebsiteSettingsRegistry::ALL_PLATFORMS,
ContentSettingsInfo::INHERIT_IN_INCOGNITO,
ContentSettingsInfo::EXCEPTIONS_ON_SECURE_AND_INSECURE_ORIGINS);
ContentSettingsInfo::EXCEPTIONS_ON_SECURE_AND_INSECURE_ORIGINS,
/*show_into_info_page*/ false,
--
2.25.1
+453
View File
@@ -0,0 +1,453 @@
From: Your Name <you@example.com>
Date: Fri, 9 Jun 2023 15:11:46 +0000
Subject: bromite build utils
---
build/android/gyp/java_cpp_enum.py | 36 ++++++--
build/android/gyp/util/build_utils.py | 25 +++++-
build/bromite/bromite_utils.gni | 68 +++++++++++++++
build/bromite/gyp/cpp_bromite_include.py | 35 ++++++++
build/bromite/gyp/cpp_bromite_include.pydeps | 9 ++
build/bromite/gyp/java_bromite_impl.py | 92 ++++++++++++++++++++
build/bromite/gyp/java_bromite_impl.pydeps | 9 ++
build/config/BUILDCONFIG.gn | 1 +
build/config/android/rules.gni | 4 +
tools/grit/grit/grd_reader.py | 27 ++++--
10 files changed, 294 insertions(+), 12 deletions(-)
create mode 100644 build/bromite/bromite_utils.gni
create mode 100644 build/bromite/gyp/cpp_bromite_include.py
create mode 100644 build/bromite/gyp/cpp_bromite_include.pydeps
create mode 100644 build/bromite/gyp/java_bromite_impl.py
create mode 100644 build/bromite/gyp/java_bromite_impl.pydeps
diff --git a/build/android/gyp/java_cpp_enum.py b/build/android/gyp/java_cpp_enum.py
--- a/build/android/gyp/java_cpp_enum.py
+++ b/build/android/gyp/java_cpp_enum.py
@@ -173,6 +173,7 @@ class DirectiveSet:
class HeaderParser:
+ include_re = re.compile(r'#include "(.*)"')
single_line_comment_re = re.compile(r'\s*//\s*([^\n]*)')
multi_line_comment_start_re = re.compile(r'\s*/\*')
enum_line_re = re.compile(r'^\s*(\w+)(\s*\=\s*([^,\n]+))?,?')
@@ -194,7 +195,7 @@ class HeaderParser:
enum_single_line_re = re.compile(
r'^\s*(?:\[cpp.*\])?\s*enum.*{(?P<enum_entries>.*)}.*$')
- def __init__(self, lines, path=''):
+ def __init__(self, lines, options, path=''):
self._lines = lines
self._path = path
self._enum_definitions = []
@@ -204,6 +205,7 @@ class HeaderParser:
self._generator_directives = DirectiveSet()
self._multi_line_generator_directive = None
self._current_enum_entry = ''
+ self._options = options
def _ApplyGeneratorDirectives(self):
self._generator_directives.UpdateDefinition(self._current_definition)
@@ -227,6 +229,24 @@ class HeaderParser:
raise Exception('Multi-line comments in enums are not supported in ' +
self._path)
+ # handles the management of #include files
+ include_line = HeaderParser.include_re.match(line)
+ if include_line:
+ include_file = include_line.groups()[0];
+ if not include_file.endswith(".inc"):
+ raise Exception('Include file \"' + include_file + '\" must ends with .inc')
+
+ file_to_include = os.path.join(self._options.gen_dir, include_file)
+ if not os.path.exists(file_to_include):
+ file_to_include = os.path.join(self._options.root_dir, include_file)
+ lines = []
+ with open(file_to_include) as include_file_handle:
+ lines = include_file_handle.readlines()
+
+ for new_line in lines:
+ self._ParseEnumLine(new_line)
+ return
+
enum_comment = HeaderParser.single_line_comment_re.match(line)
if enum_comment:
comment = enum_comment.groups()[0]
@@ -327,9 +347,9 @@ class HeaderParser:
self._ParseSingleLineEnum(single_line_enum.group('enum_entries'))
-def DoGenerate(source_paths):
+def DoGenerate(source_paths, options):
for source_path in source_paths:
- enum_definitions = DoParseHeaderFile(source_path)
+ enum_definitions = DoParseHeaderFile(source_path, options)
if not enum_definitions:
raise Exception('No enums found in %s\n'
'Did you forget prefixing enums with '
@@ -342,9 +362,9 @@ def DoGenerate(source_paths):
yield output_path, output
-def DoParseHeaderFile(path):
+def DoParseHeaderFile(path, options):
with open(path) as f:
- return HeaderParser(f.readlines(), path).ParseDefinitions()
+ return HeaderParser(f.readlines(), options, path).ParseDefinitions()
def GenerateOutput(source_path, enum_definition):
@@ -423,6 +443,10 @@ def DoMain(argv):
parser.add_option('--srcjar',
help='When specified, a .srcjar at the given path is '
'created instead of individual .java files.')
+ parser.add_option('--gen_dir',
+ help='Indicates the path to the generated file')
+ parser.add_option('--root_dir',
+ help='Indicates the path to the build root')
options, args = parser.parse_args(argv)
@@ -432,7 +456,7 @@ def DoMain(argv):
with action_helpers.atomic_output(options.srcjar) as f:
with zipfile.ZipFile(f, 'w', zipfile.ZIP_STORED) as srcjar:
- for output_path, data in DoGenerate(input_paths):
+ for output_path, data in DoGenerate(input_paths, options):
zip_helpers.add_to_zip_hermetic(srcjar, output_path, data=data)
diff --git a/build/android/gyp/util/build_utils.py b/build/android/gyp/util/build_utils.py
--- a/build/android/gyp/util/build_utils.py
+++ b/build/android/gyp/util/build_utils.py
@@ -485,4 +485,27 @@ def ReadSourcesList(sources_list_file_name):
Note that this function should not be used to parse response files.
"""
with open(sources_list_file_name) as f:
- return [file_name.strip() for file_name in f]
+ files = [file_name.strip() for file_name in f]
+ # allows inclusion of all files in the indicated folder
+ # in the sources of java-related gn targets.
+ # "include_all_directory.java" is a special name and must exist in the
+ # folder since gn checks for its existence, but it will not be
+ # included in the list.
+ # example:
+ #
+ # sources += [
+ # "java/src/org/chromium/components/browser_ui/site_settings/impl/include_all_directory.java",
+ # ]
+ #
+ # will include in source all files found in
+ # "java/src/org/chromium/components/browser_ui/site_settings/impl"
+ include_dirs = [f for f in files if f.endswith('include_all_directory.java')]
+ for include_file in include_dirs:
+ directory = os.path.dirname(include_file)
+ for root, dirs, directory_files in os.walk(directory):
+ for directory_file in directory_files:
+ files.append(os.path.join(directory, directory_file))
+ files = [f for f in files if not f.endswith('include_all_directory.java')
+ and not f.endswith('.java.tmpl')]
+
+ return files
diff --git a/build/bromite/bromite_utils.gni b/build/bromite/bromite_utils.gni
new file mode 100644
--- /dev/null
+++ b/build/bromite/bromite_utils.gni
@@ -0,0 +1,68 @@
+import("//build/config/python.gni")
+
+# generates the file specified in ouput_file containing
+# the inclusion of all .inc files found in the folder
+# specified
+#
+# Parameters
+# directories (required)
+# A list of folders from which to extract the .inc files
+#
+# output_file (required)
+# The name of the include file to be generated
+#
+# Example
+#
+# cpp_bromite_include("bromite_content_settings") {
+# directories = [ "bromite_content_settings/placeholder.txt" ]
+# output_file = "bromite_content_settings.inc"
+# }
+#
+template("cpp_bromite_include") {
+ action_with_pydeps(target_name) {
+ forward_variables_from(invoker,
+ TESTONLY_AND_VISIBILITY + [
+ "deps",
+ ])
+ script = "//build/bromite/gyp/cpp_bromite_include.py"
+
+ _rebased_directories = rebase_path(invoker.directories, root_build_dir)
+ _output = "$target_gen_dir/" + invoker.output_file
+ _output_rebased = rebase_path(_output)
+
+ args = [
+ "--output=$_output_rebased",
+ ]
+ args += _rebased_directories
+
+ outputs = [ _output ]
+ }
+}
+
+# allows the generation of the java file needed for
+# the inclusion of the defined site settings
+# in separate files
+# used by content settings patch
+template("java_bromite_impl") {
+ action_with_pydeps(target_name) {
+ forward_variables_from(invoker,
+ TESTONLY_AND_VISIBILITY + [
+ "deps",
+ "inputs",
+ ])
+ script = "//build/bromite/gyp/java_bromite_impl.py"
+
+ _srcjar_path = "${target_gen_dir}/${target_name}.srcjar"
+ _rebased_srcjar_path = rebase_path(_srcjar_path, root_build_dir)
+ _rebased_directories = rebase_path(invoker.directories, root_build_dir)
+ _rebased_template = rebase_path(invoker.template, root_build_dir)
+
+ args = [
+ "--srcjar=$_rebased_srcjar_path",
+ "--template=$_rebased_template",
+ ]
+ args += _rebased_directories
+
+ outputs = [ _srcjar_path ]
+ }
+}
diff --git a/build/bromite/gyp/cpp_bromite_include.py b/build/bromite/gyp/cpp_bromite_include.py
new file mode 100644
--- /dev/null
+++ b/build/bromite/gyp/cpp_bromite_include.py
@@ -0,0 +1,35 @@
+#!/usr/bin/env python3
+
+import argparse
+import os
+import re
+import sys
+
+def _Main(argv):
+ parser = argparse.ArgumentParser()
+
+ parser.add_argument('--output',
+ required=True,
+ help='The path at which to generate the .inc file')
+
+ parser.add_argument(
+ 'inputs', nargs='+', help='Input folder(s)', metavar='INPUTFILE')
+ args = parser.parse_args(argv)
+
+ for include_file in args.inputs:
+ directory = os.path.dirname(include_file)
+ files = []
+ for root, dirs, directory_files in os.walk(directory):
+ for directory_file in directory_files:
+ files.append(os.path.join(directory, directory_file))
+
+ files = [f for f in files if f.endswith('.inc')]
+
+ with open(args.output, 'w') as f:
+ for file in files:
+ f.write("#include \"" + file + "\"\n")
+ f.write("\n")
+
+
+if __name__ == '__main__':
+ _Main(sys.argv[1:])
diff --git a/build/bromite/gyp/cpp_bromite_include.pydeps b/build/bromite/gyp/cpp_bromite_include.pydeps
new file mode 100644
--- /dev/null
+++ b/build/bromite/gyp/cpp_bromite_include.pydeps
@@ -0,0 +1,9 @@
+# Generated by running:
+# build/print_python_deps.py --root build/bromite/gyp --output build/bromite/gyp/cpp_bromite_include.pydeps build/bromite/gyp/cpp_bromite_include.py
+../../action_helpers.py
+../../android/gyp/util/__init__.py
+../../android/gyp/util/build_utils.py
+../../android/gyp/util/java_cpp_utils.py
+../../gn_helpers.py
+../../zip_helpers.py
+cpp_bromite_include.py
diff --git a/build/bromite/gyp/java_bromite_impl.py b/build/bromite/gyp/java_bromite_impl.py
new file mode 100644
--- /dev/null
+++ b/build/bromite/gyp/java_bromite_impl.py
@@ -0,0 +1,92 @@
+#!/usr/bin/env python3
+
+import argparse
+import os
+import re
+import sys
+import zipfile
+
+sys.path.append('build/android/gyp')
+sys.path.append('../../build/android/gyp')
+
+from util import build_utils
+from util import java_cpp_utils
+import action_helpers # build_utils adds //build to sys.path.
+import zip_helpers
+
+def _GenerateOutput(template, source_paths, template_path, strings):
+ description_template = """
+// This following string constants were inserted by
+// {SCRIPT_NAME}
+// Directory
+// {SOURCE_PATHS}
+// Template
+// {TEMPLATE_PATH}
+
+"""
+ values = {
+ 'SCRIPT_NAME': java_cpp_utils.GetScriptName(),
+ 'SOURCE_PATHS': ',\n// '.join(source_paths),
+ 'TEMPLATE_PATH': template_path,
+ }
+ description = description_template.format(**values)
+
+ import_clause = '\n'.join(
+ ['import org.chromium.components.browser_ui.site_settings.impl.' + f + ';' for f in strings])
+ add_clause = '\n\t'.join(['\tadd(new ' + f + '());' for f in strings])
+
+ values = {
+ 'DESCRIPTION': description,
+ 'ADD_CLAUSE': add_clause,
+ 'IMPORT_CLAUSE': import_clause,
+ }
+ return template.format(**values)
+
+
+def _Generate(source_paths, template_path):
+ with open(template_path) as f:
+ lines = f.readlines()
+
+ template = ''.join(lines)
+ package, class_name = java_cpp_utils.ParseTemplateFile(lines)
+ output_path = java_cpp_utils.GetJavaFilePath(package, class_name)
+ strings = []
+
+ for directory in source_paths:
+ for root, dirs, directory_files in os.walk(directory):
+ for directory_file in directory_files:
+ strings.append(directory_file)
+
+ strings = [f.replace('.java', '') for f in strings
+ if not f.endswith('include_all_directory.java') and
+ not f.endswith('.java.tmpl') ]
+
+ output = _GenerateOutput(template, source_paths, template_path, strings)
+
+ return output, output_path
+
+
+def _Main(argv):
+ parser = argparse.ArgumentParser()
+
+ parser.add_argument('--srcjar',
+ required=True,
+ help='The path at which to generate the .srcjar file')
+
+ parser.add_argument('--template',
+ required=True,
+ help='The template file with which to generate the Java '
+ 'class.')
+
+ parser.add_argument(
+ 'inputs', nargs='+', help='Input folder(s)', metavar='INPUTFILE')
+ args = parser.parse_args(argv)
+
+ with action_helpers.atomic_output(args.srcjar) as f:
+ with zipfile.ZipFile(f, 'w', zipfile.ZIP_STORED) as srcjar:
+ data, path = _Generate(args.inputs, args.template)
+ zip_helpers.add_to_zip_hermetic(srcjar, path, data=data)
+
+
+if __name__ == '__main__':
+ _Main(sys.argv[1:])
diff --git a/build/bromite/gyp/java_bromite_impl.pydeps b/build/bromite/gyp/java_bromite_impl.pydeps
new file mode 100644
--- /dev/null
+++ b/build/bromite/gyp/java_bromite_impl.pydeps
@@ -0,0 +1,9 @@
+# Generated by running:
+# build/print_python_deps.py --root build/bromite/gyp --output build/bromite/gyp/java_bromite_impl.pydeps build/bromite/gyp/java_bromite_impl.py
+../../action_helpers.py
+../../android/gyp/util/__init__.py
+../../android/gyp/util/build_utils.py
+../../android/gyp/util/java_cpp_utils.py
+../../gn_helpers.py
+../../zip_helpers.py
+java_bromite_impl.py
diff --git a/build/config/BUILDCONFIG.gn b/build/config/BUILDCONFIG.gn
--- a/build/config/BUILDCONFIG.gn
+++ b/build/config/BUILDCONFIG.gn
@@ -640,6 +640,7 @@ set_defaults("component") {
configs = default_component_configs
}
+import("//build/bromite/bromite_utils.gni")
# =============================================================================
# ACTION OVERRIDE
# =============================================================================
diff --git a/build/config/android/rules.gni b/build/config/android/rules.gni
--- a/build/config/android/rules.gni
+++ b/build/config/android/rules.gni
@@ -586,6 +586,10 @@ if (enable_java_templates && is_android) {
_rebased_sources = rebase_path(invoker.sources, root_build_dir)
args = [ "--srcjar=$_rebased_srcjar_path" ] + _rebased_sources
+ _root_gen_dir = rebase_path(root_gen_dir)
+ _root_dir = rebase_path(root_build_dir)
+ args += [ "--gen_dir=$_root_gen_dir",
+ "--root_dir=$_root_dir" ]
outputs = [ _srcjar_path ]
}
}
diff --git a/tools/grit/grit/grd_reader.py b/tools/grit/grit/grd_reader.py
--- a/tools/grit/grit/grd_reader.py
+++ b/tools/grit/grit/grd_reader.py
@@ -93,11 +93,28 @@ class GrdContentHandler(xml.sax.handler.ContentHandler):
raise exception.FileNotFound(partname)
# Exceptions propagate to the handler in grd_reader.Parse().
oldsource = self.source
- try:
- self.source = partname
- xml.sax.parse(partname, GrdPartContentHandler(self))
- finally:
- self.source = oldsource
+ # modifies the behavior of
+ # <part file="folder" />
+ # allowing the inclusion of all grdp files found in the folder
+ # specified.
+ # the file value must end with "/placeholder.txt"
+ if partname.endswith("/placeholder.txt"):
+ partname = os.path.dirname(partname)
+ for root, dirs, files in os.walk(partname):
+ for file in files:
+ filepath = os.path.join(partname, file)
+ if filepath.endswith(".grdp"):
+ try:
+ self.source = partname
+ xml.sax.parse(filepath, GrdPartContentHandler(self))
+ finally:
+ self.source = oldsource
+ else:
+ try:
+ self.source = partname
+ xml.sax.parse(partname, GrdPartContentHandler(self))
+ finally:
+ self.source = oldsource
if self.debug:
print("End parsing of element %s" % name)
--
2.25.1
+37 -278
View File
@@ -9,61 +9,25 @@ Requires patch: Content-settings-infrastructure.patch
Original License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html
License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
---
.../browser_ui/site_settings/android/BUILD.gn | 3 +
.../BromiteCustomContentSettingImpl.java | 1 +
.../BromiteWebGLContentSetting.java | 85 +++++++++++++++++++
.../site_settings/SiteSettingsCategory.java | 5 +-
.../strings/android/browser_ui_strings.grd | 1 +
.../browser_ui/strings/android/webgl.grdp | 18 ++++
components/components_strings.grd | 1 +
.../core/browser/content_settings_registry.cc | 13 +++
.../core/browser/content_settings_utils.cc | 2 +
.../core/common/content_settings.cc | 4 +-
.../core/common/content_settings.h | 1 +
.../core/common/content_settings.mojom | 1 +
.../common/content_settings_mojom_traits.cc | 3 +-
.../common/content_settings_mojom_traits.h | 5 ++
.../core/common/content_settings_types.h | 2 +
.../renderer/content_settings_agent_impl.cc | 9 ++
.../renderer/content_settings_agent_impl.h | 1 +
.../platform/web_content_settings_client.h | 2 +
.../execution_context/execution_context.cc | 23 +++++
.../execution_context/execution_context.h | 5 ++
.../impl/BromiteWebGLContentSetting.java | 87 +++++++++++++++++++
.../bromite_content_settings/webgl.grdp | 18 ++++
.../bromite_content_settings/webgl.inc | 13 +++
.../common/bromite_content_settings/WEBGL.inc | 1 +
.../execution_context/execution_context.cc | 7 ++
.../execution_context/execution_context.h | 2 +
.../webgl/webgl_rendering_context_base.cc | 32 +++----
.../webgl/webgl_rendering_context_base.h | 2 +
22 files changed, 196 insertions(+), 23 deletions(-)
create mode 100644 components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/BromiteWebGLContentSetting.java
create mode 100644 components/browser_ui/strings/android/webgl.grdp
8 files changed, 143 insertions(+), 19 deletions(-)
create mode 100644 components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/impl/BromiteWebGLContentSetting.java
create mode 100644 components/browser_ui/strings/android/bromite_content_settings/webgl.grdp
create mode 100644 components/content_settings/core/browser/bromite_content_settings/webgl.inc
create mode 100644 components/content_settings/core/common/bromite_content_settings/WEBGL.inc
diff --git a/components/browser_ui/site_settings/android/BUILD.gn b/components/browser_ui/site_settings/android/BUILD.gn
--- a/components/browser_ui/site_settings/android/BUILD.gn
+++ b/components/browser_ui/site_settings/android/BUILD.gn
@@ -106,6 +106,9 @@ android_library("java") {
"java/src/org/chromium/components/browser_ui/site_settings/BromiteCustomContentSettingImpl.java",
"java/src/org/chromium/components/browser_ui/site_settings/BromiteCustomContentSetting.java",
]
+ sources += [
+ "java/src/org/chromium/components/browser_ui/site_settings/BromiteWebGLContentSetting.java",
+ ]
annotation_processor_deps = [ "//base/android/jni_generator:jni_processor" ]
resources_package = "org.chromium.components.browser_ui.site_settings"
deps = [
diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/BromiteCustomContentSettingImpl.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/BromiteCustomContentSettingImpl.java
--- a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/BromiteCustomContentSettingImpl.java
+++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/BromiteCustomContentSettingImpl.java
@@ -43,6 +43,7 @@ public abstract class BromiteCustomContentSettingImpl {
static {
mItemList = new ArrayList<BromiteCustomContentSetting>();
+ mItemList.add(new BromiteWebGLContentSetting());
}
public static SiteSettingsCategory createFromType(
diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/BromiteWebGLContentSetting.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/BromiteWebGLContentSetting.java
diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/impl/BromiteWebGLContentSetting.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/impl/BromiteWebGLContentSetting.java
new file mode 100644
--- /dev/null
+++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/BromiteWebGLContentSetting.java
@@ -0,0 +1,85 @@
+++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/impl/BromiteWebGLContentSetting.java
@@ -0,0 +1,87 @@
+/*
+ This file is part of Bromite.
+
@@ -81,8 +45,11 @@ new file mode 100644
+ along with Bromite. If not, see <https://www.gnu.org/licenses/>.
+*/
+
+package org.chromium.components.browser_ui.site_settings;
+package org.chromium.components.browser_ui.site_settings.impl;
+
+import org.chromium.components.browser_ui.site_settings.R;
+
+import org.chromium.components.browser_ui.site_settings.BromiteCustomContentSetting;
+import org.chromium.components.browser_ui.site_settings.ContentSettingsResources;
+import org.chromium.components.browser_ui.site_settings.SiteSettingsCategory;
+import org.chromium.components.content_settings.ContentSettingValues;
@@ -98,7 +65,6 @@ new file mode 100644
+public class BromiteWebGLContentSetting extends BromiteCustomContentSetting {
+ public BromiteWebGLContentSetting() {
+ super(/*contentSettingsType*/ ContentSettingsType.WEBGL,
+ /*siteSettingsCategory*/ SiteSettingsCategory.Type.WEBGL,
+ /*defaultEnabledValue*/ ContentSettingValues.ALLOW,
+ /*defaultDisabledValue*/ ContentSettingValues.BLOCK,
+ /*allowException*/ true,
@@ -149,46 +115,10 @@ new file mode 100644
+ return value != ContentSettingValues.BLOCK;
+ }
+}
diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettingsCategory.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettingsCategory.java
--- a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettingsCategory.java
+++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettingsCategory.java
@@ -48,7 +48,7 @@ public class SiteSettingsCategory {
Type.USE_STORAGE, Type.AUTO_DARK_WEB_CONTENT, Type.REQUEST_DESKTOP_SITE,
Type.FEDERATED_IDENTITY_API, Type.THIRD_PARTY_COOKIES, Type.SITE_DATA, Type.ANTI_ABUSE,
Type.TIMEZONE_OVERRIDE, Type.AUTOPLAY, Type.JAVASCRIPT_JIT, Type.IMAGES,
- Type.NUM_ENTRIES})
+ Type.NUM_ENTRIES, Type.WEBGL})
@Retention(RetentionPolicy.SOURCE)
public @interface Type {
// All updates here must also be reflected in {@link #preferenceKey(int)
@@ -86,10 +86,11 @@ public class SiteSettingsCategory {
int AUTOPLAY = 30;
int JAVASCRIPT_JIT = 31;
int IMAGES = 32;
+ int WEBGL = 33;
/**
* Number of handled categories used for calculating array sizes.
*/
- int NUM_ENTRIES = 33;
+ int NUM_ENTRIES = 34;
}
private final BrowserContextHandle mBrowserContextHandle;
diff --git a/components/browser_ui/strings/android/browser_ui_strings.grd b/components/browser_ui/strings/android/browser_ui_strings.grd
--- a/components/browser_ui/strings/android/browser_ui_strings.grd
+++ b/components/browser_ui/strings/android/browser_ui_strings.grd
@@ -174,6 +174,7 @@
<release seq="1">
<messages fallback_to_english="true">
<part file="site_settings.grdp" />
+ <part file="webgl.grdp" />
<message name="IDS_GOT_IT" desc="Button for the user to accept a disclosure/message" formatter_data="android_java">
Got it
diff --git a/components/browser_ui/strings/android/webgl.grdp b/components/browser_ui/strings/android/webgl.grdp
diff --git a/components/browser_ui/strings/android/bromite_content_settings/webgl.grdp b/components/browser_ui/strings/android/bromite_content_settings/webgl.grdp
new file mode 100644
--- /dev/null
+++ b/components/browser_ui/strings/android/webgl.grdp
+++ b/components/browser_ui/strings/android/bromite_content_settings/webgl.grdp
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<grit-part>
@@ -208,202 +138,41 @@ new file mode 100644
+ Disabled
+ </message>
+</grit-part>
diff --git a/components/components_strings.grd b/components/components_strings.grd
--- a/components/components_strings.grd
+++ b/components/components_strings.grd
@@ -336,6 +336,7 @@
<part file="version_ui_strings.grdp" />
<part file="webapps_strings.grdp" />
+ <part file="browser_ui/strings/android/webgl.grdp" />
<if expr="not is_ios">
<part file="history_clusters_strings.grdp" />
</if>
diff --git a/components/content_settings/core/browser/content_settings_registry.cc b/components/content_settings/core/browser/content_settings_registry.cc
--- a/components/content_settings/core/browser/content_settings_registry.cc
+++ b/components/content_settings/core/browser/content_settings_registry.cc
@@ -606,6 +606,19 @@ void ContentSettingsRegistry::Init() {
WebsiteSettingsRegistry::ALL_PLATFORMS,
ContentSettingsInfo::INHERIT_IN_INCOGNITO,
ContentSettingsInfo::EXCEPTIONS_ON_SECURE_AND_INSECURE_ORIGINS);
+
diff --git a/components/content_settings/core/browser/bromite_content_settings/webgl.inc b/components/content_settings/core/browser/bromite_content_settings/webgl.inc
new file mode 100644
--- /dev/null
+++ b/components/content_settings/core/browser/bromite_content_settings/webgl.inc
@@ -0,0 +1,13 @@
+ Register(ContentSettingsType::WEBGL, "webgl", CONTENT_SETTING_BLOCK,
+ WebsiteSettingsInfo::SYNCABLE,
+ /*allowlisted_schemes=*/{},
+ /*valid_settings=*/{CONTENT_SETTING_ALLOW,
+ CONTENT_SETTING_BLOCK},
+ WebsiteSettingsInfo::TOP_ORIGIN_ONLY_SCOPE,
+ WebsiteSettingsRegistry::PLATFORM_ANDROID,
+ WebsiteSettingsRegistry::ALL_PLATFORMS,
+ ContentSettingsInfo::INHERIT_IN_INCOGNITO,
+ ContentSettingsInfo::EXCEPTIONS_ON_SECURE_AND_INSECURE_ORIGINS,
+ /*show_into_info_page*/ true,
+ /*is_renderer_content_setting*/ true,
+ /*permission_type_ui*/ IDS_SITE_SETTINGS_TYPE_WEBGL,
+ /*permission_type_ui_mid_sentence*/ IDS_SITE_SETTINGS_TYPE_WEBGL_MID_SENTENCE);
}
void ContentSettingsRegistry::Register(
diff --git a/components/content_settings/core/browser/content_settings_utils.cc b/components/content_settings/core/browser/content_settings_utils.cc
--- a/components/content_settings/core/browser/content_settings_utils.cc
+++ b/components/content_settings/core/browser/content_settings_utils.cc
@@ -158,6 +158,8 @@ void GetRendererContentSettingRules(const HostContentSettingsMap* map,
std::string timezone;
map->GetTimezoneOverrideValue(timezone);
rules->timezone_override_value = timezone;
+ map->GetSettingsForOneType(ContentSettingsType::WEBGL,
+ &(rules->webgl_rules));
}
bool IsMorePermissive(ContentSetting a, ContentSetting b) {
diff --git a/components/content_settings/core/common/content_settings.cc b/components/content_settings/core/common/content_settings.cc
--- a/components/content_settings/core/common/content_settings.cc
+++ b/components/content_settings/core/common/content_settings.cc
@@ -218,7 +218,8 @@ bool RendererContentSettingRules::IsRendererContentSetting(
content_type == ContentSettingsType::AUTOPLAY ||
content_type == ContentSettingsType::MIXEDSCRIPT ||
content_type == ContentSettingsType::AUTO_DARK_WEB_CONTENT ||
- content_type == ContentSettingsType::TIMEZONE_OVERRIDE;
+ content_type == ContentSettingsType::TIMEZONE_OVERRIDE ||
+ content_type == ContentSettingsType::WEBGL;
}
void RendererContentSettingRules::FilterRulesByOutermostMainFrameURL(
@@ -230,6 +231,7 @@ void RendererContentSettingRules::FilterRulesByOutermostMainFrameURL(
FilterRulesForType(auto_dark_content_rules, outermost_main_frame_url);
FilterRulesForType(timezone_override_rules, outermost_main_frame_url);
FilterRulesForType(autoplay_rules, outermost_main_frame_url);
+ FilterRulesForType(webgl_rules, outermost_main_frame_url);
}
RendererContentSettingRules::RendererContentSettingRules() = default;
diff --git a/components/content_settings/core/common/content_settings.h b/components/content_settings/core/common/content_settings.h
--- a/components/content_settings/core/common/content_settings.h
+++ b/components/content_settings/core/common/content_settings.h
@@ -96,6 +96,7 @@ struct RendererContentSettingRules {
ContentSettingsForOneType auto_dark_content_rules;
ContentSettingsForOneType timezone_override_rules;
std::string timezone_override_value;
+ ContentSettingsForOneType webgl_rules;
};
namespace content_settings {
diff --git a/components/content_settings/core/common/content_settings.mojom b/components/content_settings/core/common/content_settings.mojom
--- a/components/content_settings/core/common/content_settings.mojom
+++ b/components/content_settings/core/common/content_settings.mojom
@@ -81,4 +81,5 @@ struct RendererContentSettingRules {
array<ContentSettingPatternSource> auto_dark_content_rules;
array<ContentSettingPatternSource> timezone_override_rules;
string timezone_override_value;
+ array<ContentSettingPatternSource> webgl_rules;
};
diff --git a/components/content_settings/core/common/content_settings_mojom_traits.cc b/components/content_settings/core/common/content_settings_mojom_traits.cc
--- a/components/content_settings/core/common/content_settings_mojom_traits.cc
+++ b/components/content_settings/core/common/content_settings_mojom_traits.cc
@@ -105,7 +105,8 @@ bool StructTraits<content_settings::mojom::RendererContentSettingRulesDataView,
data.ReadMixedContentRules(&out->mixed_content_rules) &&
data.ReadAutoDarkContentRules(&out->auto_dark_content_rules) &&
data.ReadTimezoneOverrideRules(&out->timezone_override_rules) &&
- data.ReadTimezoneOverrideValue(&out->timezone_override_value);
+ data.ReadTimezoneOverrideValue(&out->timezone_override_value) &&
+ data.ReadWebglRules(&out->webgl_rules);
}
} // namespace mojo
diff --git a/components/content_settings/core/common/content_settings_mojom_traits.h b/components/content_settings/core/common/content_settings_mojom_traits.h
--- a/components/content_settings/core/common/content_settings_mojom_traits.h
+++ b/components/content_settings/core/common/content_settings_mojom_traits.h
@@ -165,6 +165,11 @@ struct StructTraits<
return r.timezone_override_value;
}
+ static const std::vector<ContentSettingPatternSource>& webgl_rules(
+ const RendererContentSettingRules& r) {
+ return r.webgl_rules;
+ }
+
static bool Read(
content_settings::mojom::RendererContentSettingRulesDataView data,
RendererContentSettingRules* out);
diff --git a/components/content_settings/core/common/content_settings_types.h b/components/content_settings/core/common/content_settings_types.h
--- a/components/content_settings/core/common/content_settings_types.h
+++ b/components/content_settings/core/common/content_settings_types.h
@@ -277,6 +277,8 @@ enum class ContentSettingsType : int32_t {
// site instead of the mobile one.
REQUEST_DESKTOP_SITE,
diff --git a/components/content_settings/core/common/bromite_content_settings/WEBGL.inc b/components/content_settings/core/common/bromite_content_settings/WEBGL.inc
new file mode 100644
--- /dev/null
+++ b/components/content_settings/core/common/bromite_content_settings/WEBGL.inc
@@ -0,0 +1 @@
+ WEBGL,
+
// Setting to indicate whether browser should allow signing into a website via
// the browser FedCM API.
FEDERATED_IDENTITY_API,
diff --git a/components/content_settings/renderer/content_settings_agent_impl.cc b/components/content_settings/renderer/content_settings_agent_impl.cc
--- a/components/content_settings/renderer/content_settings_agent_impl.cc
+++ b/components/content_settings/renderer/content_settings_agent_impl.cc
@@ -441,6 +441,15 @@ void ContentSettingsAgentImpl::ClearBlockedContentSettings() {
cached_script_permissions_.clear();
}
+bool ContentSettingsAgentImpl::AllowWebgl(bool enabled_per_settings) {
+ if (!content_setting_rules_)
+ return false;
+ blink::WebLocalFrame* frame = render_frame()->GetWebFrame();
+ return CONTENT_SETTING_ALLOW == GetContentSettingFromRules(
+ content_setting_rules_->webgl_rules,
+ url::Origin(frame->GetDocument().GetSecurityOrigin()).GetURL());
+}
+
bool ContentSettingsAgentImpl::IsAllowlistedForContentSettings() const {
if (should_allowlist_)
return true;
diff --git a/components/content_settings/renderer/content_settings_agent_impl.h b/components/content_settings/renderer/content_settings_agent_impl.h
--- a/components/content_settings/renderer/content_settings_agent_impl.h
+++ b/components/content_settings/renderer/content_settings_agent_impl.h
@@ -99,6 +99,7 @@ class ContentSettingsAgentImpl
bool AllowAutoplay(bool default_value) override;
bool AllowPopupsAndRedirects(bool default_value) override;
bool ShouldAutoupgradeMixedContent() override;
+ bool AllowWebgl(bool enabled_per_settings) override;
bool allow_running_insecure_content() const {
return allow_running_insecure_content_;
diff --git a/third_party/blink/public/platform/web_content_settings_client.h b/third_party/blink/public/platform/web_content_settings_client.h
--- a/third_party/blink/public/platform/web_content_settings_client.h
+++ b/third_party/blink/public/platform/web_content_settings_client.h
@@ -99,6 +99,8 @@ class WebContentSettingsClient {
return default_value;
}
+ virtual bool AllowWebgl(bool default_value) { return default_value; }
+
// Reports that passive mixed content was found at the provided URL.
virtual void PassiveInsecureContentFound(const WebURL&) {}
diff --git a/third_party/blink/renderer/core/execution_context/execution_context.cc b/third_party/blink/renderer/core/execution_context/execution_context.cc
--- a/third_party/blink/renderer/core/execution_context/execution_context.cc
+++ b/third_party/blink/renderer/core/execution_context/execution_context.cc
@@ -68,6 +68,29 @@
@@ -84,6 +84,13 @@ blink::WebContentSettingsClient* GetContentSettingsClientFor(
return settings;
}
namespace blink {
+blink::WebContentSettingsClient* GetContentSettingsClientFor(
+ ExecutionContext* context) {
+ blink::WebContentSettingsClient* settings = nullptr;
+ if (!context)
+ return settings;
+ if (auto* window = blink::DynamicTo<blink::LocalDOMWindow>(context)) {
+ auto* frame = window->GetFrame();
+ if (frame)
+ settings = frame->GetContentSettingsClient();
+ } else if (context->IsWorkerGlobalScope()) {
+ settings =
+ blink::To<blink::WorkerGlobalScope>(context)->ContentSettingsClient();
+ }
+ return settings;
+}
+
+bool AllowWebgl(ExecutionContext* context) {
+ blink::WebContentSettingsClient* settings = GetContentSettingsClientFor(context);
+ if (settings)
+ return settings->AllowWebgl(false);
+ return settings->AllowContentSetting(ContentSettingsType::WEBGL, false);
+ return false;
+}
+
@@ -413,21 +182,11 @@ diff --git a/third_party/blink/renderer/core/execution_context/execution_context
diff --git a/third_party/blink/renderer/core/execution_context/execution_context.h b/third_party/blink/renderer/core/execution_context/execution_context.h
--- a/third_party/blink/renderer/core/execution_context/execution_context.h
+++ b/third_party/blink/renderer/core/execution_context/execution_context.h
@@ -103,6 +103,7 @@ class SecurityOrigin;
class ScriptState;
class ScriptWrappable;
class TrustedTypePolicyFactory;
+class WebContentSettingsClient;
enum ReasonForCallingCanExecuteScripts {
kAboutToExecuteScript,
@@ -111,6 +112,10 @@ enum ReasonForCallingCanExecuteScripts {
@@ -117,6 +117,8 @@ enum ReasonForCallingCanExecuteScripts {
enum ReferrerPolicySource { kPolicySourceHttpHeader, kPolicySourceMetaTag };
+CORE_EXPORT bool AllowWebgl(ExecutionContext* context);
+CORE_EXPORT WebContentSettingsClient* GetContentSettingsClientFor(
+ ExecutionContext* context);
+
// An environment in which script can execute. This class exposes the common
// properties of script execution environments on the web (i.e, common between
+88 -247
View File
@@ -7,58 +7,24 @@ Requires patch: Content-settings-infrastructure.patch
Original License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html
License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
---
.../browser_ui/site_settings/android/BUILD.gn | 3 +
.../BromiteCustomContentSettingImpl.java | 1 +
.../BromiteWebRTCContentSetting.java | 86 +++++++++++++++++++
.../site_settings/SiteSettingsCategory.java | 5 +-
.../strings/android/browser_ui_strings.grd | 1 +
.../browser_ui/strings/android/webrtc.grdp | 18 ++++
components/components_strings.grd | 1 +
.../core/browser/content_settings_registry.cc | 13 +++
.../core/browser/content_settings_utils.cc | 2 +
.../core/common/content_settings.cc | 4 +-
.../core/common/content_settings.h | 1 +
.../core/common/content_settings.mojom | 1 +
.../common/content_settings_mojom_traits.cc | 3 +-
.../common/content_settings_mojom_traits.h | 5 ++
.../core/common/content_settings_types.h | 2 +
.../renderer/content_settings_agent_impl.cc | 9 ++
.../renderer/content_settings_agent_impl.h | 1 +
.../platform/web_content_settings_client.h | 2 +
.../impl/BromiteWebRTCContentSetting.java | 88 +++++++++++++++++++
.../bromite_content_settings/webrtc.grdp | 18 ++++
.../bromite_content_settings/webrtc.inc | 13 +++
.../bromite_content_settings/WEBRTC.inc | 1 +
.../peer_connection_dependency_factory.cc | 6 ++
19 files changed, 160 insertions(+), 4 deletions(-)
create mode 100644 components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/BromiteWebRTCContentSetting.java
create mode 100644 components/browser_ui/strings/android/webrtc.grdp
.../peerconnection/rtc_rtp_receiver.cc | 10 +++
.../modules/peerconnection/rtc_rtp_sender.cc | 10 +++
7 files changed, 146 insertions(+)
create mode 100644 components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/impl/BromiteWebRTCContentSetting.java
create mode 100644 components/browser_ui/strings/android/bromite_content_settings/webrtc.grdp
create mode 100644 components/content_settings/core/browser/bromite_content_settings/webrtc.inc
create mode 100644 components/content_settings/core/common/bromite_content_settings/WEBRTC.inc
diff --git a/components/browser_ui/site_settings/android/BUILD.gn b/components/browser_ui/site_settings/android/BUILD.gn
--- a/components/browser_ui/site_settings/android/BUILD.gn
+++ b/components/browser_ui/site_settings/android/BUILD.gn
@@ -109,6 +109,9 @@ android_library("java") {
sources += [
"java/src/org/chromium/components/browser_ui/site_settings/BromiteWebGLContentSetting.java",
]
+ sources += [
+ "java/src/org/chromium/components/browser_ui/site_settings/BromiteWebRTCContentSetting.java",
+ ]
annotation_processor_deps = [ "//base/android/jni_generator:jni_processor" ]
resources_package = "org.chromium.components.browser_ui.site_settings"
deps = [
diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/BromiteCustomContentSettingImpl.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/BromiteCustomContentSettingImpl.java
--- a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/BromiteCustomContentSettingImpl.java
+++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/BromiteCustomContentSettingImpl.java
@@ -44,6 +44,7 @@ public abstract class BromiteCustomContentSettingImpl {
static {
mItemList = new ArrayList<BromiteCustomContentSetting>();
mItemList.add(new BromiteWebGLContentSetting());
+ mItemList.add(new BromiteWebRTCContentSetting());
}
public static SiteSettingsCategory createFromType(
diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/BromiteWebRTCContentSetting.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/BromiteWebRTCContentSetting.java
diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/impl/BromiteWebRTCContentSetting.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/impl/BromiteWebRTCContentSetting.java
new file mode 100644
--- /dev/null
+++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/BromiteWebRTCContentSetting.java
@@ -0,0 +1,86 @@
+++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/impl/BromiteWebRTCContentSetting.java
@@ -0,0 +1,88 @@
+/*
+ This file is part of Bromite.
+
@@ -76,8 +42,11 @@ new file mode 100644
+ along with Bromite. If not, see <https://www.gnu.org/licenses/>.
+*/
+
+package org.chromium.components.browser_ui.site_settings;
+package org.chromium.components.browser_ui.site_settings.impl;
+
+import org.chromium.components.browser_ui.site_settings.R;
+
+import org.chromium.components.browser_ui.site_settings.BromiteCustomContentSetting;
+import org.chromium.components.browser_ui.site_settings.ContentSettingsResources;
+import org.chromium.components.browser_ui.site_settings.SiteSettingsCategory;
+import org.chromium.components.content_settings.ContentSettingValues;
@@ -93,7 +62,6 @@ new file mode 100644
+public class BromiteWebRTCContentSetting extends BromiteCustomContentSetting {
+ public BromiteWebRTCContentSetting() {
+ super(/*contentSettingsType*/ ContentSettingsType.WEBRTC,
+ /*siteSettingsCategory*/ SiteSettingsCategory.Type.WEBRTC,
+ /*defaultEnabledValue*/ ContentSettingValues.ALLOW,
+ /*defaultDisabledValue*/ ContentSettingValues.BLOCK,
+ /*allowException*/ true,
@@ -145,46 +113,10 @@ new file mode 100644
+ return value != ContentSettingValues.BLOCK;
+ }
+}
diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettingsCategory.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettingsCategory.java
--- a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettingsCategory.java
+++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettingsCategory.java
@@ -48,7 +48,7 @@ public class SiteSettingsCategory {
Type.USE_STORAGE, Type.AUTO_DARK_WEB_CONTENT, Type.REQUEST_DESKTOP_SITE,
Type.FEDERATED_IDENTITY_API, Type.THIRD_PARTY_COOKIES, Type.SITE_DATA, Type.ANTI_ABUSE,
Type.TIMEZONE_OVERRIDE, Type.AUTOPLAY, Type.JAVASCRIPT_JIT, Type.IMAGES,
- Type.NUM_ENTRIES, Type.WEBGL})
+ Type.NUM_ENTRIES, Type.WEBGL, Type.WEBRTC})
@Retention(RetentionPolicy.SOURCE)
public @interface Type {
// All updates here must also be reflected in {@link #preferenceKey(int)
@@ -87,10 +87,11 @@ public class SiteSettingsCategory {
int JAVASCRIPT_JIT = 31;
int IMAGES = 32;
int WEBGL = 33;
+ int WEBRTC = 34;
/**
* Number of handled categories used for calculating array sizes.
*/
- int NUM_ENTRIES = 34;
+ int NUM_ENTRIES = 35;
}
private final BrowserContextHandle mBrowserContextHandle;
diff --git a/components/browser_ui/strings/android/browser_ui_strings.grd b/components/browser_ui/strings/android/browser_ui_strings.grd
--- a/components/browser_ui/strings/android/browser_ui_strings.grd
+++ b/components/browser_ui/strings/android/browser_ui_strings.grd
@@ -175,6 +175,7 @@
<messages fallback_to_english="true">
<part file="site_settings.grdp" />
<part file="webgl.grdp" />
+ <part file="webrtc.grdp" />
<message name="IDS_GOT_IT" desc="Button for the user to accept a disclosure/message" formatter_data="android_java">
Got it
diff --git a/components/browser_ui/strings/android/webrtc.grdp b/components/browser_ui/strings/android/webrtc.grdp
diff --git a/components/browser_ui/strings/android/bromite_content_settings/webrtc.grdp b/components/browser_ui/strings/android/bromite_content_settings/webrtc.grdp
new file mode 100644
--- /dev/null
+++ b/components/browser_ui/strings/android/webrtc.grdp
+++ b/components/browser_ui/strings/android/bromite_content_settings/webrtc.grdp
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<grit-part>
@@ -204,175 +136,30 @@ new file mode 100644
+ Disabled
+ </message>
+</grit-part>
diff --git a/components/components_strings.grd b/components/components_strings.grd
--- a/components/components_strings.grd
+++ b/components/components_strings.grd
@@ -337,6 +337,7 @@
<part file="webapps_strings.grdp" />
<part file="browser_ui/strings/android/webgl.grdp" />
+ <part file="browser_ui/strings/android/webrtc.grdp" />
<if expr="not is_ios">
<part file="history_clusters_strings.grdp" />
</if>
diff --git a/components/content_settings/core/browser/content_settings_registry.cc b/components/content_settings/core/browser/content_settings_registry.cc
--- a/components/content_settings/core/browser/content_settings_registry.cc
+++ b/components/content_settings/core/browser/content_settings_registry.cc
@@ -619,6 +619,19 @@ void ContentSettingsRegistry::Init() {
/*show_into_info_page*/ true,
/*permission_type_ui*/ IDS_SITE_SETTINGS_TYPE_WEBGL,
/*permission_type_ui_mid_sentence*/ IDS_SITE_SETTINGS_TYPE_WEBGL_MID_SENTENCE);
+
diff --git a/components/content_settings/core/browser/bromite_content_settings/webrtc.inc b/components/content_settings/core/browser/bromite_content_settings/webrtc.inc
new file mode 100644
--- /dev/null
+++ b/components/content_settings/core/browser/bromite_content_settings/webrtc.inc
@@ -0,0 +1,13 @@
+ Register(ContentSettingsType::WEBRTC, "webrtc", CONTENT_SETTING_BLOCK,
+ WebsiteSettingsInfo::SYNCABLE,
+ /*allowlisted_schemes=*/{},
+ /*valid_settings=*/{CONTENT_SETTING_ALLOW,
+ CONTENT_SETTING_BLOCK},
+ WebsiteSettingsInfo::TOP_ORIGIN_ONLY_SCOPE,
+ WebsiteSettingsRegistry::PLATFORM_ANDROID,
+ WebsiteSettingsRegistry::ALL_PLATFORMS,
+ ContentSettingsInfo::INHERIT_IN_INCOGNITO,
+ ContentSettingsInfo::EXCEPTIONS_ON_SECURE_AND_INSECURE_ORIGINS,
+ /*show_into_info_page*/ true,
+ /*is_renderer_content_setting*/ true,
+ /*permission_type_ui*/ IDS_SITE_SETTINGS_TYPE_WEBRTC,
+ /*permission_type_ui_mid_sentence*/ IDS_SITE_SETTINGS_TYPE_WEBRTC_MID_SENTENCE);
}
void ContentSettingsRegistry::Register(
diff --git a/components/content_settings/core/browser/content_settings_utils.cc b/components/content_settings/core/browser/content_settings_utils.cc
--- a/components/content_settings/core/browser/content_settings_utils.cc
+++ b/components/content_settings/core/browser/content_settings_utils.cc
@@ -160,6 +160,8 @@ void GetRendererContentSettingRules(const HostContentSettingsMap* map,
rules->timezone_override_value = timezone;
map->GetSettingsForOneType(ContentSettingsType::WEBGL,
&(rules->webgl_rules));
+ map->GetSettingsForOneType(ContentSettingsType::WEBRTC,
+ &(rules->webrtc_rules));
}
bool IsMorePermissive(ContentSetting a, ContentSetting b) {
diff --git a/components/content_settings/core/common/content_settings.cc b/components/content_settings/core/common/content_settings.cc
--- a/components/content_settings/core/common/content_settings.cc
+++ b/components/content_settings/core/common/content_settings.cc
@@ -219,7 +219,8 @@ bool RendererContentSettingRules::IsRendererContentSetting(
content_type == ContentSettingsType::MIXEDSCRIPT ||
content_type == ContentSettingsType::AUTO_DARK_WEB_CONTENT ||
content_type == ContentSettingsType::TIMEZONE_OVERRIDE ||
- content_type == ContentSettingsType::WEBGL;
+ content_type == ContentSettingsType::WEBGL ||
+ content_type == ContentSettingsType::WEBRTC;
}
void RendererContentSettingRules::FilterRulesByOutermostMainFrameURL(
@@ -232,6 +233,7 @@ void RendererContentSettingRules::FilterRulesByOutermostMainFrameURL(
FilterRulesForType(timezone_override_rules, outermost_main_frame_url);
FilterRulesForType(autoplay_rules, outermost_main_frame_url);
FilterRulesForType(webgl_rules, outermost_main_frame_url);
+ FilterRulesForType(webrtc_rules, outermost_main_frame_url);
}
RendererContentSettingRules::RendererContentSettingRules() = default;
diff --git a/components/content_settings/core/common/content_settings.h b/components/content_settings/core/common/content_settings.h
--- a/components/content_settings/core/common/content_settings.h
+++ b/components/content_settings/core/common/content_settings.h
@@ -97,6 +97,7 @@ struct RendererContentSettingRules {
ContentSettingsForOneType timezone_override_rules;
std::string timezone_override_value;
ContentSettingsForOneType webgl_rules;
+ ContentSettingsForOneType webrtc_rules;
};
namespace content_settings {
diff --git a/components/content_settings/core/common/content_settings.mojom b/components/content_settings/core/common/content_settings.mojom
--- a/components/content_settings/core/common/content_settings.mojom
+++ b/components/content_settings/core/common/content_settings.mojom
@@ -82,4 +82,5 @@ struct RendererContentSettingRules {
array<ContentSettingPatternSource> timezone_override_rules;
string timezone_override_value;
array<ContentSettingPatternSource> webgl_rules;
+ array<ContentSettingPatternSource> webrtc_rules;
};
diff --git a/components/content_settings/core/common/content_settings_mojom_traits.cc b/components/content_settings/core/common/content_settings_mojom_traits.cc
--- a/components/content_settings/core/common/content_settings_mojom_traits.cc
+++ b/components/content_settings/core/common/content_settings_mojom_traits.cc
@@ -106,7 +106,8 @@ bool StructTraits<content_settings::mojom::RendererContentSettingRulesDataView,
data.ReadAutoDarkContentRules(&out->auto_dark_content_rules) &&
data.ReadTimezoneOverrideRules(&out->timezone_override_rules) &&
data.ReadTimezoneOverrideValue(&out->timezone_override_value) &&
- data.ReadWebglRules(&out->webgl_rules);
+ data.ReadWebglRules(&out->webgl_rules) &&
+ data.ReadWebrtcRules(&out->webrtc_rules);
}
} // namespace mojo
diff --git a/components/content_settings/core/common/content_settings_mojom_traits.h b/components/content_settings/core/common/content_settings_mojom_traits.h
--- a/components/content_settings/core/common/content_settings_mojom_traits.h
+++ b/components/content_settings/core/common/content_settings_mojom_traits.h
@@ -170,6 +170,11 @@ struct StructTraits<
return r.webgl_rules;
}
+ static const std::vector<ContentSettingPatternSource>& webrtc_rules(
+ const RendererContentSettingRules& r) {
+ return r.webrtc_rules;
+ }
+
static bool Read(
content_settings::mojom::RendererContentSettingRulesDataView data,
RendererContentSettingRules* out);
diff --git a/components/content_settings/core/common/content_settings_types.h b/components/content_settings/core/common/content_settings_types.h
--- a/components/content_settings/core/common/content_settings_types.h
+++ b/components/content_settings/core/common/content_settings_types.h
@@ -279,6 +279,8 @@ enum class ContentSettingsType : int32_t {
WEBGL,
diff --git a/components/content_settings/core/common/bromite_content_settings/WEBRTC.inc b/components/content_settings/core/common/bromite_content_settings/WEBRTC.inc
new file mode 100644
--- /dev/null
+++ b/components/content_settings/core/common/bromite_content_settings/WEBRTC.inc
@@ -0,0 +1 @@
+ WEBRTC,
+
// Setting to indicate whether browser should allow signing into a website via
// the browser FedCM API.
FEDERATED_IDENTITY_API,
diff --git a/components/content_settings/renderer/content_settings_agent_impl.cc b/components/content_settings/renderer/content_settings_agent_impl.cc
--- a/components/content_settings/renderer/content_settings_agent_impl.cc
+++ b/components/content_settings/renderer/content_settings_agent_impl.cc
@@ -450,6 +450,15 @@ bool ContentSettingsAgentImpl::AllowWebgl(bool enabled_per_settings) {
url::Origin(frame->GetDocument().GetSecurityOrigin()).GetURL());
}
+bool ContentSettingsAgentImpl::AllowWebRTC(bool enabled_per_settings) {
+ if (!content_setting_rules_)
+ return false;
+ blink::WebLocalFrame* frame = render_frame()->GetWebFrame();
+ return CONTENT_SETTING_ALLOW == GetContentSettingFromRules(
+ content_setting_rules_->webrtc_rules,
+ url::Origin(frame->GetDocument().GetSecurityOrigin()).GetURL());
+}
+
bool ContentSettingsAgentImpl::IsAllowlistedForContentSettings() const {
if (should_allowlist_)
return true;
diff --git a/components/content_settings/renderer/content_settings_agent_impl.h b/components/content_settings/renderer/content_settings_agent_impl.h
--- a/components/content_settings/renderer/content_settings_agent_impl.h
+++ b/components/content_settings/renderer/content_settings_agent_impl.h
@@ -100,6 +100,7 @@ class ContentSettingsAgentImpl
bool AllowPopupsAndRedirects(bool default_value) override;
bool ShouldAutoupgradeMixedContent() override;
bool AllowWebgl(bool enabled_per_settings) override;
+ bool AllowWebRTC(bool enabled_per_settings) override;
bool allow_running_insecure_content() const {
return allow_running_insecure_content_;
diff --git a/third_party/blink/public/platform/web_content_settings_client.h b/third_party/blink/public/platform/web_content_settings_client.h
--- a/third_party/blink/public/platform/web_content_settings_client.h
+++ b/third_party/blink/public/platform/web_content_settings_client.h
@@ -101,6 +101,8 @@ class WebContentSettingsClient {
virtual bool AllowWebgl(bool default_value) { return default_value; }
+ virtual bool AllowWebRTC(bool default_value) { return default_value; }
+
// Reports that passive mixed content was found at the provided URL.
virtual void PassiveInsecureContentFound(const WebURL&) {}
diff --git a/third_party/blink/renderer/modules/peerconnection/peer_connection_dependency_factory.cc b/third_party/blink/renderer/modules/peerconnection/peer_connection_dependency_factory.cc
--- a/third_party/blink/renderer/modules/peerconnection/peer_connection_dependency_factory.cc
+++ b/third_party/blink/renderer/modules/peerconnection/peer_connection_dependency_factory.cc
@@ -384,17 +171,71 @@ diff --git a/third_party/blink/renderer/modules/peerconnection/peer_connection_d
#include "third_party/blink/public/platform/web_url.h"
#include "third_party/blink/public/web/modules/mediastream/media_stream_video_source.h"
#include "third_party/blink/public/web/web_document.h"
@@ -750,6 +751,11 @@ PeerConnectionDependencyFactory::CreatePortAllocator(
@@ -752,6 +753,11 @@ PeerConnectionDependencyFactory::CreatePortAllocator(
// origin.
WebRTCIPHandlingPolicy policy =
GetWebRTCIPHandlingPolicy(webrtc_ip_handling_policy);
+ blink::WebContentSettingsClient* settings = web_frame->GetContentSettingsClient();
+ if (settings && settings->AllowWebRTC(false)) {
+ if (settings && settings->AllowContentSetting(ContentSettingsType::WEBRTC, false)) {
+ policy = kDefault;
+ }
+
switch (policy) {
// TODO(guoweis): specify the flag of disabling local candidate
// collection when webrtc is updated.
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_rtp_receiver.cc b/third_party/blink/renderer/modules/peerconnection/rtc_rtp_receiver.cc
--- a/third_party/blink/renderer/modules/peerconnection/rtc_rtp_receiver.cc
+++ b/third_party/blink/renderer/modules/peerconnection/rtc_rtp_receiver.cc
@@ -11,6 +11,8 @@
#include "third_party/blink/public/common/privacy_budget/identifiability_study_settings.h"
#include "third_party/blink/public/common/privacy_budget/identifiable_surface.h"
#include "third_party/blink/public/common/privacy_budget/identifiable_token_builder.h"
+#include "third_party/blink/public/platform/web_content_settings_client.h"
+#include "third_party/blink/public/web/web_local_frame.h"
#include "third_party/blink/renderer/bindings/core/v8/script_promise_resolver.h"
#include "third_party/blink/renderer/bindings/modules/v8/v8_rtc_insertable_streams.h"
#include "third_party/blink/renderer/bindings/modules/v8/v8_rtc_rtcp_parameters.h"
@@ -256,6 +258,14 @@ RTCRtpCapabilities* RTCRtpReceiver::getCapabilities(ScriptState* state,
if (kind != "audio" && kind != "video")
return nullptr;
+ LocalDOMWindow* window = To<LocalDOMWindow>(ExecutionContext::From(state));
+ auto* web_frame =
+ static_cast<WebLocalFrame*>(WebFrame::FromCoreFrame(window->GetFrame()));
+ blink::WebContentSettingsClient* settings = web_frame->GetContentSettingsClient();
+ if (settings && !settings->AllowContentSetting(ContentSettingsType::WEBRTC, false)) {
+ return nullptr;
+ }
+
RTCRtpCapabilities* capabilities = RTCRtpCapabilities::Create();
capabilities->setCodecs(HeapVector<Member<RTCRtpCodecCapability>>());
capabilities->setHeaderExtensions(
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_rtp_sender.cc b/third_party/blink/renderer/modules/peerconnection/rtc_rtp_sender.cc
--- a/third_party/blink/renderer/modules/peerconnection/rtc_rtp_sender.cc
+++ b/third_party/blink/renderer/modules/peerconnection/rtc_rtp_sender.cc
@@ -16,6 +16,8 @@
#include "third_party/blink/public/common/privacy_budget/identifiability_study_settings.h"
#include "third_party/blink/public/common/privacy_budget/identifiable_surface.h"
#include "third_party/blink/public/common/privacy_budget/identifiable_token_builder.h"
+#include "third_party/blink/public/platform/web_content_settings_client.h"
+#include "third_party/blink/public/web/web_local_frame.h"
#include "third_party/blink/renderer/bindings/core/v8/script_promise_resolver.h"
#include "third_party/blink/renderer/bindings/modules/v8/v8_rtc_insertable_streams.h"
#include "third_party/blink/renderer/bindings/modules/v8/v8_rtc_rtcp_parameters.h"
@@ -941,6 +943,14 @@ RTCRtpCapabilities* RTCRtpSender::getCapabilities(ScriptState* state,
if (kind != "audio" && kind != "video")
return nullptr;
+ LocalDOMWindow* window = To<LocalDOMWindow>(ExecutionContext::From(state));
+ auto* web_frame =
+ static_cast<WebLocalFrame*>(WebFrame::FromCoreFrame(window->GetFrame()));
+ blink::WebContentSettingsClient* settings = web_frame->GetContentSettingsClient();
+ if (settings && !settings->AllowContentSetting(ContentSettingsType::WEBRTC, false)) {
+ return nullptr;
+ }
+
RTCRtpCapabilities* capabilities = RTCRtpCapabilities::Create();
capabilities->setCodecs(HeapVector<Member<RTCRtpCodecCapability>>());
capabilities->setHeaderExtensions(
--
2.25.1
File diff suppressed because it is too large Load Diff
+134 -305
View File
@@ -12,71 +12,62 @@ note: needs SitePerProcess and StrictOriginIsolation flags enabled
License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
---
.../browser_ui/site_settings/android/BUILD.gn | 5 +++++
.../browser_ui/site_settings/android/BUILD.gn | 5 +
.../permission_javascript_jit.png | Bin 0 -> 433 bytes
.../permission_javascript_jit.png | Bin 0 -> 377 bytes
.../permission_javascript_jit.png | Bin 0 -> 518 bytes
.../permission_javascript_jit.png | Bin 0 -> 629 bytes
.../permission_javascript_jit.png | Bin 0 -> 797 bytes
.../res/xml/site_settings_preferences.xml | 4 ++++
.../ContentSettingsResources.java | 7 ++++++
.../site_settings/SingleCategorySettings.java | 9 ++++++++
.../site_settings/SingleWebsiteSettings.java | 21 ++++++++++++++++++
.../site_settings/SiteSettingsCategory.java | 9 ++++++--
.../site_settings/SiteSettingsUtil.java | 1 +
.../browser_ui/site_settings/Website.java | 7 ++++++
.../android/website_preference_bridge.cc | 1 +
.../strings/android/site_settings.grdp | 17 ++++++++++++++
.../core/browser/content_settings_registry.cc | 2 +-
.../android/page_info_controller_android.cc | 3 +++
components/page_info/page_info.cc | 6 +++++
components/page_info/page_info_ui.cc | 2 ++
components/site_settings_strings.grdp | 6 +++++
20 files changed, 97 insertions(+), 3 deletions(-)
.../BromiteJavascriptJITContentSetting.java | 87 ++++++++++++++++++
.../javascript_jit.grdp | 18 ++++
.../core/browser/content_settings_registry.cc | 8 +-
9 files changed, 116 insertions(+), 2 deletions(-)
create mode 100644 components/browser_ui/site_settings/android/java/res/drawable-hdpi/permission_javascript_jit.png
create mode 100644 components/browser_ui/site_settings/android/java/res/drawable-mdpi/permission_javascript_jit.png
create mode 100644 components/browser_ui/site_settings/android/java/res/drawable-xhdpi/permission_javascript_jit.png
create mode 100644 components/browser_ui/site_settings/android/java/res/drawable-xxhdpi/permission_javascript_jit.png
create mode 100644 components/browser_ui/site_settings/android/java/res/drawable-xxxhdpi/permission_javascript_jit.png
create mode 100644 components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/impl/BromiteJavascriptJITContentSetting.java
create mode 100644 components/browser_ui/strings/android/bromite_content_settings/javascript_jit.grdp
diff --git a/components/browser_ui/site_settings/android/BUILD.gn b/components/browser_ui/site_settings/android/BUILD.gn
--- a/components/browser_ui/site_settings/android/BUILD.gn
+++ b/components/browser_ui/site_settings/android/BUILD.gn
@@ -187,6 +187,7 @@ android_resources("java_resources") {
"java/res/drawable-hdpi/ic_volume_up_grey600_24dp.png",
@@ -203,6 +203,7 @@ android_resources("java_resources") {
"java/res/drawable-hdpi/permission_background_sync.png",
"java/res/drawable-hdpi/permission_images.png",
"java/res/drawable-hdpi/permission_javascript.png",
+ "java/res/drawable-hdpi/permission_javascript_jit.png",
"java/res/drawable-hdpi/permission_popups.png",
"java/res/drawable-hdpi/permission_protected_media.png",
"java/res/drawable-hdpi/settings_sensors.png",
@@ -194,6 +195,7 @@ android_resources("java_resources") {
"java/res/drawable-mdpi/ic_volume_up_grey600_24dp.png",
@@ -211,6 +212,7 @@ android_resources("java_resources") {
"java/res/drawable-mdpi/permission_background_sync.png",
"java/res/drawable-mdpi/permission_images.png",
"java/res/drawable-mdpi/permission_javascript.png",
+ "java/res/drawable-mdpi/permission_javascript_jit.png",
"java/res/drawable-hdpi/settings_autoplay.png",
"java/res/drawable-xhdpi/settings_autoplay.png",
"java/res/drawable-xxhdpi/settings_autoplay.png",
@@ -206,6 +208,7 @@ android_resources("java_resources") {
"java/res/drawable-xhdpi/ic_volume_up_grey600_24dp.png",
@@ -224,6 +226,7 @@ android_resources("java_resources") {
"java/res/drawable-xhdpi/permission_background_sync.png",
"java/res/drawable-xhdpi/permission_images.png",
"java/res/drawable-xhdpi/permission_javascript.png",
+ "java/res/drawable-xhdpi/permission_javascript_jit.png",
"java/res/drawable-xhdpi/permission_popups.png",
"java/res/drawable-xhdpi/permission_protected_media.png",
"java/res/drawable-xhdpi/settings_sensors.png",
@@ -213,6 +216,7 @@ android_resources("java_resources") {
"java/res/drawable-xxhdpi/ic_volume_up_grey600_24dp.png",
@@ -232,6 +235,7 @@ android_resources("java_resources") {
"java/res/drawable-xxhdpi/permission_background_sync.png",
"java/res/drawable-xxhdpi/permission_images.png",
"java/res/drawable-xxhdpi/permission_javascript.png",
+ "java/res/drawable-xxhdpi/permission_javascript_jit.png",
"java/res/drawable-xxhdpi/permission_popups.png",
"java/res/drawable-xxhdpi/permission_protected_media.png",
"java/res/drawable-xxhdpi/settings_sensors.png",
@@ -220,6 +224,7 @@ android_resources("java_resources") {
"java/res/drawable-xxxhdpi/ic_volume_up_grey600_24dp.png",
@@ -240,6 +244,7 @@ android_resources("java_resources") {
"java/res/drawable-xxxhdpi/permission_background_sync.png",
"java/res/drawable-xxxhdpi/permission_images.png",
"java/res/drawable-xxxhdpi/permission_javascript.png",
+ "java/res/drawable-xxxhdpi/permission_javascript_jit.png",
"java/res/drawable-xxxhdpi/permission_popups.png",
@@ -180,228 +171,125 @@ G2~7a)DNWn}
literal 0
HcmV?d00001
diff --git a/components/browser_ui/site_settings/android/java/res/xml/site_settings_preferences.xml b/components/browser_ui/site_settings/android/java/res/xml/site_settings_preferences.xml
--- a/components/browser_ui/site_settings/android/java/res/xml/site_settings_preferences.xml
+++ b/components/browser_ui/site_settings/android/java/res/xml/site_settings_preferences.xml
@@ -43,6 +43,10 @@ Also add new settings to site_settings_preferences_with_categories.xml!
<org.chromium.components.browser_ui.settings.ChromeBasePreference
android:fragment="org.chromium.components.browser_ui.site_settings.SingleCategorySettings"
android:key="notifications" />
+ <!-- JavaScript-JIT -->
+ <org.chromium.components.browser_ui.settings.ChromeBasePreference
+ android:fragment="org.chromium.components.browser_ui.site_settings.SingleCategorySettings"
+ android:key="javascript_jit" />
<!-- JavaScript -->
<org.chromium.components.browser_ui.settings.ChromeBasePreference
android:fragment="org.chromium.components.browser_ui.site_settings.SingleCategorySettings"
diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/ContentSettingsResources.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/ContentSettingsResources.java
--- a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/ContentSettingsResources.java
+++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/ContentSettingsResources.java
@@ -218,6 +218,13 @@ public class ContentSettingsResources {
ContentSettingValues.BLOCK,
R.string.website_settings_category_javascript_allowed, 0);
+ case ContentSettingsType.JAVASCRIPT_JIT:
+ return new ResourceItem(R.drawable.permission_javascript_jit,
+ R.string.javascript_jit_permission_title, ContentSettingValues.ALLOW,
+ ContentSettingValues.BLOCK,
+ R.string.website_settings_category_javascript_jit_allowed,
+ R.string.website_settings_category_javascript_jit_blocked);
diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/impl/BromiteJavascriptJITContentSetting.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/impl/BromiteJavascriptJITContentSetting.java
new file mode 100644
--- /dev/null
+++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/impl/BromiteJavascriptJITContentSetting.java
@@ -0,0 +1,87 @@
+/*
+ This file is part of Bromite.
+
case ContentSettingsType.MEDIASTREAM_CAMERA:
return new ResourceItem(R.drawable.gm_filled_videocam_24,
R.string.website_settings_use_camera, ContentSettingValues.ASK,
diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleCategorySettings.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleCategorySettings.java
--- a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleCategorySettings.java
+++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleCategorySettings.java
@@ -779,6 +779,12 @@ public class SingleCategorySettings extends SiteSettingsPreferenceFragment
? R.string.website_settings_add_site_description_sound_block
: R.string.website_settings_add_site_description_sound_allow;
break;
+ case SiteSettingsCategory.Type.JAVASCRIPT_JIT:
+ resource = WebsitePreferenceBridge.isCategoryEnabled(
+ browserContextHandle, ContentSettingsType.JAVASCRIPT_JIT)
+ ? R.string.website_settings_add_site_description_javascript_jit_block
+ : R.string.website_settings_add_site_description_javascript_jit_allow;
+ break;
case SiteSettingsCategory.Type.COOKIES:
resource = getCookieSettingsState() == CookieSettingsState.ALLOW
? R.string.website_settings_add_site_description_cookies_block
@@ -943,6 +949,9 @@ public class SingleCategorySettings extends SiteSettingsPreferenceFragment
case SiteSettingsCategory.Type.AUTOPLAY:
allowSpecifyingExceptions = true;
break;
+ case SiteSettingsCategory.Type.JAVASCRIPT_JIT:
+ allowSpecifyingExceptions = true;
+ break;
default:
break;
}
diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleWebsiteSettings.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleWebsiteSettings.java
--- a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleWebsiteSettings.java
+++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleWebsiteSettings.java
@@ -139,6 +139,8 @@ public class SingleWebsiteSettings extends SiteSettingsPreferenceFragment
return "idle_detection_permission_list";
case ContentSettingsType.JAVASCRIPT:
return "javascript_permission_list";
+ case ContentSettingsType.JAVASCRIPT_JIT:
+ return "javascript_jit_permission_list";
case ContentSettingsType.POPUPS:
return "popup_permission_list";
case ContentSettingsType.SOUND:
@@ -520,6 +522,8 @@ public class SingleWebsiteSettings extends SiteSettingsPreferenceFragment
setUpJavascriptPreference(preference);
} else if (type == ContentSettingsType.GEOLOCATION) {
setUpLocationPreference(preference);
+ } else if (type == ContentSettingsType.JAVASCRIPT_JIT) {
+ setUpJavascriptJitPreference(preference);
} else if (type == ContentSettingsType.NOTIFICATIONS) {
setUpNotificationsPreference(preference, mSite.isEmbargoed(type));
} else if (type == ContentSettingsType.REQUEST_DESKTOP_SITE) {
@@ -1072,6 +1076,23 @@ public class SingleWebsiteSettings extends SiteSettingsPreferenceFragment
setupContentSettingsPreference(preference, currentValue, false /* isEmbargoed */);
}
+ private void setUpJavascriptJitPreference(Preference preference) {
+ BrowserContextHandle browserContextHandle =
+ getSiteSettingsDelegate().getBrowserContextHandle();
+ @ContentSettingValues
+ @Nullable
+ Integer currentValue =
+ mSite.getContentSetting(browserContextHandle, ContentSettingsType.JAVASCRIPT_JIT);
+ if (currentValue == null || currentValue == ContentSettingValues.DEFAULT) {
+ currentValue = WebsitePreferenceBridge.isCategoryEnabled(
+ browserContextHandle, ContentSettingsType.JAVASCRIPT_JIT)
+ ? ContentSettingValues.ALLOW
+ : ContentSettingValues.BLOCK;
+ }
+ // Not possible to embargo JAVASCRIPT_JIT.
+ setupContentSettingsPreference(preference, currentValue, false /* isEmbargoed */);
+ Bromite is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ Bromite is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Bromite. If not, see <https://www.gnu.org/licenses/>.
+*/
+
+package org.chromium.components.browser_ui.site_settings.impl;
+
+import org.chromium.components.browser_ui.site_settings.R;
+
+import org.chromium.components.browser_ui.site_settings.BromiteCustomContentSetting;
+import org.chromium.components.browser_ui.site_settings.ContentSettingsResources;
+import org.chromium.components.browser_ui.site_settings.SiteSettingsCategory;
+import org.chromium.components.content_settings.ContentSettingValues;
+import org.chromium.components.content_settings.ContentSettingsType;
+import org.chromium.content_public.browser.BrowserContextHandle;
+
+import androidx.annotation.Nullable;
+import androidx.preference.Preference;
+import androidx.preference.PreferenceScreen;
+
+import java.util.ArrayList;
+
+public class BromiteJavascriptJITContentSetting extends BromiteCustomContentSetting {
+ public BromiteJavascriptJITContentSetting() {
+ super(/*contentSettingsType*/ ContentSettingsType.JAVASCRIPT_JIT,
+ /*defaultEnabledValue*/ ContentSettingValues.ALLOW,
+ /*defaultDisabledValue*/ ContentSettingValues.BLOCK,
+ /*allowException*/ true,
+ /*preferenceKey*/ "javascript_jit",
+ /*profilePrefKey*/ "javascript_jit");
+ }
+
/**
* Updates the ads list preference based on whether the site is a candidate for blocking. This
* has some custom behavior.
diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettingsCategory.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettingsCategory.java
--- a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettingsCategory.java
+++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettingsCategory.java
@@ -47,7 +47,7 @@ public class SiteSettingsCategory {
Type.PROTECTED_MEDIA, Type.SENSORS, Type.SOUND, Type.USB, Type.VIRTUAL_REALITY,
Type.USE_STORAGE, Type.AUTO_DARK_WEB_CONTENT, Type.REQUEST_DESKTOP_SITE,
Type.FEDERATED_IDENTITY_API, Type.THIRD_PARTY_COOKIES, Type.SITE_DATA, Type.ANTI_ABUSE,
- Type.TIMEZONE_OVERRIDE, Type.AUTOPLAY,
+ Type.TIMEZONE_OVERRIDE, Type.AUTOPLAY, Type.JAVASCRIPT_JIT,
Type.NUM_ENTRIES})
@Retention(RetentionPolicy.SOURCE)
public @interface Type {
@@ -84,10 +84,11 @@ public class SiteSettingsCategory {
int ANTI_ABUSE = 28;
int TIMEZONE_OVERRIDE = 29;
int AUTOPLAY = 30;
+ int JAVASCRIPT_JIT = 31;
/**
* Number of handled categories used for calculating array sizes.
*/
- int NUM_ENTRIES = 31;
+ int NUM_ENTRIES = 32;
}
private final BrowserContextHandle mBrowserContextHandle;
@@ -198,6 +199,8 @@ public class SiteSettingsCategory {
return ContentSettingsType.IDLE_DETECTION;
case Type.JAVASCRIPT:
return ContentSettingsType.JAVASCRIPT;
+ case Type.JAVASCRIPT_JIT:
+ return ContentSettingsType.JAVASCRIPT_JIT;
case Type.MICROPHONE:
return ContentSettingsType.MEDIASTREAM_MIC;
case Type.NFC:
@@ -285,6 +288,8 @@ public class SiteSettingsCategory {
return "javascript";
case Type.MICROPHONE:
return "microphone";
+ case Type.JAVASCRIPT_JIT:
+ return "javascript_jit";
case Type.NFC:
return "nfc";
case Type.NOTIFICATIONS:
diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettingsUtil.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettingsUtil.java
--- a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettingsUtil.java
+++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettingsUtil.java
@@ -26,6 +26,7 @@ public class SiteSettingsUtil {
ContentSettingsType.MEDIASTREAM_MIC,
ContentSettingsType.NOTIFICATIONS,
ContentSettingsType.JAVASCRIPT,
+ ContentSettingsType.JAVASCRIPT_JIT,
ContentSettingsType.POPUPS,
ContentSettingsType.ADS,
ContentSettingsType.BACKGROUND_SYNC,
diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/Website.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/Website.java
--- a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/Website.java
+++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/Website.java
@@ -230,6 +230,13 @@ public final class Website implements WebsiteEntry {
} else {
RecordUserAction.record("JavascriptContentSetting.DisableBy.SiteSettings");
}
+ } else if (type == ContentSettingsType.JAVASCRIPT_JIT) {
+ if (exception == null) {
+ exception = new ContentSettingException(
+ ContentSettingsType.JAVASCRIPT_JIT, getAddress().getHost(), value, "",
+ /*isEmbargoed=*/false);
+ setContentSettingException(type, exception);
+ }
} else if (type == ContentSettingsType.AUTOPLAY) {
// It is possible to set the permission without having an existing exception,
// because we always show the autoplay permission in Site Settings.
diff --git a/components/browser_ui/site_settings/android/website_preference_bridge.cc b/components/browser_ui/site_settings/android/website_preference_bridge.cc
--- a/components/browser_ui/site_settings/android/website_preference_bridge.cc
+++ b/components/browser_ui/site_settings/android/website_preference_bridge.cc
@@ -823,6 +823,7 @@ static void JNI_WebsitePreferenceBridge_SetContentSettingEnabled(
case ContentSettingsType::COOKIES:
case ContentSettingsType::FEDERATED_IDENTITY_API:
case ContentSettingsType::JAVASCRIPT:
+ case ContentSettingsType::JAVASCRIPT_JIT:
case ContentSettingsType::POPUPS:
case ContentSettingsType::REQUEST_DESKTOP_SITE:
case ContentSettingsType::SENSORS:
diff --git a/components/browser_ui/strings/android/site_settings.grdp b/components/browser_ui/strings/android/site_settings.grdp
--- a/components/browser_ui/strings/android/site_settings.grdp
+++ b/components/browser_ui/strings/android/site_settings.grdp
@@ -79,6 +79,9 @@
<message name="IDS_JAVASCRIPT_PERMISSION_TITLE" desc="Title of the permission to run javascript [CHAR_LIMIT=32]">
JavaScript
</message>
+ @Override
+ public ContentSettingsResources.ResourceItem getResourceItem() {
+ return new ContentSettingsResources.ResourceItem(
+ /*icon*/ R.drawable.web_asset,
+ /*title*/ R.string.javascript_jit_permission_title,
+ /*defaultEnabledValue*/ getDefaultEnabledValue(),
+ /*defaultDisabledValue*/ getDefaultDisabledValue(),
+ /*enabledSummary*/ R.string.website_settings_category_javascript_jit_enabled,
+ /*disabledSummary*/ R.string.website_settings_category_javascript_jit_disabled);
+ }
+
+ @Override
+ public int getCategorySummary(@Nullable @ContentSettingValues int value) {
+ switch (value) {
+ case ContentSettingValues.ALLOW:
+ return R.string.website_settings_category_javascript_jit_enabled;
+ case ContentSettingValues.BLOCK:
+ return R.string.website_settings_category_javascript_jit_disabled;
+ default:
+ return 0;
+ }
+ }
+
+ @Override
+ public boolean requiresTriStateContentSetting() {
+ return false;
+ }
+
+ @Override
+ public boolean showOnlyDescriptions() {
+ return true;
+ }
+
+ @Override
+ public int getAddExceptionDialogMessage() {
+ return R.string.website_settings_category_javascript_jit_enabled;
+ }
+
+ @Override
+ public @Nullable Boolean considerException(SiteSettingsCategory category, @ContentSettingValues int value) {
+ return value != ContentSettingValues.BLOCK;
+ }
+}
diff --git a/components/browser_ui/strings/android/bromite_content_settings/javascript_jit.grdp b/components/browser_ui/strings/android/bromite_content_settings/javascript_jit.grdp
new file mode 100644
--- /dev/null
+++ b/components/browser_ui/strings/android/bromite_content_settings/javascript_jit.grdp
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<grit-part>
+ <message name="IDS_JAVASCRIPT_JIT_PERMISSION_TITLE" desc="Title of the permission to run javascript [CHAR_LIMIT=32]">
+ JavaScript JIT
+ </message>
<message name="IDS_WEBSITE_SETTINGS_DEVICE_LOCATION" desc="Title for Location settings, which control which websites can access your location." meaning="Geolocation">
Location
</message>
@@ -658,6 +661,20 @@
Block JavaScript for a specific site.
</message>
+ <!-- JavaScript JIT -->
+ <message name="IDS_WEBSITE_SETTINGS_CATEGORY_JAVASCRIPT_JIT_ALLOWED" desc="Summary text explaining that sites are allowed to compile JavaScript in JIT mode.">
+ Allow sites to use just-in-time compilation; more performant but a constant source of security vulnerabilities.
+ </message>
+ <message name="IDS_WEBSITE_SETTINGS_CATEGORY_JAVASCRIPT_JIT_BLOCKED" desc="Summary text explaining that sites are running JavaScript in JITless mode.">
+ Block sites from using just-in-time compilation, using only interpreted JavaScript; less performant but more secure against security vulnerabilities.
+ </message>
+ <message name="IDS_WEBSITE_SETTINGS_ADD_SITE_DESCRIPTION_JAVASCRIPT_JIT_ALLOW" desc="The description for the allow Javascript JIT for website dialog.">
+ <message name="IDS_WEBSITE_SETTINGS_CATEGORY_JAVASCRIPT_JIT_ENABLED" desc="Summary text explaining that sites are allowed to compile JavaScript in JIT mode.">
+ Allow JIT on a specific site.
+ </message>
+ <message name="IDS_WEBSITE_SETTINGS_ADD_SITE_DESCRIPTION_JAVASCRIPT_JIT_BLOCK" desc="The description for the block Javascript JIT for website dialog.">
+ <message name="IDS_WEBSITE_SETTINGS_CATEGORY_JAVASCRIPT_JIT_DISABLED" desc="Summary text explaining that sites are running JavaScript in JITless mode.">
+ Block JIT on a specific site.
+ </message>
+
<!-- Location -->
<message name="IDS_WEBSITE_SETTINGS_CATEGORY_LOCATION_ASK" desc="Summary text explaining that sites need to ask for permission before knowing location and that it is the recommended setting.">
+ <message name="IDS_WEBSITE_SETTINGS_ADD_SITE_DESCRIPTION_JAVASCRIPT_JIT_ALLOW" desc="The description for the allow Javascript JIT for website dialog.">
+ Allow sites to use just-in-time compilation; more performant but a constant source of security vulnerabilities.
+ </message>
+ <message name="IDS_WEBSITE_SETTINGS_ADD_SITE_DESCRIPTION_JAVASCRIPT_JIT_BLOCK" desc="The description for the block Javascript JIT for website dialog.">
+ Block sites from using just-in-time compilation, using only interpreted JavaScript; less performant but more secure against security vulnerabilities.
+ </message>
+</grit-part>
diff --git a/components/content_settings/core/browser/content_settings_registry.cc b/components/content_settings/core/browser/content_settings_registry.cc
--- a/components/content_settings/core/browser/content_settings_registry.cc
+++ b/components/content_settings/core/browser/content_settings_registry.cc
@@ -508,7 +508,7 @@ void ContentSettingsRegistry::Init() {
@@ -518,14 +518,18 @@ void ContentSettingsRegistry::Init() {
ContentSettingsInfo::EXCEPTIONS_ON_SECURE_ORIGINS_ONLY);
Register(ContentSettingsType::JAVASCRIPT_JIT, "javascript-jit",
@@ -410,76 +298,17 @@ diff --git a/components/content_settings/core/browser/content_settings_registry.
/*allowlisted_schemes=*/{},
/*valid_settings=*/{CONTENT_SETTING_ALLOW, CONTENT_SETTING_BLOCK},
WebsiteSettingsInfo::TOP_ORIGIN_ONLY_SCOPE,
diff --git a/components/page_info/android/page_info_controller_android.cc b/components/page_info/android/page_info_controller_android.cc
--- a/components/page_info/android/page_info_controller_android.cc
+++ b/components/page_info/android/page_info_controller_android.cc
@@ -134,6 +134,7 @@ void PageInfoControllerAndroid::SetPermissionInfo(
permissions_to_display.push_back(ContentSettingsType::IDLE_DETECTION);
permissions_to_display.push_back(ContentSettingsType::IMAGES);
permissions_to_display.push_back(ContentSettingsType::JAVASCRIPT);
+ permissions_to_display.push_back(ContentSettingsType::JAVASCRIPT_JIT);
permissions_to_display.push_back(ContentSettingsType::POPUPS);
permissions_to_display.push_back(ContentSettingsType::ADS);
permissions_to_display.push_back(
@@ -217,6 +218,8 @@ absl::optional<ContentSetting> PageInfoControllerAndroid::GetSettingToDisplay(
// The javascript content setting should show up if it is blocked globally
// to give users an easy way to create exceptions.
return permission.default_setting;
+ } else if (permission.type == ContentSettingsType::JAVASCRIPT_JIT) {
+ return permission.default_setting;
} else if (permission.type == ContentSettingsType::SOUND) {
// The sound content setting should always show up when the tab has played
// audio since last navigation.
diff --git a/components/page_info/page_info.cc b/components/page_info/page_info.cc
--- a/components/page_info/page_info.cc
+++ b/components/page_info/page_info.cc
@@ -130,6 +130,7 @@ ContentSettingsType kPermissionType[] = {
ContentSettingsType::AR,
ContentSettingsType::IDLE_DETECTION,
ContentSettingsType::FEDERATED_IDENTITY_API,
+ ContentSettingsType::JAVASCRIPT_JIT,
};
WebsiteSettingsRegistry::DESKTOP |
WebsiteSettingsRegistry::PLATFORM_ANDROID,
ContentSettingsInfo::INHERIT_IN_INCOGNITO,
- ContentSettingsInfo::EXCEPTIONS_ON_SECURE_AND_INSECURE_ORIGINS);
+ ContentSettingsInfo::EXCEPTIONS_ON_SECURE_AND_INSECURE_ORIGINS,
+ /*show_into_info_page*/ true,
+ /*is_renderer_content_setting*/ true,
+ /*permission_type_ui*/ IDS_JAVASCRIPT_JIT_PERMISSION_TITLE,
+ /*permission_type_ui_mid_sentence*/ IDS_JAVASCRIPT_JIT_PERMISSION_TITLE);
// Determines whether to show permission |type| in the Page Info UI. Only
@@ -163,6 +164,11 @@ bool ShouldShowPermission(const PageInfo::PermissionInfo& info,
return true;
}
+ // Always show JIT settings UI when when it has a site-specific override.
+ if (info.type == ContentSettingsType::JAVASCRIPT_JIT) {
+ return true;
+ }
+
const bool is_incognito = web_contents->GetBrowserContext()->IsOffTheRecord();
#if BUILDFLAG(IS_ANDROID)
// Special geolocation DSE settings apply only on Android, so make sure it
diff --git a/components/page_info/page_info_ui.cc b/components/page_info/page_info_ui.cc
--- a/components/page_info/page_info_ui.cc
+++ b/components/page_info/page_info_ui.cc
@@ -137,6 +137,8 @@ base::span<const PageInfoUI::PermissionUIInfo> GetContentSettingsUIInfo() {
IDS_SITE_SETTINGS_TYPE_COOKIES_MID_SENTENCE},
{ContentSettingsType::JAVASCRIPT, IDS_SITE_SETTINGS_TYPE_JAVASCRIPT,
IDS_SITE_SETTINGS_TYPE_JAVASCRIPT_MID_SENTENCE},
+ {ContentSettingsType::JAVASCRIPT_JIT, IDS_SITE_SETTINGS_TYPE_JAVASCRIPT_JIT,
+ IDS_SITE_SETTINGS_TYPE_JAVASCRIPT_JIT_MID_SENTENCE},
{ContentSettingsType::POPUPS, IDS_SITE_SETTINGS_TYPE_POPUPS_REDIRECTS,
IDS_SITE_SETTINGS_TYPE_POPUPS_REDIRECTS_MID_SENTENCE},
{ContentSettingsType::GEOLOCATION, IDS_SITE_SETTINGS_TYPE_LOCATION,
diff --git a/components/site_settings_strings.grdp b/components/site_settings_strings.grdp
--- a/components/site_settings_strings.grdp
+++ b/components/site_settings_strings.grdp
@@ -82,6 +82,12 @@
<message name="IDS_SITE_SETTINGS_TYPE_JAVASCRIPT_MID_SENTENCE" desc="The label used for JavaScript site settings controls when used mid-sentence.">
javascript
</message>
+ <message name="IDS_SITE_SETTINGS_TYPE_JAVASCRIPT_JIT" desc="The label used for JavaScript JIT site settings controls.">
+ JavaScript JIT
+ </message>
+ <message name="IDS_SITE_SETTINGS_TYPE_JAVASCRIPT_JIT_MID_SENTENCE" desc="The label used for JavaScript JIT site settings controls when used mid-sentence.">
+ javascript JIT
+ </message>
<message name="IDS_SITE_SETTINGS_TYPE_LOCATION" desc="The label used for geolocation site settings controls." meaning="Geolocation">
Location
</message>
Register(ContentSettingsType::PRIVATE_NETWORK_GUARD, "private-network-guard",
CONTENT_SETTING_ASK, WebsiteSettingsInfo::UNSYNCABLE,
--
2.25.1
@@ -5,48 +5,30 @@ Subject: Revert the removal of an option to block autoplay
Original License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html
License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
---
.../browser_ui/site_settings/android/BUILD.gn | 5 ++++
.../browser_ui/site_settings/android/BUILD.gn | 5 +
.../res/drawable-hdpi/settings_autoplay.png | Bin 0 -> 456 bytes
.../res/drawable-mdpi/settings_autoplay.png | Bin 0 -> 296 bytes
.../res/drawable-xhdpi/settings_autoplay.png | Bin 0 -> 551 bytes
.../res/drawable-xxhdpi/settings_autoplay.png | Bin 0 -> 792 bytes
.../drawable-xxxhdpi/settings_autoplay.png | Bin 0 -> 1064 bytes
.../res/xml/site_settings_preferences.xml | 4 ++++
.../ContentSettingsResources.java | 5 +++-
.../site_settings/SingleCategorySettings.java | 9 +++++++
.../site_settings/SingleWebsiteSettings.java | 22 ++++++++++++++++++
.../site_settings/SiteSettingsCategory.java | 9 +++++--
.../browser_ui/site_settings/Website.java | 9 +++++++
.../WebsitePermissionsFetcher.java | 1 +
.../android/website_preference_bridge.cc | 1 +
.../strings/android/site_settings.grdp | 9 +++++++
.../core/browser/content_settings_registry.cc | 2 +-
.../core/browser/content_settings_utils.cc | 2 ++
.../core/common/content_settings.cc | 2 ++
.../core/common/content_settings.h | 1 +
.../core/common/content_settings.mojom | 1 +
.../common/content_settings_mojom_traits.cc | 1 +
.../common/content_settings_mojom_traits.h | 5 ++++
.../renderer/content_settings_agent_impl.cc | 11 +++++++++
.../renderer/content_settings_agent_impl.h | 1 +
.../android/page_info_controller_android.cc | 1 +
components/page_info/page_info.cc | 6 +++++
components/page_info/page_info_ui.cc | 1 +
components/site_settings_strings.grdp | 3 +++
.../platform/web_content_settings_client.h | 3 +++
.../core/html/media/autoplay_policy.cc | 12 ++++++++++
.../core/html/media/autoplay_policy.h | 4 ++++
31 files changed, 126 insertions(+), 4 deletions(-)
.../impl/BromiteAutoplayContentSetting.java | 87 ++++++++++++++++++
.../bromite_content_settings/autoplay.grdp | 15 +++
.../core/browser/content_settings_registry.cc | 8 +-
.../core/html/media/autoplay_policy.cc | 14 +++
.../core/html/media/autoplay_policy.h | 4 +
11 files changed, 131 insertions(+), 2 deletions(-)
create mode 100644 components/browser_ui/site_settings/android/java/res/drawable-hdpi/settings_autoplay.png
create mode 100644 components/browser_ui/site_settings/android/java/res/drawable-mdpi/settings_autoplay.png
create mode 100644 components/browser_ui/site_settings/android/java/res/drawable-xhdpi/settings_autoplay.png
create mode 100644 components/browser_ui/site_settings/android/java/res/drawable-xxhdpi/settings_autoplay.png
create mode 100644 components/browser_ui/site_settings/android/java/res/drawable-xxxhdpi/settings_autoplay.png
create mode 100644 components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/impl/BromiteAutoplayContentSetting.java
create mode 100644 components/browser_ui/strings/android/bromite_content_settings/autoplay.grdp
diff --git a/components/browser_ui/site_settings/android/BUILD.gn b/components/browser_ui/site_settings/android/BUILD.gn
--- a/components/browser_ui/site_settings/android/BUILD.gn
+++ b/components/browser_ui/site_settings/android/BUILD.gn
@@ -194,6 +194,11 @@ android_resources("java_resources") {
@@ -209,6 +209,11 @@ android_resources("java_resources") {
"java/res/drawable-mdpi/ic_volume_up_grey600_24dp.png",
"java/res/drawable-mdpi/permission_background_sync.png",
"java/res/drawable-mdpi/permission_javascript.png",
@@ -166,214 +148,122 @@ ib6hJ{tXQ#P#rX?0El=KlH_u1_0000<MNUMnLSTX(y!wd%
literal 0
HcmV?d00001
diff --git a/components/browser_ui/site_settings/android/java/res/xml/site_settings_preferences.xml b/components/browser_ui/site_settings/android/java/res/xml/site_settings_preferences.xml
--- a/components/browser_ui/site_settings/android/java/res/xml/site_settings_preferences.xml
+++ b/components/browser_ui/site_settings/android/java/res/xml/site_settings_preferences.xml
@@ -71,6 +71,10 @@ Also add new settings to site_settings_preferences_with_categories.xml!
<org.chromium.components.browser_ui.settings.ChromeBasePreference
android:fragment="org.chromium.components.browser_ui.site_settings.SingleCategorySettings"
android:key="protected_content" />
+ <!-- Autoplay -->
+ <org.chromium.components.browser_ui.settings.ChromeBasePreference
+ android:fragment="org.chromium.components.browser_ui.site_settings.SingleCategorySettings"
+ android:key="autoplay" />
<!-- Sound -->
<org.chromium.components.browser_ui.settings.ChromeBasePreference
android:fragment="org.chromium.components.browser_ui.site_settings.SingleCategorySettings"
diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/ContentSettingsResources.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/ContentSettingsResources.java
--- a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/ContentSettingsResources.java
+++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/ContentSettingsResources.java
@@ -125,7 +125,10 @@ public class ContentSettingsResources {
return new ResourceItem(R.drawable.infobar_downloading,
R.string.automatic_downloads_permission_title, ContentSettingValues.ASK,
ContentSettingValues.BLOCK, R.string.website_settings_category_ask, 0);
-
+ case ContentSettingsType.AUTOPLAY:
+ return new ResourceItem(R.drawable.settings_autoplay, R.string.autoplay_title,
+ ContentSettingValues.ALLOW, ContentSettingValues.BLOCK,
+ R.string.website_settings_category_autoplay_allowed, 0);
case ContentSettingsType.AUTO_DARK_WEB_CONTENT:
return new ResourceItem(R.drawable.ic_brightness_medium_24dp,
R.string.auto_dark_web_content_title, ContentSettingValues.ALLOW,
diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleCategorySettings.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleCategorySettings.java
--- a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleCategorySettings.java
+++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleCategorySettings.java
@@ -761,6 +761,12 @@ public class SingleCategorySettings extends SiteSettingsPreferenceFragment
case SiteSettingsCategory.Type.BACKGROUND_SYNC:
resource = R.string.website_settings_add_site_description_background_sync;
break;
+ case SiteSettingsCategory.Type.AUTOPLAY:
+ resource = WebsitePreferenceBridge.isCategoryEnabled(
+ browserContextHandle, ContentSettingsType.AUTOPLAY)
+ ? R.string.website_settings_add_site_description_autoplay
+ : R.string.website_settings_add_site_description_autoplay;
+ break;
case SiteSettingsCategory.Type.JAVASCRIPT:
resource = WebsitePreferenceBridge.isCategoryEnabled(
browserContextHandle, ContentSettingsType.JAVASCRIPT)
@@ -934,6 +940,9 @@ public class SingleCategorySettings extends SiteSettingsPreferenceFragment
case SiteSettingsCategory.Type.TIMEZONE_OVERRIDE:
allowSpecifyingExceptions = true;
break;
+ case SiteSettingsCategory.Type.AUTOPLAY:
+ allowSpecifyingExceptions = true;
+ break;
default:
break;
}
diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleWebsiteSettings.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleWebsiteSettings.java
--- a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleWebsiteSettings.java
+++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleWebsiteSettings.java
@@ -133,6 +133,8 @@ public class SingleWebsiteSettings extends SiteSettingsPreferenceFragment
return "cookies_permission_list";
case ContentSettingsType.FEDERATED_IDENTITY_API:
return "federated_identity_api_list";
+ case ContentSettingsType.AUTOPLAY:
+ return "autoplay_permission_list";
case ContentSettingsType.IDLE_DETECTION:
return "idle_detection_permission_list";
case ContentSettingsType.JAVASCRIPT:
@@ -510,6 +512,8 @@ public class SingleWebsiteSettings extends SiteSettingsPreferenceFragment
if (type == ContentSettingsType.ADS) {
setUpAdsPreference(preference);
+ } else if (type == ContentSettingsType.AUTOPLAY) {
+ setUpAutoplayPreference(preference);
} else if (type == ContentSettingsType.SOUND) {
setUpSoundPreference(preference);
} else if (type == ContentSettingsType.JAVASCRIPT) {
@@ -1032,6 +1036,24 @@ public class SingleWebsiteSettings extends SiteSettingsPreferenceFragment
setupContentSettingsPreference(preference, currentValue, false /* isEmbargoed */);
}
+ private void setUpAutoplayPreference(Preference preference) {
+ @ContentSettingValues
+ @Nullable
+ Integer currentValue = mSite.getContentSetting(
+ getSiteSettingsDelegate().getBrowserContextHandle(), ContentSettingsType.AUTOPLAY);
+ // In order to always show the autoplay permission, set it up with the default value if it
+ // doesn't have a current value.
+ if (currentValue == null) {
+ currentValue = WebsitePreferenceBridge.isCategoryEnabled(
+ getSiteSettingsDelegate().getBrowserContextHandle(),
+ ContentSettingsType.AUTOPLAY)
+ ? ContentSettingValues.ALLOW
+ : ContentSettingValues.BLOCK;
+ }
+ // Not possible to embargo AUTOPLAY.
+ setupContentSettingsPreference(preference, currentValue, false /* isEmbargoed */);
diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/impl/BromiteAutoplayContentSetting.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/impl/BromiteAutoplayContentSetting.java
new file mode 100644
--- /dev/null
+++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/impl/BromiteAutoplayContentSetting.java
@@ -0,0 +1,87 @@
+/*
+ This file is part of Bromite.
+
+ Bromite is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ Bromite is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Bromite. If not, see <https://www.gnu.org/licenses/>.
+*/
+
+package org.chromium.components.browser_ui.site_settings.impl;
+
+import org.chromium.components.browser_ui.site_settings.R;
+
+import org.chromium.components.browser_ui.site_settings.BromiteCustomContentSetting;
+import org.chromium.components.browser_ui.site_settings.ContentSettingsResources;
+import org.chromium.components.browser_ui.site_settings.SiteSettingsCategory;
+import org.chromium.components.content_settings.ContentSettingValues;
+import org.chromium.components.content_settings.ContentSettingsType;
+import org.chromium.content_public.browser.BrowserContextHandle;
+
+import androidx.annotation.Nullable;
+import androidx.preference.Preference;
+import androidx.preference.PreferenceScreen;
+
+import java.util.ArrayList;
+
+public class BromiteAutoplayContentSetting extends BromiteCustomContentSetting {
+ public BromiteAutoplayContentSetting() {
+ super(/*contentSettingsType*/ ContentSettingsType.AUTOPLAY,
+ /*defaultEnabledValue*/ ContentSettingValues.ALLOW,
+ /*defaultDisabledValue*/ ContentSettingValues.BLOCK,
+ /*allowException*/ true,
+ /*preferenceKey*/ "autoplay",
+ /*profilePrefKey*/ "autoplay");
+ }
+
private void setUpJavascriptPreference(Preference preference) {
BrowserContextHandle browserContextHandle =
getSiteSettingsDelegate().getBrowserContextHandle();
diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettingsCategory.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettingsCategory.java
--- a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettingsCategory.java
+++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettingsCategory.java
@@ -47,7 +47,7 @@ public class SiteSettingsCategory {
Type.PROTECTED_MEDIA, Type.SENSORS, Type.SOUND, Type.USB, Type.VIRTUAL_REALITY,
Type.USE_STORAGE, Type.AUTO_DARK_WEB_CONTENT, Type.REQUEST_DESKTOP_SITE,
Type.FEDERATED_IDENTITY_API, Type.THIRD_PARTY_COOKIES, Type.SITE_DATA, Type.ANTI_ABUSE,
- Type.TIMEZONE_OVERRIDE,
+ Type.TIMEZONE_OVERRIDE, Type.AUTOPLAY,
Type.NUM_ENTRIES})
@Retention(RetentionPolicy.SOURCE)
public @interface Type {
@@ -83,10 +83,11 @@ public class SiteSettingsCategory {
int SITE_DATA = 27;
int ANTI_ABUSE = 28;
int TIMEZONE_OVERRIDE = 29;
+ int AUTOPLAY = 30;
/**
* Number of handled categories used for calculating array sizes.
*/
- int NUM_ENTRIES = 30;
+ int NUM_ENTRIES = 31;
}
private final BrowserContextHandle mBrowserContextHandle;
@@ -203,6 +204,8 @@ public class SiteSettingsCategory {
return ContentSettingsType.NFC;
case Type.NOTIFICATIONS:
return ContentSettingsType.NOTIFICATIONS;
+ case Type.AUTOPLAY:
+ return ContentSettingsType.AUTOPLAY;
case Type.POPUPS:
return ContentSettingsType.POPUPS;
case Type.PROTECTED_MEDIA:
@@ -286,6 +289,8 @@ public class SiteSettingsCategory {
return "nfc";
case Type.NOTIFICATIONS:
return "notifications";
+ case Type.AUTOPLAY:
+ return "autoplay";
case Type.POPUPS:
return "popups";
case Type.PROTECTED_MEDIA:
diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/Website.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/Website.java
--- a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/Website.java
+++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/Website.java
@@ -230,6 +230,15 @@ public final class Website implements WebsiteEntry {
} else {
RecordUserAction.record("JavascriptContentSetting.DisableBy.SiteSettings");
}
+ } else if (type == ContentSettingsType.AUTOPLAY) {
+ // It is possible to set the permission without having an existing exception,
+ // because we always show the autoplay permission in Site Settings.
+ if (exception == null) {
+ exception = new ContentSettingException(
+ ContentSettingsType.AUTOPLAY, getAddress().getHost(), value, "",
+ /*isEmbargoed=*/false);
+ setContentSettingException(type, exception);
+ }
} else if (type == ContentSettingsType.SOUND) {
// It is possible to set the permission without having an existing exception,
// because we always show the sound permission in Site Settings.
diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/WebsitePermissionsFetcher.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/WebsitePermissionsFetcher.java
--- a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/WebsitePermissionsFetcher.java
+++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/WebsitePermissionsFetcher.java
@@ -68,6 +68,7 @@ public class WebsitePermissionsFetcher {
case ContentSettingsType.AUTOMATIC_DOWNLOADS:
case ContentSettingsType.BACKGROUND_SYNC:
case ContentSettingsType.BLUETOOTH_SCANNING:
+ case ContentSettingsType.AUTOPLAY:
case ContentSettingsType.COOKIES:
case ContentSettingsType.FEDERATED_IDENTITY_API:
case ContentSettingsType.JAVASCRIPT:
diff --git a/components/browser_ui/site_settings/android/website_preference_bridge.cc b/components/browser_ui/site_settings/android/website_preference_bridge.cc
--- a/components/browser_ui/site_settings/android/website_preference_bridge.cc
+++ b/components/browser_ui/site_settings/android/website_preference_bridge.cc
@@ -827,6 +827,7 @@ static void JNI_WebsitePreferenceBridge_SetContentSettingEnabled(
case ContentSettingsType::REQUEST_DESKTOP_SITE:
case ContentSettingsType::SENSORS:
case ContentSettingsType::SOUND:
+ case ContentSettingsType::AUTOPLAY:
value = CONTENT_SETTING_ALLOW;
break;
default:
diff --git a/components/browser_ui/strings/android/site_settings.grdp b/components/browser_ui/strings/android/site_settings.grdp
--- a/components/browser_ui/strings/android/site_settings.grdp
+++ b/components/browser_ui/strings/android/site_settings.grdp
@@ -22,6 +22,15 @@
<message name="IDS_ANTI_ABUSE_PERMISSION_TITLE" desc="Title for the anti-abuse permission [CHAR_LIMIT=32]">
Auto-verify
</message>
+ <message name="IDS_AUTOPLAY_TITLE" desc='Title for the Autoplay settings screen [CHAR-LIMIT=32]'>
+ @Override
+ public ContentSettingsResources.ResourceItem getResourceItem() {
+ return new ContentSettingsResources.ResourceItem(
+ /*icon*/ R.drawable.web_asset,
+ /*title*/ R.string.autoplay_permission_title,
+ /*defaultEnabledValue*/ getDefaultEnabledValue(),
+ /*defaultDisabledValue*/ getDefaultDisabledValue(),
+ /*enabledSummary*/ R.string.website_settings_category_autoplay_enabled,
+ /*disabledSummary*/ R.string.website_settings_category_autoplay_disabled);
+ }
+
+ @Override
+ public int getCategorySummary(@Nullable @ContentSettingValues int value) {
+ switch (value) {
+ case ContentSettingValues.ALLOW:
+ return R.string.website_settings_category_autoplay_enabled;
+ case ContentSettingValues.BLOCK:
+ return R.string.website_settings_category_autoplay_disabled;
+ default:
+ return 0;
+ }
+ }
+
+ @Override
+ public boolean requiresTriStateContentSetting() {
+ return false;
+ }
+
+ @Override
+ public boolean showOnlyDescriptions() {
+ return true;
+ }
+
+ @Override
+ public int getAddExceptionDialogMessage() {
+ return R.string.website_settings_category_autoplay_enabled;
+ }
+
+ @Override
+ public @Nullable Boolean considerException(SiteSettingsCategory category, @ContentSettingValues int value) {
+ return value != ContentSettingValues.BLOCK;
+ }
+}
diff --git a/components/browser_ui/strings/android/bromite_content_settings/autoplay.grdp b/components/browser_ui/strings/android/bromite_content_settings/autoplay.grdp
new file mode 100644
--- /dev/null
+++ b/components/browser_ui/strings/android/bromite_content_settings/autoplay.grdp
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<grit-part>
+ <message name="IDS_AUTOPLAY_PERMISSION_TITLE" desc='Title for the Autoplay settings screen [CHAR-LIMIT=32]'>
+ Autoplay
+ </message>
+ <message name="IDS_WEBSITE_SETTINGS_ADD_SITE_DESCRIPTION_AUTOPLAY" desc="The description for the allow autoplay of muted videos for website dialog.">
+ Allow autoplay of muted videos for a specific site.
+ Allow autoplay for a specific site.
+ </message>
+ <message name="IDS_WEBSITE_SETTINGS_CATEGORY_AUTOPLAY_ALLOWED" desc="Summary text explaining that sites are allowed to automatically play muted videos and that it is the recommended setting.">
+ Allow sites to automatically play muted videos (recommended)
+ <message name="IDS_WEBSITE_SETTINGS_CATEGORY_AUTOPLAY_ENABLED" desc="Summary text explaining that sites are allowed to compile JavaScript in JIT mode.">
+ Allow sites to automatically play muted videos
+ </message>
<message name="IDS_AR_PERMISSION_TITLE" desc="Title of the permission to use Augmented Reality [CHAR_LIMIT=32]">
Augmented reality
</message>
+ <message name="IDS_WEBSITE_SETTINGS_CATEGORY_AUTOPLAY_DISABLED" desc="Summary text explaining that sites are running JavaScript in JITless mode.">
+ Autoplay disabled
+ </message>
+</grit-part>
diff --git a/components/content_settings/core/browser/content_settings_registry.cc b/components/content_settings/core/browser/content_settings_registry.cc
--- a/components/content_settings/core/browser/content_settings_registry.cc
+++ b/components/content_settings/core/browser/content_settings_registry.cc
@@ -236,7 +236,7 @@ void ContentSettingsRegistry::Init() {
@@ -238,14 +238,18 @@ void ContentSettingsRegistry::Init() {
ContentSettingsInfo::INHERIT_IN_INCOGNITO,
ContentSettingsInfo::EXCEPTIONS_ON_SECURE_ORIGINS_ONLY);
@@ -382,188 +272,18 @@ diff --git a/components/content_settings/core/browser/content_settings_registry.
WebsiteSettingsInfo::UNSYNCABLE, /*allowlisted_schemes=*/{},
/*valid_settings=*/{CONTENT_SETTING_ALLOW, CONTENT_SETTING_BLOCK},
WebsiteSettingsInfo::TOP_ORIGIN_ONLY_SCOPE,
diff --git a/components/content_settings/core/browser/content_settings_utils.cc b/components/content_settings/core/browser/content_settings_utils.cc
--- a/components/content_settings/core/browser/content_settings_utils.cc
+++ b/components/content_settings/core/browser/content_settings_utils.cc
@@ -151,6 +151,8 @@ void GetRendererContentSettingRules(const HostContentSettingsMap* map,
#endif
map->GetSettingsForOneType(ContentSettingsType::JAVASCRIPT,
&(rules->script_rules));
+ map->GetSettingsForOneType(ContentSettingsType::AUTOPLAY,
+ &(rules->autoplay_rules));
map->GetSettingsForOneType(ContentSettingsType::POPUPS,
&(rules->popup_redirect_rules));
WebsiteSettingsRegistry::DESKTOP |
WebsiteSettingsRegistry::PLATFORM_ANDROID,
ContentSettingsInfo::INHERIT_IN_INCOGNITO,
- ContentSettingsInfo::EXCEPTIONS_ON_SECURE_AND_INSECURE_ORIGINS);
+ ContentSettingsInfo::EXCEPTIONS_ON_SECURE_AND_INSECURE_ORIGINS,
+ /*show_into_info_page*/ false,
+ /*is_renderer_content_setting*/ true,
+ /*permission_type_ui*/ IDS_AUTOPLAY_PERMISSION_TITLE,
+ /*permission_type_ui_mid_sentence*/ IDS_AUTOPLAY_PERMISSION_TITLE);
diff --git a/components/content_settings/core/common/content_settings.cc b/components/content_settings/core/common/content_settings.cc
--- a/components/content_settings/core/common/content_settings.cc
+++ b/components/content_settings/core/common/content_settings.cc
@@ -215,6 +215,7 @@ bool RendererContentSettingRules::IsRendererContentSetting(
return content_type == ContentSettingsType::IMAGES ||
content_type == ContentSettingsType::JAVASCRIPT ||
content_type == ContentSettingsType::POPUPS ||
+ content_type == ContentSettingsType::AUTOPLAY ||
content_type == ContentSettingsType::MIXEDSCRIPT ||
content_type == ContentSettingsType::AUTO_DARK_WEB_CONTENT ||
content_type == ContentSettingsType::TIMEZONE_OVERRIDE;
@@ -228,6 +229,7 @@ void RendererContentSettingRules::FilterRulesByOutermostMainFrameURL(
FilterRulesForType(mixed_content_rules, outermost_main_frame_url);
FilterRulesForType(auto_dark_content_rules, outermost_main_frame_url);
FilterRulesForType(timezone_override_rules, outermost_main_frame_url);
+ FilterRulesForType(autoplay_rules, outermost_main_frame_url);
}
RendererContentSettingRules::RendererContentSettingRules() = default;
diff --git a/components/content_settings/core/common/content_settings.h b/components/content_settings/core/common/content_settings.h
--- a/components/content_settings/core/common/content_settings.h
+++ b/components/content_settings/core/common/content_settings.h
@@ -90,6 +90,7 @@ struct RendererContentSettingRules {
ContentSettingsForOneType image_rules;
ContentSettingsForOneType script_rules;
+ ContentSettingsForOneType autoplay_rules;
ContentSettingsForOneType popup_redirect_rules;
ContentSettingsForOneType mixed_content_rules;
ContentSettingsForOneType auto_dark_content_rules;
diff --git a/components/content_settings/core/common/content_settings.mojom b/components/content_settings/core/common/content_settings.mojom
--- a/components/content_settings/core/common/content_settings.mojom
+++ b/components/content_settings/core/common/content_settings.mojom
@@ -75,6 +75,7 @@ struct ContentSettingPatternSource {
struct RendererContentSettingRules {
array<ContentSettingPatternSource> image_rules;
array<ContentSettingPatternSource> script_rules;
+ array<ContentSettingPatternSource> autoplay_rules;
array<ContentSettingPatternSource> popup_redirect_rules;
array<ContentSettingPatternSource> mixed_content_rules;
array<ContentSettingPatternSource> auto_dark_content_rules;
diff --git a/components/content_settings/core/common/content_settings_mojom_traits.cc b/components/content_settings/core/common/content_settings_mojom_traits.cc
--- a/components/content_settings/core/common/content_settings_mojom_traits.cc
+++ b/components/content_settings/core/common/content_settings_mojom_traits.cc
@@ -100,6 +100,7 @@ bool StructTraits<content_settings::mojom::RendererContentSettingRulesDataView,
RendererContentSettingRules* out) {
return data.ReadImageRules(&out->image_rules) &&
data.ReadScriptRules(&out->script_rules) &&
+ data.ReadAutoplayRules(&out->autoplay_rules) &&
data.ReadPopupRedirectRules(&out->popup_redirect_rules) &&
data.ReadMixedContentRules(&out->mixed_content_rules) &&
data.ReadAutoDarkContentRules(&out->auto_dark_content_rules) &&
diff --git a/components/content_settings/core/common/content_settings_mojom_traits.h b/components/content_settings/core/common/content_settings_mojom_traits.h
--- a/components/content_settings/core/common/content_settings_mojom_traits.h
+++ b/components/content_settings/core/common/content_settings_mojom_traits.h
@@ -135,6 +135,11 @@ struct StructTraits<
return r.script_rules;
}
+ static const std::vector<ContentSettingPatternSource>& autoplay_rules(
+ const RendererContentSettingRules& r) {
+ return r.autoplay_rules;
+ }
+
static const std::vector<ContentSettingPatternSource>& popup_redirect_rules(
const RendererContentSettingRules& r) {
return r.popup_redirect_rules;
diff --git a/components/content_settings/renderer/content_settings_agent_impl.cc b/components/content_settings/renderer/content_settings_agent_impl.cc
--- a/components/content_settings/renderer/content_settings_agent_impl.cc
+++ b/components/content_settings/renderer/content_settings_agent_impl.cc
@@ -388,6 +388,17 @@ bool ContentSettingsAgentImpl::AllowRunningInsecureContent(
return false;
}
+bool ContentSettingsAgentImpl::AllowAutoplay(bool default_value) {
+ if (!content_setting_rules_)
+ return default_value;
+
+ blink::WebLocalFrame* frame = render_frame()->GetWebFrame();
+ return GetContentSettingFromRules(
+ content_setting_rules_->autoplay_rules,
+ url::Origin(frame->GetDocument().GetSecurityOrigin()).GetURL()) ==
+ CONTENT_SETTING_ALLOW;
+}
+
bool ContentSettingsAgentImpl::AllowPopupsAndRedirects(bool default_value) {
if (!content_setting_rules_)
return default_value;
diff --git a/components/content_settings/renderer/content_settings_agent_impl.h b/components/content_settings/renderer/content_settings_agent_impl.h
--- a/components/content_settings/renderer/content_settings_agent_impl.h
+++ b/components/content_settings/renderer/content_settings_agent_impl.h
@@ -96,6 +96,7 @@ class ContentSettingsAgentImpl
void DidNotAllowScript() override;
bool AllowRunningInsecureContent(bool allowed_per_settings,
const blink::WebURL& url) override;
+ bool AllowAutoplay(bool default_value) override;
bool AllowPopupsAndRedirects(bool default_value) override;
bool ShouldAutoupgradeMixedContent() override;
diff --git a/components/page_info/android/page_info_controller_android.cc b/components/page_info/android/page_info_controller_android.cc
--- a/components/page_info/android/page_info_controller_android.cc
+++ b/components/page_info/android/page_info_controller_android.cc
@@ -138,6 +138,7 @@ void PageInfoControllerAndroid::SetPermissionInfo(
permissions_to_display.push_back(ContentSettingsType::ADS);
permissions_to_display.push_back(
ContentSettingsType::PROTECTED_MEDIA_IDENTIFIER);
+ permissions_to_display.push_back(ContentSettingsType::AUTOPLAY);
permissions_to_display.push_back(ContentSettingsType::SOUND);
if (base::FeatureList::IsEnabled(features::kWebNfc))
permissions_to_display.push_back(ContentSettingsType::NFC);
diff --git a/components/page_info/page_info.cc b/components/page_info/page_info.cc
--- a/components/page_info/page_info.cc
+++ b/components/page_info/page_info.cc
@@ -107,6 +107,7 @@ ContentSettingsType kPermissionType[] = {
ContentSettingsType::ADS,
ContentSettingsType::BACKGROUND_SYNC,
ContentSettingsType::SOUND,
+ ContentSettingsType::AUTOPLAY,
ContentSettingsType::AUTOMATIC_DOWNLOADS,
#if BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_WIN)
ContentSettingsType::PROTECTED_MEDIA_IDENTIFIER,
@@ -150,6 +151,11 @@ bool ShouldShowPermission(const PageInfo::PermissionInfo& info,
return is_subresource_filter_activated;
}
+ // Always show autoplay when it has a site-specific override
+ if (info.type == ContentSettingsType::AUTOPLAY) {
+ return true;
+ }
+
if (info.type == ContentSettingsType::SOUND) {
// The sound content setting should always show up when the tab has played
// audio.
diff --git a/components/page_info/page_info_ui.cc b/components/page_info/page_info_ui.cc
--- a/components/page_info/page_info_ui.cc
+++ b/components/page_info/page_info_ui.cc
@@ -162,6 +162,7 @@ base::span<const PageInfoUI::PermissionUIInfo> GetContentSettingsUIInfo() {
#endif
{ContentSettingsType::ADS, IDS_SITE_SETTINGS_TYPE_ADS,
IDS_SITE_SETTINGS_TYPE_ADS_MID_SENTENCE},
+ {ContentSettingsType::AUTOPLAY, IDS_SITE_SETTINGS_TYPE_AUTOPLAY},
{ContentSettingsType::SOUND, IDS_SITE_SETTINGS_TYPE_SOUND,
IDS_SITE_SETTINGS_TYPE_SOUND_MID_SENTENCE},
{ContentSettingsType::CLIPBOARD_READ_WRITE,
diff --git a/components/site_settings_strings.grdp b/components/site_settings_strings.grdp
--- a/components/site_settings_strings.grdp
+++ b/components/site_settings_strings.grdp
@@ -139,6 +139,9 @@
<message name="IDS_SITE_SETTINGS_TYPE_SOUND" desc="The label used for the sound site settings controls.">
Sound
</message>
+ <message name="IDS_SITE_SETTINGS_TYPE_AUTOPLAY" desc="The label used for the autoplay permission controls in the Page Info popup.">
+ Autoplay
+ </message>
<message name="IDS_SITE_SETTINGS_TYPE_SOUND_MID_SENTENCE" desc="The label used for the sound site settings controls when used mid-sentence.">
sound
</message>
diff --git a/third_party/blink/public/platform/web_content_settings_client.h b/third_party/blink/public/platform/web_content_settings_client.h
--- a/third_party/blink/public/platform/web_content_settings_client.h
+++ b/third_party/blink/public/platform/web_content_settings_client.h
@@ -92,6 +92,9 @@ class WebContentSettingsClient {
// interface.
virtual bool AllowMutationEvents(bool default_value) { return default_value; }
+ // Controls whether autoplay is allowed for this frame.
+ virtual bool AllowAutoplay(bool default_value) { return default_value; }
+
virtual bool AllowPopupsAndRedirects(bool default_value) {
return default_value;
}
Register(ContentSettingsType::SOUND, "sound", CONTENT_SETTING_ALLOW,
WebsiteSettingsInfo::UNSYNCABLE, /*allowlisted_schemes=*/{},
diff --git a/third_party/blink/renderer/core/html/media/autoplay_policy.cc b/third_party/blink/renderer/core/html/media/autoplay_policy.cc
--- a/third_party/blink/renderer/core/html/media/autoplay_policy.cc
+++ b/third_party/blink/renderer/core/html/media/autoplay_policy.cc
@@ -584,7 +304,7 @@ diff --git a/third_party/blink/renderer/core/html/media/autoplay_policy.cc b/thi
if (!IsLockedPendingUserGesture())
return false;
@@ -408,6 +411,15 @@ void AutoplayPolicy::MaybeSetAutoplayInitiated() {
@@ -408,6 +411,17 @@ void AutoplayPolicy::MaybeSetAutoplayInitiated() {
}
}
@@ -592,8 +312,10 @@ diff --git a/third_party/blink/renderer/core/html/media/autoplay_policy.cc b/thi
+ LocalFrame* frame = element_->GetDocument().GetFrame();
+ if (!frame)
+ return false;
+ if (auto* settings_client = frame->GetContentSettingsClient())
+ return settings_client->AllowAutoplay(false /* default_value */);
+ if (auto* settings_client = frame->GetContentSettingsClient()) {
+ return settings_client->AllowContentSetting(
+ ContentSettingsType::AUTOPLAY, /*default_value*/ false);
+ }
+ return true;
+}
+
@@ -13,7 +13,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleWebsiteSettings.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleWebsiteSettings.java
--- a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleWebsiteSettings.java
+++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleWebsiteSettings.java
@@ -524,6 +524,8 @@ public class SingleWebsiteSettings extends SiteSettingsPreferenceFragment
@@ -517,6 +517,8 @@ public class SingleWebsiteSettings extends SiteSettingsPreferenceFragment
setUpSoundPreference(preference);
} else if (type == ContentSettingsType.JAVASCRIPT) {
setUpJavascriptPreference(preference);
@@ -21,8 +21,8 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c
+ setUpCookiesPreference(preference);
} else if (type == ContentSettingsType.GEOLOCATION) {
setUpLocationPreference(preference);
} else if (type == ContentSettingsType.IMAGES) {
@@ -882,16 +884,8 @@ public class SingleWebsiteSettings extends SiteSettingsPreferenceFragment
} else if (type == ContentSettingsType.NOTIFICATIONS) {
@@ -876,16 +878,8 @@ public class SingleWebsiteSettings extends SiteSettingsPreferenceFragment
private void setUpAdsInformationalBanner() {
// Add the informational banner which shows at the top of the UI if ad blocking is
// activated on this site.
@@ -39,7 +39,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c
}
private SiteSettingsCategory getWarningCategory() {
@@ -1077,17 +1071,35 @@ public class SingleWebsiteSettings extends SiteSettingsPreferenceFragment
@@ -1057,17 +1051,35 @@ public class SingleWebsiteSettings extends SiteSettingsPreferenceFragment
@Nullable
Integer currentValue =
mSite.getContentSetting(browserContextHandle, ContentSettingsType.JAVASCRIPT);
@@ -78,10 +78,10 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c
+ setupContentSettingsPreference(preference, currentValue, false /* isEmbargoed */);
+ }
+
private void setUpJavascriptJitPreference(Preference preference) {
BrowserContextHandle browserContextHandle =
getSiteSettingsDelegate().getBrowserContextHandle();
@@ -1120,22 +1132,10 @@ public class SingleWebsiteSettings extends SiteSettingsPreferenceFragment
/**
* Updates the ads list preference based on whether the site is a candidate for blocking. This
* has some custom behavior.
@@ -1083,22 +1095,10 @@ public class SingleWebsiteSettings extends SiteSettingsPreferenceFragment
setupContentSettingsPreference(preference, null, false);
return;
}
+140 -329
View File
@@ -5,78 +5,68 @@ Subject: Site setting for images
Original License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html
License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
---
.../browser_ui/site_settings/android/BUILD.gn | 5 ++++
.../browser_ui/site_settings/android/BUILD.gn | 5 +
.../res/drawable-hdpi/permission_images.png | Bin 0 -> 257 bytes
.../res/drawable-mdpi/permission_images.png | Bin 0 -> 186 bytes
.../res/drawable-xhdpi/permission_images.png | Bin 0 -> 316 bytes
.../res/drawable-xxhdpi/permission_images.png | Bin 0 -> 449 bytes
.../drawable-xxxhdpi/permission_images.png | Bin 0 -> 532 bytes
.../res/xml/site_settings_preferences.xml | 4 ++++
.../ContentSettingsResources.java | 4 ++++
.../site_settings/SingleCategorySettings.java | 9 +++++++
.../site_settings/SingleWebsiteSettings.java | 22 ++++++++++++++++++
.../site_settings/SiteSettingsCategory.java | 9 +++++--
.../site_settings/SiteSettingsUtil.java | 1 +
.../browser_ui/site_settings/Website.java | 7 ++++++
.../WebsitePermissionsFetcher.java | 1 +
.../android/website_preference_bridge.cc | 1 +
.../strings/android/site_settings.grdp | 6 +++++
.../core/browser/content_settings_registry.cc | 3 ++-
.../core/browser/content_settings_utils.cc | 8 ++-----
.../android/page_info_controller_android.cc | 4 ++++
components/page_info/page_info.cc | 7 ++++--
components/page_info/page_info_ui.cc | 4 ++--
components/site_settings_strings.grdp | 12 +++++-----
22 files changed, 88 insertions(+), 19 deletions(-)
.../impl/BromiteImagesContentSetting.java | 87 ++++++++++++++++++
.../bromite_content_settings/images.grdp | 23 +++++
.../core/browser/content_settings_registry.cc | 8 +-
.../core/browser/content_settings_utils.cc | 8 +-
10 files changed, 123 insertions(+), 8 deletions(-)
create mode 100644 components/browser_ui/site_settings/android/java/res/drawable-hdpi/permission_images.png
create mode 100644 components/browser_ui/site_settings/android/java/res/drawable-mdpi/permission_images.png
create mode 100644 components/browser_ui/site_settings/android/java/res/drawable-xhdpi/permission_images.png
create mode 100644 components/browser_ui/site_settings/android/java/res/drawable-xxhdpi/permission_images.png
create mode 100644 components/browser_ui/site_settings/android/java/res/drawable-xxxhdpi/permission_images.png
create mode 100644 components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/impl/BromiteImagesContentSetting.java
create mode 100644 components/browser_ui/strings/android/bromite_content_settings/images.grdp
diff --git a/components/browser_ui/site_settings/android/BUILD.gn b/components/browser_ui/site_settings/android/BUILD.gn
--- a/components/browser_ui/site_settings/android/BUILD.gn
+++ b/components/browser_ui/site_settings/android/BUILD.gn
@@ -186,6 +186,7 @@ android_resources("java_resources") {
@@ -201,6 +201,7 @@ android_resources("java_resources") {
sources = [
"java/res/drawable-hdpi/ic_volume_up_grey600_24dp.png",
"java/res/drawable-hdpi/permission_background_sync.png",
+ "java/res/drawable-hdpi/permission_images.png",
"java/res/drawable-hdpi/permission_javascript.png",
"java/res/drawable-hdpi/permission_javascript_jit.png",
"java/res/drawable-hdpi/permission_popups.png",
@@ -194,6 +195,7 @@ android_resources("java_resources") {
"java/res/drawable-hdpi/permission_protected_media.png",
@@ -208,6 +209,7 @@ android_resources("java_resources") {
"java/res/drawable-hdpi/web_asset.png",
"java/res/drawable-mdpi/ic_volume_up_grey600_24dp.png",
"java/res/drawable-mdpi/permission_background_sync.png",
+ "java/res/drawable-mdpi/permission_images.png",
"java/res/drawable-mdpi/permission_javascript.png",
"java/res/drawable-mdpi/permission_javascript_jit.png",
"java/res/drawable-hdpi/settings_autoplay.png",
@@ -207,6 +209,7 @@ android_resources("java_resources") {
"java/res/drawable-xhdpi/settings_autoplay.png",
@@ -220,6 +222,7 @@ android_resources("java_resources") {
"java/res/drawable-mdpi/web_asset.png",
"java/res/drawable-xhdpi/ic_volume_up_grey600_24dp.png",
"java/res/drawable-xhdpi/permission_background_sync.png",
+ "java/res/drawable-xhdpi/permission_images.png",
"java/res/drawable-xhdpi/permission_javascript.png",
"java/res/drawable-xhdpi/permission_javascript_jit.png",
"java/res/drawable-xhdpi/permission_popups.png",
@@ -215,6 +218,7 @@ android_resources("java_resources") {
"java/res/drawable-xhdpi/permission_protected_media.png",
@@ -227,6 +230,7 @@ android_resources("java_resources") {
"java/res/drawable-xhdpi/web_asset.png",
"java/res/drawable-xxhdpi/ic_volume_up_grey600_24dp.png",
"java/res/drawable-xxhdpi/permission_background_sync.png",
+ "java/res/drawable-xxhdpi/permission_images.png",
"java/res/drawable-xxhdpi/permission_javascript.png",
"java/res/drawable-xxhdpi/permission_javascript_jit.png",
"java/res/drawable-xxhdpi/permission_popups.png",
@@ -223,6 +227,7 @@ android_resources("java_resources") {
"java/res/drawable-xxhdpi/permission_protected_media.png",
@@ -234,6 +238,7 @@ android_resources("java_resources") {
"java/res/drawable-xxhdpi/web_asset.png",
"java/res/drawable-xxxhdpi/ic_volume_up_grey600_24dp.png",
"java/res/drawable-xxxhdpi/permission_background_sync.png",
+ "java/res/drawable-xxxhdpi/permission_images.png",
"java/res/drawable-xxxhdpi/permission_javascript.png",
"java/res/drawable-xxxhdpi/permission_javascript_jit.png",
"java/res/drawable-xxxhdpi/permission_popups.png",
"java/res/drawable-xxxhdpi/permission_protected_media.png",
diff --git a/components/browser_ui/site_settings/android/java/res/drawable-hdpi/permission_images.png b/components/browser_ui/site_settings/android/java/res/drawable-hdpi/permission_images.png
new file mode 100644
index 0000000000000000000000000000000000000000..cafee5acf2299e534676a15fb029192e066551c9
@@ -159,239 +149,149 @@ F0RV{K+KvDK
literal 0
HcmV?d00001
diff --git a/components/browser_ui/site_settings/android/java/res/xml/site_settings_preferences.xml b/components/browser_ui/site_settings/android/java/res/xml/site_settings_preferences.xml
--- a/components/browser_ui/site_settings/android/java/res/xml/site_settings_preferences.xml
+++ b/components/browser_ui/site_settings/android/java/res/xml/site_settings_preferences.xml
@@ -51,6 +51,10 @@ Also add new settings to site_settings_preferences_with_categories.xml!
<org.chromium.components.browser_ui.settings.ChromeBasePreference
android:fragment="org.chromium.components.browser_ui.site_settings.SingleCategorySettings"
android:key="javascript" />
+ <!-- Images -->
+ <org.chromium.components.browser_ui.settings.ChromeBasePreference
+ android:key="images"
+ android:fragment="org.chromium.components.browser_ui.site_settings.SingleCategorySettings" />
<!-- Timezone Override -->
<org.chromium.components.browser_ui.settings.ChromeBasePreference
android:key="timezone_override"
diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/ContentSettingsResources.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/ContentSettingsResources.java
--- a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/ContentSettingsResources.java
+++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/ContentSettingsResources.java
@@ -146,6 +146,10 @@ public class ContentSettingsResources {
return new ResourceItem(R.drawable.settings_bluetooth, 0, ContentSettingValues.ASK,
ContentSettingValues.BLOCK, 0, 0);
+ case ContentSettingsType.IMAGES:
+ return new ResourceItem(R.drawable.permission_images, R.string.images_permission_title,
+ ContentSettingValues.ALLOW, ContentSettingValues.BLOCK, 0, 0);
diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/impl/BromiteImagesContentSetting.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/impl/BromiteImagesContentSetting.java
new file mode 100644
--- /dev/null
+++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/impl/BromiteImagesContentSetting.java
@@ -0,0 +1,87 @@
+/*
+ This file is part of Bromite.
+
case ContentSettingsType.BLUETOOTH_GUARD:
return new ResourceItem(R.drawable.settings_bluetooth,
R.string.website_settings_bluetooth, ContentSettingValues.ASK,
diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleCategorySettings.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleCategorySettings.java
--- a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleCategorySettings.java
+++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleCategorySettings.java
@@ -785,6 +785,12 @@ public class SingleCategorySettings extends SiteSettingsPreferenceFragment
? R.string.website_settings_add_site_description_javascript_jit_block
: R.string.website_settings_add_site_description_javascript_jit_allow;
break;
+ case SiteSettingsCategory.Type.IMAGES:
+ resource = WebsitePreferenceBridge.isCategoryEnabled(
+ browserContextHandle, ContentSettingsType.IMAGES)
+ ? R.string.website_settings_add_site_description_images
+ : R.string.website_settings_add_site_description_images;
+ break;
case SiteSettingsCategory.Type.COOKIES:
resource = getCookieSettingsState() == CookieSettingsState.ALLOW
? R.string.website_settings_add_site_description_cookies_block
@@ -949,6 +955,9 @@ public class SingleCategorySettings extends SiteSettingsPreferenceFragment
case SiteSettingsCategory.Type.AUTOPLAY:
allowSpecifyingExceptions = true;
break;
+ case SiteSettingsCategory.Type.IMAGES:
+ allowSpecifyingExceptions = true;
+ break;
case SiteSettingsCategory.Type.JAVASCRIPT_JIT:
allowSpecifyingExceptions = true;
break;
diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleWebsiteSettings.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleWebsiteSettings.java
--- a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleWebsiteSettings.java
+++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleWebsiteSettings.java
@@ -137,6 +137,8 @@ public class SingleWebsiteSettings extends SiteSettingsPreferenceFragment
return "autoplay_permission_list";
case ContentSettingsType.IDLE_DETECTION:
return "idle_detection_permission_list";
+ case ContentSettingsType.IMAGES:
+ return "images_permission_list";
case ContentSettingsType.JAVASCRIPT:
return "javascript_permission_list";
case ContentSettingsType.JAVASCRIPT_JIT:
@@ -522,6 +524,8 @@ public class SingleWebsiteSettings extends SiteSettingsPreferenceFragment
setUpJavascriptPreference(preference);
} else if (type == ContentSettingsType.GEOLOCATION) {
setUpLocationPreference(preference);
+ } else if (type == ContentSettingsType.IMAGES) {
+ setUpImagesPreference(preference);
} else if (type == ContentSettingsType.JAVASCRIPT_JIT) {
setUpJavascriptJitPreference(preference);
} else if (type == ContentSettingsType.NOTIFICATIONS) {
@@ -1149,6 +1153,24 @@ public class SingleWebsiteSettings extends SiteSettingsPreferenceFragment
mSite.isEmbargoed(ContentSettingsType.REQUEST_DESKTOP_SITE));
}
+ private void setUpImagesPreference(Preference preference) {
+ BrowserContextHandle browserContextHandle =
+ getSiteSettingsDelegate().getBrowserContextHandle();
+ @ContentSettingValues
+ @Nullable
+ Integer currentValue =
+ mSite.getContentSetting(browserContextHandle, ContentSettingsType.IMAGES);
+ // Always show the Images permission
+ if (currentValue == null) {
+ currentValue = WebsitePreferenceBridge.isCategoryEnabled(
+ browserContextHandle, ContentSettingsType.IMAGES)
+ ? ContentSettingValues.ALLOW
+ : ContentSettingValues.BLOCK;
+ }
+ // Not possible to embargo IMAGES.
+ setupContentSettingsPreference(preference, currentValue, false /* isEmbargoed */);
+ Bromite is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ Bromite is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Bromite. If not, see <https://www.gnu.org/licenses/>.
+*/
+
+package org.chromium.components.browser_ui.site_settings.impl;
+
+import org.chromium.components.browser_ui.site_settings.R;
+
+import org.chromium.components.browser_ui.site_settings.BromiteCustomContentSetting;
+import org.chromium.components.browser_ui.site_settings.ContentSettingsResources;
+import org.chromium.components.browser_ui.site_settings.SiteSettingsCategory;
+import org.chromium.components.content_settings.ContentSettingValues;
+import org.chromium.components.content_settings.ContentSettingsType;
+import org.chromium.content_public.browser.BrowserContextHandle;
+
+import androidx.annotation.Nullable;
+import androidx.preference.Preference;
+import androidx.preference.PreferenceScreen;
+
+import java.util.ArrayList;
+
+public class BromiteImagesContentSetting extends BromiteCustomContentSetting {
+ public BromiteImagesContentSetting() {
+ super(/*contentSettingsType*/ ContentSettingsType.IMAGES,
+ /*defaultEnabledValue*/ ContentSettingValues.ALLOW,
+ /*defaultDisabledValue*/ ContentSettingValues.BLOCK,
+ /*allowException*/ true,
+ /*preferenceKey*/ "images",
+ /*profilePrefKey*/ "images");
+ }
+
private String getDSECategorySummary(@ContentSettingValues int value) {
return value == ContentSettingValues.ALLOW
? getString(R.string.website_settings_permissions_allowed_dse)
diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettingsCategory.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettingsCategory.java
--- a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettingsCategory.java
+++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettingsCategory.java
@@ -47,7 +47,7 @@ public class SiteSettingsCategory {
Type.PROTECTED_MEDIA, Type.SENSORS, Type.SOUND, Type.USB, Type.VIRTUAL_REALITY,
Type.USE_STORAGE, Type.AUTO_DARK_WEB_CONTENT, Type.REQUEST_DESKTOP_SITE,
Type.FEDERATED_IDENTITY_API, Type.THIRD_PARTY_COOKIES, Type.SITE_DATA, Type.ANTI_ABUSE,
- Type.TIMEZONE_OVERRIDE, Type.AUTOPLAY, Type.JAVASCRIPT_JIT,
+ Type.TIMEZONE_OVERRIDE, Type.AUTOPLAY, Type.JAVASCRIPT_JIT, Type.IMAGES,
Type.NUM_ENTRIES})
@Retention(RetentionPolicy.SOURCE)
public @interface Type {
@@ -85,10 +85,11 @@ public class SiteSettingsCategory {
int TIMEZONE_OVERRIDE = 29;
int AUTOPLAY = 30;
int JAVASCRIPT_JIT = 31;
+ int IMAGES = 32;
/**
* Number of handled categories used for calculating array sizes.
*/
- int NUM_ENTRIES = 32;
+ int NUM_ENTRIES = 33;
}
private final BrowserContextHandle mBrowserContextHandle;
@@ -197,6 +198,8 @@ public class SiteSettingsCategory {
return ContentSettingsType.FEDERATED_IDENTITY_API;
case Type.IDLE_DETECTION:
return ContentSettingsType.IDLE_DETECTION;
+ case Type.IMAGES:
+ return ContentSettingsType.IMAGES;
case Type.JAVASCRIPT:
return ContentSettingsType.JAVASCRIPT;
case Type.JAVASCRIPT_JIT:
@@ -286,6 +289,8 @@ public class SiteSettingsCategory {
return "idle_detection";
case Type.JAVASCRIPT:
return "javascript";
+ case Type.IMAGES:
+ return "images";
case Type.MICROPHONE:
return "microphone";
case Type.JAVASCRIPT_JIT:
diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettingsUtil.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettingsUtil.java
--- a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettingsUtil.java
+++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettingsUtil.java
@@ -35,6 +35,7 @@ public class SiteSettingsUtil {
ContentSettingsType.SOUND,
ContentSettingsType.MIDI_SYSEX,
ContentSettingsType.CLIPBOARD_READ_WRITE,
+ ContentSettingsType.IMAGES,
ContentSettingsType.NFC,
ContentSettingsType.BLUETOOTH_SCANNING,
ContentSettingsType.VR,
diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/Website.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/Website.java
--- a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/Website.java
+++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/Website.java
@@ -214,6 +214,13 @@ public final class Website implements WebsiteEntry {
/*isEmbargoed=*/false);
setContentSettingException(type, exception);
}
+ } else if (type == ContentSettingsType.IMAGES) {
+ if (exception == null) {
+ exception = new ContentSettingException(
+ ContentSettingsType.IMAGES, getAddress().getHost(), value, "",
+ /*isEmbargoed=*/false);
+ setContentSettingException(type, exception);
+ }
} else if (type == ContentSettingsType.JAVASCRIPT) {
// It is possible to set the permission without having an existing exception,
// because we show the javascript permission in Site Settings if javascript
diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/WebsitePermissionsFetcher.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/WebsitePermissionsFetcher.java
--- a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/WebsitePermissionsFetcher.java
+++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/WebsitePermissionsFetcher.java
@@ -71,6 +71,7 @@ public class WebsitePermissionsFetcher {
case ContentSettingsType.AUTOPLAY:
case ContentSettingsType.COOKIES:
case ContentSettingsType.FEDERATED_IDENTITY_API:
+ case ContentSettingsType.IMAGES:
case ContentSettingsType.JAVASCRIPT:
case ContentSettingsType.JAVASCRIPT_JIT:
case ContentSettingsType.POPUPS:
diff --git a/components/browser_ui/site_settings/android/website_preference_bridge.cc b/components/browser_ui/site_settings/android/website_preference_bridge.cc
--- a/components/browser_ui/site_settings/android/website_preference_bridge.cc
+++ b/components/browser_ui/site_settings/android/website_preference_bridge.cc
@@ -822,6 +822,7 @@ static void JNI_WebsitePreferenceBridge_SetContentSettingEnabled(
case ContentSettingsType::BACKGROUND_SYNC:
case ContentSettingsType::COOKIES:
case ContentSettingsType::FEDERATED_IDENTITY_API:
+ case ContentSettingsType::IMAGES:
case ContentSettingsType::JAVASCRIPT:
case ContentSettingsType::JAVASCRIPT_JIT:
case ContentSettingsType::POPUPS:
diff --git a/components/browser_ui/strings/android/site_settings.grdp b/components/browser_ui/strings/android/site_settings.grdp
--- a/components/browser_ui/strings/android/site_settings.grdp
+++ b/components/browser_ui/strings/android/site_settings.grdp
@@ -76,6 +76,9 @@
<message name="IDS_WEBSITE_SETTINGS_IDLE_DETECTION" desc="Title of the permission to detect user activity [CHAR_LIMIT=32]">
Your device use
</message>
+ @Override
+ public ContentSettingsResources.ResourceItem getResourceItem() {
+ return new ContentSettingsResources.ResourceItem(
+ /*icon*/ R.drawable.web_asset,
+ /*title*/ R.string.images_permission_title,
+ /*defaultEnabledValue*/ getDefaultEnabledValue(),
+ /*defaultDisabledValue*/ getDefaultDisabledValue(),
+ /*enabledSummary*/ R.string.website_settings_category_images_enabled,
+ /*disabledSummary*/ R.string.website_settings_category_images_disabled);
+ }
+
+ @Override
+ public int getCategorySummary(@Nullable @ContentSettingValues int value) {
+ switch (value) {
+ case ContentSettingValues.ALLOW:
+ return R.string.website_settings_category_images_enabled;
+ case ContentSettingValues.BLOCK:
+ return R.string.website_settings_category_images_disabled;
+ default:
+ return 0;
+ }
+ }
+
+ @Override
+ public boolean requiresTriStateContentSetting() {
+ return false;
+ }
+
+ @Override
+ public boolean showOnlyDescriptions() {
+ return true;
+ }
+
+ @Override
+ public int getAddExceptionDialogMessage() {
+ return R.string.website_settings_category_images_enabled;
+ }
+
+ @Override
+ public @Nullable Boolean considerException(SiteSettingsCategory category, @ContentSettingValues int value) {
+ return value != ContentSettingValues.BLOCK;
+ }
+}
diff --git a/components/browser_ui/strings/android/bromite_content_settings/images.grdp b/components/browser_ui/strings/android/bromite_content_settings/images.grdp
new file mode 100644
--- /dev/null
+++ b/components/browser_ui/strings/android/bromite_content_settings/images.grdp
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<grit-part>
+<if expr="is_android">
+ <message name="IDS_SITE_SETTINGS_TYPE_IMAGES" desc="The label used for images site settings controls.">
+ Images
+ </message>
+ <message name="IDS_SITE_SETTINGS_TYPE_IMAGES_MID_SENTENCE" desc="The label used for images site settings controls when used mid-sentence.">
+ images
+ </message>
+</if>
+ <message name="IDS_IMAGES_PERMISSION_TITLE" desc="Title of the permission to show images [CHAR-LIMIT=32]">
+ Images
+ </message>
<message name="IDS_JAVASCRIPT_PERMISSION_TITLE" desc="Title of the permission to run javascript [CHAR_LIMIT=32]">
JavaScript
</message>
@@ -266,6 +269,9 @@
<message name="IDS_WEBSITE_SETTINGS_ADD_SITE_TOAST" desc="The toast shown when a new site has been added to the exception list.">
Site <ph name="SITE_NAME">%1$s<ex>google.com</ex></ph> added
</message>
+ <message name="IDS_WEBSITE_SETTINGS_ADD_SITE_DESCRIPTION_IMAGES" desc="The description for the allow Images on website dialog.">
+ Allow images on websites you specify while blocking them for the rest of the web
+ </message>
<message name="IDS_WEBSITE_SETTINGS_ADD_SITE_SITE_URL" desc="The label for the input field where the user can type a website URL.">
Site URL
</message>
+ <message name="IDS_WEBSITE_SETTINGS_CATEGORY_IMAGES_ENABLED" desc="Summary text explaining that sites are allowed to load images.">
+ Allow sites to load images
+ </message>
+ <message name="IDS_WEBSITE_SETTINGS_CATEGORY_IMAGES_DISABLED" desc="Summary text explaining that sites are not allowed to load images.">
+ Disallow sites to load images
+ </message>
+</grit-part>
diff --git a/components/content_settings/core/browser/content_settings_registry.cc b/components/content_settings/core/browser/content_settings_registry.cc
--- a/components/content_settings/core/browser/content_settings_registry.cc
+++ b/components/content_settings/core/browser/content_settings_registry.cc
@@ -95,7 +95,8 @@ void ContentSettingsRegistry::Init() {
@@ -97,9 +97,13 @@ void ContentSettingsRegistry::Init() {
{kChromeUIScheme, kChromeDevToolsScheme, kExtensionScheme},
/*valid_settings=*/{CONTENT_SETTING_ALLOW, CONTENT_SETTING_BLOCK},
WebsiteSettingsInfo::TOP_ORIGIN_WITH_RESOURCE_EXCEPTIONS_SCOPE,
- WebsiteSettingsRegistry::DESKTOP,
+ WebsiteSettingsRegistry::DESKTOP |
+ WebsiteSettingsRegistry::PLATFORM_ANDROID,
+ WebsiteSettingsRegistry::DESKTOP | WebsiteSettingsRegistry::PLATFORM_ANDROID,
ContentSettingsInfo::INHERIT_IN_INCOGNITO,
ContentSettingsInfo::EXCEPTIONS_ON_SECURE_AND_INSECURE_ORIGINS);
- ContentSettingsInfo::EXCEPTIONS_ON_SECURE_AND_INSECURE_ORIGINS);
+ ContentSettingsInfo::EXCEPTIONS_ON_SECURE_AND_INSECURE_ORIGINS,
+ /*show_into_info_page*/ true,
+ /*is_renderer_content_setting*/ true,
+ /*permission_type_ui*/ IDS_SITE_SETTINGS_TYPE_IMAGES,
+ /*permission_type_ui_mid_sentence*/ IDS_SITE_SETTINGS_TYPE_IMAGES_MID_SENTENCE);
Register(ContentSettingsType::JAVASCRIPT, "javascript", CONTENT_SETTING_ALLOW,
WebsiteSettingsInfo::SYNCABLE,
diff --git a/components/content_settings/core/browser/content_settings_utils.cc b/components/content_settings/core/browser/content_settings_utils.cc
--- a/components/content_settings/core/browser/content_settings_utils.cc
+++ b/components/content_settings/core/browser/content_settings_utils.cc
@@ -134,12 +134,8 @@ void GetRendererContentSettingRules(const HostContentSettingsMap* map,
@@ -146,12 +146,8 @@ void GetRendererContentSettingRules(const HostContentSettingsMap* map,
ContentSettingToValue(CONTENT_SETTING_ALLOW), std::string(),
map->IsOffTheRecord()));
#else
@@ -406,94 +306,5 @@ diff --git a/components/content_settings/core/browser/content_settings_utils.cc
// In Android active mixed content is hard blocked, with no option to allow
// it.
rules->mixed_content_rules.push_back(ContentSettingPatternSource(
diff --git a/components/page_info/android/page_info_controller_android.cc b/components/page_info/android/page_info_controller_android.cc
--- a/components/page_info/android/page_info_controller_android.cc
+++ b/components/page_info/android/page_info_controller_android.cc
@@ -225,6 +225,10 @@ absl::optional<ContentSetting> PageInfoControllerAndroid::GetSettingToDisplay(
// audio since last navigation.
if (web_contents_->WasEverAudible())
return permission.default_setting;
+ } else if (permission.type == ContentSettingsType::IMAGES) {
+ // The images content setting should show up if it is blocked globally
+ // to give users an easy way to create exceptions.
+ return permission.default_setting;
}
// TODO(crbug.com/1077766): Also return permissions that are non
diff --git a/components/page_info/page_info.cc b/components/page_info/page_info.cc
--- a/components/page_info/page_info.cc
+++ b/components/page_info/page_info.cc
@@ -99,9 +99,7 @@ ContentSettingsType kPermissionType[] = {
ContentSettingsType::SENSORS,
ContentSettingsType::NOTIFICATIONS,
ContentSettingsType::JAVASCRIPT,
-#if !BUILDFLAG(IS_ANDROID)
ContentSettingsType::IMAGES,
-#endif
ContentSettingsType::POPUPS,
ContentSettingsType::WINDOW_MANAGEMENT,
ContentSettingsType::ADS,
@@ -157,6 +155,11 @@ bool ShouldShowPermission(const PageInfo::PermissionInfo& info,
return true;
}
+ // Always show images when it has a site-specific override
+ if (info.type == ContentSettingsType::IMAGES) {
+ return true;
+ }
+
if (info.type == ContentSettingsType::SOUND) {
// The sound content setting should always show up when the tab has played
// audio.
diff --git a/components/page_info/page_info_ui.cc b/components/page_info/page_info_ui.cc
--- a/components/page_info/page_info_ui.cc
+++ b/components/page_info/page_info_ui.cc
@@ -201,6 +201,8 @@ base::span<const PageInfoUI::PermissionUIInfo> GetContentSettingsUIInfo() {
IDS_SITE_SETTINGS_TYPE_FEDERATED_IDENTITY_API_MID_SENTENCE},
{ContentSettingsType::IDLE_DETECTION, IDS_SITE_SETTINGS_TYPE_IDLE_DETECTION,
IDS_SITE_SETTINGS_TYPE_IDLE_DETECTION_MID_SENTENCE},
+ {ContentSettingsType::IMAGES, IDS_SITE_SETTINGS_TYPE_IMAGES,
+ IDS_SITE_SETTINGS_TYPE_IMAGES_MID_SENTENCE},
#if !BUILDFLAG(IS_ANDROID)
// Page Info Permissions that are not defined in Android.
{ContentSettingsType::FILE_SYSTEM_WRITE_GUARD,
@@ -210,8 +212,6 @@ base::span<const PageInfoUI::PermissionUIInfo> GetContentSettingsUIInfo() {
IDS_SITE_SETTINGS_TYPE_FONT_ACCESS_MID_SENTENCE},
{ContentSettingsType::HID_GUARD, IDS_SITE_SETTINGS_TYPE_HID_DEVICES,
IDS_SITE_SETTINGS_TYPE_HID_DEVICES_MID_SENTENCE},
- {ContentSettingsType::IMAGES, IDS_SITE_SETTINGS_TYPE_IMAGES,
- IDS_SITE_SETTINGS_TYPE_IMAGES_MID_SENTENCE},
{ContentSettingsType::SERIAL_GUARD, IDS_SITE_SETTINGS_TYPE_SERIAL_PORTS,
IDS_SITE_SETTINGS_TYPE_SERIAL_PORTS_MID_SENTENCE},
{ContentSettingsType::WINDOW_MANAGEMENT,
diff --git a/components/site_settings_strings.grdp b/components/site_settings_strings.grdp
--- a/components/site_settings_strings.grdp
+++ b/components/site_settings_strings.grdp
@@ -163,6 +163,12 @@
<message name="IDS_SITE_SETTINGS_TYPE_VR_MID_SENTENCE" desc="The label used for the VR site settings controls when used mid-sentence.">
virtual reality
</message>
+ <message name="IDS_SITE_SETTINGS_TYPE_IMAGES" desc="The label used for images site settings controls.">
+ Images
+ </message>
+ <message name="IDS_SITE_SETTINGS_TYPE_IMAGES_MID_SENTENCE" desc="The label used for images site settings controls when used mid-sentence.">
+ images
+ </message>
<!-- Site Settings desktop-only -->
<if expr="not is_android">
@@ -190,12 +196,6 @@
<message name="IDS_SITE_SETTINGS_TYPE_HID_DEVICES_MID_SENTENCE" desc="The label used for the HID site settings controls when used mid-sentence.">
HID devices
</message>
- <message name="IDS_SITE_SETTINGS_TYPE_IMAGES" desc="The label used for images site settings controls.">
- Images
- </message>
- <message name="IDS_SITE_SETTINGS_TYPE_IMAGES_MID_SENTENCE" desc="The label used for images site settings controls when used mid-sentence.">
- images
- </message>
<message name="IDS_SITE_SETTINGS_TYPE_INSECURE_CONTENT" desc="The label used for the insecure content site settings controls. This setting controls whether HTTP content will be displayed on HTTPS sites.">
Insecure content
</message>
--
2.25.1
+88 -168
View File
@@ -15,39 +15,39 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
...ezoneoverride_site_settings_preference.xml | 68 ++++++
.../res/xml/site_settings_preferences.xml | 4 +
.../java/res/xml/website_preferences.xml | 10 +
.../ContentSettingsResources.java | 33 +++
.../ContentSettingsResources.java | 28 +++
.../site_settings/SingleCategorySettings.java | 60 +++++-
.../site_settings/SingleWebsiteSettings.java | 8 +-
.../site_settings/SingleWebsiteSettings.java | 2 +
.../site_settings/SiteSettings.java | 2 +-
.../site_settings/SiteSettingsCategory.java | 8 +-
.../site_settings/SiteSettingsCategory.java | 7 +-
.../site_settings/SiteSettingsDelegate.java | 2 +
...imezoneOverrideSiteSettingsPreference.java | 194 ++++++++++++++++++
.../browser_ui/site_settings/Website.java | 11 +
.../WebsitePermissionsFetcher.java | 2 +
.../WebsitePreferenceBridge.java | 12 ++
.../android/website_preference_bridge.cc | 16 ++
.../strings/android/site_settings.grdp | 35 ++++
.../bromite_content_settings/timezone.grdp | 36 ++++
.../browser/content_settings_pref_provider.cc | 16 ++
.../browser/content_settings_pref_provider.h | 4 +
.../core/browser/content_settings_registry.cc | 11 +
.../core/browser/content_settings_utils.cc | 7 +
.../core/browser/content_settings_registry.cc | 13 ++
.../core/browser/content_settings_utils.cc | 5 +
.../core/browser/host_content_settings_map.cc | 8 +
.../core/browser/host_content_settings_map.h | 3 +
.../core/common/content_settings.cc | 4 +-
.../core/common/content_settings.h | 2 +
.../core/common/content_settings.mojom | 2 +
.../common/content_settings_mojom_traits.cc | 4 +-
.../common/content_settings_mojom_traits.h | 10 +
.../core/common/content_settings.h | 1 +
.../core/common/content_settings.mojom | 1 +
.../common/content_settings_mojom_traits.cc | 3 +-
.../common/content_settings_mojom_traits.h | 5 +
.../core/common/content_settings_types.h | 3 +
.../core/common/pref_names.cc | 3 +
.../content_settings/core/common/pref_names.h | 2 +
.../renderer/content_settings_agent_impl.cc | 83 ++++++++
.../renderer/content_settings_agent_impl.cc | 80 ++++++++
.../renderer/content_settings_agent_impl.h | 11 +
.../WebLayerSiteSettingsDelegate.java | 3 +
35 files changed, 687 insertions(+), 9 deletions(-)
34 files changed, 664 insertions(+), 6 deletions(-)
create mode 100755 components/browser_ui/site_settings/android/java/res/layout/time_zone_select_dialog.xml
create mode 100755 components/browser_ui/site_settings/android/java/res/layout/timezoneoverride_site_settings_preference.xml
create mode 100755 components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/TimezoneOverrideSiteSettingsPreference.java
create mode 100644 components/browser_ui/strings/android/bromite_content_settings/timezone.grdp
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/site_settings/ChromeSiteSettingsDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/site_settings/ChromeSiteSettingsDelegate.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/site_settings/ChromeSiteSettingsDelegate.java
@@ -93,7 +93,7 @@ diff --git a/components/browser_ui/site_settings/android/BUILD.gn b/components/b
]
annotation_processor_deps = [ "//base/android/jni_generator:jni_processor" ]
resources_package = "org.chromium.components.browser_ui.site_settings"
@@ -248,6 +249,8 @@ android_resources("java_resources") {
@@ -263,6 +264,8 @@ android_resources("java_resources") {
"java/res/xml/site_settings_preferences.xml",
"java/res/xml/site_settings_preferences_with_categories.xml",
"java/res/xml/website_preferences.xml",
@@ -272,13 +272,12 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c
+ R.string.website_settings_category_timezone_override_custom,
+ R.string.website_settings_category_timezone_override_random);
}
assert false; // NOTREACHED
return null;
@@ -468,6 +474,23 @@ public class ContentSettingsResources {
}
ResourceItem ri = BromiteCustomContentSettingImpl.getResourceItem(contentType);
if (ri != null) return ri;
@@ -471,6 +477,18 @@ public class ContentSettingsResources {
}
+ public static int getCategorySummary(int contentType, @Nullable @ContentSettingValues int value) {
public static int getCategorySummary(int contentType, @Nullable @ContentSettingValues int value) {
+ if (contentType == ContentSettingsType.TIMEZONE_OVERRIDE) {
+ switch (value) {
+ case ContentSettingValues.ALLOW:
@@ -291,14 +290,10 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c
+ return 0;
+ }
+ }
+ else
+ return getCategorySummary(value);
+ }
+
/**
* Returns the string resource id for a content type to show with a permission category.
* @param enabled Whether the content type is enabled.
@@ -485,6 +508,9 @@ public class ContentSettingsResources {
int result = BromiteCustomContentSettingImpl.getCategorySummary(contentType, value);
if (result != 0) return result;
return getCategorySummary(value);
@@ -493,6 +511,9 @@ public class ContentSettingsResources {
*/
public static int getSiteSummary(@ContentSettingValues @Nullable Integer value,
@ContentSettingsType int contentSettingsType) {
@@ -308,7 +303,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c
switch (value) {
case ContentSettingValues.ALLOW:
return contentSettingsType == ContentSettingsType.REQUEST_DESKTOP_SITE
@@ -610,6 +636,13 @@ public class ContentSettingsResources {
@@ -620,6 +641,13 @@ public class ContentSettingsResources {
R.string.website_settings_category_protected_content_blocked};
return descriptionIDs;
}
@@ -352,9 +347,9 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c
// Keys for Allowed/Blocked preference groups/headers.
public static final String ALLOWED_GROUP = "allowed_group";
@@ -306,7 +312,11 @@ public class SingleCategorySettings extends SiteSettingsPreferenceFragment
Integer contentSetting = website.site().getContentSetting(
browserContextHandle, mCategory.getContentSettingsType());
@@ -310,7 +316,11 @@ public class SingleCategorySettings extends SiteSettingsPreferenceFragment
return BromiteCustomContentSettingImpl.isOnBlockList(contentSetting, website, contentSetting);
}
if (contentSetting != null) {
- return ContentSettingValues.BLOCK == contentSetting;
+ if (mCategory.getContentSettingsType() == SiteSettingsCategory.Type.TIMEZONE_OVERRIDE) {
@@ -365,7 +360,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c
}
return false;
}
@@ -487,7 +497,8 @@ public class SingleCategorySettings extends SiteSettingsPreferenceFragment
@@ -492,7 +502,8 @@ public class SingleCategorySettings extends SiteSettingsPreferenceFragment
if (queryHasChanged) getInfoForOrigins();
});
@@ -375,7 +370,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c
MenuItem help = menu.add(
Menu.NONE, R.id.menu_id_site_settings_help, Menu.NONE, R.string.menu_help);
help.setIcon(TraceEventVectorDrawableCompat.create(
@@ -498,7 +509,10 @@ public class SingleCategorySettings extends SiteSettingsPreferenceFragment
@@ -503,7 +514,10 @@ public class SingleCategorySettings extends SiteSettingsPreferenceFragment
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == R.id.menu_id_site_settings_help) {
@@ -387,7 +382,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c
getSiteSettingsDelegate().launchProtectedContentHelpAndFeedbackActivity(
getActivity());
} else {
@@ -600,6 +614,12 @@ public class SingleCategorySettings extends SiteSettingsPreferenceFragment
@@ -610,6 +624,12 @@ public class SingleCategorySettings extends SiteSettingsPreferenceFragment
WebsitePreferenceBridge.setDefaultContentSetting(
browserContextHandle, mCategory.getContentSettingsType(), setting);
getInfoForOrigins();
@@ -400,7 +395,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c
} else if (FOUR_STATE_COOKIE_TOGGLE_KEY.equals(preference.getKey())) {
setCookieSettingsPreference((CookieSettingsState) newValue);
getInfoForOrigins();
@@ -786,6 +806,12 @@ public class SingleCategorySettings extends SiteSettingsPreferenceFragment
@@ -796,6 +816,12 @@ public class SingleCategorySettings extends SiteSettingsPreferenceFragment
? R.string.website_settings_blocked_group_heading_request_desktop_site
: R.string.website_settings_allowed_group_heading_request_desktop_site;
break;
@@ -411,9 +406,9 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c
+ : R.string.website_settings_category_timezone_override_allowed;
+ break;
}
assert resource > 0;
return getString(resource);
@@ -905,6 +931,9 @@ public class SingleCategorySettings extends SiteSettingsPreferenceFragment
if (resource == 0)
resource = BromiteCustomContentSettingImpl.getAddExceptionDialogMessage(mCategory);
@@ -917,6 +943,9 @@ public class SingleCategorySettings extends SiteSettingsPreferenceFragment
case SiteSettingsCategory.Type.THIRD_PARTY_COOKIES:
allowSpecifyingExceptions = getCookieControlsMode() != CookieControlsMode.OFF;
break;
@@ -423,7 +418,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c
default:
break;
}
@@ -1122,6 +1151,9 @@ public class SingleCategorySettings extends SiteSettingsPreferenceFragment
@@ -1138,6 +1167,9 @@ public class SingleCategorySettings extends SiteSettingsPreferenceFragment
PreferenceGroup blockedGroup = screen.findPreference(BLOCKED_GROUP);
PreferenceGroup managedGroup = screen.findPreference(MANAGED_GROUP);
boolean permissionBlockedByOs = mCategory.showPermissionBlockedMessage(getContext());
@@ -433,7 +428,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c
if (mGlobalToggleLayout != GlobalToggleLayout.BINARY_TOGGLE) {
screen.removePreference(binaryToggle);
@@ -1135,11 +1167,18 @@ public class SingleCategorySettings extends SiteSettingsPreferenceFragment
@@ -1151,11 +1183,18 @@ public class SingleCategorySettings extends SiteSettingsPreferenceFragment
if (mGlobalToggleLayout != GlobalToggleLayout.FOUR_STATE_COOKIE_TOGGLE) {
screen.removePreference(fourStateCookieToggle);
}
@@ -452,9 +447,9 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c
configureTriStateToggle(triStateToggle, contentType);
break;
case GlobalToggleLayout.TRI_STATE_COOKIE_TOGGLE:
@@ -1183,6 +1222,12 @@ public class SingleCategorySettings extends SiteSettingsPreferenceFragment
screen.removePreference(antiAbuseThingsToConsiderSectionOne);
@@ -1200,6 +1239,12 @@ public class SingleCategorySettings extends SiteSettingsPreferenceFragment
}
BromiteCustomContentSettingImpl.configureGlobalToggles(mCategory, screen);
+ if (mCategory.getType() == SiteSettingsCategory.Type.TIMEZONE_OVERRIDE) {
+ screen.removePreference(triStateToggle);
@@ -465,8 +460,8 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c
if (permissionBlockedByOs) {
maybeShowOsWarning(screen);
@@ -1338,6 +1383,15 @@ public class SingleCategorySettings extends SiteSettingsPreferenceFragment
triStateToggle.initialize(setting, descriptionIds);
@@ -1355,6 +1400,15 @@ public class SingleCategorySettings extends SiteSettingsPreferenceFragment
triStateToggle.initialize(contentType, setting, descriptionIds);
}
+ private void configureTimeOverrideStateToggle(
@@ -484,7 +479,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c
diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleWebsiteSettings.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleWebsiteSettings.java
--- a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleWebsiteSettings.java
+++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleWebsiteSettings.java
@@ -141,6 +141,8 @@ public class SingleWebsiteSettings extends SiteSettingsPreferenceFragment
@@ -143,6 +143,8 @@ public class SingleWebsiteSettings extends SiteSettingsPreferenceFragment
return "popup_permission_list";
case ContentSettingsType.SOUND:
return "sound_permission_list";
@@ -493,54 +488,22 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c
case ContentSettingsType.AR:
return "ar_permission_list";
case ContentSettingsType.MEDIASTREAM_CAMERA:
@@ -945,11 +947,13 @@ public class SingleWebsiteSettings extends SiteSettingsPreferenceFragment
if (value == null) return;
setUpPreferenceCommon(preference, value);
+ int content_type = getContentSettingsTypeFromPreferenceKey(preference.getKey());
+
ChromeSwitchPreference switchPreference = (ChromeSwitchPreference) preference;
switchPreference.setChecked(value == ContentSettingValues.ALLOW);
switchPreference.setSummary(isEmbargoed
? getString(R.string.automatically_blocked)
- : getString(ContentSettingsResources.getCategorySummary(value)));
+ : getString(ContentSettingsResources.getCategorySummary(content_type, value)));
switchPreference.setOnPreferenceChangeListener(this);
@ContentSettingsType
int contentType = getContentSettingsTypeFromPreferenceKey(preference.getKey());
@@ -1149,7 +1153,7 @@ public class SingleWebsiteSettings extends SiteSettingsPreferenceFragment
}
mSite.setContentSetting(browserContextHandle, type, permission);
- preference.setSummary(getString(ContentSettingsResources.getCategorySummary(permission)));
+ preference.setSummary(getString(ContentSettingsResources.getCategorySummary(type, permission)));
preference.setIcon(getContentSettingsIcon(type, permission));
if (mWebsiteSettingsObserver != null) {
diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettings.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettings.java
--- a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettings.java
+++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettings.java
@@ -131,7 +131,7 @@ public class SiteSettings extends SiteSettingsPreferenceFragment
@@ -132,7 +132,7 @@ public class SiteSettings extends SiteSettingsPreferenceFragment
} else if (Type.AUTO_DARK_WEB_CONTENT == prefCategory) {
p.setSummary(ContentSettingsResources.getAutoDarkWebContentListSummary(checked));
} else if (requiresTriStateSetting) {
- p.setSummary(ContentSettingsResources.getCategorySummary(setting));
+ p.setSummary(ContentSettingsResources.getCategorySummary(contentType, setting));
} else {
p.setSummary(ContentSettingsResources.getCategorySummary(contentType, checked));
p.setSummary(ContentSettingsResources.getCategorySummary(contentType, checked)); //
}
diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettingsCategory.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettingsCategory.java
--- a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettingsCategory.java
+++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettingsCategory.java
@@ -47,6 +47,7 @@ public class SiteSettingsCategory {
Type.PROTECTED_MEDIA, Type.SENSORS, Type.SOUND, Type.USB, Type.VIRTUAL_REALITY,
Type.USE_STORAGE, Type.AUTO_DARK_WEB_CONTENT, Type.REQUEST_DESKTOP_SITE,
Type.FEDERATED_IDENTITY_API, Type.THIRD_PARTY_COOKIES, Type.SITE_DATA, Type.ANTI_ABUSE,
+ Type.TIMEZONE_OVERRIDE,
Type.NUM_ENTRIES})
@Retention(RetentionPolicy.SOURCE)
public @interface Type {
@@ -81,10 +82,11 @@ public class SiteSettingsCategory {
@@ -81,10 +81,11 @@ public class SiteSettingsCategory {
int THIRD_PARTY_COOKIES = 26;
int SITE_DATA = 27;
int ANTI_ABUSE = 28;
@@ -548,12 +511,12 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c
/**
* Number of handled categories used for calculating array sizes.
*/
- int NUM_ENTRIES = 29;
+ int NUM_ENTRIES = 30;
- int NUM_ENTRIES_CHROMIUM = 29;
+ int NUM_ENTRIES_CHROMIUM = 30;
}
private final BrowserContextHandle mBrowserContextHandle;
@@ -213,6 +215,8 @@ public class SiteSettingsCategory {
@@ -216,6 +217,8 @@ public class SiteSettingsCategory {
return ContentSettingsType.USB_GUARD;
case Type.VIRTUAL_REALITY:
return ContentSettingsType.VR;
@@ -562,15 +525,15 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c
case Type.ALL_SITES:
case Type.USE_STORAGE:
return ContentSettingsType.DEFAULT; // Conversion unavailable.
@@ -300,6 +304,8 @@ public class SiteSettingsCategory {
@@ -302,6 +305,8 @@ public class SiteSettingsCategory {
return "site_data";
case Type.THIRD_PARTY_COOKIES:
return "third_party_cookies";
+ case Type.TIMEZONE_OVERRIDE:
+ return "timezone_override";
default:
assert false;
return "";
{
String value = BromiteCustomContentSettingImpl.getPreferenceKey(type);
diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettingsDelegate.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettingsDelegate.java
--- a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettingsDelegate.java
+++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettingsDelegate.java
@@ -801,8 +764,8 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c
+ setContentSettingException(type, exception);
+ }
}
// We want to call setContentSetting even after explicitly setting
// mContentSettingException above because this will trigger the actual change
if (exception == null) {
diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/WebsitePermissionsFetcher.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/WebsitePermissionsFetcher.java
--- a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/WebsitePermissionsFetcher.java
+++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/WebsitePermissionsFetcher.java
@@ -825,16 +788,16 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c
diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/WebsitePreferenceBridge.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/WebsitePreferenceBridge.java
--- a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/WebsitePreferenceBridge.java
+++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/WebsitePreferenceBridge.java
@@ -243,6 +243,8 @@ public class WebsitePreferenceBridge {
@@ -245,6 +245,8 @@ public class WebsitePreferenceBridge {
switch (contentSettingsType) {
case ContentSettingsType.PROTECTED_MEDIA_IDENTIFIER:
return true;
+ case ContentSettingsType.TIMEZONE_OVERRIDE:
+ return true;
default:
return false;
return BromiteCustomContentSettingImpl.requiresTriStateContentSetting(contentSettingsType);
}
@@ -383,6 +385,14 @@ public class WebsitePreferenceBridge {
@@ -384,6 +386,14 @@ public class WebsitePreferenceBridge {
return WebsitePreferenceBridgeJni.get().toHostOnlyPattern(pattern);
}
@@ -849,7 +812,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c
@NativeMethods
public interface Natives {
boolean isNotificationEmbargoedForOrigin(
@@ -447,5 +457,7 @@ public class WebsitePreferenceBridge {
@@ -448,5 +458,7 @@ public class WebsitePreferenceBridge {
boolean getLocationAllowedByPolicy(BrowserContextHandle browserContextHandle);
String toDomainWildcardPattern(String pattern);
String toHostOnlyPattern(String pattern);
@@ -860,7 +823,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c
diff --git a/components/browser_ui/site_settings/android/website_preference_bridge.cc b/components/browser_ui/site_settings/android/website_preference_bridge.cc
--- a/components/browser_ui/site_settings/android/website_preference_bridge.cc
+++ b/components/browser_ui/site_settings/android/website_preference_bridge.cc
@@ -1018,3 +1018,19 @@ JNI_WebsitePreferenceBridge_ToHostOnlyPattern(
@@ -1019,3 +1019,19 @@ JNI_WebsitePreferenceBridge_ToHostOnlyPattern(
ContentSettingsPattern::FromString(pattern_string));
return ConvertUTF8ToJavaString(env, host_only_pattern.ToString());
}
@@ -880,24 +843,13 @@ diff --git a/components/browser_ui/site_settings/android/website_preference_brid
+ GetHostContentSettingsMap(jbrowser_context_handle)->GetTimezoneOverrideValue(custom_timezone);
+ return ConvertUTF8ToJavaString(env, custom_timezone);
+}
diff --git a/components/browser_ui/strings/android/site_settings.grdp b/components/browser_ui/strings/android/site_settings.grdp
--- a/components/browser_ui/strings/android/site_settings.grdp
+++ b/components/browser_ui/strings/android/site_settings.grdp
@@ -109,6 +109,9 @@
<message name="IDS_AUTO_DARK_WEB_CONTENT_TITLE" desc="Title of the permission auto darken web content [CHAR_LIMIT=32]">
Dark theme for sites
</message>
+ <message name="IDS_TIMEZONE_OVERRIDE_PERMISSION_TITLE" desc="Title of the permission to use TimeZone Override [CHAR-LIMIT=32]">
+ Timezone override
+ </message>
<message name="IDS_DESKTOP_SITE_TITLE" desc="Title of the permission to request the desktop view of a site by default [CHAR_LIMIT=32]">
Desktop site
</message>
@@ -742,6 +745,38 @@
Block sites from playing protected content
</message>
+ <!-- Timezone override -->
diff --git a/components/browser_ui/strings/android/bromite_content_settings/timezone.grdp b/components/browser_ui/strings/android/bromite_content_settings/timezone.grdp
new file mode 100644
--- /dev/null
+++ b/components/browser_ui/strings/android/bromite_content_settings/timezone.grdp
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="utf-8"?>
+<grit-part>
+ <message name="IDS_WEBSITE_SETTINGS_TIMEOVERRIDE_INFO" desc="Primary text explaining the timezone override feature.">
+ Override timezone with a custom or random one, or use the system timezone
+ </message>
@@ -928,10 +880,10 @@ diff --git a/components/browser_ui/strings/android/site_settings.grdp b/componen
+ <message name="IDS_WEBSITE_SETTINGS_SELECT_DIALOG_BUTTON" desc="Primary button text in the dialog used to choose the custom timezone.">
+ Select
+ </message>
+
<!-- Sound -->
<message name="IDS_WEBSITE_SETTINGS_CATEGORY_SOUND_ALLOWED" desc="Summary text explaining that sites are allowed to play sound and that it is the recommended setting.">
+ <message name="IDS_TIMEZONE_OVERRIDE_PERMISSION_TITLE" desc="Title of the permission to use TimeZone Override [CHAR-LIMIT=32]">
+ Timezone override
+ </message>
+</grit-part>
diff --git a/components/content_settings/core/browser/content_settings_pref_provider.cc b/components/content_settings/core/browser/content_settings_pref_provider.cc
--- a/components/content_settings/core/browser/content_settings_pref_provider.cc
+++ b/components/content_settings/core/browser/content_settings_pref_provider.cc
@@ -944,7 +896,7 @@ diff --git a/components/content_settings/core/browser/content_settings_pref_prov
// Obsolete prefs ----------------------------------------------------------
// These prefs have been removed, but need to be registered so they can
@@ -165,6 +167,10 @@ PrefProvider::PrefProvider(PrefService* prefs,
@@ -171,6 +173,10 @@ PrefProvider::PrefProvider(PrefService* prefs,
event_args->set_number_of_exceptions(
num_exceptions); // PrefProvider::PrefProvider.
});
@@ -955,7 +907,7 @@ diff --git a/components/content_settings/core/browser/content_settings_pref_prov
}
PrefProvider::~PrefProvider() {
@@ -351,4 +357,14 @@ void PrefProvider::SetClockForTesting(base::Clock* clock) {
@@ -357,4 +363,14 @@ void PrefProvider::SetClockForTesting(base::Clock* clock) {
clock_ = clock;
}
@@ -973,7 +925,7 @@ diff --git a/components/content_settings/core/browser/content_settings_pref_prov
diff --git a/components/content_settings/core/browser/content_settings_pref_provider.h b/components/content_settings/core/browser/content_settings_pref_provider.h
--- a/components/content_settings/core/browser/content_settings_pref_provider.h
+++ b/components/content_settings/core/browser/content_settings_pref_provider.h
@@ -68,6 +68,9 @@ class PrefProvider : public UserModifiableProvider {
@@ -69,6 +69,9 @@ class PrefProvider : public UserModifiableProvider {
ContentSettingsPref* GetPref(ContentSettingsType type) const;
@@ -983,7 +935,7 @@ diff --git a/components/content_settings/core/browser/content_settings_pref_prov
private:
friend class DeadlockCheckerObserver; // For testing.
@@ -104,6 +107,7 @@ class PrefProvider : public UserModifiableProvider {
@@ -106,6 +109,7 @@ class PrefProvider : public UserModifiableProvider {
base::ThreadChecker thread_checker_;
raw_ptr<base::Clock> clock_;
@@ -994,7 +946,7 @@ diff --git a/components/content_settings/core/browser/content_settings_pref_prov
diff --git a/components/content_settings/core/browser/content_settings_registry.cc b/components/content_settings/core/browser/content_settings_registry.cc
--- a/components/content_settings/core/browser/content_settings_registry.cc
+++ b/components/content_settings/core/browser/content_settings_registry.cc
@@ -555,6 +555,17 @@ void ContentSettingsRegistry::Init() {
@@ -557,6 +557,19 @@ void ContentSettingsRegistry::Init() {
ContentSettingsInfo::INHERIT_IN_INCOGNITO,
ContentSettingsInfo::EXCEPTIONS_ON_SECURE_AND_INSECURE_ORIGINS);
@@ -1007,7 +959,9 @@ diff --git a/components/content_settings/core/browser/content_settings_registry.
+ WebsiteSettingsInfo::TOP_ORIGIN_ONLY_SCOPE,
+ WebsiteSettingsRegistry::PLATFORM_ANDROID,
+ ContentSettingsInfo::INHERIT_IN_INCOGNITO,
+ ContentSettingsInfo::EXCEPTIONS_ON_SECURE_AND_INSECURE_ORIGINS);
+ ContentSettingsInfo::EXCEPTIONS_ON_SECURE_AND_INSECURE_ORIGINS,
+ /*show_into_info_page*/ false,
+ /*is_renderer_content_setting*/ true);
+
Register(ContentSettingsType::FEDERATED_IDENTITY_API, "webid-api",
CONTENT_SETTING_ALLOW, WebsiteSettingsInfo::UNSYNCABLE,
@@ -1015,14 +969,12 @@ diff --git a/components/content_settings/core/browser/content_settings_registry.
diff --git a/components/content_settings/core/browser/content_settings_utils.cc b/components/content_settings/core/browser/content_settings_utils.cc
--- a/components/content_settings/core/browser/content_settings_utils.cc
+++ b/components/content_settings/core/browser/content_settings_utils.cc
@@ -153,6 +153,13 @@ void GetRendererContentSettingRules(const HostContentSettingsMap* map,
@@ -165,6 +165,11 @@ void GetRendererContentSettingRules(const HostContentSettingsMap* map,
&(rules->script_rules));
map->GetSettingsForOneType(ContentSettingsType::POPUPS,
&(rules->popup_redirect_rules));
+
+ // pass custom timezone rules and value to the render process
+ map->GetSettingsForOneType(ContentSettingsType::TIMEZONE_OVERRIDE,
+ &(rules->timezone_override_rules));
+ // pass custom timezone value to the render process
+ std::string timezone;
+ map->GetTimezoneOverrideValue(timezone);
+ rules->timezone_override_value = timezone;
@@ -1032,7 +984,7 @@ diff --git a/components/content_settings/core/browser/content_settings_utils.cc
diff --git a/components/content_settings/core/browser/host_content_settings_map.cc b/components/content_settings/core/browser/host_content_settings_map.cc
--- a/components/content_settings/core/browser/host_content_settings_map.cc
+++ b/components/content_settings/core/browser/host_content_settings_map.cc
@@ -611,6 +611,14 @@ void HostContentSettingsMap::SetClockForTesting(base::Clock* clock) {
@@ -613,6 +613,14 @@ void HostContentSettingsMap::SetClockForTesting(base::Clock* clock) {
provider->SetClockForTesting(clock);
}
@@ -1050,7 +1002,7 @@ diff --git a/components/content_settings/core/browser/host_content_settings_map.
diff --git a/components/content_settings/core/browser/host_content_settings_map.h b/components/content_settings/core/browser/host_content_settings_map.h
--- a/components/content_settings/core/browser/host_content_settings_map.h
+++ b/components/content_settings/core/browser/host_content_settings_map.h
@@ -334,6 +334,9 @@ class HostContentSettingsMap : public content_settings::Observer,
@@ -335,6 +335,9 @@ class HostContentSettingsMap : public content_settings::Observer,
allow_invalid_secondary_pattern_for_testing_ = allow;
}
@@ -1060,35 +1012,13 @@ diff --git a/components/content_settings/core/browser/host_content_settings_map.
private:
friend class base::RefCountedThreadSafe<HostContentSettingsMap>;
friend class content_settings::TestUtils;
diff --git a/components/content_settings/core/common/content_settings.cc b/components/content_settings/core/common/content_settings.cc
--- a/components/content_settings/core/common/content_settings.cc
+++ b/components/content_settings/core/common/content_settings.cc
@@ -216,7 +216,8 @@ bool RendererContentSettingRules::IsRendererContentSetting(
content_type == ContentSettingsType::JAVASCRIPT ||
content_type == ContentSettingsType::POPUPS ||
content_type == ContentSettingsType::MIXEDSCRIPT ||
- content_type == ContentSettingsType::AUTO_DARK_WEB_CONTENT;
+ content_type == ContentSettingsType::AUTO_DARK_WEB_CONTENT ||
+ content_type == ContentSettingsType::TIMEZONE_OVERRIDE;
}
void RendererContentSettingRules::FilterRulesByOutermostMainFrameURL(
@@ -226,6 +227,7 @@ void RendererContentSettingRules::FilterRulesByOutermostMainFrameURL(
FilterRulesForType(popup_redirect_rules, outermost_main_frame_url);
FilterRulesForType(mixed_content_rules, outermost_main_frame_url);
FilterRulesForType(auto_dark_content_rules, outermost_main_frame_url);
+ FilterRulesForType(timezone_override_rules, outermost_main_frame_url);
}
RendererContentSettingRules::RendererContentSettingRules() = default;
diff --git a/components/content_settings/core/common/content_settings.h b/components/content_settings/core/common/content_settings.h
--- a/components/content_settings/core/common/content_settings.h
+++ b/components/content_settings/core/common/content_settings.h
@@ -93,6 +93,8 @@ struct RendererContentSettingRules {
@@ -103,6 +103,7 @@ struct RendererContentSettingRules {
ContentSettingsForOneType popup_redirect_rules;
ContentSettingsForOneType mixed_content_rules;
ContentSettingsForOneType auto_dark_content_rules;
+ ContentSettingsForOneType timezone_override_rules;
+ std::string timezone_override_value;
};
@@ -1096,23 +1026,21 @@ diff --git a/components/content_settings/core/common/content_settings.h b/compon
diff --git a/components/content_settings/core/common/content_settings.mojom b/components/content_settings/core/common/content_settings.mojom
--- a/components/content_settings/core/common/content_settings.mojom
+++ b/components/content_settings/core/common/content_settings.mojom
@@ -78,4 +78,6 @@ struct RendererContentSettingRules {
@@ -84,4 +84,5 @@ struct RendererContentSettingRules {
array<ContentSettingPatternSource> popup_redirect_rules;
array<ContentSettingPatternSource> mixed_content_rules;
array<ContentSettingPatternSource> auto_dark_content_rules;
+ array<ContentSettingPatternSource> timezone_override_rules;
+ string timezone_override_value;
};
diff --git a/components/content_settings/core/common/content_settings_mojom_traits.cc b/components/content_settings/core/common/content_settings_mojom_traits.cc
--- a/components/content_settings/core/common/content_settings_mojom_traits.cc
+++ b/components/content_settings/core/common/content_settings_mojom_traits.cc
@@ -102,7 +102,9 @@ bool StructTraits<content_settings::mojom::RendererContentSettingRulesDataView,
@@ -112,7 +112,8 @@ bool StructTraits<content_settings::mojom::RendererContentSettingRulesDataView,
data.ReadScriptRules(&out->script_rules) &&
data.ReadPopupRedirectRules(&out->popup_redirect_rules) &&
data.ReadMixedContentRules(&out->mixed_content_rules) &&
- data.ReadAutoDarkContentRules(&out->auto_dark_content_rules);
+ data.ReadAutoDarkContentRules(&out->auto_dark_content_rules) &&
+ data.ReadTimezoneOverrideRules(&out->timezone_override_rules) &&
+ data.ReadTimezoneOverrideValue(&out->timezone_override_value);
}
@@ -1120,15 +1048,10 @@ diff --git a/components/content_settings/core/common/content_settings_mojom_trai
diff --git a/components/content_settings/core/common/content_settings_mojom_traits.h b/components/content_settings/core/common/content_settings_mojom_traits.h
--- a/components/content_settings/core/common/content_settings_mojom_traits.h
+++ b/components/content_settings/core/common/content_settings_mojom_traits.h
@@ -150,6 +150,16 @@ struct StructTraits<
@@ -174,6 +174,11 @@ struct StructTraits<
return r.auto_dark_content_rules;
}
+ static const std::vector<ContentSettingPatternSource>& timezone_override_rules(
+ const RendererContentSettingRules& r) {
+ return r.timezone_override_rules;
+ }
+
+ static const std::string& timezone_override_value(
+ const RendererContentSettingRules& r) {
+ return r.timezone_override_value;
@@ -1187,7 +1110,7 @@ diff --git a/components/content_settings/renderer/content_settings_agent_impl.cc
#include "components/content_settings/core/common/content_settings.h"
#include "components/content_settings/core/common/content_settings.mojom.h"
#include "components/content_settings/core/common/content_settings_pattern.h"
@@ -321,6 +323,10 @@ bool ContentSettingsAgentImpl::AllowScript(bool enabled_per_settings) {
@@ -354,6 +356,10 @@ bool ContentSettingsAgentImpl::AllowScript(bool enabled_per_settings) {
allow = allow || IsAllowlistedForContentSettings();
cached_script_permissions_[frame] = allow;
@@ -1198,7 +1121,7 @@ diff --git a/components/content_settings/renderer/content_settings_agent_impl.cc
return allow;
}
@@ -457,4 +463,81 @@ bool ContentSettingsAgentImpl::IsAllowlistedForContentSettings() const {
@@ -490,4 +496,78 @@ bool ContentSettingsAgentImpl::IsAllowlistedForContentSettings() const {
return false;
}
@@ -1207,11 +1130,8 @@ diff --git a/components/content_settings/renderer/content_settings_agent_impl.cc
+ ContentSetting setting = CONTENT_SETTING_ALLOW;
+
+ if (content_setting_rules_) {
+ blink::WebLocalFrame* frame = render_frame()->GetWebFrame();
+
+ setting = GetContentSettingFromRules(
+ content_setting_rules_->timezone_override_rules,
+ url::Origin(frame->GetDocument().GetSecurityOrigin()).GetURL());
+ setting = GetContentSetting(
+ ContentSettingsType::TIMEZONE_OVERRIDE, setting);
+ }
+ return UpdateTimeZoneOverride(
+ setting, content_setting_rules_->timezone_override_value);
@@ -1295,7 +1215,7 @@ diff --git a/components/content_settings/renderer/content_settings_agent_impl.h
namespace blink {
class WebFrame;
class WebURL;
@@ -167,6 +172,12 @@ class ContentSettingsAgentImpl
@@ -172,6 +177,12 @@ class ContentSettingsAgentImpl
std::unique_ptr<Delegate> delegate_;
mojo::AssociatedReceiverSet<mojom::ContentSettingsAgent> receivers_;