<html>
<body>

<applet width=100 height=100 code=UpdatePermissions.class>
</applet>

This is a multi-stage test.  Click on "done" when you have completed
reading these instructions.<br><br>

First, policytool will be invoked.<br><br>

Then, follow these steps:<br>
0) Find (or create) a temporary directory that you have write access to.
(Example: 'C:\foo\tmp' on Windows or '/tmp' on other systems)<br><br>

1) Click on the "Add Policy Entry" button in the
main policytool window.<br><br>

2) Click on the "Add Permission" button in the Policy Entry window.<br><br>

3) In the Permission window, pull down the "Permission" menu and
select "AWTPermission".<br><br>

4) In the Permission window, pull down the "Target Name" menu and
select "listenToAllAWTEvents".<br><br>

5) Click on the "OK" button in the Permission window.<br><br>

6) Click on the "Done" button in the Policy Entry window.<br><br>

7) In the main policytool window, pull down the "File" menu and
select "Save As".<br><br>

8) In the SaveAs window, enter "/tmp/ptool.test" as the file name
and save it. If the file already exists, just replace it.<br>
(Or use the temporary directory mentioned in Step 0 if it's not '/tmp'.
For example, "C:\foo\tmp\ptool.test" on Windows)<br><br>

9) Check the content of the file created in the previous step<br><br>

10) check to make sure that the new entry is in the policy file.<br><br>

11) repeat steps 1-10 for:<br>
	AWTPermission:		readDisplayPixels<br>
	NetPermission:		specifyStreamHandler<br>
	RuntimePermission:	setContextClassLoader,
				setSecurityManager,
				shutdownHooks,
				stopThread<br>
	SecurityPermission:	createAccessControlContext<br><br>

In the confirmation dialog pop-up, click "OK".<br><br>

Exit policytool. Delete the files created during this test. If the
temporary directory is also newly created, empty and delete it.<br><br>

Press "Pass" if ... press "Fail" otherwise.<br><br>

</body>
</html>
