package org.jboss.arquillian.drone.webdriver.binary.handler;
import java.util.regex.Pattern;
import org.jboss.arquillian.drone.webdriver.binary.downloading.source.ExternalBinarySource;
import org.jboss.arquillian.drone.webdriver.binary.downloading.source.GoogleStorageSource;
import org.jboss.arquillian.drone.webdriver.factory.BrowserCapabilitiesList;
import org.jboss.arquillian.drone.webdriver.utils.HttpClient;
import org.jboss.arquillian.drone.webdriver.utils.PlatformUtils;
import org.openqa.selenium.remote.DesiredCapabilities;
/**
* A class for handling chromeDriver binaries
*/
public class ChromeDriverBinaryHandler extends AbstractBinaryHandler {
public static final String CHROME_SYSTEM_DRIVER_BINARY_PROPERTY = "webdriver.chrome.driver";
public static final String CHROME_DRIVER_BINARY_PROPERTY = "chromeDriverBinary";
private static final String CHROME_DRIVER_VERSION_PROPERTY = "chromeDriverVersion";
private static final String CHROME_DRIVER_URL_PROPERTY = "chromeDriverUrl";
private DesiredCapabilities capabilities;
public ChromeDriverBinaryHandler(DesiredCapabilities capabilities) {
this.capabilities = capabilities;
}
@Override
protected String getArquillianCacheSubdirectory() {
return new BrowserCapabilitiesList.Chrome().getReadableName();
}
@Override
protected String getDesiredVersionProperty() {
return CHROME_DRIVER_VERSION_PROPERTY;
}
@Override
protected String getUrlToDownloadProperty() {
return CHROME_DRIVER_URL_PROPERTY;
}
@Override
protected ExternalBinarySource getExternalBinarySource() {
return new ChromeStorageSources("https://chromedriver.storage.googleapis.com/");
}
@Override
protected DesiredCapabilities getCapabilities() {
return capabilities;
}
@Override
protected String getBinaryProperty() {
return CHROME_DRIVER_BINARY_PROPERTY;
}
@Override
public String getSystemBinaryProperty() {
return CHROME_SYSTEM_DRIVER_BINARY_PROPERTY;
}
private class ChromeStorageSources extends GoogleStorageSource {
ChromeStorageSources(String baseUrl) {
super(baseUrl, baseUrl + "LATEST_RELEASE", new HttpClient());
}
protected String getExpectedKeyRegex(String requiredVersion, String directory) {
StringBuilder fileName = new StringBuilder(requiredVersion).append("/chromedriver_");
if (PlatformUtils.isMac()) {
fileName.append("mac64");
} else if (PlatformUtils.isWindows()) {
fileName.append("win32");
} else if (PlatformUtils.isUnix()) {
fileName.append("linux");
if (PlatformUtils.is32()) {
fileName.append("32");
} else {
fileName.append("64");
}
}
return Pattern.quote(fileName.append(".zip").toString());
}
}
}