Index: android_webview/glue/java/src/com/android/webview/chromium/ServiceWorkerClientAdapter.java |
diff --git a/android_webview/glue/java/src/com/android/webview/chromium/ServiceWorkerClientAdapter.java b/android_webview/glue/java/src/com/android/webview/chromium/ServiceWorkerClientAdapter.java |
new file mode 100644 |
index 0000000000000000000000000000000000000000..a1e272dc4b225585aca45137f8396d91f7c10ef6 |
--- /dev/null |
+++ b/android_webview/glue/java/src/com/android/webview/chromium/ServiceWorkerClientAdapter.java |
@@ -0,0 +1,91 @@ |
+// Copyright 2016 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 com.android.webview.chromium; |
+ |
+import android.annotation.TargetApi; |
+import android.net.Uri; |
+import android.os.Build; |
+import android.webkit.ServiceWorkerClient; |
+import android.webkit.WebResourceRequest; |
+import android.webkit.WebResourceResponse; |
+ |
+import org.chromium.android_webview.AwContentsClient.AwWebResourceRequest; |
+import org.chromium.android_webview.AwServiceWorkerClient; |
+import org.chromium.android_webview.AwWebResourceResponse; |
+ |
+import java.util.HashMap; |
+import java.util.Map; |
+ |
+/** |
+ * An adapter class that forwards the callbacks from {@link AwServiceWorkerClient} |
+ * to the corresponding {@link ServiceWorkerClient}. |
+ */ |
+@TargetApi(Build.VERSION_CODES.N) |
+public class ServiceWorkerClientAdapter extends AwServiceWorkerClient { |
+ |
+ private ServiceWorkerClient mServiceWorkerClient; |
+ |
+ public ServiceWorkerClientAdapter(ServiceWorkerClient client) { |
+ mServiceWorkerClient = client; |
+ } |
+ |
+ @Override |
+ public AwWebResourceResponse shouldInterceptRequest(AwWebResourceRequest request) { |
+ WebResourceResponse response = mServiceWorkerClient.shouldInterceptRequest( |
+ new WebResourceRequestImpl(request)); |
+ if (response == null) return null; |
+ |
+ // AwWebResourceResponse should support null headers. b/16332774. |
+ Map<String, String> responseHeaders = response.getResponseHeaders(); |
+ if (responseHeaders == null) responseHeaders = new HashMap<String, String>(); |
+ |
+ return new AwWebResourceResponse( |
+ response.getMimeType(), |
+ response.getEncoding(), |
+ response.getData(), |
+ response.getStatusCode(), |
+ response.getReasonPhrase(), |
+ responseHeaders); |
+ } |
+ |
+ private static class WebResourceRequestImpl implements WebResourceRequest { |
+ private final AwWebResourceRequest mRequest; |
+ |
+ public WebResourceRequestImpl(AwWebResourceRequest request) { |
+ mRequest = request; |
+ } |
+ |
+ @Override |
+ public Uri getUrl() { |
+ return Uri.parse(mRequest.url); |
+ } |
+ |
+ @Override |
+ public boolean isForMainFrame() { |
+ return mRequest.isMainFrame; |
+ } |
+ |
+ @Override |
+ public boolean hasGesture() { |
+ return mRequest.hasUserGesture; |
+ } |
+ |
+ @Override |
+ public String getMethod() { |
+ return mRequest.method; |
+ } |
+ |
+ @Override |
+ public Map<String, String> getRequestHeaders() { |
+ return mRequest.requestHeaders; |
+ } |
+ |
+ // TODO(mnaganov): Uncomment when we completely switch builds to the next API level. |
+ //@Override |
+ public boolean isRedirect() { |
+ return mRequest.isRedirect; |
+ } |
+ } |
+} |