Commit c3fcc3e0 authored by Gustav Sennton's avatar Gustav Sennton Committed by Commit Bot

Add support for WebSettingsCompat.

Also add a webkit-to-compat converter object which takes webkit objects,
and returns the implementation for the corresponding Compat-object.
E.g. WebSettings -> implementation for WebSettingsCompat.

Bug: 812657
Change-Id: Ifb5507ec3f4f620621ab05b73d643abcc184cf85
Reviewed-on: https://chromium-review.googlesource.com/922623Reviewed-by: default avatarBo <boliu@chromium.org>
Commit-Queue: Gustav Sennton <gsennton@chromium.org>
Cr-Commit-Position: refs/heads/master@{#539153}
parent 5393c868
......@@ -4,8 +4,11 @@
package com.android.webview.chromium;
import android.webkit.WebSettings;
import android.webkit.WebView;
import org.chromium.android_webview.AwSettings;
/**
* Class converting webkit objects to glue-objects shared between the webkit-glue and the support
* library glue.
......@@ -16,4 +19,9 @@ public class WebkitToSharedGlueConverter {
WebViewChromium webviewChromium = (WebViewChromium) webview.getWebViewProvider();
return webviewChromium.getSharedWebViewChromium();
}
public static AwSettings getSettings(WebSettings webSettings) {
ContentSettingsAdapter contentSettingsAdapter = (ContentSettingsAdapter) webSettings;
return contentSettingsAdapter.getAwSettings();
}
}
......@@ -8,8 +8,10 @@ import("//build/config/android/rules.gni")
android_library("support_lib_glue_java") {
java_files = [
"java/src/org/chromium/support_lib_glue/SupportLibReflectionUtil.java",
"java/src/org/chromium/support_lib_glue/SupportLibWebSettingsAdapter.java",
"java/src/org/chromium/support_lib_glue/SupportLibWebViewChromium.java",
"java/src/org/chromium/support_lib_glue/SupportLibWebViewChromiumFactory.java",
"java/src/org/chromium/support_lib_glue/SupportLibWebkitToCompatConverterAdapter.java",
]
deps = [
......
......@@ -12,6 +12,7 @@ android_library("boundary_interface_java") {
"src/org/chromium/support_lib_boundary/WebSettingsBoundaryInterface.java",
"src/org/chromium/support_lib_boundary/WebViewProviderBoundaryInterface.java",
"src/org/chromium/support_lib_boundary/WebViewProviderFactoryBoundaryInterface.java",
"src/org/chromium/support_lib_boundary/WebkitToCompatConverterBoundaryInterface.java",
]
# We can't use ANY deps here, the support library should be able to build
......
......@@ -9,8 +9,15 @@ package org.chromium.support_lib_boundary;
// app-facing classes should have a boundary-interface that the WebView glue layer can build
// against.
/**
* Boundary interface for WebSettingsCompat.
*/
public interface WebSettingsBoundaryInterface {
void setOffscreenPreRaster(boolean enabled);
boolean getOffscreenPreRaster();
void setSafeBrowsingEnabled(boolean enabled);
boolean getSafeBrowsingEnabled();
void setDisabledActionModeMenuItems(int menuItems);
int getDisabledActionModeMenuItems();
}
......@@ -11,5 +11,6 @@ import java.lang.reflect.InvocationHandler;
/**
*/
public interface WebViewProviderFactoryBoundaryInterface {
/* SupportLibraryWebViewProvider */ InvocationHandler createWebView(WebView webview);
/* SupportLibraryWebViewChromium */ InvocationHandler createWebView(WebView webview);
/* SupportLibWebkitToCompatConverter */ InvocationHandler getWebkitToCompatConverter();
}
// 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.support_lib_boundary;
import android.webkit.WebSettings;
import java.lang.reflect.InvocationHandler;
/**
* Boundary interface for a class used for converting webkit objects into Compat (support library)
* objects.
*/
public interface WebkitToCompatConverterBoundaryInterface {
/* SupportLibraryWebSettings */ InvocationHandler convertSettings(WebSettings webSettings);
}
// 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.support_lib_glue;
import org.chromium.android_webview.AwSettings;
import org.chromium.support_lib_boundary.WebSettingsBoundaryInterface;
/**
* Adapter between WebSettingsBoundaryInterface and AwSettings.
*/
class SupportLibWebSettingsAdapter implements WebSettingsBoundaryInterface {
private final AwSettings mAwSettings;
public SupportLibWebSettingsAdapter(AwSettings awSettings) {
mAwSettings = awSettings;
}
@Override
public void setOffscreenPreRaster(boolean enabled) {
mAwSettings.setOffscreenPreRaster(enabled);
}
@Override
public boolean getOffscreenPreRaster() {
return mAwSettings.getOffscreenPreRaster();
}
@Override
public void setSafeBrowsingEnabled(boolean enabled) {
mAwSettings.setSafeBrowsingEnabled(enabled);
}
@Override
public boolean getSafeBrowsingEnabled() {
return mAwSettings.getSafeBrowsingEnabled();
}
@Override
public void setDisabledActionModeMenuItems(int menuItems) {
mAwSettings.setDisabledActionModeMenuItems(menuItems);
}
@Override
public int getDisabledActionModeMenuItems() {
return mAwSettings.getDisabledActionModeMenuItems();
}
}
......@@ -17,7 +17,13 @@ import java.lang.reflect.InvocationHandler;
* Support library glue version of WebViewChromiumFactoryProvider.
*/
class SupportLibWebViewChromiumFactory implements WebViewProviderFactoryBoundaryInterface {
public SupportLibWebViewChromiumFactory() {}
// SupportLibWebkitToCompatConverterAdapter
private final InvocationHandler mCompatConverterAdapter;
public SupportLibWebViewChromiumFactory() {
mCompatConverterAdapter = BoundaryInterfaceReflectionUtil.createInvocationHandlerFor(
new SupportLibWebkitToCompatConverterAdapter());
}
@Override
public InvocationHandler createWebView(WebView webview) {
......@@ -25,4 +31,9 @@ class SupportLibWebViewChromiumFactory implements WebViewProviderFactoryBoundary
new SupportLibWebViewChromium(
WebkitToSharedGlueConverter.getSharedWebViewChromium(webview)));
}
@Override
public InvocationHandler getWebkitToCompatConverter() {
return mCompatConverterAdapter;
}
}
// 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.support_lib_glue;
import android.webkit.WebSettings;
import com.android.webview.chromium.WebkitToSharedGlueConverter;
import org.chromium.support_lib_boundary.BoundaryInterfaceReflectionUtil;
import org.chromium.support_lib_boundary.WebkitToCompatConverterBoundaryInterface;
import java.lang.reflect.InvocationHandler;
/**
* Adapter used for fetching implementations for Compat objects given their corresponding
* webkit-object.
*/
class SupportLibWebkitToCompatConverterAdapter implements WebkitToCompatConverterBoundaryInterface {
SupportLibWebkitToCompatConverterAdapter() {}
// WebSettingsBoundaryInterface
@Override
public InvocationHandler convertSettings(WebSettings webSettings) {
return BoundaryInterfaceReflectionUtil.createInvocationHandlerFor(
new SupportLibWebSettingsAdapter(
WebkitToSharedGlueConverter.getSettings(webSettings)));
}
}
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