// Copyright 2012 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.android_webview; import android.content.Context; import org.chromium.base.PathUtils; import org.chromium.base.ThreadUtils; import org.chromium.base.library_loader.LibraryLoader; import org.chromium.base.library_loader.ProcessInitException; import org.chromium.content.browser.BrowserStartupController; /** * Wrapper for the steps needed to initialize the java and native sides of webview chromium. */ public abstract class AwBrowserProcess { private static final String PRIVATE_DATA_DIRECTORY_SUFFIX = "webview"; /** * Loads the native library, and performs basic static construction of objects needed * to run webview in this process. Does not create threads; safe to call from zygote. * Note: it is up to the caller to ensure this is only called once. */ public static void loadLibrary() { PathUtils.setPrivateDataDirectorySuffix(PRIVATE_DATA_DIRECTORY_SUFFIX); try { LibraryLoader.loadNow(null); } catch (ProcessInitException e) { throw new RuntimeException("Cannot load WebView", e); } } /** * Starts the chromium browser process running within this process. Creates threads * and performs other per-app resource allocations; must not be called from zygote. * Note: it is up to the caller to ensure this is only called once. * @param context The Android application context */ public static void start(final Context context) { // We must post to the UI thread to cover the case that the user // has invoked Chromium startup by using the (thread-safe) // CookieManager rather than creating a WebView. ThreadUtils.runOnUiThreadBlocking(new Runnable() { @Override public void run() { try { BrowserStartupController.get(context).startBrowserProcessesSync( BrowserStartupController.MAX_RENDERERS_SINGLE_PROCESS); } catch (ProcessInitException e) { throw new RuntimeException("Cannot initialize WebView", e); } } }); } }