Chromium Code Reviews| Index: components/cronet/android/java/src/org/chromium/net/CronetLibraryLoader.java |
| diff --git a/components/cronet/android/java/src/org/chromium/net/CronetLibraryLoader.java b/components/cronet/android/java/src/org/chromium/net/CronetLibraryLoader.java |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..5b6cc0b4eb8f9013add4991e799434ca9a294901 |
| --- /dev/null |
| +++ b/components/cronet/android/java/src/org/chromium/net/CronetLibraryLoader.java |
| @@ -0,0 +1,65 @@ |
| +// Copyright 2015 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +package org.chromium.net; |
| + |
| +import android.content.Context; |
| +import android.os.Handler; |
| +import android.os.Looper; |
| + |
| +import org.chromium.base.JNINamespace; |
| + |
| +/** |
| + * CronetLibraryLoader loads and initializes native library on main thread. |
| + */ |
| +@JNINamespace("cronet") |
| +class CronetLibraryLoader { |
| + /** |
| + * Synchronize access to sInitTaskPosted and initialization routine. |
| + */ |
| + private static final Object sLoadLock = new Object(); |
| + private static boolean sInitTaskPosted = false; |
| + |
| + /** |
| + * Ensure that native library is loaded and initialized. Can be called from |
| + * any thread, the load and initialization is performed on main thread. |
| + */ |
| + public static void ensureInitialized( |
| + final Context context, final UrlRequestContextConfig config) { |
| + synchronized (sLoadLock) { |
| + if (sInitTaskPosted) { |
| + return; |
| + } |
| + System.loadLibrary(config.libraryName()); |
| + // Init native Chromium URLRequestContext on Main UI thread. |
| + Runnable task = new Runnable() { |
| + public void run() { |
| + initOnMainThread(context); |
| + } |
| + }; |
| + // Run task immediately or post it to the UI thread. |
| + if (Looper.getMainLooper() == Looper.myLooper()) { |
| + task.run(); |
| + } else { |
| + // The initOnMainThread will complete on the main thread prior |
| + // to other tasks posted to the main thread. |
| + new Handler(Looper.getMainLooper()).post(task); |
| + } |
| + sInitTaskPosted = true; |
| + } |
| + } |
| + |
| + private static void initOnMainThread(final Context context) { |
| + nativeCronetInitOnMainThread(context); |
| + // Registers to always receive network notifications. Note |
| + // that this call is fine for Cronet because Cronet |
| + // embedders do not have API access to create network change |
| + // observers. Existing observers in the net stack do not |
| + // perform expensive work. |
| + NetworkChangeNotifier.registerToReceiveNotificationsAlways(); |
| + } |
| + |
| + // Native methods are implemented in cronet_loader.cc. |
| + private static native long nativeCronetInitOnMainThread(Context context); |
|
pauljensen
2015/02/04 14:33:20
why does this function have a return value if it's
mef
2015/02/04 17:35:00
Done.
|
| +} |