// Copyright 2013 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.content.app; import android.content.Intent; /** * A class to hold information passed from the browser process to each * service one when using the content linker. For more information, read the * technical notes in Linker.java. */ public class LinkerParams { // Use this base address to load native shared libraries. If 0, ignore other members. public final long mBaseLoadAddress; // If true, wait for a shared RELRO Bundle just after loading the libraries. public final boolean mWaitForSharedRelro; // If not empty, name of Linker.TestRunner implementation that needs to be // registered in the service process. public final String mTestRunnerClassName; private static final String EXTRA_LINKER_PARAMS_BASE_LOAD_ADDRESS = "org.chromium.content.common.linker_params.base_load_address"; private static final String EXTRA_LINKER_PARAMS_WAIT_FOR_SHARED_RELRO = "org.chromium.content.common.linker_params.wait_for_shared_relro"; private static final String EXTRA_LINKER_PARAMS_TEST_RUNNER_CLASS_NAME = "org.chromium.content.common.linker_params.test_runner_class_name"; public LinkerParams(long baseLoadAddress, boolean waitForSharedRelro, String testRunnerClassName) { mBaseLoadAddress = baseLoadAddress; mWaitForSharedRelro = waitForSharedRelro; mTestRunnerClassName = testRunnerClassName; } /** * Use this constructor to recreate a LinkerParams instance from an Intent. * @param intent An Intent, its content must have been populated by a previous * call to addIntentExtras(). */ public LinkerParams(Intent intent) { mBaseLoadAddress = intent.getLongExtra(EXTRA_LINKER_PARAMS_BASE_LOAD_ADDRESS, 0); mWaitForSharedRelro = intent.getBooleanExtra( EXTRA_LINKER_PARAMS_WAIT_FOR_SHARED_RELRO, false); mTestRunnerClassName = intent.getStringExtra( EXTRA_LINKER_PARAMS_TEST_RUNNER_CLASS_NAME); } /** * Ensure this LinkerParams instance is sent to a service process by adding * it to an intent's extras. * @param intent An Intent use to start or connect to the child service process. */ public void addIntentExtras(Intent intent) { intent.putExtra(EXTRA_LINKER_PARAMS_BASE_LOAD_ADDRESS, mBaseLoadAddress); intent.putExtra(EXTRA_LINKER_PARAMS_WAIT_FOR_SHARED_RELRO, mWaitForSharedRelro); intent.putExtra(EXTRA_LINKER_PARAMS_TEST_RUNNER_CLASS_NAME, mTestRunnerClassName); } // For debugging traces only. public String toString() { return String.format( "LinkerParams(baseLoadAddress:0x%x, waitForSharedRelro:%s, " + "testRunnerClassName:%s", mBaseLoadAddress, mWaitForSharedRelro ? "true" : "false", mTestRunnerClassName); } }