Skip to content

Commit 44f1fd9

Browse files
committed
[java] use addon parameter with base64 encoding instead of path parameter that requires using file detector and upload
1 parent b511a7d commit 44f1fd9

3 files changed

Lines changed: 42 additions & 50 deletions

File tree

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

Lines changed: 11 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -20,26 +20,22 @@
2020
import com.google.auto.service.AutoService;
2121
import com.google.common.collect.ImmutableMap;
2222
import org.openqa.selenium.Capabilities;
23-
import org.openqa.selenium.WebDriver;
24-
import org.openqa.selenium.WebDriverException;
25-
import org.openqa.selenium.WrapsDriver;
23+
import org.openqa.selenium.InvalidArgumentException;
2624
import org.openqa.selenium.internal.Require;
27-
import org.openqa.selenium.io.Zip;
2825
import org.openqa.selenium.remote.AdditionalHttpCommands;
2926
import org.openqa.selenium.remote.AugmenterProvider;
3027
import org.openqa.selenium.remote.CommandInfo;
3128
import org.openqa.selenium.remote.ExecuteMethod;
32-
import org.openqa.selenium.remote.RemoteWebDriver;
3329
import org.openqa.selenium.remote.http.HttpMethod;
3430

35-
import java.io.File;
3631
import java.io.IOException;
32+
import java.nio.file.Files;
3733
import java.nio.file.Path;
34+
import java.util.Base64;
3835
import java.util.Map;
3936
import java.util.function.Predicate;
4037

4138
import static org.openqa.selenium.remote.Browser.FIREFOX;
42-
import static org.openqa.selenium.remote.DriverCommand.UPLOAD_FILE;
4339

4440
@AutoService({AdditionalHttpCommands.class, AugmenterProvider.class})
4541
public class AddHasExtensions implements AugmenterProvider<HasExtensions>, AdditionalHttpCommands {
@@ -73,23 +69,16 @@ public HasExtensions getImplementation(Capabilities capabilities, ExecuteMethod
7369
public String installExtension(Path path) {
7470
Require.nonNull("Extension Path", path);
7571

76-
if (executeMethod instanceof WrapsDriver) {
77-
WebDriver wrapped = ((WrapsDriver) executeMethod).getWrappedDriver();
78-
if (wrapped instanceof RemoteWebDriver) {
79-
File localFile = ((RemoteWebDriver) wrapped).getFileDetector().getLocalFile(path.toString());
80-
if (localFile != null) {
81-
try {
82-
String zip = Zip.zip(localFile);
83-
String newPath = (String) executeMethod.execute(UPLOAD_FILE, ImmutableMap.of("file", zip));
84-
return installExtensionAtPath(newPath);
85-
} catch (IOException e) {
86-
throw new WebDriverException("Cannot upload " + localFile, e);
87-
}
88-
}
89-
}
72+
String encoded;
73+
try {
74+
encoded = Base64.getEncoder().encodeToString(Files.readAllBytes(path));
75+
} catch (IOException e) {
76+
throw new InvalidArgumentException(path + " is an invalid path", e);
9077
}
9178

92-
return installExtensionAtPath(path.toString());
79+
return (String) executeMethod.execute(
80+
INSTALL_EXTENSION,
81+
ImmutableMap.of("addon", encoded, "temporary", false));
9382
}
9483

9584
@Override
@@ -98,12 +87,6 @@ public void uninstallExtension(String extensionId) {
9887

9988
executeMethod.execute(UNINSTALL_EXTENSION, ImmutableMap.of("id", extensionId));
10089
}
101-
102-
private String installExtensionAtPath(String path) {
103-
return (String) executeMethod.execute(
104-
INSTALL_EXTENSION,
105-
ImmutableMap.of("path", path, "temporary", false));
106-
}
10790
};
10891
}
10992
}

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

Lines changed: 21 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -17,21 +17,7 @@
1717

1818
package org.openqa.selenium.firefox;
1919

20-
import static org.assertj.core.api.Assertions.assertThat;
21-
import static org.junit.Assert.fail;
22-
import static org.junit.Assume.assumeNotNull;
23-
import static org.mockito.Mockito.atLeastOnce;
24-
import static org.mockito.Mockito.doThrow;
25-
import static org.mockito.Mockito.mock;
26-
import static org.mockito.Mockito.spy;
27-
import static org.mockito.Mockito.verify;
28-
import static org.openqa.selenium.WaitingConditions.elementValueToEqual;
29-
import static org.openqa.selenium.remote.CapabilityType.ACCEPT_SSL_CERTS;
30-
import static org.openqa.selenium.support.ui.ExpectedConditions.titleIs;
31-
import static org.openqa.selenium.testing.drivers.Browser.FIREFOX;
32-
3320
import com.google.common.collect.ImmutableMap;
34-
3521
import org.junit.After;
3622
import org.junit.Test;
3723
import org.mockito.ArgumentMatchers;
@@ -45,13 +31,13 @@
4531
import org.openqa.selenium.ParallelTestRunner;
4632
import org.openqa.selenium.ParallelTestRunner.Worker;
4733
import org.openqa.selenium.WebDriver;
34+
import org.openqa.selenium.WebDriverException;
4835
import org.openqa.selenium.WebElement;
4936
import org.openqa.selenium.build.InProject;
5037
import org.openqa.selenium.remote.CapabilityType;
5138
import org.openqa.selenium.remote.Command;
5239
import org.openqa.selenium.remote.CommandExecutor;
5340
import org.openqa.selenium.remote.DriverCommand;
54-
import org.openqa.selenium.remote.LocalFileDetector;
5541
import org.openqa.selenium.remote.RemoteWebDriver;
5642
import org.openqa.selenium.remote.SessionId;
5743
import org.openqa.selenium.remote.UnreachableBrowserException;
@@ -73,6 +59,19 @@
7359
import java.util.List;
7460
import java.util.Random;
7561

62+
import static org.assertj.core.api.Assertions.assertThat;
63+
import static org.junit.Assert.fail;
64+
import static org.junit.Assume.assumeNotNull;
65+
import static org.mockito.Mockito.atLeastOnce;
66+
import static org.mockito.Mockito.doThrow;
67+
import static org.mockito.Mockito.mock;
68+
import static org.mockito.Mockito.spy;
69+
import static org.mockito.Mockito.verify;
70+
import static org.openqa.selenium.WaitingConditions.elementValueToEqual;
71+
import static org.openqa.selenium.remote.CapabilityType.ACCEPT_SSL_CERTS;
72+
import static org.openqa.selenium.support.ui.ExpectedConditions.titleIs;
73+
import static org.openqa.selenium.testing.drivers.Browser.FIREFOX;
74+
7675
public class FirefoxDriverTest extends JUnit4TestBase {
7776

7877
private static char[] CHARS =
@@ -503,12 +502,14 @@ public void testFirefoxCanNativelyClickOverlappingElements() {
503502
public void canAddRemoveExtensions() {
504503
Path extension = InProject.locate("third_party/firebug/favourite_colour-1.1-an+fx.xpi");
505504

506-
if (driver.getClass().equals(RemoteWebDriver.class)) {
507-
((RemoteWebDriver) driver).setFileDetector(new LocalFileDetector());
508-
}
509-
510505
String id = ((HasExtensions) driver).installExtension(extension);
511-
((HasExtensions) driver).uninstallExtension(id);
506+
assertThat(id).isEqualTo("[email protected]");
507+
508+
try {
509+
((HasExtensions) driver).uninstallExtension(id);
510+
} catch (WebDriverException ex) {
511+
fail(ex.getMessage());
512+
}
512513
}
513514

514515
@Test

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

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import org.openqa.selenium.JavascriptExecutor;
2222
import org.openqa.selenium.OutputType;
2323
import org.openqa.selenium.WebDriver;
24+
import org.openqa.selenium.WebDriverException;
2425
import org.openqa.selenium.build.InProject;
2526
import org.openqa.selenium.testing.JUnit4TestBase;
2627
import org.openqa.selenium.testing.NoDriverAfterTest;
@@ -31,15 +32,22 @@
3132
import java.nio.file.Path;
3233

3334
import static org.assertj.core.api.Assertions.assertThat;
35+
import static org.junit.Assert.fail;
3436

3537
public class RemoteFirefoxDriverTest extends JUnit4TestBase {
3638

3739
@Test
3840
@NoDriverAfterTest
3941
public void shouldAllowRemoteWebDriverBuilderToUseHasExtensions() {
4042
Path extension = InProject.locate("third_party/firebug/favourite_colour-1.1-an+fx.xpi");
41-
((HasExtensions) driver).installExtension(extension);
42-
((HasExtensions) driver).uninstallExtension("[email protected]");
43+
String id = ((HasExtensions) driver).installExtension(extension);
44+
assertThat(id).isEqualTo("[email protected]");
45+
46+
try {
47+
((HasExtensions) driver).uninstallExtension(id);
48+
} catch (WebDriverException ex) {
49+
fail(ex.getMessage());
50+
}
4351
}
4452

4553
@Test

0 commit comments

Comments
 (0)