From 5814d666ab2b0823d1967ef9a859dd0d6a382603 Mon Sep 17 00:00:00 2001 From: Andrew Grieve Date: Thu, 18 Jul 2013 01:38:47 -0400 Subject: [PATCH] [CB-3384] Fix thread assertion when plugins remap URIs (cherry picked from commit b915aafb5be31912129b04c7e70b9c0a9908ee9c) --- .../org/apache/cordova/CordovaResourceApi.java | 17 ++++++++++++++++- .../cordova/IceCreamCordovaWebViewClient.java | 2 +- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/framework/src/org/apache/cordova/CordovaResourceApi.java b/framework/src/org/apache/cordova/CordovaResourceApi.java index ebf88016..cb857441 100644 --- a/framework/src/org/apache/cordova/CordovaResourceApi.java +++ b/framework/src/org/apache/cordova/CordovaResourceApi.java @@ -156,9 +156,24 @@ public class CordovaResourceApi { * @throws Throws an InvalidArgumentException for relative URIs. Relative URIs should be * resolved before being passed into this function. * @throws Throws an IOException if the URI cannot be opened. + * @throws Throws an IllegalStateException if called on a foreground thread. */ public OpenForReadResult openForRead(Uri uri) throws IOException { - assertBackgroundThread(); + return openForRead(uri, false); + } + + /** + * Opens a stream to the givne URI, also providing the MIME type & length. + * @return Never returns null. + * @throws Throws an InvalidArgumentException for relative URIs. Relative URIs should be + * resolved before being passed into this function. + * @throws Throws an IOException if the URI cannot be opened. + * @throws Throws an IllegalStateException if called on a foreground thread and skipThreadCheck is false. + */ + public OpenForReadResult openForRead(Uri uri, boolean skipThreadCheck) throws IOException { + if (!skipThreadCheck) { + assertBackgroundThread(); + } switch (getUriType(uri)) { case URI_TYPE_FILE: { FileInputStream inputStream = new FileInputStream(uri.getPath()); diff --git a/framework/src/org/apache/cordova/IceCreamCordovaWebViewClient.java b/framework/src/org/apache/cordova/IceCreamCordovaWebViewClient.java index f0f372ca..3f98f569 100644 --- a/framework/src/org/apache/cordova/IceCreamCordovaWebViewClient.java +++ b/framework/src/org/apache/cordova/IceCreamCordovaWebViewClient.java @@ -59,7 +59,7 @@ public class IceCreamCordovaWebViewClient extends CordovaWebViewClient { Uri remappedUri = resourceApi.remapUri(origUri); if (!origUri.equals(remappedUri) || needsSpecialsInAssetUrlFix(origUri)) { - OpenForReadResult result = resourceApi.openForRead(remappedUri); + OpenForReadResult result = resourceApi.openForRead(remappedUri, true); return new WebResourceResponse(result.mimeType, "UTF-8", result.inputStream); } // If we don't need to special-case the request, let the browser load it.