1f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* Licensed to the Apache Software Foundation (ASF) under one or more
2f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * contributor license agreements.  See the NOTICE file distributed with
3f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * this work for additional information regarding copyright ownership.
4f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * The ASF licenses this file to You under the Apache License, Version 2.0
5f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * (the "License"); you may not use this file except in compliance with
6f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the License.  You may obtain a copy of the License at
7f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
8f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *     http://www.apache.org/licenses/LICENSE-2.0
9f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
10f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
11f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
12f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * See the License for the specific language governing permissions and
14f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * limitations under the License.
15f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
16f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
17f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpackage org.apache.harmony.luni.tests.java.lang;
18f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
19f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.net.SocketPermission;
20f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.Permission;
21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.PermissionCollection;
22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.Permissions;
23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectclass MutableSecurityManager extends SecurityManager {
25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    static final RuntimePermission SET_SECURITY_MANAGER = new RuntimePermission("setSecurityManager");
27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    private PermissionCollection enabled;
29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    private PermissionCollection denied;
31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public boolean isCheckAcceptCalled = false;
33f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public boolean isCheckAccessThreadCalled = false;
34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public boolean isCheckAccessThreadGroupCalled = false;
35f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public MutableSecurityManager() {
37f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        super();
38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        this.enabled = new Permissions();
39f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
40f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
41f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public MutableSecurityManager(Permission... permissions) {
42f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        this();
43f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        for (int i = 0; i < permissions.length; i++) {
44f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            this.enabled.add(permissions[i]);
45f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
46f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
47f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
48f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    void addPermission(Permission permission) {
49f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        enabled.add(permission);
50f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
51f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
52f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    void clearPermissions() {
53f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        enabled = new Permissions();
54f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
55f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
56f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    void denyPermission(Permission p) {
57f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (denied == null) {
58f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            denied = p.newPermissionCollection();
59f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
60f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        denied.add(p);
61f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
62f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
63f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @Override
64f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void checkPermission(Permission permission)
65f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    {
66f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (permission != null) {
67f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            if (denied != null && denied.implies(permission)){
68f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
69f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                throw new SecurityException("Denied " + permission);
70f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
71f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
72f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            if (enabled.implies(permission)) {
73f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                return;
74f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
75f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
76f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
77f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        super.checkPermission(permission);
78f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
79f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
80f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @Override
81f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void checkPermission(Permission permission, Object context)
82f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    {
83f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (permission != null) {
84f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            if (denied != null && denied.implies(permission)){
85f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
86f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                throw new SecurityException("Denied " + permission);
87f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
88f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
89f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            if (enabled.implies(permission)) {
90f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                return;
91f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
92f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
93f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
94f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        super.checkPermission(permission, context);
95f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
96f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
97f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project  //  @Override
98f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void checkAccept(String host, int port) {
99f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        isCheckAcceptCalled = true;
100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        super.checkAccept(host, port);
101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project}
103