Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Recognize Windows Phone 8 devices correctly #61

Merged
merged 2 commits into from Aug 17, 2012
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
32 changes: 32 additions & 0 deletions src-test/core/useragenttest.js
Expand Up @@ -148,6 +148,38 @@ UserAgentTest.prototype.testBrowserIsIEMinimal = function() {
assertTrue(userAgent.isSupportingWebFont());
};

UserAgentTest.prototype.testBrowserIsIEOnWindowsPhone = function() {
var userAgentParser = new webfont.UserAgentParser(
"Mozilla/5.0 (compatible; MSIE 10.0; Windows Phone 8.0; Trident/6.0; ARM; Touch; IEMobile/10.0; <Manufacturer>; <Device>; <Operator>)",
this.defaultDocument_);
var userAgent = userAgentParser.parse();

assertEquals("MSIE", userAgent.getName());
assertEquals("10.0", userAgent.getVersion());
assertEquals("Windows Phone", userAgent.getPlatform());
assertEquals("8.0", userAgent.getPlatformVersion());
assertEquals("MSIE", userAgent.getEngine());
assertEquals("10.0", userAgent.getEngineVersion());
assertEquals(undefined, userAgent.getDocumentMode());
assertTrue(userAgent.isSupportingWebFont());
};

UserAgentTest.prototype.testBrowserIsIEOnOldWindowsPhone = function() {
var userAgentParser = new webfont.UserAgentParser(
"Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; SAMSUNG; SGH-i917)",
this.defaultDocument_);
var userAgent = userAgentParser.parse();

assertEquals("MSIE", userAgent.getName());
assertEquals("9.0", userAgent.getVersion());
assertEquals("Windows Phone", userAgent.getPlatform());
assertEquals("7.5", userAgent.getPlatformVersion());
assertEquals("MSIE", userAgent.getEngine());
assertEquals("9.0", userAgent.getEngineVersion());
assertEquals(undefined, userAgent.getDocumentMode());
assertFalse(userAgent.isSupportingWebFont());
};

UserAgentTest.prototype.testBrowserIsIPhone = function() {
var userAgentParser = new webfont.UserAgentParser(
"Mozilla/5.0 (iPhone; U; CPU iPhone OS 3_1_2 like Mac OS X; en-us) AppleWebKit/528.18 (KHTML, like Gecko) Version/4.0 Mobile/7D11 Safari/528.16",
Expand Down
30 changes: 21 additions & 9 deletions src/core/useragentparser.js
Expand Up @@ -50,7 +50,7 @@ webfont.UserAgentParser.prototype.parse = function() {
*/
webfont.UserAgentParser.prototype.getPlatform_ = function() {
var mobileOs = this.getMatchingGroup_(this.userAgent_,
/(iPod|iPad|iPhone|Android)/, 1);
/(iPod|iPad|iPhone|Android|Windows Phone)/, 1);

if (mobileOs != "") {
return mobileOs;
Expand All @@ -76,6 +76,11 @@ webfont.UserAgentParser.prototype.getPlatformVersion_ = function() {
if (genericVersion) {
return genericVersion;
}
var winPhoneVersion = this.getMatchingGroup_(this.userAgent_,
/Windows Phone( OS)? ([^;)]+)/, 2);
if (winPhoneVersion) {
return winPhoneVersion;
}
var iVersion = this.getMatchingGroup_(this.userAgent_,
/(iPhone )?OS ([\d_]+)/, 2);
if (iVersion) {
Expand All @@ -101,25 +106,32 @@ webfont.UserAgentParser.prototype.isIe_ = function() {
* @private
*/
webfont.UserAgentParser.prototype.parseIeUserAgentString_ = function() {
// For IE we give MSIE as the engine name and the version of IE
// instead of the specific Trident engine name and version

var platform = this.getPlatform_();
var platformVersion = this.getPlatformVersion_();

var browser = this.getMatchingGroup_(this.userAgent_, /(MSIE [\d\w\.]+)/, 1);
var engineName = webfont.UserAgentParser.UNKNOWN;
var engineVersion = webfont.UserAgentParser.UNKNOWN;

if (browser != "") {
var pair = browser.split(' ');
var name = pair[0];
var version = pair[1];
var majorVersion = this.getMajorVersion_(version);
var majorPlatformVersion = this.getMajorVersion_(platformVersion);

var supportWebFont = (platform == "Windows" && majorVersion >= 6) ||
(platform == "Windows Phone" && majorPlatformVersion >= 8);

// For IE we give MSIE as the engine name and the version of IE
// instead of the specific Trident engine name and version
return new webfont.UserAgent(name, version, name, version,
this.getPlatform_(), this.getPlatformVersion_(),
this.getDocumentMode_(this.doc_), this.getMajorVersion_(version) >= 6);
platform, platformVersion, this.getDocumentMode_(this.doc_),
supportWebFont);
}

return new webfont.UserAgent("MSIE", webfont.UserAgentParser.UNKNOWN,
"MSIE", webfont.UserAgentParser.UNKNOWN,
this.getPlatform_(), this.getPlatformVersion_(),
this.getDocumentMode_(this.doc_), false);
platform, platformVersion, this.getDocumentMode_(this.doc_), false);
};

/**
Expand Down