1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121
|
// Copyright 2019 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/ui/webui/chrome_content_browser_client_webui_part.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/common/pref_names.h"
#include "chrome/common/webui_url_constants.h"
#include "components/prefs/pref_service.h"
#include "content/public/browser/navigation_entry.h"
#include "content/public/browser/web_contents.h"
#include "extensions/common/constants.h"
#include "third_party/blink/public/common/web_preferences/web_preferences.h"
namespace {
// Returns whether any prefs were changed.
bool CopyFontPrefs(const blink::web_pref::WebPreferences& source,
blink::web_pref::WebPreferences* destination) {
bool changed = false;
changed |= destination->default_font_size != source.default_font_size;
changed |=
destination->default_fixed_font_size != source.default_fixed_font_size;
changed |= destination->minimum_font_size != source.minimum_font_size;
changed |= destination->minimum_logical_font_size !=
source.minimum_logical_font_size;
if (!changed) {
return false;
}
destination->default_font_size = source.default_font_size;
destination->default_fixed_font_size = source.default_fixed_font_size;
destination->minimum_font_size = source.minimum_font_size;
destination->minimum_logical_font_size = source.minimum_logical_font_size;
return true;
}
// Returns the visible URL or GURL() if unavailable.
GURL GetVisibleURL(content::WebContents* web_contents) {
if (!web_contents) {
return GURL();
}
content::NavigationEntry* entry =
web_contents->GetController().GetVisibleEntry();
return entry ? entry->GetURL() : GURL();
}
} // namespace
ChromeContentBrowserClientWebUiPart::ChromeContentBrowserClientWebUiPart() =
default;
ChromeContentBrowserClientWebUiPart::~ChromeContentBrowserClientWebUiPart() =
default;
void ChromeContentBrowserClientWebUiPart::OverrideWebPreferences(
content::WebContents* web_contents,
content::SiteInstance& main_frame_site,
blink::web_pref::WebPreferences* web_prefs) {
// This logic is invoked at startup, and anytime the default prefs change.
GURL url = GetVisibleURL(web_contents);
if (!url.SchemeIs(content::kChromeUIScheme)) {
return;
}
// Use default font sizes for WebUi.
blink::web_pref::WebPreferences default_prefs;
CopyFontPrefs(/*source=*/default_prefs, /*destination=*/web_prefs);
#if BUILDFLAG(ENABLE_WEBUI_TAB_STRIP)
// Set some non-font prefs for webui tabstrip. The tabstrip renderer is never
// navigated to or from, so we don't need to replicate this logic in
// OverrideWebPreferencesAfterNavigation.
if (url.host_piece() == chrome::kChromeUITabStripHost) {
web_prefs->touch_drag_drop_enabled = true;
web_prefs->touch_dragend_context_menu = true;
}
#endif
}
bool ChromeContentBrowserClientWebUiPart::OverrideWebPreferencesAfterNavigation(
content::WebContents* web_contents,
content::SiteInstance& main_frame_site,
blink::web_pref::WebPreferences* web_prefs) {
// This logic is invoked once on each navigation.
GURL url = GetVisibleURL(web_contents);
if (!url.is_valid()) {
return false;
}
// Extensions are handled by ChromeContentBrowserClientExtensionsPart.
const GURL& site_url = main_frame_site.GetSiteURL();
if (site_url.SchemeIs(extensions::kExtensionScheme)) {
return false;
}
blink::web_pref::WebPreferences web_prefs_source;
if (url.SchemeIs(content::kChromeUIScheme)) {
// Use default prefs for WebUi. Not further modifications necessary for
// web_prefs_source.
} else {
// Use profile prefs for normal websites.
Profile* profile =
Profile::FromBrowserContext(web_contents->GetBrowserContext());
PrefService* prefs = profile->GetPrefs();
web_prefs_source.default_font_size =
prefs->GetInteger(prefs::kWebKitDefaultFontSize);
web_prefs_source.default_fixed_font_size =
prefs->GetInteger(prefs::kWebKitDefaultFixedFontSize);
web_prefs_source.minimum_font_size =
prefs->GetInteger(prefs::kWebKitMinimumFontSize);
web_prefs_source.minimum_logical_font_size =
prefs->GetInteger(prefs::kWebKitMinimumLogicalFontSize);
}
return CopyFontPrefs(web_prefs_source, web_prefs);
}
|