• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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