webfontloader 1.3.0 → 1.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. data/CHANGELOG +5 -0
  2. data/Rakefile +2 -1
  3. data/lib/webfontloader.rb +1 -1
  4. data/spec/core/font_spec.js +9 -4
  5. data/spec/core/fontruler_spec.js +3 -10
  6. data/spec/core/fontwatcher_spec.js +22 -23
  7. data/spec/core/fontwatchrunner_spec.js +206 -231
  8. data/spec/deps.js +27 -0
  9. data/spec/google/lastresortwebkitfontwatchrunner_spec.js +47 -58
  10. data/spec/index.html +14 -25
  11. data/src/ascender/ascender_script.js +52 -45
  12. data/src/core/browserinfo.js +54 -47
  13. data/src/core/cssclassname.js +27 -22
  14. data/src/core/cssfontfamilyname.js +23 -17
  15. data/src/core/domhelper.js +209 -203
  16. data/src/core/eventdispatcher.js +111 -103
  17. data/src/core/font.js +110 -68
  18. data/src/core/fontmoduleloader.js +56 -13
  19. data/src/core/fontruler.js +52 -43
  20. data/src/core/fontvariationdescription.js +82 -76
  21. data/src/core/fontwatcher.js +93 -88
  22. data/src/core/fontwatchrunner.js +161 -161
  23. data/src/core/initialize.js +22 -15
  24. data/src/core/namespace.js +0 -29
  25. data/src/core/size.js +31 -25
  26. data/src/core/useragent.js +63 -48
  27. data/src/core/useragentparser.js +317 -306
  28. data/src/custom/customcss.js +31 -24
  29. data/src/fontdeck/fontdeck_script.js +46 -37
  30. data/src/google/fontapiparser.js +105 -97
  31. data/src/google/fontapiurlbuilder.js +46 -41
  32. data/src/google/googlefontapi.js +48 -32
  33. data/src/google/lastresortwebkitfontwatchrunner.js +80 -67
  34. data/src/modules.yml +6 -6
  35. data/src/monotype/monotype_script.js +47 -40
  36. data/src/typekit/typekit_script.js +41 -35
  37. data/tools/compiler/base.js +1548 -0
  38. data/tools/compiler/compiler.jar +0 -0
  39. data/webfontloader.gemspec +4 -2
  40. metadata +18 -16
data/spec/deps.js ADDED
@@ -0,0 +1,27 @@
1
+ // This file was autogenerated by calcdeps.js
2
+ goog.addDependency("../../src/ascender/ascender_script.js", ["webfont.AscenderScript"], []);
3
+ goog.addDependency("../../src/async_load.js", [], []);
4
+ goog.addDependency("../../src/closure.js", [], []);
5
+ goog.addDependency("../../src/core/browserinfo.js", ["webfont.BrowserInfo"], []);
6
+ goog.addDependency("../../src/core/cssclassname.js", ["webfont.CssClassName"], []);
7
+ goog.addDependency("../../src/core/cssfontfamilyname.js", ["webfont.CssFontFamilyName"], []);
8
+ goog.addDependency("../../src/core/domhelper.js", ["webfont.DomHelper"], []);
9
+ goog.addDependency("../../src/core/eventdispatcher.js", ["webfont.EventDispatcher"], ["webfont.CssClassName"]);
10
+ goog.addDependency("../../src/core/font.js", ["webfont.WebFont"], ["webfont.DomHelper","webfont.EventDispatcher","webfont.FontWatcher","webfont.Size"]);
11
+ goog.addDependency("../../src/core/fontmoduleloader.js", ["webfont.FontModuleLoader"], []);
12
+ goog.addDependency("../../src/core/fontruler.js", ["webfont.FontRuler"], ["webfont.CssFontFamilyName","webfont.FontVariationDescription","webfont.Size"]);
13
+ goog.addDependency("../../src/core/fontvariationdescription.js", ["webfont.FontVariationDescription"], []);
14
+ goog.addDependency("../../src/core/fontwatcher.js", ["webfont.FontWatcher"], ["webfont.FontWatchRunner"]);
15
+ goog.addDependency("../../src/core/fontwatchrunner.js", ["webfont.FontWatchRunner"], ["webfont.FontRuler"]);
16
+ goog.addDependency("../../src/core/initialize.js", ["webfont"], ["webfont.UserAgentParser","webfont.FontModuleLoader","webfont.WebFont"]);
17
+ goog.addDependency("../../src/core/size.js", ["webfont.Size"], []);
18
+ goog.addDependency("../../src/core/useragent.js", ["webfont.UserAgent"], []);
19
+ goog.addDependency("../../src/core/useragentparser.js", ["webfont.UserAgentParser"], ["webfont.BrowserInfo","webfont.UserAgent"]);
20
+ goog.addDependency("../../src/custom/customcss.js", ["webfont.CustomCss"], []);
21
+ goog.addDependency("../../src/fontdeck/fontdeck_script.js", ["webfont.FontdeckScript"], ["webfont.FontVariationDescription"]);
22
+ goog.addDependency("../../src/google/fontapiparser.js", ["webfont.FontApiParser"], ["webfont.FontVariationDescription"]);
23
+ goog.addDependency("../../src/google/fontapiurlbuilder.js", ["webfont.FontApiUrlBuilder"], []);
24
+ goog.addDependency("../../src/google/googlefontapi.js", ["webfont.GoogleFontApi"], ["webfont.FontApiUrlBuilder","webfont.FontApiParser","webfont.FontWatchRunner","webfont.LastResortWebKitFontWatchRunner"]);
25
+ goog.addDependency("../../src/google/lastresortwebkitfontwatchrunner.js", ["webfont.LastResortWebKitFontWatchRunner"], ["webfont.FontRuler"]);
26
+ goog.addDependency("../../src/monotype/monotype_script.js", ["webfont.MonotypeScript"], []);
27
+ goog.addDependency("../../src/typekit/typekit_script.js", ["webfont.TypekitScript"], []);
@@ -3,12 +3,12 @@ describe('LastResortWebKitFontWatchRunner', function () {
3
3
  BrowserInfo = webfont.BrowserInfo,
4
4
  Size = webfont.Size,
5
5
  DomHelper = webfont.DomHelper,
6
+ FontRuler = webfont.FontRuler,
6
7
  domHelper = new DomHelper(window),
7
8
  fontFamily = 'My Family',
8
9
  fontDescription = 'n4';
9
10
 
10
- var timesToCheckSizeBeforeChange = 0,
11
- TARGET_SIZE = new Size(3, 3),
11
+ var TARGET_SIZE = new Size(3, 3),
12
12
  FALLBACK_SIZE_A = new Size(1, 1),
13
13
  FALLBACK_SIZE_B = new Size(2, 2),
14
14
  LAST_RESORT_SIZE = new Size(4, 4),
@@ -16,67 +16,56 @@ describe('LastResortWebKitFontWatchRunner', function () {
16
16
  browserInfo = new BrowserInfo(true, true, false),
17
17
  setupSizes = [FALLBACK_SIZE_A, FALLBACK_SIZE_B, LAST_RESORT_SIZE],
18
18
  actualSizes = [],
19
- fakeGetSizeCount = 0,
20
- setupFinished = false,
21
- fakeFontSizer = {
22
- getSize: function (el) {
23
- var result = null;
24
-
25
- if (setupFinished) {
26
- // If you are getting an exception here your tests does not specify enough
27
- // size data to run properly.
28
- if (fakeGetSizeCount >= actualSizes.length) {
29
- throw 'Invalid test data';
30
- }
31
- result = actualSizes[fakeGetSizeCount];
32
- fakeGetSizeCount += 1;
33
- } else {
34
- result = setupSizes[Math.min(fakeGetSizeCount, setupSizes.length - 1)];
35
- fakeGetSizeCount += 1;
36
- }
37
- return result;
38
- }
39
- },
40
19
  timesToGetTimeBeforeTimeout = 10,
41
- fakeGetTime = function () {
42
- if (timesToGetTimeBeforeTimeout <= 0) {
43
- return 6000;
44
- } else {
45
- timesToGetTimeBeforeTimeout -= 1;
46
- return 1;
47
- }
48
- },
49
- asyncCount = 0,
50
- fakeAsyncCall = function (func, timeout) {
51
- asyncCount += 1;
52
- func();
53
- },
54
- setupFinished = false,
55
- originalStartMethod = null,
56
20
  activeCallback = null,
57
21
  inactiveCallback = null;
58
22
 
59
23
  beforeEach(function () {
24
+ jasmine.Clock.useMock();
25
+
60
26
  actualSizes = [];
61
- setupFinished = false;
62
- fakeGetSizeCount = 0;
63
27
 
64
- asyncCount = 0;
65
- timesToGetTimeBeforeTimeout = 10;
66
28
  activeCallback = jasmine.createSpy('activeCallback');
67
29
  inactiveCallback = jasmine.createSpy('inactiveCallback');
30
+ timesToGetTimeBeforeTimeout = 10;
68
31
 
69
- originalStartMethod = LastResortWebKitFontWatchRunner.prototype.start;
32
+ var setupFinished = false,
33
+ fakeGetSizeCount = 0;
70
34
 
71
- LastResortWebKitFontWatchRunner.prototype.start = function () {
35
+ spyOn(FontRuler.prototype, 'getSize').andCallFake(function () {
36
+ var result = null;
37
+
38
+ if (setupFinished) {
39
+ // If you are getting an exception here your tests does not specify enough
40
+ // size data to run properly.
41
+ if (fakeGetSizeCount >= actualSizes.length) {
42
+ throw 'Invalid test data';
43
+ }
44
+ result = actualSizes[fakeGetSizeCount];
45
+ fakeGetSizeCount += 1;
46
+ } else {
47
+ result = setupSizes[Math.min(fakeGetSizeCount, setupSizes.length - 1)];
48
+ fakeGetSizeCount += 1;
49
+ }
50
+ return result;
51
+ });
52
+
53
+ spyOn(goog, 'now').andCallFake(function () {
54
+ if (timesToGetTimeBeforeTimeout <= 0) {
55
+ return 6000;
56
+ } else {
57
+ timesToGetTimeBeforeTimeout -= 1;
58
+ return 1;
59
+ }
60
+ });
61
+
62
+ var originalStart = LastResortWebKitFontWatchRunner.prototype.start;
63
+
64
+ spyOn(LastResortWebKitFontWatchRunner.prototype, 'start').andCallFake(function () {
72
65
  setupFinished = true;
73
66
  fakeGetSizeCount = 0;
74
- originalStartMethod.apply(this);
75
- };
76
- });
77
-
78
- afterEach(function () {
79
- LastResortWebKitFontWatchRunner.prototype.start = originalStartMethod;
67
+ originalStart.apply(this);
68
+ });
80
69
  });
81
70
 
82
71
  it('should ignore fallback size and call active', function () {
@@ -86,11 +75,11 @@ describe('LastResortWebKitFontWatchRunner', function () {
86
75
  ];
87
76
 
88
77
  var fontWatchRunner = new LastResortWebKitFontWatchRunner(activeCallback, inactiveCallback,
89
- domHelper, fakeFontSizer, fakeAsyncCall, fakeGetTime, fontFamily, fontDescription, browserInfo);
78
+ domHelper, fontFamily, fontDescription, browserInfo);
90
79
 
91
80
  fontWatchRunner.start();
92
81
 
93
- expect(asyncCount).toEqual(1);
82
+ jasmine.Clock.tick(1 * 25);
94
83
  expect(activeCallback).toHaveBeenCalledWith('My Family', 'n4');
95
84
  });
96
85
 
@@ -103,11 +92,11 @@ describe('LastResortWebKitFontWatchRunner', function () {
103
92
  timesToGetTimeBeforeTimeout = 2;
104
93
 
105
94
  var fontWatchRunner = new LastResortWebKitFontWatchRunner(activeCallback, inactiveCallback,
106
- domHelper, fakeFontSizer, fakeAsyncCall, fakeGetTime, 'Arimo', fontDescription, browserInfo);
95
+ domHelper, 'Arimo', fontDescription, browserInfo);
107
96
 
108
97
  fontWatchRunner.start();
109
98
 
110
- expect(asyncCount).toEqual(1);
99
+ jasmine.Clock.tick(1 * 25);
111
100
  expect(activeCallback).toHaveBeenCalledWith('Arimo', 'n4');
112
101
  });
113
102
 
@@ -121,11 +110,11 @@ describe('LastResortWebKitFontWatchRunner', function () {
121
110
  timesToGetTimeBeforeTimeout = 3;
122
111
 
123
112
  var fontWatchRunner = new LastResortWebKitFontWatchRunner(activeCallback, inactiveCallback,
124
- domHelper, fakeFontSizer, fakeAsyncCall, fakeGetTime, fontFamily, fontDescription, browserInfo);
113
+ domHelper, fontFamily, fontDescription, browserInfo);
125
114
 
126
115
  fontWatchRunner.start();
127
116
 
128
- expect(asyncCount).toEqual(2);
117
+ jasmine.Clock.tick(2 * 25);
129
118
  expect(inactiveCallback).toHaveBeenCalledWith('My Family', 'n4');
130
119
  });
131
120
 
@@ -138,10 +127,10 @@ describe('LastResortWebKitFontWatchRunner', function () {
138
127
  timesToGetTimeBeforeTimeout = 2;
139
128
 
140
129
  var fontWatchRunner = new LastResortWebKitFontWatchRunner(activeCallback, inactiveCallback,
141
- domHelper, fakeFontSizer, fakeAsyncCall, fakeGetTime, fontFamily, fontDescription, browserInfo);
130
+ domHelper, fontFamily, fontDescription, browserInfo);
142
131
 
143
132
  fontWatchRunner.start();
144
- expect(asyncCount).toEqual(1);
133
+ jasmine.Clock.tick(1 * 25);
145
134
  expect(inactiveCallback).toHaveBeenCalledWith('My Family', 'n4');
146
135
  });
147
136
  });
data/spec/index.html CHANGED
@@ -14,32 +14,21 @@
14
14
  <script src="../tools/jasmine/jasmine.js"></script>
15
15
  <script src="../tools/jasmine/jasmine-html.js"></script>
16
16
  <script src="../tools/jasmine-phantomjs/terminal-reporter.js"></script>
17
+ <script src="../tools/compiler/base.js"></script>
18
+ <script src="../spec/deps.js"></script>
17
19
 
18
- <script src="../src/core/namespace.js"></script>
19
- <script src="../src/core/domhelper.js"></script>
20
- <script src="../src/core/cssclassname.js"></script>
21
- <script src="../src/core/cssfontfamilyname.js"></script>
22
- <script src="../src/core/fontvariationdescription.js"></script>
23
- <script src="../src/core/browserinfo.js"></script>
24
- <script src="../src/core/useragent.js"></script>
25
- <script src="../src/core/useragentparser.js"></script>
26
- <script src="../src/core/fontmoduleloader.js"></script>
27
- <script src="../src/core/eventdispatcher.js"></script>
28
- <script src="../src/core/size.js"></script>
29
- <script src="../src/core/fontruler.js"></script>
30
- <script src="../src/core/fontwatchrunner.js"></script>
31
- <script src="../src/core/fontwatcher.js"></script>
32
- <script src="../src/core/font.js"></script>
33
- <script src="../src/core/initialize.js"></script>
34
- <script src="../src/google/fontapiparser.js"></script>
35
- <script src="../src/google/fontapiurlbuilder.js"></script>
36
- <script src="../src/google/googlefontapi.js"></script>
37
- <script src="../src/google/lastresortwebkitfontwatchrunner.js"></script>
38
- <script src="../src/custom/customcss.js"></script>
39
- <script src="../src/ascender/ascender_script.js"></script>
40
- <script src="../src/fontdeck/fontdeck_script.js"></script>
41
- <script src="../src/monotype/monotype_script.js"></script>
42
- <script src="../src/typekit/typekit_script.js"></script>
20
+ <script>
21
+ goog.require('webfont');
22
+
23
+ // Require the modules because they don't have an explicit
24
+ // dependency on core.
25
+ goog.require('webfont.TypekitScript');
26
+ goog.require('webfont.AscenderScript');
27
+ goog.require('webfont.FontdeckScript');
28
+ goog.require('webfont.MonotypeScript');
29
+ goog.require('webfont.CustomCss');
30
+ goog.require('webfont.GoogleFontApi');
31
+ </script>
43
32
 
44
33
  <script src="../spec/core/domhelper_spec.js"></script>
45
34
  <script src="../spec/core/cssclassname_spec.js"></script>
@@ -1,3 +1,5 @@
1
+ goog.provide('webfont.AscenderScript');
2
+
1
3
  /**
2
4
  *
3
5
  * WebFont.load({
@@ -8,6 +10,7 @@
8
10
  * });
9
11
  *
10
12
  * @constructor
13
+ * @implements {webfont.FontModule}
11
14
  */
12
15
  webfont.AscenderScript = function(domHelper, configuration) {
13
16
  this.domHelper_ = domHelper;
@@ -27,56 +30,60 @@ webfont.AscenderScript.VARIATIONS = {
27
30
  'bi': 'i7'
28
31
  };
29
32
 
30
- webfont.AscenderScript.prototype.supportUserAgent = function(userAgent, support) {
31
- return support(userAgent.getBrowserInfo().hasWebFontSupport());
32
- };
33
+ goog.scope(function () {
34
+ var AscenderScript = webfont.AscenderScript;
33
35
 
34
- webfont.AscenderScript.prototype.load = function(onReady) {
35
- var key = this.configuration_['key'];
36
- var protocol = this.domHelper_.getProtocol();
37
- var url = protocol + '//webfonts.fontslive.com/css/' + key + '.css';
38
- this.domHelper_.insertInto('head', this.domHelper_.createCssLink(url));
39
- var fv = this.parseFamiliesAndVariations(this.configuration_['families']);
40
- onReady(fv.families, fv.variations);
41
- };
36
+ AscenderScript.prototype.supportUserAgent = function(userAgent, support) {
37
+ return support(userAgent.getBrowserInfo().hasWebFontSupport());
38
+ };
42
39
 
43
- webfont.AscenderScript.prototype.parseFamiliesAndVariations = function(providedFamilies){
44
- var families, variations, fv;
45
- families = [];
46
- variations = {};
47
- for(var i = 0, len = providedFamilies.length; i < len; i++){
48
- fv = this.parseFamilyAndVariations(providedFamilies[i]);
49
- families.push(fv.family);
50
- variations[fv.family] = fv.variations;
51
- }
52
- return { families:families, variations:variations };
53
- };
40
+ AscenderScript.prototype.load = function(onReady) {
41
+ var key = this.configuration_['key'];
42
+ var protocol = this.domHelper_.getProtocol();
43
+ var url = protocol + '//webfonts.fontslive.com/css/' + key + '.css';
44
+ this.domHelper_.insertInto('head', this.domHelper_.createCssLink(url));
45
+ var fv = this.parseFamiliesAndVariations(this.configuration_['families']);
46
+ onReady(fv.families, fv.variations);
47
+ };
54
48
 
55
- webfont.AscenderScript.prototype.parseFamilyAndVariations = function(providedFamily){
56
- var family, variations, parts;
57
- parts = providedFamily.split(':');
58
- family = parts[0];
59
- variations = [];
60
- if(parts[1]){
61
- variations = this.parseVariations(parts[1]);
62
- }else{
63
- variations = ['n4'];
64
- }
65
- return { family:family, variations:variations };
66
- };
49
+ AscenderScript.prototype.parseFamiliesAndVariations = function(providedFamilies){
50
+ var families, variations, fv;
51
+ families = [];
52
+ variations = {};
53
+ for(var i = 0, len = providedFamilies.length; i < len; i++){
54
+ fv = this.parseFamilyAndVariations(providedFamilies[i]);
55
+ families.push(fv.family);
56
+ variations[fv.family] = fv.variations;
57
+ }
58
+ return { families:families, variations:variations };
59
+ };
67
60
 
68
- webfont.AscenderScript.prototype.parseVariations = function(source){
69
- var providedVariations = source.split(',');
70
- var variations = [];
71
- for(var i = 0, len = providedVariations.length; i < len; i++){
72
- var pv = providedVariations[i];
73
- if(pv){
74
- var v = webfont.AscenderScript.VARIATIONS[pv];
75
- variations.push(v ? v : pv);
61
+ AscenderScript.prototype.parseFamilyAndVariations = function(providedFamily){
62
+ var family, variations, parts;
63
+ parts = providedFamily.split(':');
64
+ family = parts[0];
65
+ variations = [];
66
+ if(parts[1]){
67
+ variations = this.parseVariations(parts[1]);
68
+ }else{
69
+ variations = ['n4'];
76
70
  }
77
- }
78
- return variations;
79
- };
71
+ return { family:family, variations:variations };
72
+ };
73
+
74
+ AscenderScript.prototype.parseVariations = function(source){
75
+ var providedVariations = source.split(',');
76
+ var variations = [];
77
+ for(var i = 0, len = providedVariations.length; i < len; i++){
78
+ var pv = providedVariations[i];
79
+ if(pv){
80
+ var v = AscenderScript.VARIATIONS[pv];
81
+ variations.push(v ? v : pv);
82
+ }
83
+ }
84
+ return variations;
85
+ };
86
+ });
80
87
 
81
88
  globalNamespaceObject.addModule(webfont.AscenderScript.NAME, function(configuration, domHelper) {
82
89
  return new webfont.AscenderScript(domHelper, configuration);
@@ -1,4 +1,7 @@
1
+ goog.provide('webfont.BrowserInfo');
2
+
1
3
  /**
4
+ * @export
2
5
  * @constructor
3
6
  * @param {boolean} webfontSupport
4
7
  * @param {boolean} webKitFallbackBug
@@ -10,52 +13,56 @@ webfont.BrowserInfo = function (webfontSupport, webKitFallbackBug, webKitMetrics
10
13
  this.webKitMetricsBug_ = webKitMetricsBug;
11
14
  };
12
15
 
13
- /**
14
- * Returns true if the browser supports web fonts.
15
- *
16
- * @return {boolean}
17
- */
18
- webfont.BrowserInfo.prototype.hasWebFontSupport = function () {
19
- return this.webfontSupport_;
20
- };
16
+ goog.scope(function () {
17
+ var BrowserInfo = webfont.BrowserInfo;
21
18
 
22
- /**
23
- * Returns true if the browser has the WebKit fallback bug.
24
- *
25
- * The bug causes the normal CSS font stack to be ignored while
26
- * loading web fonts. Instead it picks the generic font family
27
- * (or the default generic font family) of the first instance
28
- * the web font is mentioned in CSS. It switches to this font
29
- * immediately while loading web font, causing two changes in
30
- * font to occur (compared to other browsers which only change
31
- * font once the web font has loaded.)
32
- *
33
- * The bug has been fixed and is only happens in WebKit versions
34
- * below 536.11. Even though it is fixed we still have a large
35
- * percentage of users on older WebKit versions, mostly on mobile
36
- * platforms.
37
- *
38
- * Also see: https://bugs.webkit.org/show_bug.cgi?id=76684
39
- *
40
- * @return {boolean}
41
- */
42
- webfont.BrowserInfo.prototype.hasWebKitFallbackBug = function () {
43
- return this.webKitFallbackBug_;
44
- };
19
+ /**
20
+ * Returns true if the browser supports web fonts.
21
+ *
22
+ * @return {boolean}
23
+ */
24
+ BrowserInfo.prototype.hasWebFontSupport = function () {
25
+ return this.webfontSupport_;
26
+ };
45
27
 
46
- /**
47
- * Returns true if the browser has the WebKit metrics bug
48
- *
49
- * The metrics bug causes WebKit to change the height of a font
50
- * while loading a web font. Other browsers do not modify
51
- * the width or height of the fallback font while a web font is
52
- * loading. This caused our width and height check to be incorrect,
53
- * triggering a false positive.
54
- *
55
- * Also see: https://bugs.webkit.org/show_bug.cgi?id=110977
56
- *
57
- * @return {boolean}
58
- */
59
- webfont.BrowserInfo.prototype.hasWebKitMetricsBug = function () {
60
- return this.webKitMetricsBug_;
61
- };
28
+ /**
29
+ * Returns true if the browser has the WebKit fallback bug.
30
+ *
31
+ * The bug causes the normal CSS font stack to be ignored while
32
+ * loading web fonts. Instead it picks the generic font family
33
+ * (or the default generic font family) of the first instance
34
+ * the web font is mentioned in CSS. It switches to this font
35
+ * immediately while loading web font, causing two changes in
36
+ * font to occur (compared to other browsers which only change
37
+ * font once the web font has loaded.)
38
+ *
39
+ * The bug has been fixed and is only happens in WebKit versions
40
+ * below 536.11. Even though it is fixed we still have a large
41
+ * percentage of users on older WebKit versions, mostly on mobile
42
+ * platforms.
43
+ *
44
+ * Also see: https://bugs.webkit.org/show_bug.cgi?id=76684
45
+ *
46
+ * @return {boolean}
47
+ */
48
+ BrowserInfo.prototype.hasWebKitFallbackBug = function () {
49
+ return this.webKitFallbackBug_;
50
+ };
51
+
52
+ /**
53
+ * Returns true if the browser has the WebKit metrics bug
54
+ *
55
+ * The metrics bug causes WebKit to change the height of a font
56
+ * while loading a web font. Other browsers do not modify
57
+ * the width or height of the fallback font while a web font is
58
+ * loading. This caused our width and height check to be incorrect,
59
+ * triggering a false positive.
60
+ *
61
+ * Also see: https://bugs.webkit.org/show_bug.cgi?id=110977
62
+ *
63
+ * @return {boolean}
64
+ */
65
+ BrowserInfo.prototype.hasWebKitMetricsBug = function () {
66
+ return this.webKitMetricsBug_;
67
+ };
68
+ });