webfontloader 1.1.2 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -35,7 +35,7 @@ webfont.UserAgentParser.UNKNOWN_USER_AGENT = new webfont.UserAgent(
35
35
  webfont.UserAgentParser.UNKNOWN,
36
36
  webfont.UserAgentParser.UNKNOWN,
37
37
  undefined,
38
- false);
38
+ new webfont.BrowserInfo(false, false));
39
39
 
40
40
  /**
41
41
  * Parses the user agent string and returns an object.
@@ -128,7 +128,7 @@ webfont.UserAgentParser.prototype.parseIeUserAgentString_ = function() {
128
128
  // instead of the specific Trident engine name and version
129
129
 
130
130
  var platform = this.getPlatform_();
131
- var platformVersion = this.getPlatformVersion_();
131
+ var platformVersionString = this.getPlatformVersion_();
132
132
 
133
133
  var browser = this.getMatchingGroup_(this.userAgent_, /(MSIE [\d\w\.]+)/, 1);
134
134
 
@@ -136,20 +136,18 @@ webfont.UserAgentParser.prototype.parseIeUserAgentString_ = function() {
136
136
  var pair = browser.split(' ');
137
137
  var name = pair[0];
138
138
  var version = pair[1];
139
- var majorVersion = this.getMajorVersion_(version);
140
- var majorPlatformVersion = this.getMajorVersion_(platformVersion);
141
-
142
- var supportWebFont = (platform == "Windows" && majorVersion >= 6) ||
143
- (platform == "Windows Phone" && majorPlatformVersion >= 8);
139
+ var browserVersion = this.parseVersion_(version);
140
+ var platformVersion = this.parseVersion_(platformVersionString);
141
+ var supportWebFont = (platform == "Windows" && browserVersion.major >= 6) ||
142
+ (platform == "Windows Phone" && platformVersion.major >= 8);
144
143
 
145
144
  return new webfont.UserAgent(name, version, name, version,
146
- platform, platformVersion, this.getDocumentMode_(this.doc_),
147
- supportWebFont);
145
+ platform, platformVersionString, this.getDocumentMode_(this.doc_), new webfont.BrowserInfo(supportWebFont, false));
148
146
  }
149
147
 
150
148
  return new webfont.UserAgent("MSIE", webfont.UserAgentParser.UNKNOWN,
151
149
  "MSIE", webfont.UserAgentParser.UNKNOWN,
152
- platform, platformVersion, this.getDocumentMode_(this.doc_), false);
150
+ platform, platformVersionString, this.getDocumentMode_(this.doc_), new webfont.BrowserInfo(false, false));
153
151
  };
154
152
 
155
153
  /**
@@ -194,29 +192,31 @@ webfont.UserAgentParser.prototype.parseOperaUserAgentString_ = function() {
194
192
 
195
193
  return new webfont.UserAgent("OperaMini", version, engineName,
196
194
  engineVersion, this.getPlatform_(), this.getPlatformVersion_(),
197
- this.getDocumentMode_(this.doc_), false);
195
+ this.getDocumentMode_(this.doc_), new webfont.BrowserInfo(false, false));
198
196
  }
199
197
 
200
198
  // Otherwise, find version information for normal Opera or Opera Mobile
201
199
  if (this.userAgent_.indexOf("Version/") != -1) {
202
- var version = this.getMatchingGroup_(this.userAgent_, /Version\/([\d\.]+)/, 1);
200
+ var versionString = this.getMatchingGroup_(this.userAgent_, /Version\/([\d\.]+)/, 1);
203
201
 
204
- if (version != "") {
205
- return new webfont.UserAgent("Opera", version, engineName, engineVersion,
202
+ if (versionString != "") {
203
+ var version = this.parseVersion_(versionString);
204
+ return new webfont.UserAgent("Opera", versionString, engineName, engineVersion,
206
205
  this.getPlatform_(), this.getPlatformVersion_(),
207
- this.getDocumentMode_(this.doc_), this.getMajorVersion_(version) >= 10);
206
+ this.getDocumentMode_(this.doc_), new webfont.BrowserInfo(version.major >= 10, false));
208
207
  }
209
208
  }
210
- var version = this.getMatchingGroup_(this.userAgent_, /Opera[\/ ]([\d\.]+)/, 1);
209
+ var versionString = this.getMatchingGroup_(this.userAgent_, /Opera[\/ ]([\d\.]+)/, 1);
211
210
 
212
- if (version != "") {
213
- return new webfont.UserAgent("Opera", version, engineName, engineVersion,
211
+ if (versionString != "") {
212
+ var version = this.parseVersion_(versionString);
213
+ return new webfont.UserAgent("Opera", versionString, engineName, engineVersion,
214
214
  this.getPlatform_(), this.getPlatformVersion_(),
215
- this.getDocumentMode_(this.doc_), this.getMajorVersion_(version) >= 10);
215
+ this.getDocumentMode_(this.doc_), new webfont.BrowserInfo(version.major >= 10, false));
216
216
  }
217
217
  return new webfont.UserAgent("Opera", webfont.UserAgentParser.UNKNOWN,
218
218
  engineName, engineVersion, this.getPlatform_(),
219
- this.getPlatformVersion_(), this.getDocumentMode_(this.doc_), false);
219
+ this.getPlatformVersion_(), this.getDocumentMode_(this.doc_), new webfont.BrowserInfo(false, false));
220
220
  };
221
221
 
222
222
  /**
@@ -231,13 +231,18 @@ webfont.UserAgentParser.prototype.isWebKit_ = function() {
231
231
  */
232
232
  webfont.UserAgentParser.prototype.parseWebKitUserAgentString_ = function() {
233
233
  var platform = this.getPlatform_();
234
- var platformVersion = this.getPlatformVersion_();
235
- var webKitVersion = this.getMatchingGroup_(this.userAgent_,
234
+ var platformVersionString = this.getPlatformVersion_();
235
+ var webKitVersionString = this.getMatchingGroup_(this.userAgent_,
236
236
  /AppleWeb(?:K|k)it\/([\d\.\+]+)/, 1);
237
+ var supportWebFont = false;
237
238
 
238
- if (webKitVersion == "") {
239
- webKitVersion = webfont.UserAgentParser.UNKNOWN;
239
+ if (webKitVersionString == "") {
240
+ webKitVersionString = webfont.UserAgentParser.UNKNOWN;
240
241
  }
242
+
243
+ var webKitVersion = this.parseVersion_(webKitVersionString);
244
+ var platformVersion = this.parseVersion_(platformVersionString);
245
+
241
246
  var name = webfont.UserAgentParser.UNKNOWN;
242
247
 
243
248
  if (this.userAgent_.indexOf("Chrome") != -1 || this.userAgent_.indexOf("CrMo") != -1 || this.userAgent_.indexOf("CriOS") != -1) {
@@ -263,23 +268,21 @@ webfont.UserAgentParser.prototype.parseWebKitUserAgentString_ = function() {
263
268
  version = this.getMatchingGroup_(this.userAgent_,
264
269
  /AdobeAIR\/([\d\.]+)/, 1);
265
270
  }
266
- var supportWebFont = false;
267
271
  if (name == "AdobeAIR") {
268
- var minor = this.getMatchingGroup_(version, /\d+\.(\d+)/, 1);
269
- supportWebFont = this.getMajorVersion_(version) > 2 ||
270
- this.getMajorVersion_(version) == 2 && parseInt(minor, 10) >= 5;
272
+ var browserVersion = this.parseVersion_(version);
273
+ supportWebFont = browserVersion.major > 2 || browserVersion.major == 2 && browserVersion.minor >= 5;
271
274
  } else if (platform == "BlackBerry") {
272
- supportWebFont = parseInt(platformVersion, 10) >= 10;
275
+ supportWebFont = platformVersion.major >= 10;
273
276
  } else if (platform == "Android") {
274
- supportWebFont = parseFloat(platformVersion) > 2.1;
277
+ supportWebFont = platformVersion.major > 2 || (platformVersion.major == 2 && platformVersion.minor > 1);
275
278
  } else {
276
- var minor = this.getMatchingGroup_(webKitVersion, /\d+\.(\d+)/, 1);
277
- supportWebFont = this.getMajorVersion_(webKitVersion) >= 526 ||
278
- this.getMajorVersion_(webKitVersion) >= 525 && parseInt(minor, 10) >= 13;
279
+ supportWebFont = webKitVersion.major >= 526 || webKitVersion.major >= 525 && webKitVersion.minor >= 13;
279
280
  }
280
281
 
281
- return new webfont.UserAgent(name, version, "AppleWebKit", webKitVersion,
282
- platform, platformVersion, this.getDocumentMode_(this.doc_), supportWebFont);
282
+ var hasWebKitFallbackBug = webKitVersion.major < 536 || (webKitVersion.major == 536 && webKitVersion.minor < 11);
283
+
284
+ return new webfont.UserAgent(name, version, "AppleWebKit", webKitVersionString,
285
+ platform, platformVersionString, this.getDocumentMode_(this.doc_), new webfont.BrowserInfo(supportWebFont, hasWebKitFallbackBug));
283
286
  };
284
287
 
285
288
  /**
@@ -303,47 +306,47 @@ webfont.UserAgentParser.prototype.parseGeckoUserAgentString_ = function() {
303
306
  /Firefox\/([\d\w\.]+)/, 1);
304
307
 
305
308
  if (versionNum != "") {
306
- var minor = this.getMatchingGroup_(versionNum, /\d+\.(\d+)/, 1);
309
+ var firefoxVersion = this.parseVersion_(versionNum);
307
310
 
308
311
  version = versionNum;
309
- supportWebFont = versionNum != "" && this.getMajorVersion_(versionNum) >= 3 &&
310
- parseInt(minor, 10) >= 5;
312
+ supportWebFont = firefoxVersion.major >= 3 &&
313
+ firefoxVersion.minor >= 5;
311
314
  }
312
315
  } else if (this.userAgent_.indexOf("Mozilla") != -1) {
313
316
  name = "Mozilla";
314
317
  }
315
- var geckoVersion = this.getMatchingGroup_(this.userAgent_, /rv:([^\)]+)/, 1);
318
+ var geckoVersionString = this.getMatchingGroup_(this.userAgent_, /rv:([^\)]+)/, 1);
316
319
 
317
- if (geckoVersion == "") {
318
- geckoVersion = webfont.UserAgentParser.UNKNOWN;
320
+ if (geckoVersionString == "") {
321
+ geckoVersionString = webfont.UserAgentParser.UNKNOWN;
319
322
  } else {
320
323
  if (!supportWebFont) {
321
- var majorVersion = this.getMajorVersion_(geckoVersion);
322
- var intMinorVersion = parseInt(this.getMatchingGroup_(geckoVersion, /\d+\.(\d+)/, 1), 10);
323
- var subVersion = parseInt(this.getMatchingGroup_(geckoVersion, /\d+\.\d+\.(\d+)/, 1), 10);
324
-
325
- supportWebFont = majorVersion > 1 ||
326
- majorVersion == 1 && intMinorVersion > 9 ||
327
- majorVersion == 1 && intMinorVersion == 9 && subVersion >= 2 ||
328
- geckoVersion.match(/1\.9\.1b[123]/) != null ||
329
- geckoVersion.match(/1\.9\.1\.[\d\.]+/) != null;
324
+ var geckoVersion = this.parseVersion_(geckoVersionString);
325
+
326
+ supportWebFont = geckoVersion.major > 1 ||
327
+ geckoVersion.major == 1 && geckoVersion.minor > 9 ||
328
+ geckoVersion.major == 1 && geckoVersion.minor == 9 && geckoVersion.patch >= 2 ||
329
+ geckoVersionString.match(/1\.9\.1b[123]/) != null ||
330
+ geckoVersionString.match(/1\.9\.1\.[\d\.]+/) != null;
330
331
  }
331
332
  }
332
- return new webfont.UserAgent(name, version, "Gecko", geckoVersion,
333
- this.getPlatform_(), this.getPlatformVersion_(), this.getDocumentMode_(this.doc_),
334
- supportWebFont);
333
+ return new webfont.UserAgent(name, version, "Gecko", geckoVersionString,
334
+ this.getPlatform_(), this.getPlatformVersion_(), this.getDocumentMode_(this.doc_), new webfont.BrowserInfo(supportWebFont, false));
335
335
  };
336
336
 
337
337
  /**
338
338
  * @private
339
339
  */
340
- webfont.UserAgentParser.prototype.getMajorVersion_ = function(version) {
341
- var majorVersion = this.getMatchingGroup_(version, /(\d+)/, 1);
342
-
343
- if (majorVersion != "") {
344
- return parseInt(majorVersion, 10);
340
+ webfont.UserAgentParser.prototype.parseVersion_ = function(version) {
341
+ var m = /([0-9]+)(?:\.([0-9]+)(?:\.([0-9]+)?)?)?/.exec(version),
342
+ result = {};
343
+
344
+ if (m) {
345
+ result.major = parseInt(m[1] || -1, 10);
346
+ result.minor = parseInt(m[2] || -1, 10);
347
+ result.patch = parseInt(m[3] || -1, 10);
345
348
  }
346
- return -1;
349
+ return result;
347
350
  };
348
351
 
349
352
  /**
@@ -16,19 +16,36 @@ webfont.CustomCss = function(domHelper, configuration) {
16
16
  webfont.CustomCss.NAME = 'custom';
17
17
 
18
18
  webfont.CustomCss.prototype.load = function(onReady) {
19
+ var i, len;
19
20
  var urls = this.configuration_['urls'] || [];
20
- var families = this.configuration_['families'] || [];
21
+ var familiesConfiguration = this.configuration_['families'] || [];
21
22
 
22
- for (var i = 0, len = urls.length; i < len; i++) {
23
+ for (i = 0, len = urls.length; i < len; i++) {
23
24
  var url = urls[i];
24
25
 
25
26
  this.domHelper_.insertInto('head', this.domHelper_.createCssLink(url));
26
27
  }
27
- onReady(families);
28
+
29
+ var families = [];
30
+ var variations = {};
31
+ for (i = 0, len = familiesConfiguration.length; i < len; i++) {
32
+ var components = familiesConfiguration[i].split(":");
33
+ var family = components[0];
34
+ var familyVariations = components[1];
35
+
36
+ families.push(family);
37
+
38
+ if (familyVariations) {
39
+ var newVariations = familyVariations.split(",");
40
+ variations[family] = (variations[family] || []).concat(newVariations);
41
+ }
42
+ }
43
+
44
+ onReady(families, variations);
28
45
  };
29
46
 
30
47
  webfont.CustomCss.prototype.supportUserAgent = function(userAgent, support) {
31
- return support(userAgent.isSupportingWebFont());
48
+ return support(userAgent.getBrowserInfo().hasWebFontSupport());
32
49
  };
33
50
 
34
51
  globalNamespaceObject.addModule(webfont.CustomCss.NAME, function(configuration, domHelper) {
@@ -10,7 +10,7 @@ webfont.GoogleFontApi = function(userAgent, domHelper, configuration) {
10
10
  webfont.GoogleFontApi.NAME = 'google';
11
11
 
12
12
  webfont.GoogleFontApi.prototype.supportUserAgent = function(userAgent, support) {
13
- support(userAgent.isSupportingWebFont());
13
+ support(userAgent.getBrowserInfo().hasWebFontSupport());
14
14
  };
15
15
 
16
16
  webfont.GoogleFontApi.prototype.getFontWatchRunnerCtor = function() {
@@ -3,22 +3,25 @@
3
3
  * @param {function(string, string)} activeCallback
4
4
  * @param {function(string, string)} inactiveCallback
5
5
  * @param {webfont.DomHelper} domHelper
6
- * @param {Object.<string, function(Object): number>} fontSizer
6
+ * @param {Object.<string, function(Object): webfont.Size>} fontSizer
7
7
  * @param {function(function(), number=)} asyncCall
8
8
  * @param {function(): number} getTime
9
9
  * @param {string} fontFamily
10
10
  * @param {string} fontDescription
11
+ * @param {boolean} hasWebkitFallbackBug
11
12
  * @param {string=} opt_fontTestString
12
13
  * @extends webfont.FontWatchRunner
13
14
  */
14
15
  webfont.LastResortWebKitFontWatchRunner = function(activeCallback,
15
16
  inactiveCallback, domHelper, fontSizer, asyncCall, getTime, fontFamily,
16
- fontDescription, opt_fontTestString) {
17
+ fontDescription, hasWebkitFallbackBug, opt_fontTestString) {
17
18
  webfont.LastResortWebKitFontWatchRunner.superCtor_.call(this,
18
19
  activeCallback, inactiveCallback, domHelper, fontSizer, asyncCall,
19
- getTime, fontFamily, fontDescription, opt_fontTestString);
20
+ getTime, fontFamily, fontDescription, hasWebkitFallbackBug, opt_fontTestString);
20
21
  this.webKitLastResortFontSizes_ = this.setUpWebKitLastResortFontSizes_();
21
22
  this.webKitLastResortSizeChange_ = false;
23
+ this.lastObservedSizeA_ = this.lastResortSizes_[webfont.FontWatchRunner.LastResortFonts.SERIF];
24
+ this.lastObservedSizeB_ = this.lastResortSizes_[webfont.FontWatchRunner.LastResortFonts.SANS_SERIF];;
22
25
  };
23
26
  webfont.extendsClass(webfont.FontWatchRunner, webfont.LastResortWebKitFontWatchRunner);
24
27
 
@@ -41,40 +44,41 @@ webfont.LastResortWebKitFontWatchRunner.prototype
41
44
  var lastResortFonts = ['Times New Roman', 'Arial', 'Times', 'Sans', 'Serif'];
42
45
  var lastResortFontSizes = lastResortFonts.length;
43
46
  var webKitLastResortFontSizes = {};
44
- var element = this.createHiddenElementWithFont_(lastResortFonts[0], true);
47
+ var fontRuler = new webfont.FontRuler(this.domHelper_, this.fontSizer_, this.fontTestString_);
45
48
 
46
- webKitLastResortFontSizes[this.fontSizer_.getWidth(element)] = true;
49
+ fontRuler.insert();
50
+ fontRuler.setFont(lastResortFonts[0], this.fontDescription_);
51
+
52
+ webKitLastResortFontSizes[fontRuler.getSize().width] = true;
47
53
  for (var i = 1; i < lastResortFontSizes; i++) {
48
54
  var font = lastResortFonts[i];
49
- this.domHelper_.setStyle(element, this.computeStyleString_(font,
50
- this.fontDescription_, true));
51
- webKitLastResortFontSizes[this.fontSizer_.getWidth(element)] = true;
55
+ fontRuler.setFont(font, this.fontDescription_);
56
+ webKitLastResortFontSizes[fontRuler.getSize().width] = true;
52
57
 
53
58
  // Another WebKit quirk if the normal weight/style is loaded first,
54
59
  // the size of the normal weight is returned when loading another weight.
55
60
  if (this.fontDescription_[1] != '4') {
56
- this.domHelper_.setStyle(element, this.computeStyleString_(font,
57
- this.fontDescription_[0] + '4', true));
58
- webKitLastResortFontSizes[this.fontSizer_.getWidth(element)] = true;
61
+ fontRuler.setFont(font, this.fontDescription_[0] + '4');
62
+ webKitLastResortFontSizes[fontRuler.getSize().width] = true;
59
63
  }
60
64
  }
61
- this.domHelper_.removeElement(element);
65
+ fontRuler.remove();
62
66
  return webKitLastResortFontSizes;
63
67
  };
64
68
 
65
69
  webfont.LastResortWebKitFontWatchRunner.prototype.check_ = function() {
66
- var sizeA = this.fontSizer_.getWidth(this.requestedFontA_);
67
- var sizeB = this.fontSizer_.getWidth(this.requestedFontB_);
70
+ var sizeA = this.fontRulerA_.getSize();
71
+ var sizeB = this.fontRulerB_.getSize();
68
72
 
69
- if (!this.webKitLastResortSizeChange_ && sizeA == sizeB &&
70
- this.webKitLastResortFontSizes_[sizeA]) {
73
+ if (!this.webKitLastResortSizeChange_ && sizeA.width == sizeB.width &&
74
+ this.webKitLastResortFontSizes_[sizeA.width]) {
71
75
  this.webKitLastResortFontSizes_ = {};
72
- this.webKitLastResortFontSizes_[sizeA] = true;
76
+ this.webKitLastResortFontSizes_[sizeA.width] = true;
73
77
  this.webKitLastResortSizeChange_ = true;
74
78
  }
75
- if ((this.originalSizeA_ != sizeA || this.originalSizeB_ != sizeB) &&
76
- (!this.webKitLastResortFontSizes_[sizeA] &&
77
- !this.webKitLastResortFontSizes_[sizeB])) {
79
+ if ((this.lastObservedSizeA_.width != sizeA.width || this.lastObservedSizeB_.width != sizeB.width) &&
80
+ (!this.webKitLastResortFontSizes_[sizeA.width] &&
81
+ !this.webKitLastResortFontSizes_[sizeB.width])) {
78
82
  this.finish_(this.activeCallback_);
79
83
  } else if (this.getTime_() - this.started_ >= 5000) {
80
84
 
@@ -82,8 +86,8 @@ webfont.LastResortWebKitFontWatchRunner.prototype.check_ = function() {
82
86
  // default browser font on a webkit browser, mark the font as active
83
87
  // after 5 seconds if the latest 2 sizes are in webKitLastResortFontSizes_
84
88
  // and the font name is known to be metrics compatible.
85
- if (this.webKitLastResortFontSizes_[sizeA]
86
- && this.webKitLastResortFontSizes_[sizeB] &&
89
+ if (this.webKitLastResortFontSizes_[sizeA.width]
90
+ && this.webKitLastResortFontSizes_[sizeB.width] &&
87
91
  webfont.LastResortWebKitFontWatchRunner.METRICS_COMPATIBLE_FONTS[
88
92
  this.fontFamily_]) {
89
93
  this.finish_(this.activeCallback_);
data/src/modules.yml CHANGED
@@ -1,12 +1,15 @@
1
1
  core:
2
2
  - core/namespace.js
3
3
  - core/domhelper.js
4
+ - core/browserinfo.js
4
5
  - core/useragent.js
5
6
  - core/useragentparser.js
6
7
  - core/eventdispatcher.js
7
8
  - core/fontmoduleloader.js
9
+ - core/size.js
8
10
  - core/fontwatcher.js
9
11
  - core/fontwatchrunner.js
12
+ - core/fontruler.js
10
13
  - core/font.js
11
14
  - core/cssclassname.js
12
15
  - core/cssfontfamilyname.js
@@ -55,7 +55,7 @@ webfont.MonotypeScript.prototype.supportUserAgent = function (userAgent, support
55
55
  }
56
56
  }
57
57
  }
58
- support(userAgent.isSupportingWebFont());
58
+ support(userAgent.getBrowserInfo().hasWebFontSupport());
59
59
  }
60
60
 
61
61
  var done = false;
@@ -5,8 +5,9 @@ FontTest.prototype.setUp = function() {
5
5
  };
6
6
 
7
7
  FontTest.prototype.testFontLoad = function() {
8
+ var browserInfo = new webfont.BrowserInfo(true, false);
8
9
  var userAgent = new webfont.UserAgent('Firefox', '3.6', 'Gecko', '1.9.2',
9
- 'Macintosh', '10.6', undefined, true);
10
+ 'Macintosh', '10.6', undefined, browserInfo);
10
11
  var font = new webfont.WebFont(window, this.fontModuleLoader_,
11
12
  function(func, timeout) { func(); }, userAgent);
12
13
  var testModule = null;
@@ -59,9 +60,9 @@ FontTest.prototype.testFontLoad = function() {
59
60
 
60
61
  FontTest.prototype.testFontLoadWithContext = function() {
61
62
  var fakeMainWindow = {};
62
-
63
+ var browserInfo = new webfont.BrowserInfo(true, false);
63
64
  var userAgent = new webfont.UserAgent('Firefox', '3.6', 'Gecko', '1.9.2',
64
- 'Macintosh', '10.6', undefined, true);
65
+ 'Macintosh', '10.6', undefined, browserInfo);
65
66
  var font = new webfont.WebFont(fakeMainWindow, this.fontModuleLoader_,
66
67
  function(func, timeout) { func(); }, userAgent);
67
68
  var testModule = null;
@@ -91,7 +92,8 @@ FontTest.prototype.testFontLoadWithContext = function() {
91
92
  };
92
93
 
93
94
  FontTest.prototype.testFontInactive = function() {
94
- var userAgent = new webfont.UserAgent('Firefox', '3.0', false);
95
+ var userAgent = new webfont.UserAgent('Firefox', '3.0', 'Gecko', '1.9.2',
96
+ 'Macintosh', '10.6', undefined, new webfont.BrowserInfo(false, false));
95
97
  var font = new webfont.WebFont(window, this.fontModuleLoader_,
96
98
  function(func, timeout) { func(); }, userAgent);
97
99
  var testModule;
@@ -35,9 +35,21 @@ FontWatcherTest.prototype.setUp = function() {
35
35
  }
36
36
  };
37
37
 
38
+ this.fakeDomHelper_ = {
39
+ createElement: function(name, attrs, innerHtml) {
40
+ var element = document.createElement(name);
41
+ return element;
42
+ },
43
+ insertInto: function() {},
44
+ removeElement: function() {},
45
+ setStyle: function() {}
46
+ };
47
+
48
+ this.userAgent_ = new webfont.UserAgent('Firefox', '3.6', 'Gecko', '1.9.2', 'Macintosh', '10.6', undefined, new webfont.BrowserInfo(false, false));
49
+
38
50
  this.fakeFontSizer_ = {
39
- getWidth: function() {
40
- fail('Fake getWidth should not be called.');
51
+ getSize: function() {
52
+ fail('Fake getSize should not be called.');
41
53
  }
42
54
  };
43
55
 
@@ -55,7 +67,7 @@ FontWatcherTest.prototype.setUp = function() {
55
67
  this.testStringCount_ = 0;
56
68
  this.testStrings_ = {};
57
69
  webfont.FontWatchRunner = function(activeCallback, inactiveCallback, domHelper,
58
- fontSizer, asyncCall, getTime, fontFamily, fontDescription, opt_fontTestString) {
70
+ fontSizer, asyncCall, getTime, fontFamily, fontDescription, hasWebkitFallbackBug, opt_metricCompatibleFonts, opt_fontTestString) {
59
71
  if (opt_fontTestString) {
60
72
  self.testStringCount_++;
61
73
  self.testStrings_[fontFamily] = opt_fontTestString;
@@ -84,7 +96,7 @@ FontWatcherTest.prototype.testWatchOneFontNotLast = function() {
84
96
  var fontFamilies = [ 'fontFamily1' ];
85
97
  this.fontWatchRunnerActiveFamilies_ = [ 'fontFamily1' ];
86
98
 
87
- var fontWatcher = new webfont.FontWatcher(this.fakeDomHelper_, this.fakeEventDispatcher_,
99
+ var fontWatcher = new webfont.FontWatcher(this.userAgent_, this.fakeDomHelper_, this.fakeEventDispatcher_,
88
100
  this.fakeFontSizer_, this.fakeAsyncCall_, this.fakeGetTime_);
89
101
 
90
102
  fontWatcher.watch(fontFamilies, {}, {}, webfont.FontWatchRunner, false);
@@ -98,7 +110,7 @@ FontWatcherTest.prototype.testWatchOneFontActive = function() {
98
110
  var fontFamilies = [ 'fontFamily1' ];
99
111
  this.fontWatchRunnerActiveFamilies_ = [ 'fontFamily1' ];
100
112
 
101
- var fontWatcher = new webfont.FontWatcher(this.fakeDomHelper_, this.fakeEventDispatcher_,
113
+ var fontWatcher = new webfont.FontWatcher(this.userAgent_, this.fakeDomHelper_, this.fakeEventDispatcher_,
102
114
  this.fakeFontSizer_, this.fakeAsyncCall_, this.fakeGetTime_);
103
115
 
104
116
  fontWatcher.watch(fontFamilies, {}, {}, webfont.FontWatchRunner, true);
@@ -116,7 +128,7 @@ FontWatcherTest.prototype.testWatchOneFontInactive = function() {
116
128
  var fontFamilies = [ 'fontFamily1' ];
117
129
  this.fontWatchRunnerActiveFamilies_ = [];
118
130
 
119
- var fontWatcher = new webfont.FontWatcher(this.fakeDomHelper_, this.fakeEventDispatcher_,
131
+ var fontWatcher = new webfont.FontWatcher(this.userAgent_, this.fakeDomHelper_, this.fakeEventDispatcher_,
120
132
  this.fakeFontSizer_, this.fakeAsyncCall_, this.fakeGetTime_);
121
133
 
122
134
  fontWatcher.watch(fontFamilies, {}, {}, webfont.FontWatchRunner, true);
@@ -134,7 +146,7 @@ FontWatcherTest.prototype.testWatchMultipleFontsActive = function() {
134
146
  var fontFamilies = [ 'fontFamily1', 'fontFamily2', 'fontFamily3' ];
135
147
  this.fontWatchRunnerActiveFamilies_ = [ 'fontFamily1', 'fontFamily2', 'fontFamily3' ];
136
148
 
137
- var fontWatcher = new webfont.FontWatcher(this.fakeDomHelper_, this.fakeEventDispatcher_,
149
+ var fontWatcher = new webfont.FontWatcher(this.userAgent_, this.fakeDomHelper_, this.fakeEventDispatcher_,
138
150
  this.fakeFontSizer_, this.fakeAsyncCall_, this.fakeGetTime_);
139
151
 
140
152
  fontWatcher.watch(fontFamilies, {}, {}, webfont.FontWatchRunner, true);
@@ -156,7 +168,7 @@ FontWatcherTest.prototype.testWatchMultipleFontsInactive = function() {
156
168
  var fontFamilies = [ 'fontFamily1', 'fontFamily2', 'fontFamily3' ];
157
169
  this.fontWatchRunnerActiveFamilies_ = [];
158
170
 
159
- var fontWatcher = new webfont.FontWatcher(this.fakeDomHelper_, this.fakeEventDispatcher_,
171
+ var fontWatcher = new webfont.FontWatcher(this.userAgent_, this.fakeDomHelper_, this.fakeEventDispatcher_,
160
172
  this.fakeFontSizer_, this.fakeAsyncCall_, this.fakeGetTime_);
161
173
 
162
174
  fontWatcher.watch(fontFamilies, {}, {}, webfont.FontWatchRunner, true);
@@ -178,7 +190,7 @@ FontWatcherTest.prototype.testWatchMultipleFontsMixed = function() {
178
190
  var fontFamilies = [ 'fontFamily1', 'fontFamily2', 'fontFamily3' ];
179
191
  this.fontWatchRunnerActiveFamilies_ = [ 'fontFamily1', 'fontFamily3' ];
180
192
 
181
- var fontWatcher = new webfont.FontWatcher(this.fakeDomHelper_, this.fakeEventDispatcher_,
193
+ var fontWatcher = new webfont.FontWatcher(this.userAgent_, this.fakeDomHelper_, this.fakeEventDispatcher_,
182
194
  this.fakeFontSizer_, this.fakeAsyncCall_, this.fakeGetTime_);
183
195
 
184
196
  fontWatcher.watch(fontFamilies, {}, {}, webfont.FontWatchRunner, true);
@@ -206,7 +218,7 @@ FontWatcherTest.prototype.testWatchMultipleFontsWithDescriptions = function() {
206
218
  'fontFamily3': ['n4', 'i4', 'n7']
207
219
  };
208
220
 
209
- var fontWatcher = new webfont.FontWatcher(this.fakeDomHelper_, this.fakeEventDispatcher_,
221
+ var fontWatcher = new webfont.FontWatcher(this.userAgent_, this.fakeDomHelper_, this.fakeEventDispatcher_,
210
222
  this.fakeFontSizer_, this.fakeAsyncCall_, this.fakeGetTime_);
211
223
 
212
224
  fontWatcher.watch(fontFamilies, fontDescriptions, {}, webfont.FontWatchRunner, true);
@@ -239,7 +251,7 @@ FontWatcherTest.prototype.testWatchMultipleFontsWithTestStrings = function() {
239
251
  'fontFamily4': null
240
252
  };
241
253
 
242
- var fontWatcher = new webfont.FontWatcher(this.fakeDomHelper_, this.fakeEventDispatcher_,
254
+ var fontWatcher = new webfont.FontWatcher(this.userAgent_, this.fakeDomHelper_, this.fakeEventDispatcher_,
243
255
  this.fakeFontSizer_, this.fakeAsyncCall_, this.fakeGetTime_);
244
256
 
245
257
  fontWatcher.watch(fontFamilies, {}, fontTestStrings, webfont.FontWatchRunner,
@@ -249,3 +261,27 @@ FontWatcherTest.prototype.testWatchMultipleFontsWithTestStrings = function() {
249
261
  assertEquals('testString1', this.testStrings_['fontFamily1']);
250
262
  assertEquals('testString3', this.testStrings_['fontFamily3']);
251
263
  };
264
+
265
+ FontWatcherTest.prototype.testNoWebkitBugDetectionOnNonWebkit = function() {
266
+ var ua = new webfont.UserAgent('Firefox', '3.6', 'Gecko', '1.9.2', 'Macintosh', '10.6', undefined, new webfont.BrowserInfo(true, false));
267
+ var fontWatcher = new webfont.FontWatcher(ua, this.fakeDomHelper_, this.fakeEventDispatcher_,
268
+ this.fakeFontSizer_, this.fakeAsyncCall_, this.fakeGetTime_);
269
+
270
+ assertEquals(false, fontWatcher.hasWebKitFallbackBug_);
271
+ };
272
+
273
+ FontWatcherTest.prototype.testNoWebkitBugDetectionOnNewWebkit = function() {
274
+ var ua = new webfont.UserAgent('Safari', '6.0.2', 'AppleWebKit', '537.6.17', 'Macintosh', '10_7_5', undefined, new webfont.BrowserInfo(true, false));
275
+ var fontWatcher = new webfont.FontWatcher(ua, this.fakeDomHelper_, this.fakeEventDispatcher_,
276
+ this.fakeFontSizer_, this.fakeAsyncCall_, this.fakeGetTime_);
277
+
278
+ assertEquals(false, fontWatcher.hasWebKitFallbackBug_);
279
+ };
280
+
281
+ FontWatcherTest.prototype.testYesWebkitBugDetectionOnOlderWebkit = function() {
282
+ var ua = new webfont.UserAgent('Chrome', '16.0.912.75', 'AppleWebKit', '535.7', 'Android', '4.0.3', undefined, new webfont.BrowserInfo(true, true));
283
+ var fontWatcher = new webfont.FontWatcher(ua, this.fakeDomHelper_, this.fakeEventDispatcher_,
284
+ this.fakeFontSizer_, this.fakeAsyncCall_, this.fakeGetTime_);
285
+
286
+ assertEquals(true, fontWatcher.hasWebKitFallbackBug_);
287
+ };