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

Commit f62b555

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
1 parent 5be1f4d commit f62b555

File tree

7 files changed

+42
-10
lines changed

7 files changed

+42
-10
lines changed

src/net/instaweb/automatic/system_tests/inliners.sh

+10-4
Original file line numberDiff line numberDiff line change
@@ -5,19 +5,25 @@ fetch_until $URL 'grep -c <style' 3
55
# restrictions on external connections
66
if [ -z ${DISABLE_FONT_API_TESTS:-} ]; then
77
test_filter inline_google_font_css Can inline Google Font API loader CSS
8-
fetch_until $URL 'grep -c @font-face' 1
8+
# Use a more recent version of Chrome UA than our default, which will get
9+
# a very large (which hit our previous default size limits) CSS using woff2
10+
WGETRC_OLD=$WGETRC
11+
export WGETRC=$TESTTMP/wgetrc-chrome
12+
cat > $WGETRC <<EOF
13+
user_agent =Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.45 Safari/537.36
14+
EOF
15+
16+
fetch_until $URL 'grep -c @font-face' 7
917

10-
# By default we use a Chrome UA, so it should get woff
1118
OUT=$($WGET_DUMP $URL)
12-
check_from "$OUT" fgrep -qi "format('woff')"
19+
check_from "$OUT" fgrep -qi "format('woff2')"
1320
check_not_from "$OUT" fgrep -qi "format('truetype')"
1421
check_not_from "$OUT" fgrep -qi "format('embedded-opentype')"
1522
check_not_from "$OUT" fgrep -qi ".ttf"
1623
check_not_from "$OUT" fgrep -qi ".eot"
1724

1825
# Now try with IE6 user-agent. We do this with setting WGETRC due to
1926
# quoting madness
20-
WGETRC_OLD=$WGETRC
2127
export WGETRC=$TESTTMP/wgetrc-ie
2228
cat > $WGETRC <<EOF
2329
user_agent = Mozilla/4.0 (compatible; MSIE 6.01; Windows NT 6.0)

src/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));

src/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(
134+
STATIC_STRLEN("font_safieri"));
134135
SetUpForFontFilterTest(RewriteOptions::kInlineGoogleFontCss);
135136
}
136137
};

src/net/instaweb/rewriter/public/css_inline_filter.h

+6-4
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/rewriter/public/common_filter.h"
2526
#include "net/instaweb/rewriter/public/css_tag_scanner.h"
2627
#include "net/instaweb/rewriter/public/resource.h"
@@ -29,13 +30,12 @@
2930
#include "pagespeed/kernel/base/basictypes.h"
3031
#include "pagespeed/kernel/base/string.h"
3132
#include "pagespeed/kernel/base/string_util.h"
33+
#include "pagespeed/kernel/html/html_element.h"
34+
#include "pagespeed/kernel/http/google_url.h"
3235
#include "pagespeed/kernel/http/semantic_type.h"
3336

3437
namespace net_instaweb {
3538

36-
class CachedResult;
37-
class GoogleUrl;
38-
class HtmlElement;
3939
class Statistics;
4040
class Variable;
4141

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

78+
void set_size_threshold_bytes(size_t size) { size_threshold_bytes_ = size; }
79+
7880
private:
7981
class Context;
8082
friend class Context;
@@ -87,7 +89,7 @@ class CssInlineFilter : public CommonFilter {
8789
HtmlElement* element);
8890

8991
const char* id_; // filter ID code.
90-
const size_t size_threshold_bytes_;
92+
size_t size_threshold_bytes_;
9193

9294
GoogleString domain_;
9395
CssTagScanner css_tag_scanner_;

src/net/instaweb/rewriter/public/rewrite_options.h

+9
Original file line numberDiff line numberDiff line change
@@ -266,6 +266,7 @@ class RewriteOptions {
266266
static const char kFlushBufferLimitBytes[];
267267
static const char kFlushHtml[];
268268
static const char kFlushMoreResourcesEarlyIfTimePermits[];
269+
static const char kGoogleFontCssInlineMaxBytes[];
269270
static const char kForbidAllDisabledFilters[];
270271
static const char kHideRefererUsingMeta[];
271272
static const char kIdleFlushTimeMs[];
@@ -620,6 +621,7 @@ class RewriteOptions {
620621
static const int64 kDefaultCssImageInlineMaxBytes;
621622
static const int64 kDefaultCssInlineMaxBytes;
622623
static const int64 kDefaultCssOutlineMinBytes;
624+
static const int64 kDefaultGoogleFontCssInlineMaxBytes;
623625
static const int64 kDefaultImageInlineMaxBytes;
624626
static const int64 kDefaultJsInlineMaxBytes;
625627
static const int64 kDefaultJsOutlineMinBytes;
@@ -1347,6 +1349,12 @@ class RewriteOptions {
13471349
void set_css_inline_max_bytes(int64 x) {
13481350
set_option(x, &css_inline_max_bytes_);
13491351
}
1352+
int64 google_font_css_inline_max_bytes() const {
1353+
return google_font_css_inline_max_bytes_.value();
1354+
}
1355+
void set_google_font_css_inline_max_bytes(int64 x) {
1356+
set_option(x, &google_font_css_inline_max_bytes_);
1357+
}
13501358
int64 js_inline_max_bytes() const { return js_inline_max_bytes_.value(); }
13511359
void set_js_inline_max_bytes(int64 x) {
13521360
set_option(x, &js_inline_max_bytes_);
@@ -3454,6 +3462,7 @@ class RewriteOptions {
34543462
Option<int64> css_image_inline_max_bytes_;
34553463
Option<int64> css_inline_max_bytes_;
34563464
Option<int64> css_outline_min_bytes_;
3465+
Option<int64> google_font_css_inline_max_bytes_;
34573466

34583467
// Preserve URL options
34593468
Option<bool> css_preserve_urls_;

src/net/instaweb/rewriter/rewrite_options.cc

+11
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,8 @@ const char RewriteOptions::kFlushMoreResourcesEarlyIfTimePermits[] =
138138
"FlushMoreResourcesEarlyIfTimePermits";
139139
const char RewriteOptions::kForbidAllDisabledFilters[] =
140140
"ForbidAllDisabledFilters";
141+
const char RewriteOptions::kGoogleFontCssInlineMaxBytes[] =
142+
"GoogleFontCssInlineMaxBytes";
141143
const char RewriteOptions::kHideRefererUsingMeta[] = "HideRefererUsingMeta";
142144
const char RewriteOptions::kIdleFlushTimeMs[] = "IdleFlushTimeMs";
143145
const char RewriteOptions::kImageInlineMaxBytes[] = "ImageInlineMaxBytes";
@@ -412,6 +414,8 @@ const int64 RewriteOptions::kDefaultCssInlineMaxBytes = 2048;
412414
const int64 RewriteOptions::kDefaultCssFlattenMaxBytes = 1024000;
413415
const int64 RewriteOptions::kDefaultCssImageInlineMaxBytes = 0;
414416
const int64 RewriteOptions::kDefaultCssOutlineMinBytes = 3000;
417+
// 3K is bigger than Roboto loader for Chrome (2.2k)
418+
const int64 RewriteOptions::kDefaultGoogleFontCssInlineMaxBytes = 3 * 1024;
415419
const int64 RewriteOptions::kDefaultImageInlineMaxBytes = 3072;
416420
const int64 RewriteOptions::kDefaultJsInlineMaxBytes = 2048;
417421
const int64 RewriteOptions::kDefaultJsOutlineMinBytes = 3000;
@@ -1221,6 +1225,13 @@ void RewriteOptions::AddProperties() {
12211225
kCssInlineMaxBytes,
12221226
kQueryScope,
12231227
"Number of bytes below which stylesheets will be inlined.", true);
1228+
AddBaseProperty(
1229+
kDefaultGoogleFontCssInlineMaxBytes,
1230+
&RewriteOptions::google_font_css_inline_max_bytes_, "gfci",
1231+
kGoogleFontCssInlineMaxBytes,
1232+
kQueryScope,
1233+
"Number of bytes below which Google Font stylesheets will be inlined.",
1234+
true);
12241235
AddBaseProperty(
12251236
kDefaultCssOutlineMinBytes,
12261237
&RewriteOptions::css_outline_min_bytes_, "co",

src/net/instaweb/rewriter/rewrite_options_test.cc

+1
Original file line numberDiff line numberDiff line change
@@ -911,6 +911,7 @@ TEST_F(RewriteOptionsTest, LookupOptionByNameTest) {
911911
RewriteOptions::kFlushHtml,
912912
RewriteOptions::kFlushMoreResourcesEarlyIfTimePermits,
913913
RewriteOptions::kForbidAllDisabledFilters,
914+
RewriteOptions::kGoogleFontCssInlineMaxBytes,
914915
RewriteOptions::kHideRefererUsingMeta,
915916
RewriteOptions::kIdleFlushTimeMs,
916917
RewriteOptions::kImageInlineMaxBytes,

0 commit comments

Comments
 (0)