Skip to content
This repository was archived by the owner on Apr 10, 2025. It is now read-only.

Commit 01045a9

Browse files
committed
Use a separate setting for CSS font inlining threshold (with a larger default),
since current for-Chrome CSS produced by fonts.g.c is quite large. Addresses https://code.google.com/p/modpagespeed/issues/detail?id=1040 issue #1040 backported from f62b555
1 parent 9d6d087 commit 01045a9

7 files changed

+42
-6
lines changed

net/instaweb/automatic/system_test.sh

+10-3
Original file line numberDiff line numberDiff line change
@@ -296,11 +296,18 @@ fetch_until $URL 'grep -c <style' 3
296296
# restrictions on external connections
297297
if [ -z ${DISABLE_FONT_API_TESTS:-} ]; then
298298
test_filter inline_google_font_css Can inline Google Font API loader CSS
299-
fetch_until $URL 'grep -c @font-face' 1
299+
# Use a more recent version of Chrome UA than our default, which will get
300+
# a very large (which hit our previous default size limits) CSS using woff2
301+
WGETRC_OLD=$WGETRC
302+
export WGETRC=$TESTTMP/wgetrc-chrome
303+
cat > $WGETRC <<EOF
304+
user_agent =Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.45 Safari/537.36
305+
EOF
306+
307+
fetch_until $URL 'grep -c @font-face' 7
300308

301-
# By default we use a Chrome UA, so it should get woff
302309
OUT=$($WGET_DUMP $URL)
303-
check_from "$OUT" fgrep -qi "format('woff')"
310+
check_from "$OUT" fgrep -qi "format('woff2')"
304311
check_not_from "$OUT" fgrep -qi "format('truetype')"
305312
check_not_from "$OUT" fgrep -qi "format('embedded-opentype')"
306313
check_not_from "$OUT" fgrep -qi ".ttf"

net/instaweb/rewriter/google_font_css_inline_filter.cc

+2
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@ namespace net_instaweb {
3232
GoogleFontCssInlineFilter::GoogleFontCssInlineFilter(RewriteDriver* driver)
3333
: CssInlineFilter(driver) {
3434
set_id(RewriteOptions::kGoogleFontCssInlineId);
35+
set_size_threshold_bytes(
36+
driver->options()->google_font_css_inline_max_bytes());
3537
driver->AddResourceUrlClaimant(
3638
NewPermanentCallback(
3739
this, &GoogleFontCssInlineFilter::CheckIfFontServiceUrl));

net/instaweb/rewriter/google_font_css_inline_filter_test.cc

+3-2
Original file line numberDiff line numberDiff line change
@@ -127,10 +127,11 @@ class GoogleFontCssInlineFilterSizeLimitTest
127127
protected:
128128
virtual void SetUp() {
129129
GoogleFontCssInlineFilterTestBase::SetUp();
130-
// GoogleFontCssInlineFilter honors css_inline_max_bytes.
130+
// GoogleFontCssInlineFilter uses google_font_css_inline_max_bytes.
131131
// Set a threshold at font_safieri, which should prevent longer
132132
// font_chromezilla from inlining.
133-
options()->set_css_inline_max_bytes(STATIC_STRLEN("font_safieri"));
133+
options()->set_google_font_css_inline_max_bytes(STATIC_STRLEN(
134+
"font_safieri"));
134135
SetUpForFontFilterTest(RewriteOptions::kInlineGoogleFontCss);
135136
}
136137
};

net/instaweb/rewriter/public/css_inline_filter.h

+6-1
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121

2222
#include <cstddef>
2323

24+
#include "net/instaweb/rewriter/cached_result.pb.h"
2425
#include "net/instaweb/http/public/semantic_type.h"
2526
#include "net/instaweb/rewriter/public/common_filter.h"
2627
#include "net/instaweb/rewriter/public/css_tag_scanner.h"
@@ -30,6 +31,8 @@
3031
#include "net/instaweb/util/public/basictypes.h"
3132
#include "net/instaweb/util/public/string.h"
3233
#include "net/instaweb/util/public/string_util.h"
34+
#include "pagespeed/kernel/html/html_element.h"
35+
#include "pagespeed/kernel/http/google_url.h"
3336

3437
namespace net_instaweb {
3538

@@ -75,6 +78,8 @@ class CssInlineFilter : public CommonFilter {
7578
// for semantics.
7679
virtual ResourcePtr CreateResource(const char* url, bool* is_authorized);
7780

81+
void set_size_threshold_bytes(size_t size) { size_threshold_bytes_ = size; }
82+
7883
private:
7984
class Context;
8085
friend class Context;
@@ -87,7 +92,7 @@ class CssInlineFilter : public CommonFilter {
8792
HtmlElement* element);
8893

8994
const char* id_; // filter ID code.
90-
const size_t size_threshold_bytes_;
95+
size_t size_threshold_bytes_;
9196

9297
GoogleString domain_;
9398
CssTagScanner css_tag_scanner_;

net/instaweb/rewriter/public/rewrite_options.h

+9
Original file line numberDiff line numberDiff line change
@@ -261,6 +261,7 @@ class RewriteOptions {
261261
static const char kFlushBufferLimitBytes[];
262262
static const char kFlushHtml[];
263263
static const char kFlushMoreResourcesEarlyIfTimePermits[];
264+
static const char kGoogleFontCssInlineMaxBytes[];
264265
static const char kForbidAllDisabledFilters[];
265266
static const char kHideRefererUsingMeta[];
266267
static const char kIdleFlushTimeMs[];
@@ -608,6 +609,7 @@ class RewriteOptions {
608609
static const int64 kDefaultCssFlattenMaxBytes;
609610
static const int64 kDefaultCssImageInlineMaxBytes;
610611
static const int64 kDefaultCssInlineMaxBytes;
612+
static const int64 kDefaultGoogleFontCssInlineMaxBytes;
611613
static const int64 kDefaultCssOutlineMinBytes;
612614
static const int64 kDefaultImageInlineMaxBytes;
613615
static const int64 kDefaultJsInlineMaxBytes;
@@ -1277,6 +1279,12 @@ class RewriteOptions {
12771279
void set_css_inline_max_bytes(int64 x) {
12781280
set_option(x, &css_inline_max_bytes_);
12791281
}
1282+
int64 google_font_css_inline_max_bytes() const {
1283+
return google_font_css_inline_max_bytes_.value();
1284+
}
1285+
void set_google_font_css_inline_max_bytes(int64 x) {
1286+
set_option(x, &google_font_css_inline_max_bytes_);
1287+
}
12801288
int64 js_inline_max_bytes() const { return js_inline_max_bytes_.value(); }
12811289
void set_js_inline_max_bytes(int64 x) {
12821290
set_option(x, &js_inline_max_bytes_);
@@ -3365,6 +3373,7 @@ class RewriteOptions {
33653373
Option<int64> css_image_inline_max_bytes_;
33663374
Option<int64> css_inline_max_bytes_;
33673375
Option<int64> css_outline_min_bytes_;
3376+
Option<int64> google_font_css_inline_max_bytes_;
33683377

33693378
// Preserve URL options
33703379
Option<bool> css_preserve_urls_;

net/instaweb/rewriter/rewrite_options.cc

+11
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,8 @@ const char RewriteOptions::kFlushMoreResourcesEarlyIfTimePermits[] =
136136
"FlushMoreResourcesEarlyIfTimePermits";
137137
const char RewriteOptions::kForbidAllDisabledFilters[] =
138138
"ForbidAllDisabledFilters";
139+
const char RewriteOptions::kGoogleFontCssInlineMaxBytes[] =
140+
"GoogleFontCssInlineMaxBytes";
139141
const char RewriteOptions::kHideRefererUsingMeta[] = "HideRefererUsingMeta";
140142
const char RewriteOptions::kIdleFlushTimeMs[] = "IdleFlushTimeMs";
141143
const char RewriteOptions::kImageInlineMaxBytes[] = "ImageInlineMaxBytes";
@@ -404,6 +406,8 @@ const int64 RewriteOptions::kDefaultCssInlineMaxBytes = 2048;
404406
const int64 RewriteOptions::kDefaultCssFlattenMaxBytes = 1024000;
405407
const int64 RewriteOptions::kDefaultCssImageInlineMaxBytes = 0;
406408
const int64 RewriteOptions::kDefaultCssOutlineMinBytes = 3000;
409+
// 3K is bigger than Roboto loader for Chrome (2.2k)
410+
const int64 RewriteOptions::kDefaultGoogleFontCssInlineMaxBytes = 3 * 1024;
407411
const int64 RewriteOptions::kDefaultImageInlineMaxBytes = 3072;
408412
const int64 RewriteOptions::kDefaultJsInlineMaxBytes = 2048;
409413
const int64 RewriteOptions::kDefaultJsOutlineMinBytes = 3000;
@@ -1196,6 +1200,13 @@ void RewriteOptions::AddProperties() {
11961200
kCssFlattenMaxBytes,
11971201
kQueryScope,
11981202
"Number of bytes below which stylesheets will be flattened.", true);
1203+
AddBaseProperty(
1204+
kDefaultGoogleFontCssInlineMaxBytes,
1205+
&RewriteOptions::google_font_css_inline_max_bytes_, "gfci",
1206+
kGoogleFontCssInlineMaxBytes,
1207+
kQueryScope,
1208+
"Number of bytes below which Google Font stylesheets will be inlined.",
1209+
true);
11991210
AddBaseProperty(
12001211
kDefaultCssImageInlineMaxBytes,
12011212
&RewriteOptions::css_image_inline_max_bytes_,

net/instaweb/rewriter/rewrite_options_test.cc

+1
Original file line numberDiff line numberDiff line change
@@ -882,6 +882,7 @@ TEST_F(RewriteOptionsTest, LookupOptionByNameTest) {
882882
RewriteOptions::kFlushHtml,
883883
RewriteOptions::kFlushMoreResourcesEarlyIfTimePermits,
884884
RewriteOptions::kForbidAllDisabledFilters,
885+
RewriteOptions::kGoogleFontCssInlineMaxBytes,
885886
RewriteOptions::kHideRefererUsingMeta,
886887
RewriteOptions::kIdleFlushTimeMs,
887888
RewriteOptions::kImageInlineMaxBytes,

0 commit comments

Comments
 (0)