ChromiumLinkerParams.java revision 5d1f7b1de12d16ceb2c938c56701a3e8bfa558f7
1// Copyright 2014 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5package org.chromium.content.app; 6 7import android.content.Intent; 8 9/** 10 * A class to hold information passed from the browser process to each 11 * service one when using the chromium linker. For more information, read the 12 * technical notes in Linker.java. 13 */ 14public class ChromiumLinkerParams { 15 // Use this base address to load native shared libraries. If 0, ignore other members. 16 public final long mBaseLoadAddress; 17 18 // If true, wait for a shared RELRO Bundle just after loading the libraries. 19 public final boolean mWaitForSharedRelro; 20 21 // If not empty, name of Linker.TestRunner implementation that needs to be 22 // registered in the service process. 23 public final String mTestRunnerClassName; 24 25 private static final String EXTRA_LINKER_PARAMS_BASE_LOAD_ADDRESS = 26 "org.chromium.content.common.linker_params.base_load_address"; 27 28 private static final String EXTRA_LINKER_PARAMS_WAIT_FOR_SHARED_RELRO = 29 "org.chromium.content.common.linker_params.wait_for_shared_relro"; 30 31 private static final String EXTRA_LINKER_PARAMS_TEST_RUNNER_CLASS_NAME = 32 "org.chromium.content.common.linker_params.test_runner_class_name"; 33 34 public ChromiumLinkerParams(long baseLoadAddress, 35 boolean waitForSharedRelro, 36 String testRunnerClassName) { 37 mBaseLoadAddress = baseLoadAddress; 38 mWaitForSharedRelro = waitForSharedRelro; 39 mTestRunnerClassName = testRunnerClassName; 40 } 41 42 /** 43 * Use this constructor to recreate a LinkerParams instance from an Intent. 44 * @param intent An Intent, its content must have been populated by a previous 45 * call to addIntentExtras(). 46 */ 47 public ChromiumLinkerParams(Intent intent) { 48 mBaseLoadAddress = intent.getLongExtra(EXTRA_LINKER_PARAMS_BASE_LOAD_ADDRESS, 0); 49 mWaitForSharedRelro = intent.getBooleanExtra( 50 EXTRA_LINKER_PARAMS_WAIT_FOR_SHARED_RELRO, false); 51 mTestRunnerClassName = intent.getStringExtra( 52 EXTRA_LINKER_PARAMS_TEST_RUNNER_CLASS_NAME); 53 } 54 55 /** 56 * Ensure this LinkerParams instance is sent to a service process by adding 57 * it to an intent's extras. 58 * @param intent An Intent use to start or connect to the child service process. 59 */ 60 public void addIntentExtras(Intent intent) { 61 intent.putExtra(EXTRA_LINKER_PARAMS_BASE_LOAD_ADDRESS, mBaseLoadAddress); 62 intent.putExtra(EXTRA_LINKER_PARAMS_WAIT_FOR_SHARED_RELRO, mWaitForSharedRelro); 63 intent.putExtra(EXTRA_LINKER_PARAMS_TEST_RUNNER_CLASS_NAME, mTestRunnerClassName); 64 } 65 66 // For debugging traces only. 67 public String toString() { 68 return String.format( 69 "LinkerParams(baseLoadAddress:0x%x, waitForSharedRelro:%s, " + 70 "testRunnerClassName:%s", 71 mBaseLoadAddress, 72 mWaitForSharedRelro ? "true" : "false", 73 mTestRunnerClassName); 74 } 75} 76