Index: chrome/android/java/src/org/chromium/chrome/browser/util/IntentUtils.java |
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/util/IntentUtils.java b/chrome/android/java/src/org/chromium/chrome/browser/util/IntentUtils.java |
index a66722fbb97b993774db422ae11a334216a4972f..7fe591657bbfdf47366c46b83982d891c3c4006c 100644 |
--- a/chrome/android/java/src/org/chromium/chrome/browser/util/IntentUtils.java |
+++ b/chrome/android/java/src/org/chromium/chrome/browser/util/IntentUtils.java |
@@ -24,7 +24,7 @@ import java.util.List; |
* Utilities dealing with extracting information from intents. |
*/ |
public class IntentUtils { |
- private static final String TAG = "IntentUtils"; |
+ private static final String TAG = "cr.IntentUtils"; |
/** |
* Retrieves a list of components that would handle the given intent. |
@@ -120,6 +120,19 @@ public class IntentUtils { |
} |
/** |
+ * Just like {@link Bundle#getBundle(String)} but doesn't throw exceptions. |
+ */ |
+ public static Bundle safeGetBundle(Bundle bundle, String name) { |
+ try { |
+ return bundle.getBundle(name); |
+ } catch (Throwable t) { |
+ // Catches un-parceling exceptions. |
+ Log.e(TAG, "getBundle failed on bundle " + bundle); |
+ return null; |
+ } |
+ } |
+ |
+ /** |
* Just like {@link Bundle#getParcelable(String)} but doesn't throw exceptions. |
*/ |
public static <T extends Parcelable> T safeGetParcelable(Bundle bundle, String name) { |
@@ -193,20 +206,28 @@ public class IntentUtils { |
*/ |
public static IBinder safeGetBinderExtra(Intent intent, String name) { |
if (!intent.hasExtra(name)) return null; |
+ Bundle extras = intent.getExtras(); |
+ return safeGetBinder(extras, name); |
+ |
+ } |
+ |
+ /** |
+ * @return A binder from a {@link Bundle}, or null; |
+ */ |
+ public static IBinder safeGetBinder(Bundle bundle, String name) { |
try { |
- Bundle extras = intent.getExtras(); |
// Bundle#getBinder() is public starting at API level 18, but exists |
// in previous SDKs as a hidden method named "getIBinder" (which |
// still exists as of L MR1 but is hidden and deprecated). |
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) { |
- return extras.getBinder(name); |
+ return bundle.getBinder(name); |
} else { |
Method getBinderMethod = Bundle.class.getMethod("getIBinder", String.class); |
- return (IBinder) getBinderMethod.invoke(extras, name); |
+ return (IBinder) getBinderMethod.invoke(bundle, name); |
} |
} catch (Throwable t) { |
// Catches un-parceling exceptions. |
- Log.e(TAG, "getBinder failed on intent " + intent); |
+ Log.e(TAG, "getBinder failed on bundle " + bundle); |
return null; |
} |
} |