Skip to content

Commit 89710bb

Browse files
authored
[java] Support for sending firefox addon directory as temporary in remote sessions
1 parent bcbd009 commit 89710bb

2 files changed

Lines changed: 44 additions & 1 deletion

File tree

java/src/org/openqa/selenium/firefox/AddHasExtensions.java

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,19 @@
2828
import org.openqa.selenium.remote.ExecuteMethod;
2929
import org.openqa.selenium.remote.http.HttpMethod;
3030

31+
import java.io.FileOutputStream;
3132
import java.io.IOException;
33+
import java.nio.file.FileVisitResult;
3234
import java.nio.file.Files;
3335
import java.nio.file.Path;
36+
import java.nio.file.Paths;
37+
import java.nio.file.SimpleFileVisitor;
38+
import java.nio.file.attribute.BasicFileAttributes;
3439
import java.util.Base64;
3540
import java.util.Map;
3641
import java.util.function.Predicate;
42+
import java.util.zip.ZipEntry;
43+
import java.util.zip.ZipOutputStream;
3744

3845
import static org.openqa.selenium.remote.Browser.FIREFOX;
3946

@@ -77,7 +84,12 @@ public String installExtension(Path path, Boolean temporary) {
7784

7885
String encoded;
7986
try {
80-
encoded = Base64.getEncoder().encodeToString(Files.readAllBytes(path));
87+
if (Files.isDirectory(path)) {
88+
encoded = Base64.getEncoder().encodeToString(Files.readAllBytes(zipDirectory(path)));
89+
}
90+
else {
91+
encoded = Base64.getEncoder().encodeToString(Files.readAllBytes(path));
92+
}
8193
} catch (IOException e) {
8294
throw new InvalidArgumentException(path + " is an invalid path", e);
8395
}
@@ -87,6 +99,22 @@ public String installExtension(Path path, Boolean temporary) {
8799
ImmutableMap.of("addon", encoded, "temporary", temporary));
88100
}
89101

102+
private Path zipDirectory(Path path) throws IOException {
103+
Path extZip = Paths.get(path.getFileName().toString()+".zip");
104+
try (ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(extZip.toFile()))) {
105+
Files.walkFileTree(path, new SimpleFileVisitor<Path>() {
106+
@Override
107+
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
108+
zos.putNextEntry(new ZipEntry(path.relativize(file).toString()));
109+
Files.copy(file, zos);
110+
zos.closeEntry();
111+
return FileVisitResult.CONTINUE;
112+
}
113+
});
114+
}
115+
return extZip;
116+
}
117+
90118
@Override
91119
public void uninstallExtension(String extensionId) {
92120
Require.nonNull("Extension ID", extensionId);

java/test/org/openqa/selenium/firefox/FirefoxDriverTest.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@
7878
public class FirefoxDriverTest extends JUnit4TestBase {
7979

8080
private static final String EXT_PATH = "common/extensions/webextensions-selenium-example.xpi";
81+
private static final String EXT_PATH_DIR = "common/extensions/webextensions-selenium-example";
8182
private static char[] CHARS =
8283
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890!\"§$%&/()+*~#',.-_:;\\"
8384
.toCharArray();
@@ -556,6 +557,20 @@ public void canAddRemoveTempExtensions() {
556557
}
557558
}
558559

560+
@Test
561+
public void canAddRemoveTempExtensionsDirectory() {
562+
Path extension = InProject.locate(EXT_PATH_DIR);
563+
564+
String id = ((HasExtensions) driver).installExtension(extension, true);
565+
assertThat(id).isEqualTo("[email protected]");
566+
567+
try {
568+
((HasExtensions) driver).uninstallExtension(id);
569+
} catch (WebDriverException ex) {
570+
fail(ex.getMessage());
571+
}
572+
}
573+
559574
@Test
560575
public void canTakeFullPageScreenshot() {
561576
File tempFile = ((HasFullPageScreenshot) driver).getFullPageScreenshotAs(OutputType.FILE);

0 commit comments

Comments
 (0)