Chromium Code Reviews| 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 148 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 280 } | 281 } |
| 281 }); | 282 }); |
| 282 } | 283 } |
| 283 | 284 |
| 284 @VisibleForTesting | 285 @VisibleForTesting |
| 285 void prepareToStartBrowserProcess( | 286 void prepareToStartBrowserProcess( |
| 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 |
| 291 ContextUtils.initApplicationContext(mContext.getApplicationContext()); | |
|
Ted C
2016/09/21 18:36:51
Why is this needed? With this here, isn't chrome
Torne
2016/09/26 09:21:35
We want to get rid of BaseChromiumApplication enti
Peter Wen
2016/09/28 15:55:16
Right, this should not be necessary here.
| |
| 292 | |
| 290 // Normally Main.java will have kicked this off asynchronously for Chrom e. But other | 293 // 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 | 294 // 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). | 295 // here. We can still make it a little async (wait until the library is loaded). |
| 293 ResourceExtractor resourceExtractor = ResourceExtractor.get(mContext); | 296 ResourceExtractor resourceExtractor = ResourceExtractor.get(mContext); |
| 294 resourceExtractor.startExtractingResources(); | 297 resourceExtractor.startExtractingResources(); |
| 295 | 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(); |
| 306 } finally { | 309 } finally { |
| 307 StrictMode.setThreadPolicy(oldPolicy); | 310 StrictMode.setThreadPolicy(oldPolicy); |
| 308 } | 311 } |
| 309 | 312 |
| 310 Runnable postResourceExtraction = new Runnable() { | 313 Runnable postResourceExtraction = new Runnable() { |
| 311 @Override | 314 @Override |
| 312 public void run() { | 315 public void run() { |
| 313 if (!mPostResourceExtractionTasksCompleted) { | 316 if (!mPostResourceExtractionTasksCompleted) { |
| 314 // TODO(yfriedman): Remove dependency on a command line flag for this. | 317 // TODO(yfriedman): Remove dependency on a command line flag for this. |
| 315 DeviceUtils.addDeviceSpecificUserAgentSwitch(mContext); | 318 DeviceUtils.addDeviceSpecificUserAgentSwitch(mContext); |
| (...skipping 32 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 |