Commit 39172548 authored by Laís Minchillo's avatar Laís Minchillo Committed by Commit Bot

[aw] Post proxy override methods to the UI thread

Bug: 918350
Change-Id: Ieac9c9e1590c4cfe8f39d9f9bdfd510b41be616e
Reviewed-on: https://chromium-review.googlesource.com/c/1392719Reviewed-by: default avatarTobias Sargeant <tobiasjs@chromium.org>
Commit-Queue: Laís Minchillo <laisminchillo@chromium.org>
Cr-Commit-Position: refs/heads/master@{#619438}
parent f7bf7332
......@@ -16,7 +16,7 @@ import java.util.concurrent.Executor;
public class AwProxyController {
public AwProxyController() {}
public void setProxyOverride(
public String setProxyOverride(
String[][] proxyRules, String[] bypassRules, Runnable listener, Executor executor) {
int length = (proxyRules == null ? 0 : proxyRules.length);
String[] urlSchemes = new String[length];
......@@ -31,31 +31,29 @@ public class AwProxyController {
// proxy URLs
proxyUrls[i] = proxyRules[i][1];
if (proxyUrls[i] == null) {
throw new NullPointerException("Proxy rule " + i + " has a null url");
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) {
throw new NullPointerException("Bypass rule " + i + " is null");
return "Bypass rule " + i + " is null";
}
}
if (executor == null) {
throw new NullPointerException("Executor must not be null");
return "Executor must not be null";
}
String result =
nativeSetProxyOverride(urlSchemes, proxyUrls, bypassRules, listener, executor);
if (!result.isEmpty()) {
throw new IllegalArgumentException(result);
}
return nativeSetProxyOverride(urlSchemes, proxyUrls, bypassRules, listener, executor);
}
public void clearProxyOverride(Runnable listener, Executor executor) {
public String clearProxyOverride(Runnable listener, Executor executor) {
if (executor == null) {
throw new NullPointerException("Executor must not be null");
return "Executor must not be null";
}
nativeClearProxyOverride(listener, executor);
return "";
}
@CalledByNativeUnchecked
......@@ -67,4 +65,4 @@ public class AwProxyController {
private native String nativeSetProxyOverride(String[] urlSchemes, String[] proxyUrls,
String[] bypassRules, Runnable listener, Executor executor);
private native void nativeClearProxyOverride(Runnable listener, Executor executor);
}
\ No newline at end of file
}
......@@ -5,6 +5,8 @@
package org.chromium.support_lib_glue;
import org.chromium.android_webview.AwProxyController;
import org.chromium.android_webview.WebViewChromiumRunQueue;
import org.chromium.base.ThreadUtils;
import org.chromium.support_lib_boundary.ProxyControllerBoundaryInterface;
import java.util.concurrent.Executor;
......@@ -13,20 +15,47 @@ import java.util.concurrent.Executor;
* Adapter between AwProxyController and ProxyControllerBoundaryInterface.
*/
public class SupportLibProxyControllerAdapter implements ProxyControllerBoundaryInterface {
private final WebViewChromiumRunQueue mRunQueue;
private final AwProxyController mProxyController;
public SupportLibProxyControllerAdapter(AwProxyController proxyController) {
public SupportLibProxyControllerAdapter(
WebViewChromiumRunQueue runQueue, AwProxyController proxyController) {
mRunQueue = runQueue;
mProxyController = proxyController;
}
@Override
public void setProxyOverride(
String[][] proxyRules, String[] bypassRules, Runnable listener, Executor executor) {
mProxyController.setProxyOverride(proxyRules, bypassRules, listener, executor);
String result;
if (checkNeedsPost()) {
result = mRunQueue.runOnUiThreadBlocking(() -> {
return mProxyController.setProxyOverride(
proxyRules, bypassRules, listener, executor);
});
} else {
result = mProxyController.setProxyOverride(proxyRules, bypassRules, listener, executor);
}
if (!result.isEmpty()) {
throw new IllegalArgumentException(result);
}
}
@Override
public void clearProxyOverride(Runnable listener, Executor executor) {
mProxyController.clearProxyOverride(listener, executor);
String result;
if (checkNeedsPost()) {
result = mRunQueue.runOnUiThreadBlocking(
() -> { return mProxyController.clearProxyOverride(listener, executor); });
} else {
result = mProxyController.clearProxyOverride(listener, executor);
}
if (!result.isEmpty()) {
throw new IllegalArgumentException(result);
}
}
}
\ No newline at end of file
private static boolean checkNeedsPost() {
return !ThreadUtils.runningOnUiThread();
}
}
......@@ -167,7 +167,8 @@ class SupportLibWebViewChromiumFactory implements WebViewProviderFactoryBoundary
synchronized (mAwInit.getLock()) {
if (mProxyController == null) {
mProxyController = BoundaryInterfaceReflectionUtil.createInvocationHandlerFor(
new SupportLibProxyControllerAdapter(mAwInit.getAwProxyController()));
new SupportLibProxyControllerAdapter(
mAwInit.getRunQueue(), mAwInit.getAwProxyController()));
}
}
return mProxyController;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment