summaryrefslogtreecommitdiffstats
path: root/core/java/android
diff options
context:
space:
mode:
authorSteve Block <steveblock@google.com>2011-05-17 19:05:03 +0100
committerSteve Block <steveblock@google.com>2011-05-23 14:45:02 +0100
commit08d584cd1cba05284ccd2d0ea128c297624f0c47 (patch)
tree1c1101362089634c01957c90378353bcb6829158 /core/java/android
parent43124d22142f708b39e79fb0d91258e6234b5f26 (diff)
downloadframeworks_base-08d584cd1cba05284ccd2d0ea128c297624f0c47.zip
frameworks_base-08d584cd1cba05284ccd2d0ea128c297624f0c47.tar.gz
frameworks_base-08d584cd1cba05284ccd2d0ea128c297624f0c47.tar.bz2
Log a StrictMode violation when WebView methods are called on the wrong thread
Bug: 4373919 Change-Id: I1f526e033ce316e51b3de7fe4ac88119fbc65b4e
Diffstat (limited to 'core/java/android')
-rw-r--r--core/java/android/os/StrictMode.java7
-rw-r--r--core/java/android/webkit/WebView.java19
2 files changed, 17 insertions, 9 deletions
diff --git a/core/java/android/os/StrictMode.java b/core/java/android/os/StrictMode.java
index 1375a29..01c640a 100644
--- a/core/java/android/os/StrictMode.java
+++ b/core/java/android/os/StrictMode.java
@@ -1481,6 +1481,13 @@ public final class StrictMode {
onVmPolicyViolation(message, originStack);
}
+ /**
+ * @hide
+ */
+ public static void onWebViewMethodCalledOnWrongThread(Throwable originStack) {
+ onVmPolicyViolation(null, originStack);
+ }
+
// Map from VM violation fingerprint to uptime millis.
private static final HashMap<Integer, Long> sLastVmViolationTime = new HashMap<Integer, Long>();
diff --git a/core/java/android/webkit/WebView.java b/core/java/android/webkit/WebView.java
index f774803..61a69ca 100644
--- a/core/java/android/webkit/WebView.java
+++ b/core/java/android/webkit/WebView.java
@@ -54,7 +54,9 @@ import android.net.http.SslCertificate;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
+import android.os.Looper;
import android.os.Message;
+import android.os.StrictMode;
import android.provider.Settings;
import android.speech.tts.TextToSpeech;
import android.text.Selection;
@@ -8933,15 +8935,14 @@ public class WebView extends AbsoluteLayout
}
private static void checkThread() {
- if (!"main".equals(Thread.currentThread().getName())) {
- try {
- throw new RuntimeException("A WebView method was called on thread '" +
- Thread.currentThread().getName() + "'. " +
- "All WebView methods must be called on the UI thread. " +
- "Future versions of WebView may not support use on other threads.");
- } catch (RuntimeException e) {
- Log.e(LOGTAG, Log.getStackTraceString(e));
- }
+ if (Looper.myLooper() != Looper.getMainLooper()) {
+ RuntimeException exception = new RuntimeException(
+ "A WebView method was called on thread '" +
+ Thread.currentThread().getName() + "'. " +
+ "All WebView methods must be called on the UI thread. " +
+ "Future versions of WebView may not support use on other threads.");
+ Log.e(LOGTAG, Log.getStackTraceString(exception));
+ StrictMode.onWebViewMethodCalledOnWrongThread(exception);
}
}