Index: src/main/java/hudson/plugins/selenium/ComputerListenerImpl.java =================================================================== --- src/main/java/hudson/plugins/selenium/ComputerListenerImpl.java (revision 35503) +++ src/main/java/hudson/plugins/selenium/ComputerListenerImpl.java (working copy) @@ -95,6 +95,11 @@ userArgs.add(p.getRcFirefoxProfileTemplate()); } + final String userExtensions = p.getRcUserExtensions(); + if (hasText(userExtensions)) { + userArgs.add("-userExtensions"); + userArgs.add("user-extensions.js"); + } // make sure that Selenium Hub is started before we start RCs. try { @@ -115,7 +120,7 @@ ss.close(); String[] defaultArgs = new String[] {"-host",hostName,"-port",String.valueOf(port),"-env",labelList.toString(),"-hubURL","http://"+masterName+":"+masterPort+"/" }; - PluginImpl.createSeleniumRCVM(f,listener).callAsync( + PluginImpl.createSeleniumRCVM(f,listener, userExtensions).callAsync( new RemoteControlLauncher((String[]) ArrayUtils.addAll(defaultArgs, userArgs.toArray(new String[0])))); } } catch (Exception t) { Index: src/main/java/hudson/plugins/selenium/PluginImpl.java =================================================================== --- src/main/java/hudson/plugins/selenium/PluginImpl.java (revision 35503) +++ src/main/java/hudson/plugins/selenium/PluginImpl.java (working copy) @@ -64,6 +64,7 @@ private boolean rcDebug; private boolean rcTrustAllSSLCerts; private String rcFirefoxProfileTemplate; + private String rcUserExtensions; private String rcLog; private String hubLogLevel = "INFO"; @@ -98,6 +99,7 @@ rcBrowserSideLog = formData.getBoolean("rcBrowserSideLog"); rcTrustAllSSLCerts = formData.getBoolean("rcTrustAllSSLCerts"); rcFirefoxProfileTemplate = formData.getString("rcFirefoxProfileTemplate"); + rcUserExtensions = formData.getString("rcUserExtensions"); hubLogLevel = formData.getString("hubLogLevel"); try { save(); @@ -162,6 +164,11 @@ } @Exported + public String getRcUserExtensions() { + return rcUserExtensions; + } + + @Exported public String getHubLogLevel(){ return hubLogLevel != null ? hubLogLevel : "INFO"; } @@ -197,7 +204,7 @@ * The slave/master root. */ static /*package*/ Channel createSeleniumGridVM(File rootDir, TaskListener listener) throws IOException, InterruptedException { - FilePath distDir = install(rootDir, listener); + FilePath distDir = install(rootDir, listener, null); return Channels.newJVM("Selenium Grid",listener,distDir, new ClasspathBuilder().addAll(distDir,"lib/selenium-grid-hub-standalone-*.jar, lib/log4j-*.jar"), null); @@ -209,17 +216,22 @@ * @param rootDir * The slave/master root. */ - static /*package*/ Channel createSeleniumRCVM(File rootDir, TaskListener listener) throws IOException, InterruptedException { - FilePath distDir = install(rootDir, listener); + static /*package*/ Channel createSeleniumRCVM(File rootDir, TaskListener listener, String userExtensions) throws IOException, InterruptedException { + FilePath distDir = install(rootDir, listener, userExtensions); return Channels.newJVM("Selenium RC",listener,distDir, new ClasspathBuilder() .addAll(distDir,"vendor/selenium-server-*.jar, lib/selenium-grid-remote-control-*.jar, lib/commons-httpclient-*.jar"), null); } - private static FilePath install(File rootDir, TaskListener listener) throws IOException, InterruptedException { + private static FilePath install(File rootDir, TaskListener listener, String userExtensions) throws IOException, InterruptedException { FilePath distDir = new FilePath(new File(rootDir,"selenium-grid")); distDir.installIfNecessaryFrom(PluginImpl.class.getResource("selenium-grid.tgz"),listener,"Installing Selenium Grid binaries"); + if (userExtensions != null) { + // Write user-extensions.js to the distDir, so Selenium can find it + FilePath userExtensionsFilePath = new FilePath(distDir, "user-extensions.js"); + userExtensionsFilePath.write(userExtensions, null); + } return distDir; } Index: src/main/resources/hudson/plugins/selenium/PluginImpl/config.jelly =================================================================== --- src/main/resources/hudson/plugins/selenium/PluginImpl/config.jelly (revision 35503) +++ src/main/resources/hudson/plugins/selenium/PluginImpl/config.jelly (working copy) @@ -22,6 +22,9 @@ + + +