Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(77)

Side by Side Diff: blimp/client/app/android/java/src/org/chromium/blimp/BlimpLibraryLoader.java

Issue 2247143004: Remove app context init from LibraryLoader. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix per review. Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 package org.chromium.blimp; 5 package org.chromium.blimp;
6 6
7 import android.content.Context;
8 import android.os.Handler; 7 import android.os.Handler;
9 8
9 import org.chromium.base.ContextUtils;
10 import org.chromium.base.ObserverList; 10 import org.chromium.base.ObserverList;
11 import org.chromium.base.ResourceExtractor; 11 import org.chromium.base.ResourceExtractor;
12 import org.chromium.base.ThreadUtils; 12 import org.chromium.base.ThreadUtils;
13 import org.chromium.base.annotations.JNINamespace; 13 import org.chromium.base.annotations.JNINamespace;
14 import org.chromium.base.library_loader.LibraryLoader; 14 import org.chromium.base.library_loader.LibraryLoader;
15 import org.chromium.base.library_loader.LibraryProcessType; 15 import org.chromium.base.library_loader.LibraryProcessType;
16 import org.chromium.base.library_loader.ProcessInitException; 16 import org.chromium.base.library_loader.ProcessInitException;
17 17
18 /** 18 /**
19 * Asynchronously loads and registers the native libraries associated with Blimp . 19 * Asynchronously loads and registers the native libraries associated with Blimp .
20 */ 20 */
21 @JNINamespace("blimp::client") 21 @JNINamespace("blimp::client")
22 public final class BlimpLibraryLoader { 22 public final class BlimpLibraryLoader {
23 /** 23 /**
24 * A callback interface that is notified with the native library load result s. 24 * A callback interface that is notified with the native library load result s.
25 */ 25 */
26 public interface Callback { 26 public interface Callback {
27 /** 27 /**
28 * Called when the load attempt is finished (regardless of whether or no t it was 28 * Called when the load attempt is finished (regardless of whether or no t it was
29 * successful). 29 * successful).
30 * @param success Whether or not the native library was successfully loa ded. 30 * @param success Whether or not the native library was successfully loa ded.
31 */ 31 */
32 void onStartupComplete(boolean success); 32 void onStartupComplete(boolean success);
33 } 33 }
34 34
35 /** 35 /**
36 * Whether or not a call to {@link #startAsync(Context, Callback)} is/has ac tually attempted to 36 * Whether or not a call to {@link #startAsync(Callback)} is/has actually at tempted to
37 * load the native library. 37 * load the native library.
38 */ 38 */
39 private static boolean sLoadAttempted = false; 39 private static boolean sLoadAttempted = false;
40 40
41 /** If not {@code null} the result of a load attempt. */ 41 /** If not {@code null} the result of a load attempt. */
42 private static Boolean sLibraryLoadResult; 42 private static Boolean sLibraryLoadResult;
43 43
44 /** 44 /**
45 * A list of {@link Callback} instances that still need to be notified of th e result of the 45 * A list of {@link Callback} instances that still need to be notified of th e result of the
46 * initial call to {@link #startAsync(Context, Callback)}. 46 * initial call to {@link #startAsync(Callback)}.
47 */ 47 */
48 private static ObserverList<Callback> sOutstandingCallbacks = new ObserverLi st<Callback>(); 48 private static ObserverList<Callback> sOutstandingCallbacks = new ObserverLi st<>();
49 49
50 /** 50 /**
51 * Disallow instantiation of this class. 51 * Disallow instantiation of this class.
52 */ 52 */
53 private BlimpLibraryLoader() {} 53 private BlimpLibraryLoader() {}
54 54
55 /** 55 /**
56 * Starts asynchronously loading and registering the native libraries. If t his is called more 56 * Starts asynchronously loading and registering the native libraries. If t his is called more
57 * than once, only the first caller will actually load the library. The sub sequent calls will 57 * than once, only the first caller will actually load the library. The sub sequent calls will
58 * wait for the first call to finish and notify their {@link BlimpLibraryLoa der.Callback} 58 * wait for the first call to finish and notify their {@link BlimpLibraryLoa der.Callback}
59 * instances accordingly. Any calls to this after the library has finished loading will just 59 * instances accordingly. Any calls to this after the library has finished loading will just
60 * have the initial load result posted back to {@code callback}. 60 * have the initial load result posted back to {@code callback}.
61 * @param context A {@link Context} object.
62 * @param callback A {@link BlimpLibraryLoader.Callback} to be notified upon 61 * @param callback A {@link BlimpLibraryLoader.Callback} to be notified upon
63 * completion. 62 * completion.
64 * @throws ProcessInitException 63 * @throws ProcessInitException
65 */ 64 */
66 public static void startAsync(final Context context, final Callback callback ) 65 public static void startAsync(final Callback callback) throws ProcessInitExc eption {
67 throws ProcessInitException {
68 ThreadUtils.assertOnUiThread(); 66 ThreadUtils.assertOnUiThread();
69 67
70 // Save the callback to be notified once loading and initializiation is one. 68 // Save the callback to be notified once loading and initializiation is one.
71 sOutstandingCallbacks.addObserver(callback); 69 sOutstandingCallbacks.addObserver(callback);
72 70
73 if (sLibraryLoadResult != null) { 71 if (sLibraryLoadResult != null) {
74 // The library is already loaded, notify {@code callback} and skip t he rest of the 72 // The library is already loaded, notify {@code callback} and skip t he rest of the
75 // loading steps. 73 // loading steps.
76 notifyCallbacksAndClear(); 74 notifyCallbacksAndClear();
77 return; 75 return;
78 } 76 }
79 77
80 // If we're already in the process of loading, skip this call. Otherwis e mark that we are 78 // If we're already in the process of loading, skip this call. Otherwis e mark that we are
81 // loading and do the actual load. Subsequent calls won't run the load steps, but will wait 79 // loading and do the actual load. Subsequent calls won't run the load steps, but will wait
82 // for this load to finish. 80 // for this load to finish.
83 if (sLoadAttempted) return; 81 if (sLoadAttempted) return;
84 sLoadAttempted = true; 82 sLoadAttempted = true;
85 83
86 ResourceExtractor extractor = ResourceExtractor.get(context); 84 ResourceExtractor extractor = ResourceExtractor.get(ContextUtils.getAppl icationContext());
87 extractor.startExtractingResources(); 85 extractor.startExtractingResources();
88 LibraryLoader.get(LibraryProcessType.PROCESS_BROWSER).ensureInitialized( context); 86 LibraryLoader.get(LibraryProcessType.PROCESS_BROWSER).ensureInitialized( );
89 87
90 extractor.addCompletionCallback(new Runnable() { 88 extractor.addCompletionCallback(new Runnable() {
91 @Override 89 @Override
92 public void run() { 90 public void run() {
93 new Handler().post(new Runnable() { 91 new Handler().post(new Runnable() {
94 @Override 92 @Override
95 public void run() { 93 public void run() {
96 // Only run nativeStartBlimp if we properly initialized native. 94 // Only run nativeStartBlimp if we properly initialized native.
97 boolean startResult = nativeStartBlimp(); 95 boolean startResult = nativeStartBlimp();
98 sLibraryLoadResult = Boolean.valueOf(startResult); 96 sLibraryLoadResult = Boolean.valueOf(startResult);
(...skipping 21 matching lines...) Expand all
120 public void run() { 118 public void run() {
121 ThreadUtils.assertOnUiThread(); 119 ThreadUtils.assertOnUiThread();
122 callback.onStartupComplete(sLibraryLoadResult); 120 callback.onStartupComplete(sLibraryLoadResult);
123 } 121 }
124 }); 122 });
125 } 123 }
126 124
127 // Native methods. 125 // Native methods.
128 private static native boolean nativeStartBlimp(); 126 private static native boolean nativeStartBlimp();
129 } 127 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698