blob: bb2df95f6d76b912f7d350a2f911fa5d7ab04514 [file] [log] [blame]
// Copyright 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.android_webview;
import org.chromium.base.annotations.CalledByNativeUnchecked;
import org.chromium.base.annotations.JNINamespace;
import java.util.concurrent.Executor;
/**
* Manages proxy override functionality in WebView.
*/
@JNINamespace("android_webview")
public class AwProxyController {
public AwProxyController() {}
public String setProxyOverride(
String[][] proxyRules, String[] bypassRules, Runnable listener, Executor executor) {
int length = (proxyRules == null ? 0 : proxyRules.length);
String[] urlSchemes = new String[length];
String[] proxyUrls = new String[length];
for (int i = 0; i < length; i++) {
// URL schemes
if (proxyRules[i][0] == null) {
urlSchemes[i] = "*";
} else {
urlSchemes[i] = proxyRules[i][0];
}
// proxy URLs
proxyUrls[i] = proxyRules[i][1];
if (proxyUrls[i] == null) {
return "Proxy rule " + i + " has a null url";
}
}
length = (bypassRules == null ? 0 : bypassRules.length);
for (int i = 0; i < length; i++) {
if (bypassRules[i] == null) {
return "Bypass rule " + i + " is null";
}
}
if (executor == null) {
return "Executor must not be null";
}
return nativeSetProxyOverride(urlSchemes, proxyUrls, bypassRules, listener, executor);
}
public String clearProxyOverride(Runnable listener, Executor executor) {
if (executor == null) {
return "Executor must not be null";
}
nativeClearProxyOverride(listener, executor);
return "";
}
@CalledByNativeUnchecked
private void proxyOverrideChanged(Runnable listener, Executor executor) {
if (listener == null) return;
executor.execute(listener);
}
private native String nativeSetProxyOverride(String[] urlSchemes, String[] proxyUrls,
String[] bypassRules, Runnable listener, Executor executor);
private native void nativeClearProxyOverride(Runnable listener, Executor executor);
}