| Index: content/shell/android/linker_test_apk/src/org/chromium/content_linker_test_apk/LinkerTests.java
|
| diff --git a/content/shell/android/linker_test_apk/src/org/chromium/content_linker_test_apk/LinkerTests.java b/content/shell/android/linker_test_apk/src/org/chromium/content_linker_test_apk/LinkerTests.java
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..4247b903f5789de9854edf89db45d4d632c68c37
|
| --- /dev/null
|
| +++ b/content/shell/android/linker_test_apk/src/org/chromium/content_linker_test_apk/LinkerTests.java
|
| @@ -0,0 +1,61 @@
|
| +// Copyright (c) 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_linker_test_apk;
|
| +
|
| +import android.util.Log;
|
| +
|
| +import org.chromium.base.JNINamespace;
|
| +import org.chromium.content.app.Linker;
|
| +
|
| +// A class that is only used in linker test APK to perform runtime checks
|
| +// in the current process.
|
| +@JNINamespace("content")
|
| +public class LinkerTests implements Linker.TestRunner {
|
| + private static final String TAG = "LinkerTests";
|
| +
|
| + public LinkerTests() {}
|
| +
|
| + public boolean runChecks(int memoryDeviceConfig,
|
| + boolean isBrowserProcess) {
|
| + boolean checkSharedRelro;
|
| + if (isBrowserProcess) {
|
| + switch (Linker.BROWSER_SHARED_RELRO_CONFIG) {
|
| + case Linker.BROWSER_SHARED_RELRO_CONFIG_NEVER:
|
| + checkSharedRelro = false;
|
| + break;
|
| + case Linker.BROWSER_SHARED_RELRO_CONFIG_LOW_RAM_ONLY:
|
| + // A shared RELRO should only be used on low-end devices.
|
| + checkSharedRelro =
|
| + (memoryDeviceConfig == Linker.MEMORY_DEVICE_CONFIG_LOW);
|
| + break;
|
| + case Linker.BROWSER_SHARED_RELRO_CONFIG_ALWAYS:
|
| + // Always check for a shared RELRO.
|
| + checkSharedRelro = true;
|
| + break;
|
| + default:
|
| + Log.e(TAG, "Invalid shared RELRO linker configuration: " +
|
| + Linker.BROWSER_SHARED_RELRO_CONFIG);
|
| + return false;
|
| + }
|
| + } else {
|
| + // Service processes should always use a shared RELRO section.
|
| + checkSharedRelro = true;
|
| + }
|
| +
|
| + if (checkSharedRelro)
|
| + return nativeCheckForSharedRelros(isBrowserProcess);
|
| + else
|
| + return nativeCheckForNoSharedRelros(isBrowserProcess);
|
| + }
|
| +
|
| + // Check that there are shared RELRO sections in the current process,
|
| + // and that they are properly mapped read-only. Returns true on success.
|
| + private static native boolean nativeCheckForSharedRelros(boolean isBrowserProcess);
|
| +
|
| + // Check that there are no shared RELRO sections in the current process,
|
| + // return true on success.
|
| + private static native boolean nativeCheckForNoSharedRelros(boolean isBrowserProcess);
|
| +
|
| +}
|
|
|