final version

This commit is contained in:
Carmelo Messina
2022-08-26 16:23:53 +02:00
parent b62f37b0f7
commit 04004176d5
+78 -10
View File
@@ -2,6 +2,10 @@ From: uazo <uazo@users.noreply.github.com>
Date: Thu, 30 Jun 2022 12:47:17 +0000
Subject: Viewport Protection
Scale the viewport by a random factor to prevent coordinate-based fingerprinting scripts.
The factor is changed at each change of origin.
It acts on the javascript api to prevent the possibility of value recovery.
The feature is controlled by a site setting (default disabled)
---
.../browser_ui/site_settings/android/BUILD.gn | 3 +
.../BromiteCustomContentSettingImpl.java | 1 +
@@ -21,18 +25,19 @@ Subject: Viewport Protection
.../renderer/content_settings_agent_impl.cc | 9 ++
.../renderer/content_settings_agent_impl.h | 1 +
.../platform/web_content_settings_client.h | 2 +
.../blink/renderer/core/css/media_values.cc | 10 +++
.../blink/renderer/core/css/media_values.cc | 22 ++++-
.../core/frame/dom_visual_viewport.cc | 4 +-
.../renderer/core/frame/local_dom_window.cc | 6 ++
.../renderer/core/frame/local_frame_view.cc | 3 +
.../blink/renderer/core/frame/screen.cc | 17 +++-
.../renderer/core/frame/visual_viewport.cc | 4 +
.../renderer/core/frame/visual_viewport.h | 5 ++
.../renderer/core/html/html_meta_element.cc | 28 +++++-
.../renderer/core/loader/frame_loader.cc | 7 +-
.../renderer/core/loader/frame_loader.cc | 15 +++-
third_party/blink/renderer/core/page/page.cc | 8 ++
third_party/blink/renderer/core/page/page.h | 3 +
.../screen_enumeration/screen_detailed.cc | 15 ++++
29 files changed, 250 insertions(+), 13 deletions(-)
30 files changed, 275 insertions(+), 14 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
@@ -341,7 +346,7 @@ diff --git a/components/content_settings/core/common/content_settings_types.h b/
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
@@ -473,6 +473,15 @@ bool ContentSettingsAgentImpl::AllowWebRTC(bool enabled_per_settings) {
@@ -467,6 +467,15 @@ bool ContentSettingsAgentImpl::AllowWebRTC(bool enabled_per_settings) {
url::Origin(frame->GetDocument().GetSecurityOrigin()).GetURL());
}
@@ -360,7 +365,7 @@ diff --git a/components/content_settings/renderer/content_settings_agent_impl.cc
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
@@ -101,6 +101,7 @@ class ContentSettingsAgentImpl
bool ShouldAutoupgradeMixedContent() override;
bool AllowWebgl(bool enabled_per_settings) override;
bool AllowWebRTC(bool enabled_per_settings) override;
@@ -383,7 +388,32 @@ diff --git a/third_party/blink/public/platform/web_content_settings_client.h b/t
diff --git a/third_party/blink/renderer/core/css/media_values.cc b/third_party/blink/renderer/core/css/media_values.cc
--- a/third_party/blink/renderer/core/css/media_values.cc
+++ b/third_party/blink/renderer/core/css/media_values.cc
@@ -193,6 +193,11 @@ int MediaValues::CalculateDeviceWidth(LocalFrame* frame) {
@@ -132,13 +132,23 @@ double MediaValues::CalculateViewportWidth(LocalFrame* frame) {
DCHECK(frame);
DCHECK(frame->View());
DCHECK(frame->GetDocument());
- return frame->View()->ViewportSizeForMediaQueries().width();
+ float width_override = frame->GetPage()->PageWidthOverride();
+ double width = frame->View()->ViewportSizeForMediaQueries().width();
+ if (width_override) {
+ width = width * (1.0 - (width_override / 100.0));
+ }
+ return width;
}
double MediaValues::CalculateViewportHeight(LocalFrame* frame) {
DCHECK(frame);
DCHECK(frame->View());
DCHECK(frame->GetDocument());
+ float width_override = frame->GetPage()->PageWidthOverride();
+ double height = frame->View()->ViewportSizeForMediaQueries().height();
+ if (width_override) {
+ height = height * (1.0 - (width_override / 100.0));
+ }
return frame->View()->ViewportSizeForMediaQueries().height();
}
@@ -193,6 +203,11 @@ int MediaValues::CalculateDeviceWidth(LocalFrame* frame) {
device_width = static_cast<int>(
lroundf(device_width * screen_info.device_scale_factor));
}
@@ -395,7 +425,7 @@ diff --git a/third_party/blink/renderer/core/css/media_values.cc b/third_party/b
return device_width;
}
@@ -205,6 +210,11 @@ int MediaValues::CalculateDeviceHeight(LocalFrame* frame) {
@@ -205,6 +220,11 @@ int MediaValues::CalculateDeviceHeight(LocalFrame* frame) {
device_height = static_cast<int>(
lroundf(device_height * screen_info.device_scale_factor));
}
@@ -422,6 +452,29 @@ diff --git a/third_party/blink/renderer/core/frame/dom_visual_viewport.cc b/thir
return 0;
}
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
@@ -1400,6 +1400,9 @@ int LocalDOMWindow::outerHeight() const {
if (!page)
return 0;
+ float width_override = page->PageWidthOverride();
+ if (width_override) return innerHeight();
+
ChromeClient& chrome_client = page->GetChromeClient();
if (page->GetSettings().GetReportScreenSizeInPhysicalPixelsQuirk()) {
return static_cast<int>(
@@ -1425,6 +1428,9 @@ int LocalDOMWindow::outerWidth() const {
if (!page)
return 0;
+ float width_override = page->PageWidthOverride();
+ if (width_override) return innerWidth();
+
ChromeClient& chrome_client = page->GetChromeClient();
if (page->GetSettings().GetReportScreenSizeInPhysicalPixelsQuirk()) {
return static_cast<int>(
diff --git a/third_party/blink/renderer/core/frame/local_frame_view.cc b/third_party/blink/renderer/core/frame/local_frame_view.cc
--- a/third_party/blink/renderer/core/frame/local_frame_view.cc
+++ b/third_party/blink/renderer/core/frame/local_frame_view.cc
@@ -565,7 +618,7 @@ diff --git a/third_party/blink/renderer/core/html/html_meta_element.cc b/third_p
+
+ if (settings->AllowViewportChange(false)) {
+ if (page->PageWidthOverride() == 0) {
+ page->SetPageWidthOverride(base::RandInt(-5, 15));
+ page->SetPageWidthOverride(base::RandInt(-30, 150) / 100.0);
+ }
+
+ float device_width = 1.0 + (page->PageWidthOverride() / 100.0);
@@ -596,7 +649,7 @@ diff --git a/third_party/blink/renderer/core/html/html_meta_element.cc b/third_p
diff --git a/third_party/blink/renderer/core/loader/frame_loader.cc b/third_party/blink/renderer/core/loader/frame_loader.cc
--- a/third_party/blink/renderer/core/loader/frame_loader.cc
+++ b/third_party/blink/renderer/core/loader/frame_loader.cc
@@ -371,8 +371,11 @@ void FrameLoader::SaveScrollState() {
@@ -371,8 +371,13 @@ void FrameLoader::SaveScrollState() {
history_item->SetVisualViewportScrollOffset(
frame_->GetPage()->GetVisualViewport().VisibleRect().OffsetFromOrigin());
@@ -604,12 +657,27 @@ diff --git a/third_party/blink/renderer/core/loader/frame_loader.cc b/third_part
- history_item->SetPageScaleFactor(frame_->GetPage()->PageScaleFactor());
+ if (frame_->IsMainFrame()) {
+ int page_width_override = frame_->GetPage()->PageWidthOverride();
+ if (page_width_override == 0)
+ if (page_width_override == 0) {
+ // set the scale factor only if the feature is not active
+ history_item->SetPageScaleFactor(frame_->GetPage()->PageScaleFactor());
+ }
+ }
Client()->DidUpdateCurrentHistoryItem();
}
@@ -1326,6 +1331,12 @@ void FrameLoader::RestoreScrollPositionAndViewState() {
!GetDocumentLoader()->NavigationScrollAllowed()) {
return;
}
+ int page_width_override = frame_->GetPage()->PageWidthOverride();
+ if (page_width_override != 0) {
+ // we need to reset the page scale because, if the user activates
+ // the feature, it could be non-zero from the previous navigation
+ GetDocumentLoader()->GetHistoryItem()->SetPageScaleFactor(0);
+ }
RestoreScrollPositionAndViewState(
GetDocumentLoader()->LoadType(),
*GetDocumentLoader()->GetHistoryItem()->GetViewState(),
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