public class

ServiceWorkerWebSettingsImpl

extends ServiceWorkerWebSettingsCompat

 java.lang.Object

androidx.webkit.ServiceWorkerWebSettingsCompat

↳androidx.webkit.internal.ServiceWorkerWebSettingsImpl

Gradle dependencies

compile group: 'androidx.webkit', name: 'webkit', version: '1.5.0-alpha01'

  • groupId: androidx.webkit
  • artifactId: webkit
  • version: 1.5.0-alpha01

Artifact androidx.webkit:webkit:1.5.0-alpha01 it located at Google repository (https://maven.google.com/)

Androidx artifact mapping:

androidx.webkit:webkit com.android.support:webkit

Overview

Implementation of ServiceWorkerWebSettingsCompat. This class uses either the framework, the WebView APK, or both, to implement ServiceWorkerWebSettingsCompat functionality.

Summary

Constructors
publicServiceWorkerWebSettingsImpl(ServiceWorkerWebSettings settings)

This class handles three different scenarios: 1.

Methods
public abstract booleangetAllowContentAccess()

Gets whether Service Workers support content URL access.

public abstract booleangetAllowFileAccess()

Gets whether Service Workers support file access.

public abstract booleangetBlockNetworkLoads()

Gets whether Service Workers are prohibited from loading any resources from the network.

public abstract intgetCacheMode()

Gets the current setting for overriding the cache mode.

public abstract intgetRequestedWithHeaderMode()

Gets how Service Workers will set the X-Requested-With header on HTTP requests.

public abstract voidsetAllowContentAccess(boolean allow)

Enables or disables content URL access from Service Workers.

public abstract voidsetAllowFileAccess(boolean allow)

Enables or disables file access within Service Workers.

public abstract voidsetBlockNetworkLoads(boolean flag)

Sets whether Service Workers should not load resources from the network.

public abstract voidsetCacheMode(int mode)

Overrides the way the cache is used.

public abstract voidsetRequestedWithHeaderMode(int requestedWithHeaderMode)

Sets how Service Workers will set the X-Requested-With header on requests.

from java.lang.Objectclone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

Constructors

public ServiceWorkerWebSettingsImpl(ServiceWorkerWebSettings settings)

This class handles three different scenarios: 1. The Android version on the device is high enough to support all APIs used. 2. The Android version on the device is too low to support any ServiceWorkerWebSettings APIs so we use the support library glue instead through org.chromium.support_lib_boundary.ServiceWorkerWebSettingsBoundaryInterface. 3. The Android version on the device is high enough to support some ServiceWorkerWebSettings APIs, so we call into them using , but the rest of the APIs are only supported by the support library glue, so whenever we call such an API we fetch a org.chromium.support_lib_boundary.ServiceWorkerWebSettingsBoundaryInterface corresponding to our .

Methods

public abstract void setCacheMode(int mode)

Overrides the way the cache is used.

This method should only be called if WebViewFeature.isFeatureSupported(String) returns true for WebViewFeature.SERVICE_WORKER_CACHE_MODE.

Parameters:

mode: the mode to use. One of , , or . The default value is .

See also: , ServiceWorkerWebSettingsCompat.getCacheMode()

public abstract int getCacheMode()

Gets the current setting for overriding the cache mode.

This method should only be called if WebViewFeature.isFeatureSupported(String) returns true for WebViewFeature.SERVICE_WORKER_CACHE_MODE.

Returns:

the current setting for overriding the cache mode

See also: ServiceWorkerWebSettingsCompat.setCacheMode(int)

public abstract void setAllowContentAccess(boolean allow)

Enables or disables content URL access from Service Workers.

This method should only be called if WebViewFeature.isFeatureSupported(String) returns true for WebViewFeature.SERVICE_WORKER_CONTENT_ACCESS.

See also: , ServiceWorkerWebSettingsCompat.getAllowContentAccess()

public abstract boolean getAllowContentAccess()

Gets whether Service Workers support content URL access.

This method should only be called if WebViewFeature.isFeatureSupported(String) returns true for WebViewFeature.SERVICE_WORKER_CONTENT_ACCESS.

See also: ServiceWorkerWebSettingsCompat.setAllowContentAccess(boolean)

public abstract void setAllowFileAccess(boolean allow)

Enables or disables file access within Service Workers.

This method should only be called if WebViewFeature.isFeatureSupported(String) returns true for WebViewFeature.SERVICE_WORKER_FILE_ACCESS.

See also: , ServiceWorkerWebSettingsCompat.getAllowContentAccess()

public abstract boolean getAllowFileAccess()

Gets whether Service Workers support file access.

This method should only be called if WebViewFeature.isFeatureSupported(String) returns true for WebViewFeature.SERVICE_WORKER_FILE_ACCESS.

See also: ServiceWorkerWebSettingsCompat.setAllowFileAccess(boolean)

public abstract void setBlockNetworkLoads(boolean flag)

Sets whether Service Workers should not load resources from the network.

This method should only be called if WebViewFeature.isFeatureSupported(String) returns true for WebViewFeature.SERVICE_WORKER_BLOCK_NETWORK_LOADS.

Parameters:

flag: true means block network loads by the Service Workers

See also: , ServiceWorkerWebSettingsCompat.getBlockNetworkLoads()

public abstract boolean getBlockNetworkLoads()

Gets whether Service Workers are prohibited from loading any resources from the network.

This method should only be called if WebViewFeature.isFeatureSupported(String) returns true for WebViewFeature.SERVICE_WORKER_BLOCK_NETWORK_LOADS.

Returns:

true if the Service Workers are not allowed to load any resources from the network

See also: ServiceWorkerWebSettingsCompat.setBlockNetworkLoads(boolean)

public abstract void setRequestedWithHeaderMode(int requestedWithHeaderMode)

Sets how Service Workers will set the X-Requested-With header on requests. If you are calling this method, you may also want to call WebSettingsCompat.setRequestedWithHeaderMode(WebSettings, int) with the same parameter value to configure non-ServiceWorker requests. The default behavior may vary depending on the WebView implementation.

This method should only be called if WebViewFeature.isFeatureSupported(String) returns true for WebViewFeature.REQUESTED_WITH_HEADER_CONTROL.

Parameters:

requestedWithHeaderMode: The REQUESTED_WITH_HEADER_MODE to use

See also: WebSettingsCompat.setRequestedWithHeaderMode(WebSettings, int), ServiceWorkerWebSettingsCompat.getBlockNetworkLoads()

public abstract int getRequestedWithHeaderMode()

Gets how Service Workers will set the X-Requested-With header on HTTP requests.

This method should only be called if WebViewFeature.isFeatureSupported(String) returns true for WebViewFeature.REQUESTED_WITH_HEADER_CONTROL.

Returns:

the currently configured REQUESTED_WITH_HEADER_MODE

See also: ServiceWorkerWebSettingsCompat.setRequestedWithHeaderMode(int)

Source

/*
 * Copyright 2018 The Android Open Source Project
 *
 * Licensed 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 androidx.webkit.internal;

import android.webkit.ServiceWorkerWebSettings;

import androidx.annotation.NonNull;
import androidx.annotation.RequiresApi;
import androidx.webkit.ServiceWorkerWebSettingsCompat;

import org.chromium.support_lib_boundary.ServiceWorkerWebSettingsBoundaryInterface;
import org.chromium.support_lib_boundary.util.BoundaryInterfaceReflectionUtil;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Proxy;

/**
 * Implementation of {@link ServiceWorkerWebSettingsCompat}.
 * This class uses either the framework, the WebView APK, or both, to implement
 * {@link ServiceWorkerWebSettingsCompat} functionality.
 */
public class ServiceWorkerWebSettingsImpl extends ServiceWorkerWebSettingsCompat {
    private ServiceWorkerWebSettings mFrameworksImpl;
    private ServiceWorkerWebSettingsBoundaryInterface mBoundaryInterface;

    /**
     * This class handles three different scenarios:
     * 1. The Android version on the device is high enough to support all APIs used.
     * 2. The Android version on the device is too low to support any ServiceWorkerWebSettings APIs
     * so we use the support library glue instead through
     * {@link ServiceWorkerWebSettingsBoundaryInterface}.
     * 3. The Android version on the device is high enough to support some ServiceWorkerWebSettings
     * APIs, so we call into them using {@link android.webkit.ServiceWorkerWebSettings}, but the
     * rest of the APIs are only supported by the support library glue, so whenever we call such an
     * API we fetch a {@link ServiceWorkerWebSettingsBoundaryInterface} corresponding to our
     * {@link android.webkit.ServiceWorkerWebSettings}.
     */
    public ServiceWorkerWebSettingsImpl(@NonNull ServiceWorkerWebSettings settings) {
        mFrameworksImpl = settings;
    }

    public ServiceWorkerWebSettingsImpl(@NonNull InvocationHandler invocationHandler) {
        mBoundaryInterface = BoundaryInterfaceReflectionUtil.castToSuppLibClass(
                ServiceWorkerWebSettingsBoundaryInterface.class, invocationHandler);
    }

    @RequiresApi(24)
    private ServiceWorkerWebSettings getFrameworksImpl() {
        if (mFrameworksImpl == null) {
            mFrameworksImpl =
                    WebViewGlueCommunicator.getCompatConverter().convertServiceWorkerSettings(
                            Proxy.getInvocationHandler(mBoundaryInterface));
        }
        return mFrameworksImpl;
    }

    private ServiceWorkerWebSettingsBoundaryInterface getBoundaryInterface() {
        if (mBoundaryInterface == null) {
            // If the boundary interface is null we must have a working frameworks implementation to
            // convert into a boundary interface.
            // The case of the boundary interface being null here only occurs if we created the
            // ServiceWorkerWebSettingsImpl using a frameworks API, but now want to call an API on
            // the ServiceWorkerWebSettingsImpl that is only supported by the support library glue.
            // This could happen for example if we introduce a new ServiceWorkerWebSettings API in
            // level 30 and we run the support library on an N device (whose framework supports
            // ServiceWorkerWebSettings).
            mBoundaryInterface = BoundaryInterfaceReflectionUtil.castToSuppLibClass(
                    ServiceWorkerWebSettingsBoundaryInterface.class,
                    WebViewGlueCommunicator.getCompatConverter().convertServiceWorkerSettings(
                            mFrameworksImpl));
        }
        return mBoundaryInterface;
    }

    @Override
    public void setCacheMode(int mode) {
        final ApiFeature.N feature = WebViewFeatureInternal.SERVICE_WORKER_CACHE_MODE;
        if (feature.isSupportedByFramework()) {
            ApiHelperForN.setCacheMode(getFrameworksImpl(), mode);
        } else if (feature.isSupportedByWebView()) {
            getBoundaryInterface().setCacheMode(mode);
        } else {
            throw WebViewFeatureInternal.getUnsupportedOperationException();
        }
    }

    @Override
    public int getCacheMode() {
        final ApiFeature.N feature = WebViewFeatureInternal.SERVICE_WORKER_CACHE_MODE;
        if (feature.isSupportedByFramework()) {
            return ApiHelperForN.getCacheMode(getFrameworksImpl());
        } else if (feature.isSupportedByWebView()) {
            return getBoundaryInterface().getCacheMode();
        } else {
            throw WebViewFeatureInternal.getUnsupportedOperationException();
        }
    }

    @Override
    public void setAllowContentAccess(boolean allow) {
        final ApiFeature.N feature = WebViewFeatureInternal.SERVICE_WORKER_CONTENT_ACCESS;
        if (feature.isSupportedByFramework()) {
            ApiHelperForN.setAllowContentAccess(getFrameworksImpl(), allow);
        } else if (feature.isSupportedByWebView()) {
            getBoundaryInterface().setAllowContentAccess(allow);
        } else {
            throw WebViewFeatureInternal.getUnsupportedOperationException();
        }
    }

    @Override
    public boolean getAllowContentAccess() {
        final ApiFeature.N feature = WebViewFeatureInternal.SERVICE_WORKER_CONTENT_ACCESS;
        if (feature.isSupportedByFramework()) {
            return ApiHelperForN.getAllowContentAccess(getFrameworksImpl());
        } else if (feature.isSupportedByWebView()) {
            return getBoundaryInterface().getAllowContentAccess();
        } else {
            throw WebViewFeatureInternal.getUnsupportedOperationException();
        }
    }

    @Override
    public void setAllowFileAccess(boolean allow) {
        final ApiFeature.N feature = WebViewFeatureInternal.SERVICE_WORKER_FILE_ACCESS;
        if (feature.isSupportedByFramework()) {
            ApiHelperForN.setAllowFileAccess(getFrameworksImpl(), allow);
        } else if (feature.isSupportedByWebView()) {
            getBoundaryInterface().setAllowFileAccess(allow);
        } else {
            throw WebViewFeatureInternal.getUnsupportedOperationException();
        }
    }

    @Override
    public boolean getAllowFileAccess() {
        final ApiFeature.N feature = WebViewFeatureInternal.SERVICE_WORKER_FILE_ACCESS;
        if (feature.isSupportedByFramework()) {
            return ApiHelperForN.getAllowFileAccess(getFrameworksImpl());
        } else if (feature.isSupportedByWebView()) {
            return getBoundaryInterface().getAllowFileAccess();
        } else {
            throw WebViewFeatureInternal.getUnsupportedOperationException();
        }
    }

    @Override
    public void setBlockNetworkLoads(boolean flag) {
        final ApiFeature.N feature = WebViewFeatureInternal.SERVICE_WORKER_BLOCK_NETWORK_LOADS;
        if (feature.isSupportedByFramework()) {
            ApiHelperForN.setBlockNetworkLoads(getFrameworksImpl(), flag);
        } else if (feature.isSupportedByWebView()) {
            getBoundaryInterface().setBlockNetworkLoads(flag);
        } else {
            throw WebViewFeatureInternal.getUnsupportedOperationException();
        }
    }

    @Override
    public boolean getBlockNetworkLoads() {
        final ApiFeature.N feature = WebViewFeatureInternal.SERVICE_WORKER_BLOCK_NETWORK_LOADS;
        if (feature.isSupportedByFramework()) {
            return ApiHelperForN.getBlockNetworkLoads(getFrameworksImpl());
        } else if (feature.isSupportedByWebView()) {
            return getBoundaryInterface().getBlockNetworkLoads();
        } else {
            throw WebViewFeatureInternal.getUnsupportedOperationException();
        }
    }

    @Override
    public void setRequestedWithHeaderMode(int requestedWithHeaderMode) {
        final ApiFeature.NoFramework feature = WebViewFeatureInternal.REQUESTED_WITH_HEADER_CONTROL;
        if (feature.isSupportedByWebView()) {
            getBoundaryInterface().setRequestedWithHeaderMode(requestedWithHeaderMode);
        } else {
            throw WebViewFeatureInternal.getUnsupportedOperationException();
        }
    }

    @Override
    public int getRequestedWithHeaderMode() {
        final ApiFeature.NoFramework feature = WebViewFeatureInternal.REQUESTED_WITH_HEADER_CONTROL;
        if (feature.isSupportedByWebView()) {
            return getBoundaryInterface().getRequestedWithHeaderMode();
        } else {
            throw WebViewFeatureInternal.getUnsupportedOperationException();
        }
    }
}