1 // Copyright 2015 The Chromium Authors 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 package org.chromium.native_test; 6 7 import android.app.Application; 8 import android.content.Context; 9 10 import org.chromium.base.ApplicationStatus; 11 import org.chromium.base.CommandLine; 12 import org.chromium.base.ContextUtils; 13 import org.chromium.base.library_loader.LibraryLoader; 14 import org.chromium.base.library_loader.LibraryProcessType; 15 import org.chromium.base.multidex.ChromiumMultiDexInstaller; 16 import org.chromium.build.BuildConfig; 17 18 /** 19 * An {@link android.app.Application} for running native browser tests. 20 */ 21 public abstract class NativeBrowserTestApplication extends Application { 22 @Override attachBaseContext(Context base)23 protected void attachBaseContext(Context base) { 24 super.attachBaseContext(base); 25 initApplicationContext(); 26 27 setLibraryProcessType(); 28 if (isMainProcess() || isBrowserProcess()) { 29 // We need secondary dex in order to run EmbeddedTestServer in a 30 // privileged process. 31 if (BuildConfig.IS_MULTIDEX_ENABLED) ChromiumMultiDexInstaller.install(this); 32 } 33 if (isBrowserProcess()) { 34 CommandLine.init(new String[] {}); 35 ApplicationStatus.initialize(this); 36 } 37 } 38 setLibraryProcessType()39 protected void setLibraryProcessType() { 40 LibraryLoader.getInstance().setLibraryProcessType(isBrowserProcess() 41 ? LibraryProcessType.PROCESS_BROWSER 42 : LibraryProcessType.PROCESS_CHILD); 43 } 44 45 /** 46 * Initializes the application context. Subclasses may want to override this if the 47 * application context is initialized elsewhere. 48 */ initApplicationContext()49 protected void initApplicationContext() { 50 ContextUtils.initApplicationContext(this); 51 } 52 isMainProcess()53 protected static boolean isMainProcess() { 54 // The test harness runs in the main process, and browser in :test_process. 55 return !ContextUtils.getProcessName().contains(":"); 56 } 57 isBrowserProcess()58 protected static boolean isBrowserProcess() { 59 // The test harness runs in the main process, and browser in :test_process. 60 return ContextUtils.getProcessName().contains(":test"); 61 } 62 } 63