2828import org .openqa .selenium .remote .ExecuteMethod ;
2929import org .openqa .selenium .remote .http .HttpMethod ;
3030
31+ import java .io .FileOutputStream ;
3132import java .io .IOException ;
33+ import java .nio .file .FileVisitResult ;
3234import java .nio .file .Files ;
3335import java .nio .file .Path ;
36+ import java .nio .file .Paths ;
37+ import java .nio .file .SimpleFileVisitor ;
38+ import java .nio .file .attribute .BasicFileAttributes ;
3439import java .util .Base64 ;
3540import java .util .Map ;
3641import java .util .function .Predicate ;
42+ import java .util .zip .ZipEntry ;
43+ import java .util .zip .ZipOutputStream ;
3744
3845import 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 );
0 commit comments