Commit 6e36f86c authored by Eric Stevenson's avatar Eric Stevenson Committed by Commit Bot

Android: Fix verification errors in Clipboard.java.

A JNI conversion CL (http://crrev.com/c/1809399) introduced the
verification error which regressed Webview startup.

Why did the JNI conversion introduce the error?
More inlining in Clipboard.java caused methods only available on later
versions of Android to be inlined into the startup code path.

How does this CL fix the issue?
By outlining and using annotations to prohibit inlining for the
offending methods.

Tbr: dtrainor@chromium.org
Bug: 1006812
Change-Id: I17ef9deb83ad751f028bfce4440500bb05a7f55e
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1823439
Commit-Queue: Eric Stevenson <estevenson@chromium.org>
Reviewed-by: default avatarSam Maier <smaier@chromium.org>
Reviewed-by: default avatarAndrew Grieve <agrieve@chromium.org>
Cr-Commit-Position: refs/heads/master@{#699769}
parent 822eaa6f
...@@ -51,6 +51,7 @@ import androidx.annotation.NonNull; ...@@ -51,6 +51,7 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import org.chromium.base.annotations.VerifiesOnLollipop; import org.chromium.base.annotations.VerifiesOnLollipop;
import org.chromium.base.annotations.VerifiesOnN;
import java.io.UnsupportedEncodingException; import java.io.UnsupportedEncodingException;
...@@ -136,7 +137,7 @@ public class ApiCompatibilityUtils { ...@@ -136,7 +137,7 @@ public class ApiCompatibilityUtils {
* @see android.text.Html#toHtml(Spanned, int) * @see android.text.Html#toHtml(Spanned, int)
* @param option is ignored on below N * @param option is ignored on below N
*/ */
@SuppressWarnings("deprecation") @VerifiesOnN
public static String toHtml(Spanned spanned, int option) { public static String toHtml(Spanned spanned, int option) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
return Html.toHtml(spanned, option); return Html.toHtml(spanned, option);
......
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
package org.chromium.base.compat; package org.chromium.base.compat;
import android.annotation.TargetApi; import android.annotation.TargetApi;
import android.content.ClipDescription;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.content.res.Configuration; import android.content.res.Configuration;
import android.os.Build; import android.os.Build;
...@@ -42,4 +43,9 @@ public final class ApiHelperForO { ...@@ -42,4 +43,9 @@ public final class ApiHelperForO {
public static void setDefaultFocusHighlightEnabled(View view, boolean enabled) { public static void setDefaultFocusHighlightEnabled(View view, boolean enabled) {
view.setDefaultFocusHighlightEnabled(enabled); view.setDefaultFocusHighlightEnabled(enabled);
} }
/** See {@link ClipDescription#getTimestamp()}. */
public static long getTimestamp(ClipDescription clipDescription) {
return clipDescription.getTimestamp();
}
} }
...@@ -23,6 +23,7 @@ import org.chromium.base.ContextUtils; ...@@ -23,6 +23,7 @@ import org.chromium.base.ContextUtils;
import org.chromium.base.annotations.CalledByNative; import org.chromium.base.annotations.CalledByNative;
import org.chromium.base.annotations.JNINamespace; import org.chromium.base.annotations.JNINamespace;
import org.chromium.base.annotations.NativeMethods; import org.chromium.base.annotations.NativeMethods;
import org.chromium.base.compat.ApiHelperForO;
import org.chromium.base.metrics.RecordUserAction; import org.chromium.base.metrics.RecordUserAction;
import org.chromium.ui.R; import org.chromium.ui.R;
import org.chromium.ui.widget.Toast; import org.chromium.ui.widget.Toast;
...@@ -226,7 +227,7 @@ public class Clipboard implements ClipboardManager.OnPrimaryClipChangedListener ...@@ -226,7 +227,7 @@ public class Clipboard implements ClipboardManager.OnPrimaryClipChangedListener
ClipDescription clipDescription = mClipboardManager.getPrimaryClipDescription(); ClipDescription clipDescription = mClipboardManager.getPrimaryClipDescription();
if (clipDescription == null) return; if (clipDescription == null) return;
long timestamp = clipDescription.getTimestamp(); long timestamp = ApiHelperForO.getTimestamp(clipDescription);
ClipboardJni.get().onPrimaryClipTimestampInvalidated( ClipboardJni.get().onPrimaryClipTimestampInvalidated(
mNativeClipboard, Clipboard.this, timestamp); mNativeClipboard, Clipboard.this, timestamp);
} }
......
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