| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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.content.browser; | 5 package org.chromium.content.browser; |
| 6 | 6 |
| 7 import android.content.Context; | 7 import android.content.Context; |
| 8 import android.os.Handler; | 8 import android.os.Handler; |
| 9 import android.os.StrictMode; | 9 import android.os.StrictMode; |
| 10 | 10 |
| 11 import org.chromium.base.ContextUtils; |
| 11 import org.chromium.base.Log; | 12 import org.chromium.base.Log; |
| 12 import org.chromium.base.ResourceExtractor; | 13 import org.chromium.base.ResourceExtractor; |
| 13 import org.chromium.base.ThreadUtils; | 14 import org.chromium.base.ThreadUtils; |
| 14 import org.chromium.base.VisibleForTesting; | 15 import org.chromium.base.VisibleForTesting; |
| 15 import org.chromium.base.annotations.CalledByNative; | 16 import org.chromium.base.annotations.CalledByNative; |
| 16 import org.chromium.base.annotations.JNINamespace; | 17 import org.chromium.base.annotations.JNINamespace; |
| 17 import org.chromium.base.library_loader.LibraryLoader; | 18 import org.chromium.base.library_loader.LibraryLoader; |
| 18 import org.chromium.base.library_loader.LibraryProcessType; | 19 import org.chromium.base.library_loader.LibraryProcessType; |
| 19 import org.chromium.base.library_loader.LoaderErrors; | 20 import org.chromium.base.library_loader.LoaderErrors; |
| 20 import org.chromium.base.library_loader.ProcessInitException; | 21 import org.chromium.base.library_loader.ProcessInitException; |
| (...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 111 | 112 |
| 112 // This field is set after startup has been completed based on whether the s
tartup was a success | 113 // This field is set after startup has been completed based on whether the s
tartup was a success |
| 113 // or not. It is used when later requests to startup come in that happen aft
er the initial set | 114 // or not. It is used when later requests to startup come in that happen aft
er the initial set |
| 114 // of enqueued callbacks have been executed. | 115 // of enqueued callbacks have been executed. |
| 115 private boolean mStartupSuccess; | 116 private boolean mStartupSuccess; |
| 116 | 117 |
| 117 private int mLibraryProcessType; | 118 private int mLibraryProcessType; |
| 118 | 119 |
| 119 BrowserStartupController(Context context, int libraryProcessType) { | 120 BrowserStartupController(Context context, int libraryProcessType) { |
| 120 mContext = context.getApplicationContext(); | 121 mContext = context.getApplicationContext(); |
| 121 mAsyncStartupCallbacks = new ArrayList<StartupCallback>(); | 122 mAsyncStartupCallbacks = new ArrayList<>(); |
| 122 mLibraryProcessType = libraryProcessType; | 123 mLibraryProcessType = libraryProcessType; |
| 123 } | 124 } |
| 124 | 125 |
| 125 /** | 126 /** |
| 126 * Get BrowserStartupController instance, create a new one if no existing. | 127 * Get BrowserStartupController instance, create a new one if no existing. |
| 127 * | 128 * |
| 128 * @param context the application context. | 129 * @param context the application context. |
| 129 * @param libraryProcessType the type of process the shared library is loade
d. it must be | 130 * @param libraryProcessType the type of process the shared library is loade
d. it must be |
| 130 * LibraryProcessType.PROCESS_BROWSER or | 131 * LibraryProcessType.PROCESS_BROWSER or |
| 131 * LibraryProcessType.PROCESS_WEBVIEW. | 132 * LibraryProcessType.PROCESS_WEBVIEW. |
| (...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 286 final boolean singleProcess, final Runnable completionCallback) | 287 final boolean singleProcess, final Runnable completionCallback) |
| 287 throws ProcessInitException { | 288 throws ProcessInitException { |
| 288 Log.i(TAG, "Initializing chromium process, singleProcess=%b", singleProc
ess); | 289 Log.i(TAG, "Initializing chromium process, singleProcess=%b", singleProc
ess); |
| 289 | 290 |
| 290 // Normally Main.java will have kicked this off asynchronously for Chrom
e. But other | 291 // Normally Main.java will have kicked this off asynchronously for Chrom
e. But other |
| 291 // ContentView apps like tests also need them so we make sure we've extr
acted resources | 292 // ContentView apps like tests also need them so we make sure we've extr
acted resources |
| 292 // here. We can still make it a little async (wait until the library is
loaded). | 293 // here. We can still make it a little async (wait until the library is
loaded). |
| 293 ResourceExtractor resourceExtractor = ResourceExtractor.get(mContext); | 294 ResourceExtractor resourceExtractor = ResourceExtractor.get(mContext); |
| 294 resourceExtractor.startExtractingResources(); | 295 resourceExtractor.startExtractingResources(); |
| 295 | 296 |
| 297 ContextUtils.initApplicationContext(mContext.getApplicationContext()); |
| 298 |
| 296 // This strictmode exception is to cover the case where the browser proc
ess is being started | 299 // This strictmode exception is to cover the case where the browser proc
ess is being started |
| 297 // asynchronously but not in the main browser flow. The main browser fl
ow will trigger | 300 // asynchronously but not in the main browser flow. The main browser fl
ow will trigger |
| 298 // library loading earlier and this will be a no-op, but in the other ca
ses this will need | 301 // library loading earlier and this will be a no-op, but in the other ca
ses this will need |
| 299 // to block on loading libraries. | 302 // to block on loading libraries. |
| 300 // This applies to tests and ManageSpaceActivity, which can be launched
from Settings. | 303 // This applies to tests and ManageSpaceActivity, which can be launched
from Settings. |
| 301 StrictMode.ThreadPolicy oldPolicy = StrictMode.allowThreadDiskReads(); | 304 StrictMode.ThreadPolicy oldPolicy = StrictMode.allowThreadDiskReads(); |
| 302 try { | 305 try { |
| 303 // Normally Main.java will have already loaded the library asynchron
ously, we only need | 306 // Normally Main.java will have already loaded the library asynchron
ously, we only need |
| 304 // to load it here if we arrived via another flow, e.g. bookmark acc
ess & sync setup. | 307 // to load it here if we arrived via another flow, e.g. bookmark acc
ess & sync setup. |
| 305 LibraryLoader.get(mLibraryProcessType).ensureInitialized(mContext); | 308 LibraryLoader.get(mLibraryProcessType).ensureInitialized(mContext); |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 348 | 351 |
| 349 private static native void nativeSetCommandLineFlags( | 352 private static native void nativeSetCommandLineFlags( |
| 350 boolean singleProcess, String pluginDescriptor); | 353 boolean singleProcess, String pluginDescriptor); |
| 351 | 354 |
| 352 // Is this an official build of Chrome? Only native code knows for sure. Off
icial build | 355 // Is this an official build of Chrome? Only native code knows for sure. Off
icial build |
| 353 // knowledge is needed very early in process startup. | 356 // knowledge is needed very early in process startup. |
| 354 private static native boolean nativeIsOfficialBuild(); | 357 private static native boolean nativeIsOfficialBuild(); |
| 355 | 358 |
| 356 private static native boolean nativeIsPluginEnabled(); | 359 private static native boolean nativeIsPluginEnabled(); |
| 357 } | 360 } |
| OLD | NEW |