Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / content / shell / android / linker_test_apk / src / org / chromium / chromium_linker_test_apk / LinkerTests.java
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
5 package org.chromium.chromium_linker_test_apk;
6
7 import android.util.Log;
8
9 import org.chromium.base.JNINamespace;
10 import org.chromium.base.library_loader.Linker;
11
12 /**
13  *  A class that is only used in linker test APK to perform runtime checks
14  * in the current process.
15  */
16 @JNINamespace("content")
17 public class LinkerTests implements Linker.TestRunner {
18     private static final String TAG = "LinkerTests";
19
20     public LinkerTests() {}
21
22     @Override
23     public boolean runChecks(int memoryDeviceConfig,
24                              boolean isBrowserProcess) {
25         boolean checkSharedRelro;
26         if (isBrowserProcess) {
27             switch (Linker.BROWSER_SHARED_RELRO_CONFIG) {
28                 case Linker.BROWSER_SHARED_RELRO_CONFIG_NEVER:
29                     checkSharedRelro = false;
30                     break;
31                 case Linker.BROWSER_SHARED_RELRO_CONFIG_LOW_RAM_ONLY:
32                     // A shared RELRO should only be used on low-end devices.
33                     checkSharedRelro =
34                             (memoryDeviceConfig == Linker.MEMORY_DEVICE_CONFIG_LOW);
35                     break;
36                 case Linker.BROWSER_SHARED_RELRO_CONFIG_ALWAYS:
37                     // Always check for a shared RELRO.
38                     checkSharedRelro = true;
39                     break;
40                 default:
41                     Log.e(TAG, "Invalid shared RELRO linker configuration: " +
42                             Linker.BROWSER_SHARED_RELRO_CONFIG);
43                     return false;
44             }
45         } else {
46             // Service processes should always use a shared RELRO section.
47             checkSharedRelro = true;
48         }
49
50         if (checkSharedRelro)
51             return nativeCheckForSharedRelros(isBrowserProcess);
52         else
53             return nativeCheckForNoSharedRelros(isBrowserProcess);
54     }
55
56     // Check that there are shared RELRO sections in the current process,
57     // and that they are properly mapped read-only. Returns true on success.
58     private static native boolean nativeCheckForSharedRelros(boolean isBrowserProcess);
59
60     // Check that there are no shared RELRO sections in the current process,
61     // return true on success.
62     private static native boolean nativeCheckForNoSharedRelros(boolean isBrowserProcess);
63
64 }