Chromium Code Reviews| Index: android_webview/java/src/org/chromium/android_webview/PlatformServiceBridge.java |
| diff --git a/android_webview/java/src/org/chromium/android_webview/PlatformServiceBridge.java b/android_webview/java/src/org/chromium/android_webview/PlatformServiceBridge.java |
| index b41d09121b8dfaabb5185221137e20e13bf72594..69a1c0bf83dfbc2a97b3cada1bbc3425aedcb3a3 100644 |
| --- a/android_webview/java/src/org/chromium/android_webview/PlatformServiceBridge.java |
| +++ b/android_webview/java/src/org/chromium/android_webview/PlatformServiceBridge.java |
| @@ -21,34 +21,37 @@ public class PlatformServiceBridge { |
| private static final String PLATFORM_SERVICE_BRIDGE = |
| "com.android.webview.chromium.PlatformServiceBridgeGoogle"; |
| + private static final Object INSTANCE_LOCK = new Object(); |
| private static PlatformServiceBridge sInstance; |
| protected PlatformServiceBridge() {} |
| public static PlatformServiceBridge getInstance(Context appContext) { |
| - ThreadUtils.assertOnUiThread(); // Avoid race conditions on sInstance. |
| + synchronized (INSTANCE_LOCK) { |
|
sgurun-gerrit only
2017/01/16 15:11:19
rather than adding a lock, the easiest thing to do
timvolodine
2017/01/16 18:58:57
Did you mean moving the above call to the AwSafeBr
|
| + if (sInstance != null) { |
| + return sInstance; |
| + } |
| - if (sInstance != null) { |
| - return sInstance; |
| - } |
| + // Try to get a specialized service bridge. |
| + try { |
| + Class<?> cls = Class.forName(PLATFORM_SERVICE_BRIDGE); |
| + sInstance = (PlatformServiceBridge) cls.getDeclaredConstructor(Context.class) |
| + .newInstance(appContext); |
| + return sInstance; |
| + } catch (ClassNotFoundException e) { |
| + // This is not an error; it just means this device doesn't have specialized |
| + // services. |
| + } catch (IllegalAccessException | IllegalArgumentException | InstantiationException |
| + | NoSuchMethodException e) { |
| + Log.e(TAG, "Failed to get " + PLATFORM_SERVICE_BRIDGE + ": " + e); |
| + } catch (InvocationTargetException e) { |
| + Log.e(TAG, "Failed invocation to get " + PLATFORM_SERVICE_BRIDGE + ":", |
| + e.getCause()); |
| + } |
| - // Try to get a specialized service bridge. |
| - try { |
| - Class<?> cls = Class.forName(PLATFORM_SERVICE_BRIDGE); |
| - sInstance = (PlatformServiceBridge) cls.getDeclaredConstructor(Context.class) |
| - .newInstance(appContext); |
| - return sInstance; |
| - } catch (ClassNotFoundException e) { |
| - // This is not an error; it just means this device doesn't have specialized services. |
| - } catch (IllegalAccessException | IllegalArgumentException | InstantiationException |
| - | NoSuchMethodException e) { |
| - Log.e(TAG, "Failed to get " + PLATFORM_SERVICE_BRIDGE + ": " + e); |
| - } catch (InvocationTargetException e) { |
| - Log.e(TAG, "Failed invocation to get " + PLATFORM_SERVICE_BRIDGE + ":", e.getCause()); |
| + // Otherwise, get the generic service bridge. |
| + sInstance = new PlatformServiceBridge(); |
| } |
| - |
| - // Otherwise, get the generic service bridge. |
| - sInstance = new PlatformServiceBridge(); |
| return sInstance; |
| } |