com.gargoylesoftware.htmlunit.BrowserVersion Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of vaadin-client-compiler-deps Show documentation
Show all versions of vaadin-client-compiler-deps Show documentation
Vaadin is a web application framework for Rich Internet Applications (RIA).
Vaadin enables easy development and maintenance of fast and
secure rich web
applications with a stunning look and feel and a wide browser support.
It features a server-side architecture with the majority of the logic
running
on the server. Ajax technology is used at the browser-side to ensure a
rich
and interactive user experience.
/*
* Copyright (c) 2002-2011 Gargoyle Software Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.gargoylesoftware.htmlunit;
import java.io.InputStream;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Properties;
import java.util.Set;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
/**
* Objects of this class represent one specific version of a given browser. Predefined
* constants are provided for common browser versions.
*
* If you wish to create a BrowserVersion for a browser that doesn't have a constant defined
* but aren't sure what values to pass into the constructor then point your browser at
*
* http://htmlunit.sourceforge.net/cgi-bin/browserVersion
* and the code will be generated for you.
*
* @version $Revision: 6439 $
* @author Mike Bowler
* @author Daniel Gredler
* @author Marc Guillemot
* @author Chris Erskine
* @author Ahmed Ashour
*/
public class BrowserVersion implements Serializable {
private String applicationCodeName_ = APP_CODE_NAME;
private String applicationMinorVersion_ = "0";
private String applicationName_;
private String applicationVersion_;
private String browserLanguage_ = LANGUAGE_ENGLISH_US;
private String cpuClass_ = CPU_CLASS_X86;
private boolean onLine_ = true;
private String platform_ = PLATFORM_WIN32;
private String systemLanguage_ = LANGUAGE_ENGLISH_US;
private String userAgent_;
private String userLanguage_ = LANGUAGE_ENGLISH_US;
private float browserVersionNumeric_;
private Set plugins_ = new HashSet();
private final List features_ = new ArrayList();
private final String nickname_;
/**
* Application code name for both Internet Explorer and Netscape series.
* @deprecated as of 2.8, without replacement
*/
@Deprecated
public static final String APP_CODE_NAME = "Mozilla";
/**
* Application name for the Internet Explorer series of browsers.
* @deprecated as of 2.8, without replacement
*/
@Deprecated
public static final String INTERNET_EXPLORER = "Microsoft Internet Explorer";
/**
* Application name the Netscape navigator series of browsers.
* @deprecated as of 2.8, without replacement
*/
@Deprecated
public static final String NETSCAPE = "Netscape";
/**
* United States English language identifier.
* @deprecated as of 2.8, without replacement
*/
@Deprecated
public static final String LANGUAGE_ENGLISH_US = "en-us";
/**
* The X86 CPU class.
* @deprecated as of 2.8, without replacement
*/
@Deprecated
public static final String CPU_CLASS_X86 = "x86";
/**
* The WIN32 platform.
* @deprecated as of 2.8, without replacement
*/
@Deprecated
public static final String PLATFORM_WIN32 = "Win32";
/**
* Firefox 3.0.
* @deprecated since HtmlUnit-2.9. This means that no effort will be made to improve
* simulation for this browser version until it is definitely removed.
*/
@Deprecated
public static final BrowserVersion FIREFOX_3 = new BrowserVersion(
NETSCAPE, "5.0 (Windows; en-US)",
"Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.19) Gecko/2010031422 Firefox/3.0.19",
3, "FF3", null);
/** Firefox 3.6. */
public static final BrowserVersion FIREFOX_3_6 = new BrowserVersion(
NETSCAPE, "5.0 (Windows; en-US)",
"Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8",
(float) 3.6, "FF3.6", null);
/** Internet Explorer 6. */
public static final BrowserVersion INTERNET_EXPLORER_6 = new BrowserVersion(
INTERNET_EXPLORER, "4.0 (compatible; MSIE 6.0b; Windows 98)",
"Mozilla/4.0 (compatible; MSIE 6.0; Windows 98)", 6, "IE6", null);
/** Internet Explorer 7. */
public static final BrowserVersion INTERNET_EXPLORER_7 = new BrowserVersion(
INTERNET_EXPLORER, "4.0 (compatible; MSIE 7.0; Windows NT 5.1)",
"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)", 7, "IE7", null);
/** Internet Explorer 8. */
public static final BrowserVersion INTERNET_EXPLORER_8 = new BrowserVersion(
INTERNET_EXPLORER, "4.0 (compatible; MSIE 8.0; Windows NT 6.0)",
"Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0)", 8, "IE8", null);
/** The default browser version. */
private static BrowserVersion DefaultBrowserVersion_ = INTERNET_EXPLORER_7;
/** Register plugins for the Firefox browser versions. */
static {
INTERNET_EXPLORER_6.initDefaultFeatures();
INTERNET_EXPLORER_7.initDefaultFeatures();
INTERNET_EXPLORER_8.initDefaultFeatures();
FIREFOX_3.initDefaultFeatures();
FIREFOX_3_6.initDefaultFeatures();
final PluginConfiguration flash = new PluginConfiguration("Shockwave Flash",
"Shockwave Flash 9.0 r31", "libflashplayer.so");
flash.getMimeTypes().add(new PluginConfiguration.MimeType("application/x-shockwave-flash",
"Shockwave Flash", "swf"));
FIREFOX_3.getPlugins().add(flash);
FIREFOX_3_6.getPlugins().add(flash);
}
/**
* Instantiates one.
*
* @param applicationName the name of the application
* @param applicationVersion the version string of the application
* @param userAgent the user agent string that will be sent to the server
* @param browserVersionNumeric the floating number version of the browser
*/
public BrowserVersion(final String applicationName, final String applicationVersion,
final String userAgent, final float browserVersionNumeric) {
this(applicationName, applicationVersion, userAgent,
browserVersionNumeric, applicationName + browserVersionNumeric, null);
}
/**
* Instantiates one.
*
* @param applicationName the name of the application
* @param applicationVersion the version string of the application
* @param userAgent the user agent string that will be sent to the server
* @param browserVersionNumeric the floating number version of the browser
* @param features the browser features
*/
public BrowserVersion(final String applicationName, final String applicationVersion,
final String userAgent, final float browserVersionNumeric,
final BrowserVersionFeatures[] features) {
this(applicationName, applicationVersion, userAgent,
browserVersionNumeric, applicationName + browserVersionNumeric, features);
}
/**
* Creates a new browser version instance.
*
* @param applicationName the name of the application
* @param applicationVersion the version string of the application
* @param userAgent the user agent string that will be sent to the server
* @param javaScriptVersion the version of JavaScript
* @param browserVersionNumeric the floating number version of the browser
* @param nickname the short name of the browser (like "FF3", "IE6", ...)
* @param features the browser features
*/
private BrowserVersion(final String applicationName, final String applicationVersion,
final String userAgent, final float browserVersionNumeric,
final String nickname, final BrowserVersionFeatures[] features) {
applicationName_ = applicationName;
setApplicationVersion(applicationVersion);
userAgent_ = userAgent;
browserVersionNumeric_ = browserVersionNumeric;
nickname_ = nickname;
if (features != null) {
features_.addAll(Arrays.asList(features));
}
}
private void initDefaultFeatures() {
InputStream stream = null;
try {
final Properties props = new Properties();
stream = getClass().getResourceAsStream("/com/gargoylesoftware/htmlunit/javascript/configuration/"
+ nickname_ + ".properties");
props.load(stream);
for (final Object key : props.keySet()) {
try {
features_.add(BrowserVersionFeatures.valueOf(key.toString()));
}
catch (final IllegalArgumentException iae) {
throw new RuntimeException("Invalid entry '"
+ key + "' found in configuration file for BrowserVersion: " + nickname_);
}
}
}
catch (final Exception e) {
throw new RuntimeException("Configuration file not found for BrowserVersion: " + nickname_);
}
finally {
IOUtils.closeQuietly(stream);
}
}
/**
* Returns the default browser version that is used whenever a specific version isn't specified.
* Defaults to {@link #INTERNET_EXPLORER_7}.
* @return the default browser version
*/
public static BrowserVersion getDefault() {
return DefaultBrowserVersion_;
}
/**
* Sets the default browser version that is used whenever a specific version isn't specified.
* @param newBrowserVersion the new default browser version
*/
public static void setDefault(final BrowserVersion newBrowserVersion) {
WebAssert.notNull("newBrowserVersion", newBrowserVersion);
DefaultBrowserVersion_ = newBrowserVersion;
}
/**
* Returns true if this BrowserVersion instance represents some
* version of Internet Explorer.
* @return whether or not this version is a version of IE
*/
public final boolean isIE() {
return INTERNET_EXPLORER.equals(getApplicationName());
}
/**
* Returns true if this BrowserVersion instance represents some
* version of Firefox like {@link #FIREFOX_3} or {@link #FIREFOX_3_6}.
* @return whether or not this version is a version of a Firefox browser
*/
public final boolean isFirefox() {
return NETSCAPE.equals(getApplicationName());
}
/**
* Returns the application code name, for example "Mozilla".
* Default value is {@link #APP_CODE_NAME} if not explicitly configured.
* @return the application code name
* @see MSDN documentation
*/
public String getApplicationCodeName() {
return applicationCodeName_;
}
/**
* Returns the application minor version, for example "0".
* Default value is "0" if not explicitly configured.
* @return the application minor version
* @see MSDN documentation
*/
public String getApplicationMinorVersion() {
return applicationMinorVersion_;
}
/**
* Returns the application name, for example "Microsoft Internet Explorer".
* @return the application name
* @see MSDN documentation
*/
public String getApplicationName() {
return applicationName_;
}
/**
* Returns the application version, for example "4.0 (compatible; MSIE 6.0b; Windows 98)".
* @return the application version
* @see MSDN documentation
*/
public String getApplicationVersion() {
return applicationVersion_;
}
/**
* Returns the browser application language, for example "en-us".
* Default value is {@link #LANGUAGE_ENGLISH_US} if not explicitly configured.
* @return the browser application language
* @see MSDN documentation
*/
public String getBrowserLanguage() {
return browserLanguage_;
}
/**
* Returns the type of CPU in the machine, for example "x86".
* Default value is {@link #CPU_CLASS_X86} if not explicitly configured.
* @return the type of CPU in the machine
* @see MSDN documentation
*/
public String getCpuClass() {
return cpuClass_;
}
/**
* Returns true if the browser is currently online.
* Default value is true
if not explicitly configured.
* @return true if the browser is currently online
* @see MSDN documentation
*/
public boolean isOnLine() {
return onLine_;
}
/**
* Returns the platform on which the application is running, for example "Win32".
* Default value is {@link #PLATFORM_WIN32} if not explicitly configured.
* @return the platform on which the application is running
* @see MSDN documentation
*/
public String getPlatform() {
return platform_;
}
/**
* Returns the system language, for example "en-us".
* Default value is {@link #LANGUAGE_ENGLISH_US} if not explicitly configured.
* @return the system language
* @see MSDN documentation
*/
public String getSystemLanguage() {
return systemLanguage_;
}
/**
* Returns the user agent string, for example "Mozilla/4.0 (compatible; MSIE 6.0b; Windows 98)".
* @return the user agent string
*/
public String getUserAgent() {
return userAgent_;
}
/**
* Returns the user language, for example "en-us".
* Default value is {@link #LANGUAGE_ENGLISH_US} if not explicitly configured.
* @return the user language
* @see MSDN documentation
*/
public String getUserLanguage() {
return userLanguage_;
}
/**
* @param applicationCodeName the applicationCodeName to set
*/
public void setApplicationCodeName(final String applicationCodeName) {
applicationCodeName_ = applicationCodeName;
}
/**
* @param applicationMinorVersion the applicationMinorVersion to set
*/
public void setApplicationMinorVersion(final String applicationMinorVersion) {
applicationMinorVersion_ = applicationMinorVersion;
}
/**
* @param applicationName the applicationName to set
*/
public void setApplicationName(final String applicationName) {
applicationName_ = applicationName;
}
/**
* @param applicationVersion the applicationVersion to set
*/
public void setApplicationVersion(final String applicationVersion) {
applicationVersion_ = applicationVersion;
}
/**
* @param browserLanguage the browserLanguage to set
*/
public void setBrowserLanguage(final String browserLanguage) {
browserLanguage_ = browserLanguage;
}
/**
* @param cpuClass the cpuClass to set
*/
public void setCpuClass(final String cpuClass) {
cpuClass_ = cpuClass;
}
/**
* @param onLine the onLine to set
*/
public void setOnLine(final boolean onLine) {
onLine_ = onLine;
}
/**
* @param platform the platform to set
*/
public void setPlatform(final String platform) {
platform_ = platform;
}
/**
* @param systemLanguage the systemLanguage to set
*/
public void setSystemLanguage(final String systemLanguage) {
systemLanguage_ = systemLanguage;
}
/**
* @param userAgent the userAgent to set
*/
public void setUserAgent(final String userAgent) {
userAgent_ = userAgent;
}
/**
* @param userLanguage the userLanguage to set
*/
public void setUserLanguage(final String userLanguage) {
userLanguage_ = userLanguage;
}
/**
* @param browserVersion the browserVersion to set
*/
public void setBrowserVersion(final float browserVersion) {
browserVersionNumeric_ = browserVersion;
}
/**
* @return the browserVersionNumeric
*/
public float getBrowserVersionNumeric() {
return browserVersionNumeric_;
}
/**
* {@inheritDoc}
*/
@Override
public boolean equals(final Object o) {
return EqualsBuilder.reflectionEquals(this, o);
}
/**
* {@inheritDoc}
*/
@Override
public int hashCode() {
return HashCodeBuilder.reflectionHashCode(this);
}
/**
* Returns the available plugins. This makes only sense for Firefox as only this
* browser makes this kind of information available via JavaScript.
* @return the available plugins
*/
public Set getPlugins() {
return plugins_;
}
/**
* Indicates if this instance has the given feature. Used for HtmlUnit internal processing.
* @param property the property name
* @return false
if this browser doesn't have this feature
*/
public boolean hasFeature(final BrowserVersionFeatures property) {
return features_.contains(property);
}
/**
* Returns the short name of the browser like "FF3", "IE7", ...
* This is used in different tests to reference the browser to which it applies.
* @return the short name (if any)
*/
public String getNickname() {
return nickname_;
}
}