From ddbcc0351201dc71b48252573b37da33deba1a83 Mon Sep 17 00:00:00 2001 From: Ben Murdoch Date: Tue, 28 Oct 2014 11:41:40 +0000 Subject: Always add the path to the WebView assets. Bug: 18133926 Change-Id: I33ae4101fd6865df057e365b6f33aef0ef9fd272 --- chromium/java/com/android/webview/chromium/WebViewChromium.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/chromium/java/com/android/webview/chromium/WebViewChromium.java b/chromium/java/com/android/webview/chromium/WebViewChromium.java index 08ad69a..a485bd2 100644 --- a/chromium/java/com/android/webview/chromium/WebViewChromium.java +++ b/chromium/java/com/android/webview/chromium/WebViewChromium.java @@ -58,6 +58,7 @@ import android.webkit.WebChromeClient; import android.webkit.WebSettings; import android.webkit.WebView; import android.webkit.WebViewClient; +import android.webkit.WebViewFactory; import android.webkit.WebViewProvider; import android.webkit.WebChromeClient.CustomViewCallback; import android.widget.TextView; @@ -165,6 +166,8 @@ class WebViewChromium implements WebViewProvider, mAppTargetSdkVersion = mWebView.getContext().getApplicationInfo().targetSdkVersion; mFactory = factory; mRunQueue = new WebViewChromiumRunQueue(); + String webViewAssetPath = WebViewFactory.getLoadedPackageInfo().applicationInfo.sourceDir; + mWebView.getContext().getAssets().addAssetPath(webViewAssetPath); } static void completeWindowCreation(WebView parent, WebView child) { -- cgit v1.2.3 From 446ce2c24d3a1670de478701ea970ceba323e543 Mon Sep 17 00:00:00 2001 From: Ben Murdoch Date: Tue, 4 Nov 2014 12:47:54 +0000 Subject: Add support for SmartClip interface in the glue layer. Bug: 18222974 Change-Id: Ie39d49e9dfe90f20b6eb5d28009313781eac8e01 --- .../com/android/webview/chromium/WebViewChromium.java | 19 ++++++++++++++++++- chromium/proguard.flags | 6 ++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/chromium/java/com/android/webview/chromium/WebViewChromium.java b/chromium/java/com/android/webview/chromium/WebViewChromium.java index a485bd2..76a11ca 100644 --- a/chromium/java/com/android/webview/chromium/WebViewChromium.java +++ b/chromium/java/com/android/webview/chromium/WebViewChromium.java @@ -32,6 +32,7 @@ import android.net.http.SslCertificate; import android.os.Build; import android.os.Bundle; import android.os.Looper; +import android.os.Handler; import android.os.Message; import android.print.PrintDocumentAdapter; import android.text.TextUtils; @@ -71,6 +72,7 @@ import org.chromium.android_webview.AwSettings; import org.chromium.android_webview.AwPrintDocumentAdapter; import org.chromium.base.ThreadUtils; import org.chromium.content.browser.LoadUrlParams; +import org.chromium.content.browser.SmartClipProvider; import org.chromium.net.NetworkChangeNotifier; import java.io.BufferedWriter; @@ -93,7 +95,7 @@ import java.util.Queue; * and a small set of no-op deprecated APIs. */ class WebViewChromium implements WebViewProvider, - WebViewProvider.ScrollDelegate, WebViewProvider.ViewDelegate { + WebViewProvider.ScrollDelegate, WebViewProvider.ViewDelegate, SmartClipProvider { private class WebViewChromiumRunQueue { public WebViewChromiumRunQueue() { @@ -2246,4 +2248,19 @@ class WebViewChromium implements WebViewProvider, return mWebViewPrivate.super_onHoverEvent(event); } } + + // Implements SmartClipProvider + @Override + public void extractSmartClipData(int x, int y, int width, int height) { + checkThread(); + mAwContents.extractSmartClipData(x, y, width, height); + } + + // Implements SmartClipProvider + @Override + public void setSmartClipResultHandler(final Handler resultHandler) { + checkThread(); + mAwContents.setSmartClipResultHandler(resultHandler); + } + } diff --git a/chromium/proguard.flags b/chromium/proguard.flags index 6401a8c..b19519f 100644 --- a/chromium/proguard.flags +++ b/chromium/proguard.flags @@ -80,6 +80,12 @@ *** startFinalizer(java.lang.Class,java.lang.Object); } +# Keep support framework support for SmartClip. +-keep class com.android.webview.chromium.WebViewChromium { + public void extractSmartClipData(int,int,int,int); + public void setSmartClipResultHandler(android.os.Handler); +} + # We need to explicitly keep classes and constructors referenced only in # layout resources. -keep class com.android.org.chromium.ui.ColorPickerAdvanced { -- cgit v1.2.3 From 12399ba4bb12154b7897cf88bee04aca0adeb770 Mon Sep 17 00:00:00 2001 From: Ben Murdoch Date: Mon, 17 Nov 2014 20:34:32 +0000 Subject: Fix WebView targetSDK checks. The 4.4W SDK bump between K and L means that apps running on L that are compiled with targetSDK 20 are picking up some features only intended to be enabled on L devices, due to erroneous target SDK checks that didn't take 4.4W into account. Bug: 18385629 Change-Id: Ia7996e948f9902c535e9f7fa7dea5b05db0a1aa0 --- .../java/com/android/webview/chromium/WebViewChromium.java | 8 ++++---- .../webview/chromium/WebViewContentsClientAdapter.java | 13 +++++++++++-- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/chromium/java/com/android/webview/chromium/WebViewChromium.java b/chromium/java/com/android/webview/chromium/WebViewChromium.java index b347103..d1d037b 100644 --- a/chromium/java/com/android/webview/chromium/WebViewChromium.java +++ b/chromium/java/com/android/webview/chromium/WebViewChromium.java @@ -250,9 +250,9 @@ class WebViewChromium implements WebViewProvider, mWebView.getContext(), isAccessFromFileURLsGrantedByDefault, areLegacyQuirksEnabled)); - if (mAppTargetSdkVersion <= Build.VERSION_CODES.KITKAT) { + if (mAppTargetSdkVersion < Build.VERSION_CODES.LOLLIPOP) { + // Prior to Lollipop we always allowed third party cookies and mixed content. mWebSettings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW); - // On KK and older versions we always allowed third party cookies. mWebSettings.setAcceptThirdPartyCookies(true); mWebSettings.getAwSettings().setZeroLayoutHeightDisablesViewportQuirk(true); } @@ -321,8 +321,8 @@ class WebViewChromium implements WebViewProvider, AwContentsStatics.setRecordFullDocument(sRecordWholeDocumentEnabledByApi || mAppTargetSdkVersion < Build.VERSION_CODES.LOLLIPOP); - if (mAppTargetSdkVersion <= Build.VERSION_CODES.KITKAT) { - // On KK and older versions, JavaScript objects injected via addJavascriptInterface + if (mAppTargetSdkVersion < Build.VERSION_CODES.LOLLIPOP) { + // Prior to Lollipop, JavaScript objects injected via addJavascriptInterface // were not inspectable. mAwContents.disableJavascriptInterfacesInspection(); } diff --git a/chromium/java/com/android/webview/chromium/WebViewContentsClientAdapter.java b/chromium/java/com/android/webview/chromium/WebViewContentsClientAdapter.java index 6b4b894..f3351c5 100644 --- a/chromium/java/com/android/webview/chromium/WebViewContentsClientAdapter.java +++ b/chromium/java/com/android/webview/chromium/WebViewContentsClientAdapter.java @@ -911,14 +911,23 @@ public class WebViewContentsClientAdapter extends AwContentsClient { uploadFileCallback.onReceiveValue(s); } }; + + // Invoke the new callback introduced in Lollipop. If the app handles + // it, we're done here. if (mWebChromeClient.onShowFileChooser(mWebView, callbackAdapter, adapter)) { return; } - if (mWebView.getContext().getApplicationInfo().targetSdkVersion > - Build.VERSION_CODES.KITKAT) { + + // If the app did not handle it and we are running on Lollipop or newer, then + // abort. + if (mWebView.getContext().getApplicationInfo().targetSdkVersion >= + Build.VERSION_CODES.LOLLIPOP) { uploadFileCallback.onReceiveValue(null); return; } + + // Otherwise, for older apps, attempt to invoke the legacy (hidden) API for + // backwards compatibility. ValueCallback innerCallback = new ValueCallback() { private boolean mCompleted; @Override -- cgit v1.2.3