public File addExtension(Class<?> loadResourcesUsing, String loadFrom) throws IOException { // Is loadFrom a file? File file = new File(loadFrom); if (file.exists()) { addExtension(file); return file; } // Try and load it from the classpath InputStream resource = loadResourcesUsing.getResourceAsStream(loadFrom); if (resource == null && !loadFrom.startsWith("/")) { resource = loadResourcesUsing.getResourceAsStream("/" + loadFrom); } if (resource == null) { resource = FirefoxProfile.class.getResourceAsStream(loadFrom); } if (resource == null && !loadFrom.startsWith("/")) { resource = FirefoxProfile.class.getResourceAsStream("/" + loadFrom); } if (resource == null) { throw new FileNotFoundException("Cannot locate resource with name: " + loadFrom); } File root; if (FileHandler.isZipped(loadFrom)) { root = FileHandler.unzip(resource); } else { throw new WebDriverException("Will only install zipped extensions for now"); } addExtension(root); return root; }
/** * Attempt to add an extension to install into this instance. * * @param extensionToInstall * @throws IOException */ public void addExtension(File extensionToInstall) throws IOException { if (!extensionToInstall.isDirectory() && !FileHandler.isZipped(extensionToInstall.getAbsolutePath())) { throw new IOException("Can only install from a zip file, an XPI or a directory"); } File root = obtainRootDirectory(extensionToInstall); String id = readIdFromInstallRdf(root); File extensionDirectory = new File(extensionsDir, id); if (extensionDirectory.exists() && !FileHandler.delete(extensionDirectory)) { throw new IOException("Unable to delete existing extension directory: " + extensionDirectory); } FileHandler.createDir(extensionDirectory); FileHandler.makeWritable(extensionDirectory); FileHandler.copy(root, extensionDirectory); }
private File obtainRootDirectory(File extensionToInstall) throws IOException { File root = extensionToInstall; if (!extensionToInstall.isDirectory()) { BufferedInputStream bis = new BufferedInputStream(new FileInputStream(extensionToInstall)); try { root = FileHandler.unzip(bis); } finally { bis.close(); } } return root; }
protected void installDevelopmentExtension() throws IOException { if (!FileHandler.createDir(extensionsDir)) throw new IOException( "Cannot create extensions directory: " + extensionsDir.getAbsolutePath()); String home = findFirefoxExtensionRootInSourceCode(); File writeTo = new File(extensionsDir, EXTENSION_NAME); if (writeTo.exists() && !FileHandler.delete(writeTo)) { throw new IOException( "Cannot delete existing extensions directory: " + extensionsDir.getAbsolutePath()); } FileWriter writer = null; try { writer = new FileWriter(writeTo); writer.write(home); } catch (IOException e) { throw new WebDriverException(e); } finally { Cleanly.close(writer); } }
public FirefoxProfile createCopy(int port) { File to = TemporaryFilesystem.createTempDir("webdriver", "profilecopy"); try { FileHandler.copy(profileDir, to); } catch (IOException e) { throw new WebDriverException( "Cannot create copy of profile " + profileDir.getAbsolutePath(), e); } FirefoxProfile profile = new FirefoxProfile(to); additionalPrefs.addTo(profile); profile.setPort(port); profile.setEnableNativeEvents(enableNativeEvents); profile.updateUserPrefs(); return profile; }