commit 394ffba812d69d4b5767376f0f3ff1e303ba26d1 Author: Jan Henning jh+bitbucket@buttercookie.de Date: Wed Oct 24 21:02:17 2018 +0200
Bug 1500906 - Suppress FileUriExposedExceptions when launching helper apps. r=jchen, a=pascalc
Sharing tabs with file:// URIs is not possible, but users can still send them to other apps via the helper app system in the URL bar/context menu. "Intent:Open" and "Intent:OpenForResult" are both sent from Gecko by HelperApps.jsm.
The same reasoning as in bug 1450449 applies as to why for publicly accessible files content:// URIs are more trouble than they're worth.
Differential Revision: https://phabricator.services.mozilla.com/D9697 --- .../base/java/org/mozilla/gecko/IntentHelper.java | 23 ++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-)
diff --git a/mobile/android/base/java/org/mozilla/gecko/IntentHelper.java b/mobile/android/base/java/org/mozilla/gecko/IntentHelper.java index f2810a92af51..5b7948f79e04 100644 --- a/mobile/android/base/java/org/mozilla/gecko/IntentHelper.java +++ b/mobile/android/base/java/org/mozilla/gecko/IntentHelper.java @@ -26,6 +26,7 @@ import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.net.Uri; import android.os.Environment; +import android.os.StrictMode; import android.provider.Browser; import android.provider.MediaStore; import android.support.annotation.Nullable; @@ -471,12 +472,18 @@ public final class IntentHelper implements BundleEventListener { }
private void open(final GeckoBundle message) { - openUriExternal(message.getString("url", ""), - message.getString("mime", ""), - message.getString("packageName", ""), - message.getString("className", ""), - message.getString("action", ""), - message.getString("title", ""), false); + final StrictMode.VmPolicy prevPolicy = StrictMode.getVmPolicy(); + StrictMode.setVmPolicy(StrictMode.VmPolicy.LAX); + try { + openUriExternal(message.getString("url", ""), + message.getString("mime", ""), + message.getString("packageName", ""), + message.getString("className", ""), + message.getString("action", ""), + message.getString("title", ""), false); + } finally { + StrictMode.setVmPolicy(prevPolicy); + } }
private void openForResult(final GeckoBundle message, final EventCallback callback) { @@ -495,10 +502,14 @@ public final class IntentHelper implements BundleEventListener { return; } final ResultHandler handler = new ResultHandler(callback); + final StrictMode.VmPolicy prevPolicy = StrictMode.getVmPolicy(); + StrictMode.setVmPolicy(StrictMode.VmPolicy.LAX); try { ActivityHandlerHelper.startIntentForActivity(activity, intent, handler); } catch (SecurityException e) { Log.w(LOGTAG, "Forbidden to launch activity.", e); + } finally { + StrictMode.setVmPolicy(prevPolicy); } }