Skip to content

Commit

Permalink
[bidi][java] Add storage module (#13675)
Browse files Browse the repository at this point in the history
  • Loading branch information
pujagani committed Mar 11, 2024
1 parent ffed982 commit 420f074
Show file tree
Hide file tree
Showing 16 changed files with 1,087 additions and 4 deletions.
1 change: 1 addition & 0 deletions java/src/org/openqa/selenium/bidi/BUILD.bazel
Expand Up @@ -28,6 +28,7 @@ java_library(
"browsingcontext/*.java",
"network/*.java",
"script/*.java",
"storage/*.java",
],
exclude = AUGMENTER_SRCS,
),
Expand Down
74 changes: 74 additions & 0 deletions java/src/org/openqa/selenium/bidi/Storage.java
@@ -0,0 +1,74 @@
// Licensed to the Software Freedom Conservancy (SFC) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The SFC licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.

package org.openqa.selenium.bidi;

import java.io.StringReader;
import java.util.Map;
import java.util.function.Function;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.bidi.storage.DeleteCookiesParameters;
import org.openqa.selenium.bidi.storage.GetCookiesParameters;
import org.openqa.selenium.bidi.storage.GetCookiesResult;
import org.openqa.selenium.bidi.storage.PartitionKey;
import org.openqa.selenium.bidi.storage.SetCookieParameters;
import org.openqa.selenium.internal.Require;
import org.openqa.selenium.json.Json;
import org.openqa.selenium.json.JsonInput;

public class Storage {
private static final Json JSON = new Json();

private final BiDi bidi;

private final Function<JsonInput, GetCookiesResult> getCookiesResultMapper =
jsonInput -> jsonInput.read(GetCookiesResult.class);

private final Function<JsonInput, PartitionKey> partitionKeyResultMapper =
jsonInput -> {
Map<String, Object> response = jsonInput.read(Map.class);
try (StringReader reader = new StringReader(JSON.toJson(response.get("partitionKey")));
JsonInput input = JSON.newInput(reader)) {
return input.read(PartitionKey.class);
}
};

public Storage(WebDriver driver) {
Require.nonNull("WebDriver", driver);

if (!(driver instanceof HasBiDi)) {
throw new IllegalArgumentException("WebDriver instance must support BiDi protocol");
}

this.bidi = ((HasBiDi) driver).getBiDi();
}

public GetCookiesResult getCookies(GetCookiesParameters params) {
return this.bidi.send(
new Command<>("storage.getCookies", params.toMap(), getCookiesResultMapper));
}

public PartitionKey setCookie(SetCookieParameters params) {
return this.bidi.send(
new Command<>("storage.setCookie", params.toMap(), partitionKeyResultMapper));
}

public PartitionKey deleteCookies(DeleteCookiesParameters params) {
return this.bidi.send(
new Command<>("storage.deleteCookies", params.toMap(), partitionKeyResultMapper));
}
}
4 changes: 2 additions & 2 deletions java/src/org/openqa/selenium/bidi/network/BytesValue.java
Expand Up @@ -21,7 +21,7 @@

public class BytesValue {

enum Type {
public enum Type {
STRING("string"),
BASE64("base64");

Expand All @@ -41,7 +41,7 @@ public String toString() {

private final String value;

private BytesValue(Type type, String value) {
public BytesValue(Type type, String value) {
this.type = type;
this.value = value;
}
Expand Down
4 changes: 2 additions & 2 deletions java/src/org/openqa/selenium/bidi/network/Cookie.java
Expand Up @@ -111,15 +111,15 @@ public static Cookie fromJson(JsonInput input) {
case "secure":
isSecure = input.read(Boolean.class);
break;
case "isHttpOnly":
case "httpOnly":
isHttpOnly = input.read(Boolean.class);
break;
case "sameSite":
String sameSiteValue = input.read(String.class);
sameSite = SameSite.findByName(sameSiteValue);
break;
case "expiry":
expiry = input.read(Long.class);
expiry = Optional.of(input.read(Long.class));
break;
default:
input.skipValue();
Expand Down
@@ -0,0 +1,38 @@
// Licensed to the Software Freedom Conservancy (SFC) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The SFC licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.

package org.openqa.selenium.bidi.storage;

import java.util.HashMap;
import java.util.Map;

public class BrowsingContextPartitionDescriptor extends PartitionDescriptor {
private final String context;

public BrowsingContextPartitionDescriptor(String context) {
super(Type.CONTEXT);
this.context = context;
}

public Map<String, Object> toMap() {
Map<String, Object> map = new HashMap<>();
map.put("type", super.type.toString());
map.put("context", this.context);

return map;
}
}
76 changes: 76 additions & 0 deletions java/src/org/openqa/selenium/bidi/storage/CookieFilter.java
@@ -0,0 +1,76 @@
// Licensed to the Software Freedom Conservancy (SFC) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The SFC licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.

package org.openqa.selenium.bidi.storage;

import java.util.HashMap;
import java.util.Map;
import org.openqa.selenium.bidi.network.BytesValue;
import org.openqa.selenium.bidi.network.Cookie;

public class CookieFilter {
private final Map<String, Object> map = new HashMap<>();

public CookieFilter name(String name) {
map.put("name", name);
return this;
}

public CookieFilter value(BytesValue value) {
map.put("value", value);
return this;
}

public CookieFilter domain(String domain) {
map.put("domain", domain);
return this;
}

public CookieFilter path(String path) {
map.put("path", path);
return this;
}

public CookieFilter size(long size) {
map.put("size", size);
return this;
}

public CookieFilter httpOnly(boolean httpOnly) {
map.put("httpOnly", httpOnly);
return this;
}

public CookieFilter secure(boolean secure) {
map.put("secure", secure);
return this;
}

public CookieFilter sameSite(Cookie.SameSite sameSite) {
map.put("sameSite", sameSite.toString());
return this;
}

public CookieFilter expiry(long expiry) {
map.put("expiry", expiry);
return this;
}

public Map<String, Object> toMap() {
return map;
}
}
@@ -0,0 +1,48 @@
// Licensed to the Software Freedom Conservancy (SFC) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The SFC licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
package org.openqa.selenium.bidi.storage;

import java.util.HashMap;
import java.util.Map;
import java.util.Optional;

public class DeleteCookiesParameters {
private Optional<CookieFilter> cookieFilter = Optional.empty();
private Optional<PartitionDescriptor> partitionDescriptor = Optional.empty();

public DeleteCookiesParameters(
CookieFilter cookieFilter, PartitionDescriptor partitionDescriptor) {
this.cookieFilter = Optional.of(cookieFilter);
this.partitionDescriptor = Optional.of(partitionDescriptor);
}

public DeleteCookiesParameters(CookieFilter cookieFilter) {
this.cookieFilter = Optional.of(cookieFilter);
}

public DeleteCookiesParameters(PartitionDescriptor partitionDescriptor) {
this.partitionDescriptor = Optional.of(partitionDescriptor);
}

public Map<String, Object> toMap() {
Map<String, Object> map = new HashMap<>();
cookieFilter.ifPresent(filter -> map.put("filter", cookieFilter));
partitionDescriptor.ifPresent(descriptor -> map.put("partition", partitionDescriptor));

return map;
}
}
@@ -0,0 +1,47 @@
// Licensed to the Software Freedom Conservancy (SFC) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The SFC licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
package org.openqa.selenium.bidi.storage;

import java.util.HashMap;
import java.util.Map;
import java.util.Optional;

public class GetCookiesParameters {
private Optional<CookieFilter> cookieFilter = Optional.empty();
private Optional<PartitionDescriptor> partitionDescriptor = Optional.empty();

public GetCookiesParameters(CookieFilter cookieFilter, PartitionDescriptor partitionDescriptor) {
this.cookieFilter = Optional.of(cookieFilter);
this.partitionDescriptor = Optional.of(partitionDescriptor);
}

public GetCookiesParameters(CookieFilter cookieFilter) {
this.cookieFilter = Optional.of(cookieFilter);
}

public GetCookiesParameters(PartitionDescriptor partitionDescriptor) {
this.partitionDescriptor = Optional.of(partitionDescriptor);
}

public Map<String, Object> toMap() {
Map<String, Object> map = new HashMap<>();
cookieFilter.ifPresent(filter -> map.put("filter", filter));
partitionDescriptor.ifPresent(descriptor -> map.put("partition", descriptor));

return map;
}
}

0 comments on commit 420f074

Please sign in to comment.