Commit 88f23962 authored by Robbie Gibson's avatar Robbie Gibson Committed by Commit Bot

Add alternative method for zooming webpages

Currently, text zoom doesn't work on iPad. This experimental method
should work there.

Bug: 1061119
Change-Id: Iaad93125be9752b5d70385be39ed6414a566228b
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2424142
Commit-Queue: Robbie Gibson <rkgibson@google.com>
Reviewed-by: default avatarRohit Rao <rohitrao@chromium.org>
Cr-Commit-Position: refs/heads/master@{#811230}
parent 90193e00
......@@ -4619,14 +4619,19 @@
"owners": [ "mhochk@microsoft.com", "ericwilligers@google.com" ],
"expiry_milestone": 89
},
{
"name": "webpage-alternative-text-zoom",
"owners": [ "rkgibson@google.com", "bling-flags@google.com" ],
"expiry_milestone": 86
},
{
"name": "webpage-default-zoom-from-dynamic-type",
"owners": [ "rkgibson", "bling-flags" ],
"owners": [ "rkgibson@google.com", "bling-flags@google.com" ],
"expiry_milestone": 87
},
{
"name": "webpage-text-accessibility",
"owners": [ "rkgibson", "bling-flags" ],
"owners": [ "rkgibson@google.com", "bling-flags@google.com" ],
"expiry_milestone": 86
},
{
......
......@@ -365,6 +365,10 @@ const flags_ui::FeatureEntry kFeatureEntries[] = {
flag_descriptions::kWebPageTextAccessibilityName,
flag_descriptions::kWebPageTextAccessibilityDescription, flags_ui::kOsIos,
FEATURE_VALUE_TYPE(web::kWebPageTextAccessibility)},
{"webpage-alternative-text-zoom",
flag_descriptions::kWebPageAlternativeTextZoomName,
flag_descriptions::kWebPageAlternativeTextZoomDescription,
flags_ui::kOsIos, FEATURE_VALUE_TYPE(web::kWebPageAlternativeTextZoom)},
{"toolbar-container", flag_descriptions::kToolbarContainerName,
flag_descriptions::kToolbarContainerDescription, flags_ui::kOsIos,
FEATURE_VALUE_TYPE(toolbar_container::kToolbarContainerEnabled)},
......
......@@ -510,6 +510,11 @@ const char kWebPageTextAccessibilityDescription[] =
"When enabled, text in web pages will respect the user's Dynamic Type "
"setting.";
const char kWebPageAlternativeTextZoomName[] =
"Use different method for zooming web pages";
const char kWebPageAlternativeTextZoomDescription[] =
"When enabled, switches the method used to zoom web pages.";
const char kWellKnownChangePasswordName[] =
"Support for .well-known/change-password";
const char kWellKnownChangePasswordDescription[] =
......
......@@ -453,6 +453,11 @@ extern const char kWebPageDefaultZoomFromDynamicTypeDescription[];
extern const char kWebPageTextAccessibilityName[];
extern const char kWebPageTextAccessibilityDescription[];
// Title and description for the flag to enable a different method of zooming
// web pages.
extern const char kWebPageAlternativeTextZoomName[];
extern const char kWebPageAlternativeTextZoomDescription[];
extern const char kWellKnownChangePasswordName[];
extern const char kWellKnownChangePasswordDescription[];
......
......@@ -57,6 +57,7 @@ source_set("web") {
"//ios/components/ui_util",
"//ios/components/webui:url_constants",
"//ios/net",
"//ios/public/provider/chrome/browser:browser",
"//ios/web",
"//ios/web/common",
"//ios/web/public/js_messaging",
......
......@@ -12,6 +12,9 @@ const base::Feature kWebPageTextAccessibility{"WebPageTextAccessibility",
const base::Feature kWebPageDefaultZoomFromDynamicType{
"WebPageDefaultZoomFromDynamicType", base::FEATURE_DISABLED_BY_DEFAULT};
const base::Feature kWebPageAlternativeTextZoom{
"WebPageAlternativeTextZoom", base::FEATURE_DISABLED_BY_DEFAULT};
const base::Feature kMobileGoogleSRP{"MobileGoogleSRP",
base::FEATURE_DISABLED_BY_DEFAULT};
......
......@@ -17,6 +17,9 @@ extern const base::Feature kWebPageTextAccessibility;
// dynamic type setting.
extern const base::Feature kWebPageDefaultZoomFromDynamicType;
// Used to enable a different method of zooming web pages.
extern const base::Feature kWebPageAlternativeTextZoom;
// Feature flag to keep the mobile version for Google SRP. Should be used when
// the desktop version is requested by default.
extern const base::Feature kMobileGoogleSRP;
......
......@@ -22,6 +22,8 @@
#include "ios/chrome/browser/pref_names.h"
#include "ios/chrome/browser/web/features.h"
#include "ios/components/ui_util/dynamic_type_util.h"
#include "ios/public/provider/chrome/browser/chrome_browser_provider.h"
#import "ios/public/provider/chrome/browser/text_zoom_provider.h"
#include "ios/web/public/js_messaging/web_frame.h"
#include "ios/web/public/js_messaging/web_frame_util.h"
#include "ios/web/public/js_messaging/web_frames_manager.h"
......@@ -138,12 +140,9 @@ void FontSizeTabHelper::SetPageFontSize(int size) {
return;
}
tab_helper_has_zoomed_ = true;
std::vector<base::Value> parameters;
parameters.push_back(base::Value(size));
for (web::WebFrame* frame :
web_state_->GetWebFramesManager()->GetAllWebFrames()) {
frame->CallJavaScriptFunction("accessibility.adjustFontSize", parameters);
}
ios::GetChromeBrowserProvider()->GetTextZoomProvider()->SetPageFontSize(
web_state_, size);
}
void FontSizeTabHelper::UserZoom(Zoom zoom) {
......
......@@ -15,12 +15,15 @@ source_set("browser") {
"geolocation_updater_provider.mm",
"overrides_provider.h",
"overrides_provider.mm",
"text_zoom_provider.h",
"text_zoom_provider.mm",
]
deps = [
"//base",
"//components/metrics",
"//ios/public/provider/chrome/browser/mailto",
"//ios/web/public",
"//ios/web/public/js_messaging",
"//url",
]
frameworks = [ "CoreLocation.framework" ]
......
......@@ -26,6 +26,7 @@ class MailtoHandlerProvider;
class OmahaServiceProvider;
class OverridesProvider;
class SpotlightProvider;
class TextZoomProvider;
class UserFeedbackProvider;
class VoiceSearchProvider;
......@@ -180,6 +181,8 @@ class ChromeBrowserProvider {
// Returns an instance of the DiscoverFeed provider;
virtual DiscoverFeedProvider* GetDiscoverFeedProvider() const;
virtual TextZoomProvider* GetTextZoomProvider() const;
// Adds and removes observers.
void AddObserver(Observer* observer);
void RemoveObserver(Observer* observer);
......@@ -191,6 +194,7 @@ class ChromeBrowserProvider {
private:
base::ObserverList<Observer, true>::Unchecked observer_list_;
std::unique_ptr<MailtoHandlerProvider> mailto_handler_provider_;
std::unique_ptr<TextZoomProvider> text_zoom_provider_;
};
} // namespace ios
......
......@@ -8,6 +8,7 @@
#include "components/metrics/metrics_provider.h"
#import "ios/public/provider/chrome/browser/mailto/mailto_handler_provider.h"
#import "ios/public/provider/chrome/browser/text_zoom_provider.h"
#if !defined(__has_feature) || !__has_feature(objc_arc)
#error "This file requires ARC support."
......@@ -30,7 +31,8 @@ ChromeBrowserProvider* GetChromeBrowserProvider() {
// A dummy implementation of ChromeBrowserProvider.
ChromeBrowserProvider::ChromeBrowserProvider()
: mailto_handler_provider_(std::make_unique<MailtoHandlerProvider>()) {}
: mailto_handler_provider_(std::make_unique<MailtoHandlerProvider>()),
text_zoom_provider_(std::make_unique<TextZoomProvider>()) {}
ChromeBrowserProvider::~ChromeBrowserProvider() {
for (auto& observer : observer_list_)
......@@ -149,6 +151,10 @@ BrandedImageProvider* ChromeBrowserProvider::GetBrandedImageProvider() const {
return nullptr;
}
TextZoomProvider* ChromeBrowserProvider::GetTextZoomProvider() const {
return text_zoom_provider_.get();
}
void ChromeBrowserProvider::HideModalViewStack() const {}
void ChromeBrowserProvider::LogIfModalViewsArePresented() const {}
......
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef IOS_PUBLIC_PROVIDER_CHROME_BROWSER_TEXT_ZOOM_PROVIDER_H_
#define IOS_PUBLIC_PROVIDER_CHROME_BROWSER_TEXT_ZOOM_PROVIDER_H_
namespace web {
class WebState;
}
class TextZoomProvider {
public:
TextZoomProvider();
virtual ~TextZoomProvider();
// Zooms the given web_state to the provided size as a percentage. I.e. a size
// of 100 corresponds to a zoom of 100%.
virtual void SetPageFontSize(web::WebState* web_state, int size);
protected:
// Uses injected javascript to change to zoom the page font size to the given
// |size| as a percentage (size = 100 -> 100% zoom).
void SetPageFontSizeJavascript(web::WebState* web_state, int size);
};
#endif // IOS_PUBLIC_PROVIDER_CHROME_BROWSER_TEXT_ZOOM_PROVIDER_H_
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#import "ios/public/provider/chrome/browser/text_zoom_provider.h"
#import "base/values.h"
#include "ios/web/public/js_messaging/web_frame.h"
#include "ios/web/public/js_messaging/web_frames_manager.h"
#import "ios/web/public/web_state.h"
#if !defined(__has_feature) || !__has_feature(objc_arc)
#error "This file requires ARC support."
#endif
TextZoomProvider::TextZoomProvider() = default;
TextZoomProvider::~TextZoomProvider() = default;
void TextZoomProvider::SetPageFontSize(web::WebState* web_state, int size) {
SetPageFontSizeJavascript(web_state, size);
}
void TextZoomProvider::SetPageFontSizeJavascript(web::WebState* web_state,
int size) {
std::vector<base::Value> parameters;
parameters.push_back(base::Value(size));
for (web::WebFrame* frame :
web_state->GetWebFramesManager()->GetAllWebFrames()) {
frame->CallJavaScriptFunction("accessibility.adjustFontSize", parameters);
}
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment