提交 a8bb37d3 编写于 作者: A asaha

Merge

...@@ -42,3 +42,4 @@ a50217eb3ee10b9f9547e0708e5c9625405083ef jdk7-b64 ...@@ -42,3 +42,4 @@ a50217eb3ee10b9f9547e0708e5c9625405083ef jdk7-b64
382a27aa78d3236fa123c60577797a887fe93e09 jdk7-b65 382a27aa78d3236fa123c60577797a887fe93e09 jdk7-b65
bd31b30a5b21f20e42965b1633f18a5c7946d398 jdk7-b66 bd31b30a5b21f20e42965b1633f18a5c7946d398 jdk7-b66
a952aafd5181af953b0ef3010dbd2fcc28460e8a jdk7-b67 a952aafd5181af953b0ef3010dbd2fcc28460e8a jdk7-b67
b23d905cb5d3b382295240d28ab0bfb266b4503c jdk7-b68
# #
# Copyright 2007-2008 Sun Microsystems, Inc. All Rights Reserved. # Copyright 2007-2009 Sun Microsystems, Inc. All Rights Reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
# #
# This code is free software; you can redistribute it and/or modify it # This code is free software; you can redistribute it and/or modify it
...@@ -45,54 +45,49 @@ ...@@ -45,54 +45,49 @@
# For OpenJDK, the jar files built here are installed directly into the # For OpenJDK, the jar files built here are installed directly into the
# OpenJDK. # OpenJDK.
# #
# For JDK, the binaries use pre-built/pre-signed/pre-obfuscated binary # For JDK, the binaries use pre-built/pre-signed binary files stored in
# files stored in the closed workspace that are not shipped in the # the closed workspace that are not shipped in the OpenJDK workspaces.
# OpenJDK workspaces. We still build the JDK files here to verify the # We still build the JDK files here to verify the files compile, and in
# files compile, and in preparation for possible signing and # preparation for possible signing. Developers working on JCE in JDK
# obfuscation. Developers working on JCE in JDK must sign the JCE files # must sign the JCE files before testing. The JCE signing key is kept
# before testing: obfuscation is optional during development. The JCE # separate from the JDK workspace to prevent its disclosure.
# signing key is kept separate from the JDK workspace to prevent its #
# disclosure. The obfuscation tool has not been licensed for general
# usage.
#
# SPECIAL NOTE TO JCE/JDK developers: The source files must eventually # SPECIAL NOTE TO JCE/JDK developers: The source files must eventually
# be built, obfuscated, signed, and then the resulting jar files MUST BE # be built and signed, and the resulting jar files MUST BE CHECKED INTO
# CHECKED INTO THE CLOSED PART OF THE WORKSPACE*. This separate step # THE CLOSED PART OF THE WORKSPACE*. This separate step *MUST NOT BE
# *MUST NOT BE FORGOTTEN*, otherwise a bug fixed in the source code will # FORGOTTEN*, otherwise a bug fixed in the source code will not be
# not be reflected in the shipped binaries. The "release" target should be # reflected in the shipped binaries. The "release" target should be
# used to generate the required files. # used to generate the required files.
# #
# There are a number of targets to help both JDK/OpenJDK developers. # There are a number of targets to help both JDK/OpenJDK developers.
# #
# Main Targets (JDK/OPENJDK): # Main Targets (JDK/OPENJDK):
# #
# all/clobber/clean The usual. # all/clobber/clean The usual.
# If OpenJDK, installs sunjce_provider.jar. # If OpenJDK, installs sunjce_provider.jar.
# If JDK, installs prebuilt # If JDK, installs prebuilt
# sunjce_provider.jar. # sunjce_provider.jar.
# #
# jar Builds/installs sunjce_provider.jar # jar Builds/installs sunjce_provider.jar
# If OpenJDK, does not sign. # If OpenJDK, does not sign.
# If JDK, tries to sign. # If JDK, tries to sign.
# #
# Other lesser-used Targets (JDK/OPENJDK): # Other lesser-used Targets (JDK/OPENJDK):
# #
# build-jar Builds sunjce_provider.jar # build-jar Builds sunjce_provider.jar
# (does not sign/install) # (does not sign/install)
# #
# install-jar Alias for "jar" above. # install-jar Alias for "jar" above.
# #
# Other targets (JDK only): # Other targets (JDK only):
# #
# sign Alias for sign-jar # sign Alias for sign-jar
# sign-jar Builds/signs sunjce_provider.jar (no install) # sign-jar Builds/signs sunjce_provider.jar (no install)
#
# obfus Builds/obfuscates/signs sunjce_provider.jar
# #
# release Builds all targets in preparation # release Builds all targets in preparation
# for workspace integration. # for workspace integration.
# #
# install-prebuilt Installs the pre-built jar files # install-prebuilt Installs the pre-built jar files
# #
# This makefile was written to support parallel target execution. # This makefile was written to support parallel target execution.
# #
...@@ -103,7 +98,7 @@ PRODUCT = sun ...@@ -103,7 +98,7 @@ PRODUCT = sun
# #
# The following is for when we need to do postprocessing # The following is for when we need to do postprocessing
# (signing/obfuscation) against a read-only build. If the OUTPUTDIR # (signing) against a read-only build. If the OUTPUTDIR
# isn't writable, the build currently crashes out. # isn't writable, the build currently crashes out.
# #
ifndef OPENJDK ifndef OPENJDK
...@@ -158,8 +153,8 @@ endif # OPENJDK ...@@ -158,8 +153,8 @@ endif # OPENJDK
# #
# We use a variety of subdirectories in the $(TEMPDIR) depending on what # We use a variety of subdirectories in the $(TEMPDIR) depending on what
# part of the build we're doing. Both OPENJDK/JDK builds are initially # part of the build we're doing. Both OPENJDK/JDK builds are initially
# done in the unsigned area. When files are signed or obfuscated in JDK, # done in the unsigned area. When files are signed in JDK, they will be
# they will be placed in the appropriate areas. # placed in the appropriate areas.
# #
UNSIGNED_DIR = $(TEMPDIR)/unsigned UNSIGNED_DIR = $(TEMPDIR)/unsigned
...@@ -223,62 +218,15 @@ $(SIGNED_DIR)/sunjce_provider.jar: ...@@ -223,62 +218,15 @@ $(SIGNED_DIR)/sunjce_provider.jar:
endif endif
$(call sign-file, $(UNSIGNED_DIR)/sunjce_provider.jar) $(call sign-file, $(UNSIGNED_DIR)/sunjce_provider.jar)
# =====================================================
# Obfuscate/sign/install the JDK build. Not needed for OpenJDK.
#
OBFUS_DIR = $(JCE_BUILD_DIR)/obfus/sunjce
CLOSED_DIR = $(BUILDDIR)/closed/com/sun/crypto/provider
obfus: $(OBFUS_DIR)/sunjce_provider.jar
$(release-warning)
ifndef ALT_JCE_BUILD_DIR
$(OBFUS_DIR)/sunjce_provider.jar: build-jar $(JCE_MANIFEST_FILE) \
$(OBFUS_DIR)/sunjce.dox
else
$(OBFUS_DIR)/sunjce_provider.jar: $(JCE_MANIFEST_FILE) $(OBFUS_DIR)/sunjce.dox
@if [ ! -d $(CLASSDESTDIR) ] ; then \
$(ECHO) "Couldn't find $(CLASSDESTDIR)"; \
exit 1; \
fi
endif
@$(ECHO) ">>>Obfuscating SunJCE Provider..."
$(presign)
$(preobfus)
$(prep-target)
$(CD) $(OBFUS_DIR); \
$(OBFUSCATOR) -fv sunjce.dox
@$(CD) $(OBFUS_DIR); $(java-vm-cleanup)
$(BOOT_JAR_CMD) cmf $(JCE_MANIFEST_FILE) $@ \
-C $(OBFUS_DIR)/build com \
$(BOOT_JAR_JFLAGS)
$(sign-target)
@$(java-vm-cleanup)
$(OBFUS_DIR)/sunjce.dox: $(CLOSED_DIR)/obfus/sunjce.dox
@$(ECHO) ">>>Creating sunjce.dox"
$(prep-target)
$(SED) "s:@@TEMPDIR@@:$(ABS_TEMPDIR):" $< > $@
#
# The current obfuscator has a limitation in that it currently only
# supports up to v49 class file format. Force v49 classfiles in our
# builds for now.
#
SOURCE_LANGUAGE_VERSION = 5
TARGET_CLASS_VERSION = 5
# ===================================================== # =====================================================
# Create the Release Engineering files. Obfuscated builds, etc. # Create the Release Engineering files. Signed builds, etc.
# #
release: $(OBFUS_DIR)/sunjce_provider.jar release: $(SIGNED_DIR)/sunjce_provider.jar
$(RM) $(JCE_BUILD_DIR)/release/sunjce_provider.jar $(RM) $(JCE_BUILD_DIR)/release/sunjce_provider.jar
$(MKDIR) -p $(JCE_BUILD_DIR)/release $(MKDIR) -p $(JCE_BUILD_DIR)/release
$(CP) $(OBFUS_DIR)/sunjce_provider.jar $(JCE_BUILD_DIR)/release $(CP) $(SIGNED_DIR)/sunjce_provider.jar $(JCE_BUILD_DIR)/release
$(release-warning) $(release-warning)
endif # OPENJDK endif # OPENJDK
...@@ -320,5 +268,5 @@ clobber clean:: ...@@ -320,5 +268,5 @@ clobber clean::
.PHONY: build-jar jar install-jar .PHONY: build-jar jar install-jar
ifndef OPENJDK ifndef OPENJDK
.PHONY: sign sign-jar obfus release install-prebuilt .PHONY: sign sign-jar release install-prebuilt
endif endif
# #
# Copyright 2007-2008 Sun Microsystems, Inc. All Rights Reserved. # Copyright 2007-2009 Sun Microsystems, Inc. All Rights Reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
# #
# This code is free software; you can redistribute it and/or modify it # This code is free software; you can redistribute it and/or modify it
...@@ -61,7 +61,7 @@ SIGNING_PASSPHRASE = $(SIGNING_KEY_DIR)/passphrase.txt ...@@ -61,7 +61,7 @@ SIGNING_PASSPHRASE = $(SIGNING_KEY_DIR)/passphrase.txt
SIGNING_ALIAS = jce_rsa SIGNING_ALIAS = jce_rsa
# #
# Defines for signing/obfuscating the various jar files. # Defines for signing the various jar files.
# #
define presign define presign
...@@ -100,19 +100,4 @@ define sign-file ...@@ -100,19 +100,4 @@ define sign-file
$(sign-target) $(sign-target)
endef endef
#
# Location for the Obfuscation product. JDK currently has
# the requirement that we obfuscate our JCE jars.
#
OBFUSCATOR = /security/tools/bin/obfus
OBFUS_DIR = $(TEMPDIR)/obfus
define preobfus
@if [ ! -f $(OBFUSCATOR) ]; then \
$(ECHO) "\n$(OBFUSCATOR): Obfuscator *NOT* available..." \
$(README-MAKEFILE_WARNING); \
exit 2; \
fi
endef
endif # !OPENJDK endif # !OPENJDK
# #
# Copyright 2007-2008 Sun Microsystems, Inc. All Rights Reserved. # Copyright 2007-2009 Sun Microsystems, Inc. All Rights Reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
# #
# This code is free software; you can redistribute it and/or modify it # This code is free software; you can redistribute it and/or modify it
...@@ -44,64 +44,65 @@ ...@@ -44,64 +44,65 @@
# For OpenJDK, the jar files built here are installed directly into the # For OpenJDK, the jar files built here are installed directly into the
# OpenJDK. # OpenJDK.
# #
# For JDK, the binaries use pre-built/pre-signed/pre-obfuscated binary # For JDK, the binaries use pre-built/pre-signed binary files stored in
# files stored in the closed workspace that are not shipped in the # the closed workspace that are not shipped in the OpenJDK workspaces.
# OpenJDK workspaces. We still build the JDK files here to verify the # We still build the JDK files here to verify the files compile, and in
# files compile, and in preparation for possible signing and # preparation for possible signing. Developers working on JCE in JDK
# obfuscation. Developers working on JCE in JDK must sign the JCE files # must sign the JCE files before testing. The JCE signing key is kept
# before testing: obfuscation is optional during development. The JCE # separate from the JDK workspace to prevent its disclosure.
# signing key is kept separate from the JDK workspace to prevent its
# disclosure. The obfuscation tool has not been licensed for general
# usage.
# #
# SPECIAL NOTE TO JCE/JDK developers: The source files must eventually # SPECIAL NOTE TO JCE/JDK developers: The source files must eventually
# be built, obfuscated, signed, and the resulting jar files *MUST BE # be built and signed, and the resulting jar files *MUST BE CHECKED INTO
# CHECKED INTO THE CLOSED PART OF THE WORKSPACE*. This separate step # THE CLOSED PART OF THE WORKSPACE*. This separate step *MUST NOT BE
# *MUST NOT BE FORGOTTEN*, otherwise a bug fixed in the source code will # FORGOTTEN*, otherwise a bug fixed in the source code will not be
# not be reflected in the shipped binaries. The "release" target should # reflected in the shipped binaries. The "release" target should be
# be used to generate the required files. # used to generate the required files.
# #
# There are a number of targets to help both JDK/OpenJDK developers. # There are a number of targets to help both JDK/OpenJDK developers.
# #
# Main Targets (JDK/OPENJDK): # Main Targets (JDK/OPENJDK):
# #
# all/clobber/clean The usual. # all/clobber/clean The usual.
# If OpenJDK, installs # If OpenJDK: builds/installs the
# jce.jar/limited policy files. # jce.jar/limited policy files.
# If JDK, installs prebuilt # If JDK: builds but does not install.
# jce.jar/limited policy files. # During full tops-down builds,
# # prebuilt/presigned jce.jar &
# jar Builds/installs jce.jar # limited policy files are copied
# If OpenJDK, does not sign # in by make/java/redist/Makefile.
# If JDK, tries to sign # If you are working in this directory
# and want to install the prebuilts,
# use the "install-prebuilt" target.
#
# jar Builds/installs jce.jar
# If OpenJDK, does not sign
# If JDK, tries to sign
# #
# Other lesser-used Targets (JDK/OPENJDK): # Other lesser-used Targets (JDK/OPENJDK):
# #
# build-jar Builds jce.jar (does not sign/install) # build-jar Builds jce.jar (does not sign/install)
# #
# build-policy Builds policy files (does not sign/install) # build-policy Builds policy files (does not sign/install)
# #
# install-jar Alias for "jar" above # install-jar Alias for "jar" above
# #
# install-limited Builds/installs limited policy files # install-limited Builds/installs limited policy files
# If OpenJDK, does not sign # If OpenJDK, does not sign
# If JDK, tries to sign # If JDK, tries to sign
# install-unlimited Builds/nstalls unlimited policy files # install-unlimited Builds/nstalls unlimited policy files
# If OpenJDK, does not sign # If OpenJDK, does not sign
# If JDK, tries to sign # If JDK, tries to sign
# #
# Other targets (JDK only): # Other targets (JDK only):
# #
# sign Alias for sign-jar and sign-policy # sign Alias for sign-jar and sign-policy
# sign-jar Builds/signs jce.jar file (no install) # sign-jar Builds/signs jce.jar file (no install)
# sign-policy Builds/signs policy files (no install) # sign-policy Builds/signs policy files (no install)
#
# obfus Builds/obfuscates/signs jce.jar
# #
# release Builds all targets in preparation # release Builds all targets in preparation
# for workspace integration. # for workspace integration.
# #
# install-prebuilt Installs the pre-built jar files # install-prebuilt Installs the pre-built jar files
# #
# This makefile was written to support parallel target execution. # This makefile was written to support parallel target execution.
# #
...@@ -112,7 +113,7 @@ PRODUCT = sun ...@@ -112,7 +113,7 @@ PRODUCT = sun
# #
# The following is for when we need to do postprocessing # The following is for when we need to do postprocessing
# (signing/obfuscation) against a read-only build. If the OUTPUTDIR # (signing) against a read-only build. If the OUTPUTDIR
# isn't writable, the build currently crashes out. # isn't writable, the build currently crashes out.
# #
ifndef OPENJDK ifndef OPENJDK
...@@ -169,8 +170,8 @@ endif # OPENJDK ...@@ -169,8 +170,8 @@ endif # OPENJDK
# #
# We use a variety of subdirectories in the $(TEMPDIR) depending on what # We use a variety of subdirectories in the $(TEMPDIR) depending on what
# part of the build we're doing. Both OPENJDK/JDK builds are initially # part of the build we're doing. Both OPENJDK/JDK builds are initially
# done in the unsigned area. When files are signed or obfuscated in JDK, # done in the unsigned area. When files are signed in JDK, they will be
# they will be placed in the appropriate areas. # placed in the appropriate areas.
# #
UNSIGNED_DIR = $(TEMPDIR)/unsigned UNSIGNED_DIR = $(TEMPDIR)/unsigned
...@@ -178,7 +179,7 @@ include Defs-jce.gmk ...@@ -178,7 +179,7 @@ include Defs-jce.gmk
# ===================================================== # =====================================================
# Build the unsigned jce.jar file. Signing/obfuscation comes later. # Build the unsigned jce.jar file. Signing comes later.
# #
JAR_DESTFILE = $(LIBDIR)/jce.jar JAR_DESTFILE = $(LIBDIR)/jce.jar
...@@ -363,69 +364,13 @@ $(SIGNED_POLICY_BUILDDIR)/limited/local_policy.jar: \ ...@@ -363,69 +364,13 @@ $(SIGNED_POLICY_BUILDDIR)/limited/local_policy.jar: \
# ===================================================== # =====================================================
# Obfuscate/sign/install the JDK build. Not needed for OpenJDK. # Create the Release Engineering files. Signed builds,
# unlimited policy file distribution, etc.
# #
OBFUS_DIR = $(JCE_BUILD_DIR)/obfus/jce
CLOSED_DIR = $(BUILDDIR)/closed/javax/crypto CLOSED_DIR = $(BUILDDIR)/closed/javax/crypto
obfus: $(OBFUS_DIR)/jce.jar release: $(SIGNED_DIR)/jce.jar sign-policy $(CLOSED_DIR)/doc/COPYRIGHT.html \
$(release-warning)
ifndef ALT_JCE_BUILD_DIR
$(OBFUS_DIR)/jce.jar: build-jar $(JCE_MANIFEST_FILE) $(OBFUS_DIR)/framework.dox
else
#
# We have to remove the build dependency, otherwise, we'll try to rebuild it
# which we can't do on a read-only filesystem.
#
$(OBFUS_DIR)/jce.jar: $(JCE_MANIFEST_FILE) $(OBFUS_DIR)/framework.dox
@if [ ! -d $(CLASSDESTDIR) ] ; then \
$(ECHO) "Couldn't find $(CLASSDESTDIR)"; \
exit 1; \
fi
endif
@$(ECHO) ">>>Obfuscating JCE framework..."
$(presign)
$(preobfus)
$(prep-target)
$(CD) $(OBFUS_DIR); \
$(OBFUSCATOR) -fv framework.dox
@$(CD) $(OBFUS_DIR); $(java-vm-cleanup)
@#
@# The sun.security.internal classes are currently not obfuscated
@# due to an obfus problem. Manually copy them to the build directory
@# so that they are included in the jce.jar file.
@#
$(CP) -r $(CLASSDESTDIR)/sun $(OBFUS_DIR)/build
$(BOOT_JAR_CMD) cmf $(JCE_MANIFEST_FILE) $@ \
-C $(OBFUS_DIR)/build javax \
-C $(OBFUS_DIR)/build sun \
$(BOOT_JAR_JFLAGS)
$(sign-target)
@$(java-vm-cleanup)
$(OBFUS_DIR)/framework.dox: $(CLOSED_DIR)/obfus/framework.dox
@$(ECHO) ">>>Creating framework.dox"
$(prep-target)
$(SED) "s:@@TEMPDIR@@:$(ABS_TEMPDIR):" $< > $@
#
# The current obfuscator has a limitation in that it currently only
# supports up to v49 class file format. Force v49 classfiles in our
# builds for now.
#
SOURCE_LANGUAGE_VERSION = 5
TARGET_CLASS_VERSION = 5
# =====================================================
# Create the Release Engineering files. Obfuscated builds,
# unlimited policy file distribution, etc.
#
release: $(OBFUS_DIR)/jce.jar sign-policy $(CLOSED_DIR)/doc/COPYRIGHT.html \
$(CLOSED_DIR)/doc/README.txt $(CLOSED_DIR)/doc/README.txt
$(RM) -r \ $(RM) -r \
$(JCE_BUILD_DIR)/release/UnlimitedJCEPolicy \ $(JCE_BUILD_DIR)/release/UnlimitedJCEPolicy \
...@@ -434,7 +379,7 @@ release: $(OBFUS_DIR)/jce.jar sign-policy $(CLOSED_DIR)/doc/COPYRIGHT.html \ ...@@ -434,7 +379,7 @@ release: $(OBFUS_DIR)/jce.jar sign-policy $(CLOSED_DIR)/doc/COPYRIGHT.html \
$(JCE_BUILD_DIR)/release/local_policy.jar \ $(JCE_BUILD_DIR)/release/local_policy.jar \
$(JCE_BUILD_DIR)/release/UnlimitedJCEPolicy.zip $(JCE_BUILD_DIR)/release/UnlimitedJCEPolicy.zip
$(MKDIR) -p $(JCE_BUILD_DIR)/release/UnlimitedJCEPolicy $(MKDIR) -p $(JCE_BUILD_DIR)/release/UnlimitedJCEPolicy
$(CP) $(OBFUS_DIR)/jce.jar $(JCE_BUILD_DIR)/release $(CP) $(SIGNED_DIR)/jce.jar $(JCE_BUILD_DIR)/release
$(CP) \ $(CP) \
$(SIGNED_POLICY_BUILDDIR)/limited/US_export_policy.jar \ $(SIGNED_POLICY_BUILDDIR)/limited/US_export_policy.jar \
$(SIGNED_POLICY_BUILDDIR)/limited/local_policy.jar \ $(SIGNED_POLICY_BUILDDIR)/limited/local_policy.jar \
...@@ -530,5 +475,5 @@ clobber clean:: ...@@ -530,5 +475,5 @@ clobber clean::
.PHONY: build-jar jar build-policy unlimited limited install-jar \ .PHONY: build-jar jar build-policy unlimited limited install-jar \
install-limited install-unlimited install-limited install-unlimited
ifndef OPENJDK ifndef OPENJDK
.PHONY: sign sign-jar sign-policy obfus release install-prebuilt .PHONY: sign sign-jar sign-policy release install-prebuilt
endif endif
# #
# Copyright 2005-2008 Sun Microsystems, Inc. All Rights Reserved. # Copyright 2005-2009 Sun Microsystems, Inc. All Rights Reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
# #
# This code is free software; you can redistribute it and/or modify it # This code is free software; you can redistribute it and/or modify it
...@@ -59,31 +59,31 @@ ...@@ -59,31 +59,31 @@
# #
# Main Targets (JDK/OPENJDK): # Main Targets (JDK/OPENJDK):
# #
# all/clobber/clean The usual, plus the native libraries. # all/clobber/clean The usual, plus the native libraries.
# If OpenJDK, installs sunmscapi.jar. # If OpenJDK, installs sunmscapi.jar.
# If JDK, installs prebuilt # If JDK, installs prebuilt
# sunmscapi.jar. # sunmscapi.jar.
# #
# jar Builds/installs sunmscapi.jar # jar Builds/installs sunmscapi.jar
# If OpenJDK, does not sign. # If OpenJDK, does not sign.
# If JDK, tries to sign. # If JDK, tries to sign.
# #
# Other lesser-used Targets (JDK/OPENJDK): # Other lesser-used Targets (JDK/OPENJDK):
# #
# build-jar Builds sunmscapi.jar # build-jar Builds sunmscapi.jar
# (does not sign/install) # (does not sign/install)
# #
# install-jar Alias for "jar" above. # install-jar Alias for "jar" above.
# #
# Other targets (JDK only): # Other targets (JDK only):
# #
# sign Alias for sign-jar # sign Alias for sign-jar
# sign-jar Builds/signs sunmscapi.jar (no install) # sign-jar Builds/signs sunmscapi.jar (no install)
# #
# release Builds all targets in preparation # release Builds all targets in preparation
# for workspace integration. # for workspace integration.
# #
# install-prebuilt Installs the pre-built jar files # install-prebuilt Installs the pre-built jar files
# #
# This makefile was written to support parallel target execution. # This makefile was written to support parallel target execution.
# #
......
# #
# Copyright 2003-2008 Sun Microsystems, Inc. All Rights Reserved. # Copyright 2003-2009 Sun Microsystems, Inc. All Rights Reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
# #
# This code is free software; you can redistribute it and/or modify it # This code is free software; you can redistribute it and/or modify it
...@@ -59,31 +59,31 @@ ...@@ -59,31 +59,31 @@
# #
# Main Targets (JDK/OPENJDK): # Main Targets (JDK/OPENJDK):
# #
# all/clobber/clean The usual, plus the native libraries. # all/clobber/clean The usual, plus the native libraries.
# If OpenJDK, installs sunpkcs11.jar. # If OpenJDK, installs sunpkcs11.jar.
# If JDK, installs prebuilt # If JDK, installs prebuilt
# sunpkcs11.jar. # sunpkcs11.jar.
# #
# jar Builds/installs sunpkcs11.jar # jar Builds/installs sunpkcs11.jar
# If OpenJDK, does not sign. # If OpenJDK, does not sign.
# If JDK, tries to sign. # If JDK, tries to sign.
# #
# Other lesser-used Targets (JDK/OPENJDK): # Other lesser-used Targets (JDK/OPENJDK):
# #
# build-jar Builds sunpkcs11.jar # build-jar Builds sunpkcs11.jar
# (does not sign/install) # (does not sign/install)
# #
# install-jar Alias for "jar" above. # install-jar Alias for "jar" above.
# #
# Other targets (JDK only): # Other targets (JDK only):
# #
# sign Alias for sign-jar # sign Alias for sign-jar
# sign-jar Builds/signs sunpkcs11.jar (no install) # sign-jar Builds/signs sunpkcs11.jar (no install)
# #
# release Builds all targets in preparation # release Builds all targets in preparation
# for workspace integration. # for workspace integration.
# #
# install-prebuilt Installs the pre-built jar files # install-prebuilt Installs the pre-built jar files
# #
# This makefile was written to support parallel target execution. # This makefile was written to support parallel target execution.
# #
......
/* /*
* Copyright 2002-2007 Sun Microsystems, Inc. All Rights Reserved. * Copyright 2002-2009 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -56,12 +56,8 @@ public final class AESCipher extends CipherSpi { ...@@ -56,12 +56,8 @@ public final class AESCipher extends CipherSpi {
/** /**
* Creates an instance of AES cipher with default ECB mode and * Creates an instance of AES cipher with default ECB mode and
* PKCS5Padding. * PKCS5Padding.
*
* @exception SecurityException if this constructor fails to verify
* its own integrity
*/ */
public AESCipher() { public AESCipher() {
SunJCE.ensureIntegrity(getClass());
core = new CipherCore(new AESCrypt(), AESConstants.AES_BLOCK_SIZE); core = new CipherCore(new AESCrypt(), AESConstants.AES_BLOCK_SIZE);
} }
......
/* /*
* Copyright 2002-2007 Sun Microsystems, Inc. All Rights Reserved. * Copyright 2002-2009 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -48,16 +48,9 @@ public final class AESKeyGenerator extends KeyGeneratorSpi { ...@@ -48,16 +48,9 @@ public final class AESKeyGenerator extends KeyGeneratorSpi {
private int keySize = 16; // default keysize (in number of bytes) private int keySize = 16; // default keysize (in number of bytes)
/** /**
* Verify the SunJCE provider in the constructor. * Empty constructor.
*
* @exception SecurityException if fails to verify
* its own integrity
*/ */
public AESKeyGenerator() { public AESKeyGenerator() {
if (!SunJCE.verifySelfIntegrity(this.getClass())) {
throw new SecurityException("The SunJCE provider may have " +
"been tampered.");
}
} }
/** /**
......
/* /*
* Copyright 2004-2007 Sun Microsystems, Inc. All Rights Reserved. * Copyright 2004-2009 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -65,12 +65,8 @@ public final class AESWrapCipher extends CipherSpi { ...@@ -65,12 +65,8 @@ public final class AESWrapCipher extends CipherSpi {
/** /**
* Creates an instance of AES KeyWrap cipher with default * Creates an instance of AES KeyWrap cipher with default
* mode, i.e. "ECB" and padding scheme, i.e. "NoPadding". * mode, i.e. "ECB" and padding scheme, i.e. "NoPadding".
*
* @exception SecurityException if this constructor fails to verify
* its own integrity
*/ */
public AESWrapCipher() { public AESWrapCipher() {
SunJCE.ensureIntegrity(getClass());
cipher = new AESCrypt(); cipher = new AESCrypt();
} }
......
/* /*
* Copyright 2003-2007 Sun Microsystems, Inc. All Rights Reserved. * Copyright 2003-2009 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -62,7 +62,6 @@ public final class ARCFOURCipher extends CipherSpi { ...@@ -62,7 +62,6 @@ public final class ARCFOURCipher extends CipherSpi {
// called by the JCE framework // called by the JCE framework
public ARCFOURCipher() { public ARCFOURCipher() {
SunJCE.ensureIntegrity(getClass());
S = new int[256]; S = new int[256];
} }
......
/* /*
* Copyright 1998-2007 Sun Microsystems, Inc. All Rights Reserved. * Copyright 1998-2009 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -60,12 +60,8 @@ public final class BlowfishCipher extends CipherSpi { ...@@ -60,12 +60,8 @@ public final class BlowfishCipher extends CipherSpi {
/** /**
* Creates an instance of Blowfish cipher with default ECB mode and * Creates an instance of Blowfish cipher with default ECB mode and
* PKCS5Padding. * PKCS5Padding.
*
* @exception SecurityException if this constructor fails to verify
* its own integrity
*/ */
public BlowfishCipher() { public BlowfishCipher() {
SunJCE.ensureIntegrity(getClass());
core = new CipherCore(new BlowfishCrypt(), core = new CipherCore(new BlowfishCrypt(),
BlowfishConstants.BLOWFISH_BLOCK_SIZE); BlowfishConstants.BLOWFISH_BLOCK_SIZE);
} }
......
/* /*
* Copyright 1998-2007 Sun Microsystems, Inc. All Rights Reserved. * Copyright 1998-2009 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -46,16 +46,9 @@ public final class BlowfishKeyGenerator extends KeyGeneratorSpi { ...@@ -46,16 +46,9 @@ public final class BlowfishKeyGenerator extends KeyGeneratorSpi {
private int keysize = 16; // default keysize (in number of bytes) private int keysize = 16; // default keysize (in number of bytes)
/** /**
* Verify the SunJCE provider in the constructor. * Empty constructor
*
* @exception SecurityException if fails to verify
* its own integrity
*/ */
public BlowfishKeyGenerator() { public BlowfishKeyGenerator() {
if (!SunJCE.verifySelfIntegrity(this.getClass())) {
throw new SecurityException("The SunJCE provider may have " +
"been tampered.");
}
} }
/** /**
......
/* /*
* Copyright 1997-2007 Sun Microsystems, Inc. All Rights Reserved. * Copyright 1997-2009 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -56,12 +56,8 @@ public final class DESCipher extends CipherSpi { ...@@ -56,12 +56,8 @@ public final class DESCipher extends CipherSpi {
/** /**
* Creates an instance of DES cipher with default ECB mode and * Creates an instance of DES cipher with default ECB mode and
* PKCS5Padding. * PKCS5Padding.
*
* @exception SecurityException if this constructor fails to verify
* its own integrity
*/ */
public DESCipher() { public DESCipher() {
SunJCE.ensureIntegrity(getClass());
core = new CipherCore(new DESCrypt(), DESConstants.DES_BLOCK_SIZE); core = new CipherCore(new DESCrypt(), DESConstants.DES_BLOCK_SIZE);
} }
......
/* /*
* Copyright 1997-2007 Sun Microsystems, Inc. All Rights Reserved. * Copyright 1997-2009 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -42,17 +42,11 @@ import java.security.spec.InvalidKeySpecException; ...@@ -42,17 +42,11 @@ import java.security.spec.InvalidKeySpecException;
public final class DESKeyFactory extends SecretKeyFactorySpi { public final class DESKeyFactory extends SecretKeyFactorySpi {
/** /**
* Verify the SunJCE provider in the constructor. * Empty constructor
*
* @exception SecurityException if fails to verify
* its own integrity
*/ */
public DESKeyFactory() { public DESKeyFactory() {
if (!SunJCE.verifySelfIntegrity(this.getClass())) {
throw new SecurityException("The SunJCE provider may have " +
"been tampered.");
}
} }
/** /**
* Generates a <code>SecretKey</code> object from the provided key * Generates a <code>SecretKey</code> object from the provided key
* specification (key material). * specification (key material).
......
/* /*
* Copyright 1997-2007 Sun Microsystems, Inc. All Rights Reserved. * Copyright 1997-2009 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -46,16 +46,9 @@ public final class DESKeyGenerator extends KeyGeneratorSpi { ...@@ -46,16 +46,9 @@ public final class DESKeyGenerator extends KeyGeneratorSpi {
private SecureRandom random = null; private SecureRandom random = null;
/** /**
* Verify the SunJCE provider in the constructor. * Empty constructor
*
* @exception SecurityException if fails to verify
* its own integrity
*/ */
public DESKeyGenerator() { public DESKeyGenerator() {
if (!SunJCE.verifySelfIntegrity(this.getClass())) {
throw new SecurityException("The SunJCE provider may have " +
"been tampered.");
}
} }
/** /**
......
/* /*
* Copyright 1997-2007 Sun Microsystems, Inc. All Rights Reserved. * Copyright 1997-2009 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -53,12 +53,8 @@ public final class DESedeCipher extends CipherSpi { ...@@ -53,12 +53,8 @@ public final class DESedeCipher extends CipherSpi {
/** /**
* Creates an instance of DESede cipher with default ECB mode and * Creates an instance of DESede cipher with default ECB mode and
* PKCS5Padding. * PKCS5Padding.
*
* @exception SecurityException if this constructor fails to verify
* its own integrity
*/ */
public DESedeCipher() { public DESedeCipher() {
SunJCE.ensureIntegrity(getClass());
core = new CipherCore(new DESedeCrypt(), DESConstants.DES_BLOCK_SIZE); core = new CipherCore(new DESedeCrypt(), DESConstants.DES_BLOCK_SIZE);
} }
......
/* /*
* Copyright 1997-2007 Sun Microsystems, Inc. All Rights Reserved. * Copyright 1997-2009 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -42,16 +42,9 @@ import java.security.spec.InvalidKeySpecException; ...@@ -42,16 +42,9 @@ import java.security.spec.InvalidKeySpecException;
public final class DESedeKeyFactory extends SecretKeyFactorySpi { public final class DESedeKeyFactory extends SecretKeyFactorySpi {
/** /**
* Verify the SunJCE provider in the constructor. * Empty constructor
*
* @exception SecurityException if fails to verify
* its own integrity
*/ */
public DESedeKeyFactory() { public DESedeKeyFactory() {
if (!SunJCE.verifySelfIntegrity(this.getClass())) {
throw new SecurityException("The SunJCE provider may have been " +
"tampered.");
}
} }
/** /**
......
/* /*
* Copyright 1997-2007 Sun Microsystems, Inc. All Rights Reserved. * Copyright 1997-2009 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -47,16 +47,9 @@ public final class DESedeKeyGenerator extends KeyGeneratorSpi { ...@@ -47,16 +47,9 @@ public final class DESedeKeyGenerator extends KeyGeneratorSpi {
private int keysize = 168; private int keysize = 168;
/** /**
* Verify the SunJCE provider in the constructor. * Empty constructor
*
* @exception SecurityException if fails to verify
* its own integrity
*/ */
public DESedeKeyGenerator() { public DESedeKeyGenerator() {
if (!SunJCE.verifySelfIntegrity(this.getClass())) {
throw new SecurityException("The SunJCE provider may have been " +
"tampered.");
}
} }
/** /**
......
/* /*
* Copyright 2004-2007 Sun Microsystems, Inc. All Rights Reserved. * Copyright 2004-2009 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -74,12 +74,8 @@ public final class DESedeWrapCipher extends CipherSpi { ...@@ -74,12 +74,8 @@ public final class DESedeWrapCipher extends CipherSpi {
/** /**
* Creates an instance of CMS DESede KeyWrap cipher with default * Creates an instance of CMS DESede KeyWrap cipher with default
* mode, i.e. "CBC" and padding scheme, i.e. "NoPadding". * mode, i.e. "CBC" and padding scheme, i.e. "NoPadding".
*
* @exception SecurityException if this constructor fails to verify
* its own integrity.
*/ */
public DESedeWrapCipher() { public DESedeWrapCipher() {
SunJCE.ensureIntegrity(getClass());
cipher = new CipherBlockChaining(new DESedeCrypt()); cipher = new CipherBlockChaining(new DESedeCrypt());
} }
......
/* /*
* Copyright 1997-2007 Sun Microsystems, Inc. All Rights Reserved. * Copyright 1997-2009 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -58,16 +58,9 @@ extends KeyAgreementSpi { ...@@ -58,16 +58,9 @@ extends KeyAgreementSpi {
private BigInteger y = BigInteger.ZERO; private BigInteger y = BigInteger.ZERO;
/** /**
* Verify the SunJCE provider in the constructor. * Empty constructor
*
* @exception SecurityException if fails to verify
* its own integrity
*/ */
public DHKeyAgreement() { public DHKeyAgreement() {
if (!SunJCE.verifySelfIntegrity(this.getClass())) {
throw new SecurityException("The SunJCE provider may have been " +
"tampered.");
}
} }
/** /**
......
/* /*
* Copyright 1997-2007 Sun Microsystems, Inc. All Rights Reserved. * Copyright 1997-2009 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -49,16 +49,9 @@ import javax.crypto.spec.DHParameterSpec; ...@@ -49,16 +49,9 @@ import javax.crypto.spec.DHParameterSpec;
public final class DHKeyFactory extends KeyFactorySpi { public final class DHKeyFactory extends KeyFactorySpi {
/** /**
* Verify the SunJCE provider in the constructor. * Empty constructor
*
* @exception SecurityException if fails to verify
* its own integrity
*/ */
public DHKeyFactory() { public DHKeyFactory() {
if (!SunJCE.verifySelfIntegrity(this.getClass())) {
throw new SecurityException("The SunJCE provider may have " +
"been tampered.");
}
} }
/** /**
......
/* /*
* Copyright 2002-2007 Sun Microsystems, Inc. All Rights Reserved. * Copyright 2002-2009 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -241,7 +241,6 @@ final class HmacCore implements Cloneable { ...@@ -241,7 +241,6 @@ final class HmacCore implements Cloneable {
public static final class HmacSHA256 extends MacSpi implements Cloneable { public static final class HmacSHA256 extends MacSpi implements Cloneable {
private final HmacCore core; private final HmacCore core;
public HmacSHA256() throws NoSuchAlgorithmException { public HmacSHA256() throws NoSuchAlgorithmException {
SunJCE.ensureIntegrity(getClass());
core = new HmacCore("SHA-256", 64); core = new HmacCore("SHA-256", 64);
} }
private HmacSHA256(HmacSHA256 base) throws CloneNotSupportedException { private HmacSHA256(HmacSHA256 base) throws CloneNotSupportedException {
...@@ -278,7 +277,6 @@ final class HmacCore implements Cloneable { ...@@ -278,7 +277,6 @@ final class HmacCore implements Cloneable {
public static final class HmacSHA384 extends MacSpi implements Cloneable { public static final class HmacSHA384 extends MacSpi implements Cloneable {
private final HmacCore core; private final HmacCore core;
public HmacSHA384() throws NoSuchAlgorithmException { public HmacSHA384() throws NoSuchAlgorithmException {
SunJCE.ensureIntegrity(getClass());
core = new HmacCore("SHA-384", 128); core = new HmacCore("SHA-384", 128);
} }
private HmacSHA384(HmacSHA384 base) throws CloneNotSupportedException { private HmacSHA384(HmacSHA384 base) throws CloneNotSupportedException {
...@@ -315,7 +313,6 @@ final class HmacCore implements Cloneable { ...@@ -315,7 +313,6 @@ final class HmacCore implements Cloneable {
public static final class HmacSHA512 extends MacSpi implements Cloneable { public static final class HmacSHA512 extends MacSpi implements Cloneable {
private final HmacCore core; private final HmacCore core;
public HmacSHA512() throws NoSuchAlgorithmException { public HmacSHA512() throws NoSuchAlgorithmException {
SunJCE.ensureIntegrity(getClass());
core = new HmacCore("SHA-512", 128); core = new HmacCore("SHA-512", 128);
} }
private HmacSHA512(HmacSHA512 base) throws CloneNotSupportedException { private HmacSHA512(HmacSHA512 base) throws CloneNotSupportedException {
......
/* /*
* Copyright 1998-2007 Sun Microsystems, Inc. All Rights Reserved. * Copyright 1998-2009 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -44,16 +44,8 @@ public final class HmacMD5 extends MacSpi implements Cloneable { ...@@ -44,16 +44,8 @@ public final class HmacMD5 extends MacSpi implements Cloneable {
/** /**
* Standard constructor, creates a new HmacMD5 instance. * Standard constructor, creates a new HmacMD5 instance.
* Verify the SunJCE provider in the constructor.
*
* @exception SecurityException if fails to verify
* its own integrity
*/ */
public HmacMD5() throws NoSuchAlgorithmException { public HmacMD5() throws NoSuchAlgorithmException {
if (!SunJCE.verifySelfIntegrity(this.getClass())) {
throw new SecurityException("The SunJCE provider may have " +
"been tampered.");
}
hmac = new HmacCore(MessageDigest.getInstance("MD5"), hmac = new HmacCore(MessageDigest.getInstance("MD5"),
MD5_BLOCK_LENGTH); MD5_BLOCK_LENGTH);
} }
......
/* /*
* Copyright 1999-2007 Sun Microsystems, Inc. All Rights Reserved. * Copyright 1999-2009 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -46,16 +46,9 @@ public final class HmacMD5KeyGenerator extends KeyGeneratorSpi { ...@@ -46,16 +46,9 @@ public final class HmacMD5KeyGenerator extends KeyGeneratorSpi {
private int keysize = 64; // default keysize (in number of bytes) private int keysize = 64; // default keysize (in number of bytes)
/** /**
* Verify the SunJCE provider in the constructor. * Empty constructor
*
* @exception SecurityException if fails to verify
* its own integrity
*/ */
public HmacMD5KeyGenerator() { public HmacMD5KeyGenerator() {
if (!SunJCE.verifySelfIntegrity(this.getClass())) {
throw new SecurityException("The SunJCE provider may have " +
"been tampered.");
}
} }
/** /**
......
/* /*
* Copyright 2003-2007 Sun Microsystems, Inc. All Rights Reserved. * Copyright 2003-2009 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -48,13 +48,8 @@ public final class HmacPKCS12PBESHA1 extends MacSpi implements Cloneable { ...@@ -48,13 +48,8 @@ public final class HmacPKCS12PBESHA1 extends MacSpi implements Cloneable {
/** /**
* Standard constructor, creates a new HmacSHA1 instance. * Standard constructor, creates a new HmacSHA1 instance.
* Verify the SunJCE provider in the constructor.
*
* @exception SecurityException if fails to verify
* its own integrity
*/ */
public HmacPKCS12PBESHA1() throws NoSuchAlgorithmException { public HmacPKCS12PBESHA1() throws NoSuchAlgorithmException {
SunJCE.ensureIntegrity(this.getClass());
this.hmac = new HmacCore(MessageDigest.getInstance("SHA1"), this.hmac = new HmacCore(MessageDigest.getInstance("SHA1"),
SHA1_BLOCK_LENGTH); SHA1_BLOCK_LENGTH);
} }
......
/* /*
* Copyright 1998-2007 Sun Microsystems, Inc. All Rights Reserved. * Copyright 1998-2009 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -44,16 +44,8 @@ public final class HmacSHA1 extends MacSpi implements Cloneable { ...@@ -44,16 +44,8 @@ public final class HmacSHA1 extends MacSpi implements Cloneable {
/** /**
* Standard constructor, creates a new HmacSHA1 instance. * Standard constructor, creates a new HmacSHA1 instance.
* Verify the SunJCE provider in the constructor.
*
* @exception SecurityException if fails to verify
* its own integrity
*/ */
public HmacSHA1() throws NoSuchAlgorithmException { public HmacSHA1() throws NoSuchAlgorithmException {
if (!SunJCE.verifySelfIntegrity(this.getClass())) {
throw new SecurityException("The SunJCE provider may have " +
"been tampered.");
}
this.hmac = new HmacCore(MessageDigest.getInstance("SHA1"), this.hmac = new HmacCore(MessageDigest.getInstance("SHA1"),
SHA1_BLOCK_LENGTH); SHA1_BLOCK_LENGTH);
} }
......
/* /*
* Copyright 1999-2007 Sun Microsystems, Inc. All Rights Reserved. * Copyright 1999-2009 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -46,16 +46,9 @@ public final class HmacSHA1KeyGenerator extends KeyGeneratorSpi { ...@@ -46,16 +46,9 @@ public final class HmacSHA1KeyGenerator extends KeyGeneratorSpi {
private int keysize = 64; // default keysize (in number of bytes) private int keysize = 64; // default keysize (in number of bytes)
/** /**
* Verify the SunJCE provider in the constructor. * Empty constructor
*
* @exception SecurityException if fails to verify
* its own integrity
*/ */
public HmacSHA1KeyGenerator() { public HmacSHA1KeyGenerator() {
if (!SunJCE.verifySelfIntegrity(this.getClass())) {
throw new SecurityException("The SunJCE provider may have " +
"been tampered.");
}
} }
/** /**
......
/*
* Copyright 2007 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Sun designates this
* particular file as subject to the "Classpath" exception as provided
* by Sun in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
* CA 95054 USA or visit www.sun.com if you need additional information or
* have any questions.
*/
package com.sun.crypto.provider;
// NOTE: this class is duplicated amongst SunJCE, SunPKCS11, and SunMSCAPI.
// All files should be kept in sync.
import java.io.*;
import java.util.*;
import java.util.jar.*;
import java.net.URL;
import java.net.JarURLConnection;
import java.net.MalformedURLException;
import java.security.*;
import java.security.cert.*;
import java.security.cert.Certificate;
/**
* This class verifies JAR files (and any supporting JAR files), and
* determines whether they may be used in this implementation.
*
* The JCE in OpenJDK has an open cryptographic interface, meaning it
* does not restrict which providers can be used. Compliance with
* United States export controls and with local law governing the
* import/export of products incorporating the JCE in the OpenJDK is
* the responsibility of the licensee.
*
* @since 1.7
*/
final class JarVerifier {
private static final boolean debug = false;
/**
* Verify the JAR file is signed by an entity which has a certificate
* issued by a trusted CA.
*
* Note: this is a temporary method and will change soon to use the
* exception chaining mechanism, which can provide more details
* as to why the verification failed.
*
* @param c the class to be verified.
* @return true if verification is successful.
*/
static boolean verify(final Class c) {
return true;
}
}
/* /*
* Copyright 2003-2007 Sun Microsystems, Inc. All Rights Reserved. * Copyright 2003-2009 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -109,7 +109,6 @@ final class KeyGeneratorCore { ...@@ -109,7 +109,6 @@ final class KeyGeneratorCore {
public static final class HmacSHA256KG extends KeyGeneratorSpi { public static final class HmacSHA256KG extends KeyGeneratorSpi {
private final KeyGeneratorCore core; private final KeyGeneratorCore core;
public HmacSHA256KG() { public HmacSHA256KG() {
SunJCE.ensureIntegrity(getClass());
core = new KeyGeneratorCore("HmacSHA256", 256); core = new KeyGeneratorCore("HmacSHA256", 256);
} }
protected void engineInit(SecureRandom random) { protected void engineInit(SecureRandom random) {
...@@ -131,7 +130,6 @@ final class KeyGeneratorCore { ...@@ -131,7 +130,6 @@ final class KeyGeneratorCore {
public static final class HmacSHA384KG extends KeyGeneratorSpi { public static final class HmacSHA384KG extends KeyGeneratorSpi {
private final KeyGeneratorCore core; private final KeyGeneratorCore core;
public HmacSHA384KG() { public HmacSHA384KG() {
SunJCE.ensureIntegrity(getClass());
core = new KeyGeneratorCore("HmacSHA384", 384); core = new KeyGeneratorCore("HmacSHA384", 384);
} }
protected void engineInit(SecureRandom random) { protected void engineInit(SecureRandom random) {
...@@ -153,7 +151,6 @@ final class KeyGeneratorCore { ...@@ -153,7 +151,6 @@ final class KeyGeneratorCore {
public static final class HmacSHA512KG extends KeyGeneratorSpi { public static final class HmacSHA512KG extends KeyGeneratorSpi {
private final KeyGeneratorCore core; private final KeyGeneratorCore core;
public HmacSHA512KG() { public HmacSHA512KG() {
SunJCE.ensureIntegrity(getClass());
core = new KeyGeneratorCore("HmacSHA512", 512); core = new KeyGeneratorCore("HmacSHA512", 512);
} }
protected void engineInit(SecureRandom random) { protected void engineInit(SecureRandom random) {
...@@ -175,7 +172,6 @@ final class KeyGeneratorCore { ...@@ -175,7 +172,6 @@ final class KeyGeneratorCore {
public static final class RC2KeyGenerator extends KeyGeneratorSpi { public static final class RC2KeyGenerator extends KeyGeneratorSpi {
private final KeyGeneratorCore core; private final KeyGeneratorCore core;
public RC2KeyGenerator() { public RC2KeyGenerator() {
SunJCE.ensureIntegrity(getClass());
core = new KeyGeneratorCore("RC2", 128); core = new KeyGeneratorCore("RC2", 128);
} }
protected void engineInit(SecureRandom random) { protected void engineInit(SecureRandom random) {
...@@ -201,7 +197,6 @@ final class KeyGeneratorCore { ...@@ -201,7 +197,6 @@ final class KeyGeneratorCore {
public static final class ARCFOURKeyGenerator extends KeyGeneratorSpi { public static final class ARCFOURKeyGenerator extends KeyGeneratorSpi {
private final KeyGeneratorCore core; private final KeyGeneratorCore core;
public ARCFOURKeyGenerator() { public ARCFOURKeyGenerator() {
SunJCE.ensureIntegrity(getClass());
core = new KeyGeneratorCore("ARCFOUR", 128); core = new KeyGeneratorCore("ARCFOUR", 128);
} }
protected void engineInit(SecureRandom random) { protected void engineInit(SecureRandom random) {
......
/* /*
* Copyright 1997-2007 Sun Microsystems, Inc. All Rights Reserved. * Copyright 1997-2009 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -49,16 +49,9 @@ abstract class PBEKeyFactory extends SecretKeyFactorySpi { ...@@ -49,16 +49,9 @@ abstract class PBEKeyFactory extends SecretKeyFactorySpi {
private static HashSet<String> validTypes; private static HashSet<String> validTypes;
/** /**
* Verify the SunJCE provider in the constructor. * Simple constructor
*
* @exception SecurityException if fails to verify
* its own integrity
*/ */
private PBEKeyFactory(String keytype) { private PBEKeyFactory(String keytype) {
if (!SunJCE.verifySelfIntegrity(this.getClass())) {
throw new SecurityException("The SunJCE provider may have " +
"been tampered.");
}
type = keytype; type = keytype;
} }
......
/* /*
* Copyright 1997-2007 Sun Microsystems, Inc. All Rights Reserved. * Copyright 1997-2009 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -55,16 +55,9 @@ public final class PBEWithMD5AndDESCipher extends CipherSpi { ...@@ -55,16 +55,9 @@ public final class PBEWithMD5AndDESCipher extends CipherSpi {
* unavailable * unavailable
* @exception NoSuchPaddingException if the required padding mechanism * @exception NoSuchPaddingException if the required padding mechanism
* (PKCS5Padding) is unavailable * (PKCS5Padding) is unavailable
*
* @exception SecurityException if this constructor fails to verify
* its own integrity
*/ */
public PBEWithMD5AndDESCipher() public PBEWithMD5AndDESCipher()
throws NoSuchAlgorithmException, NoSuchPaddingException { throws NoSuchAlgorithmException, NoSuchPaddingException {
if (!SunJCE.verifySelfIntegrity(this.getClass())) {
throw new SecurityException("The SunJCE provider may have " +
"been tampered.");
}
core = new PBECipherCore("DES"); core = new PBECipherCore("DES");
} }
......
/* /*
* Copyright 1998-2007 Sun Microsystems, Inc. All Rights Reserved. * Copyright 1998-2009 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -61,23 +61,14 @@ public final class PBEWithMD5AndTripleDESCipher extends CipherSpi { ...@@ -61,23 +61,14 @@ public final class PBEWithMD5AndTripleDESCipher extends CipherSpi {
* Creates an instance of this cipher, and initializes its mode (CBC) and * Creates an instance of this cipher, and initializes its mode (CBC) and
* padding (PKCS5). * padding (PKCS5).
* *
* Verify the SunJCE provider in the constructor.
*
* @exception NoSuchAlgorithmException if the required cipher mode (CBC) is * @exception NoSuchAlgorithmException if the required cipher mode (CBC) is
* unavailable * unavailable
* @exception NoSuchPaddingException if the required padding mechanism * @exception NoSuchPaddingException if the required padding mechanism
* (PKCS5Padding) is unavailable * (PKCS5Padding) is unavailable
* @exception SecurityException if fails to verify
* its own integrity
*/ */
public PBEWithMD5AndTripleDESCipher() public PBEWithMD5AndTripleDESCipher()
throws NoSuchAlgorithmException, NoSuchPaddingException throws NoSuchAlgorithmException, NoSuchPaddingException
{ {
if (!SunJCE.verifySelfIntegrity(this.getClass())) {
throw new SecurityException("The SunJCE provider may have " +
"been tampered.");
}
// set the encapsulated cipher to do triple DES // set the encapsulated cipher to do triple DES
core = new PBECipherCore("DESede"); core = new PBECipherCore("DESede");
} }
......
/* /*
* Copyright 2005-2007 Sun Microsystems, Inc. All Rights Reserved. * Copyright 2005-2009 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -45,16 +45,9 @@ import javax.crypto.spec.SecretKeySpec; ...@@ -45,16 +45,9 @@ import javax.crypto.spec.SecretKeySpec;
public final class PBKDF2HmacSHA1Factory extends SecretKeyFactorySpi { public final class PBKDF2HmacSHA1Factory extends SecretKeyFactorySpi {
/** /**
* Verify the SunJCE provider in the constructor. * Empty constructor
*
* @exception SecurityException if fails to verify
* its own integrity
*/ */
public PBKDF2HmacSHA1Factory() { public PBKDF2HmacSHA1Factory() {
if (!SunJCE.verifySelfIntegrity(this.getClass())) {
throw new SecurityException("The SunJCE provider may have " +
"been tampered.");
}
} }
/** /**
......
/* /*
* Copyright 2003-2007 Sun Microsystems, Inc. All Rights Reserved. * Copyright 2003-2009 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -370,7 +370,6 @@ final class PKCS12PBECipherCore { ...@@ -370,7 +370,6 @@ final class PKCS12PBECipherCore {
public static final class PBEWithSHA1AndDESede extends CipherSpi { public static final class PBEWithSHA1AndDESede extends CipherSpi {
private final PKCS12PBECipherCore core; private final PKCS12PBECipherCore core;
public PBEWithSHA1AndDESede() throws NoSuchAlgorithmException { public PBEWithSHA1AndDESede() throws NoSuchAlgorithmException {
SunJCE.ensureIntegrity(this.getClass());
core = new PKCS12PBECipherCore("DESede", 24); core = new PKCS12PBECipherCore("DESede", 24);
} }
protected byte[] engineDoFinal(byte[] in, int inOff, int inLen) protected byte[] engineDoFinal(byte[] in, int inOff, int inLen)
...@@ -446,7 +445,6 @@ final class PKCS12PBECipherCore { ...@@ -446,7 +445,6 @@ final class PKCS12PBECipherCore {
public static final class PBEWithSHA1AndRC2_40 extends CipherSpi { public static final class PBEWithSHA1AndRC2_40 extends CipherSpi {
private final PKCS12PBECipherCore core; private final PKCS12PBECipherCore core;
public PBEWithSHA1AndRC2_40() throws NoSuchAlgorithmException { public PBEWithSHA1AndRC2_40() throws NoSuchAlgorithmException {
SunJCE.ensureIntegrity(this.getClass());
core = new PKCS12PBECipherCore("RC2", 5); core = new PKCS12PBECipherCore("RC2", 5);
} }
protected byte[] engineDoFinal(byte[] in, int inOff, int inLen) protected byte[] engineDoFinal(byte[] in, int inOff, int inLen)
......
/* /*
* Copyright 2003-2007 Sun Microsystems, Inc. All Rights Reserved. * Copyright 2003-2009 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -45,7 +45,6 @@ public final class RC2Cipher extends CipherSpi { ...@@ -45,7 +45,6 @@ public final class RC2Cipher extends CipherSpi {
private final RC2Crypt embeddedCipher; private final RC2Crypt embeddedCipher;
public RC2Cipher() { public RC2Cipher() {
SunJCE.ensureIntegrity(getClass());
embeddedCipher = new RC2Crypt(); embeddedCipher = new RC2Crypt();
core = new CipherCore(embeddedCipher, 8); core = new CipherCore(embeddedCipher, 8);
} }
......
/* /*
* Copyright 2003-2007 Sun Microsystems, Inc. All Rights Reserved. * Copyright 2003-2009 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -111,7 +111,6 @@ public final class RSACipher extends CipherSpi { ...@@ -111,7 +111,6 @@ public final class RSACipher extends CipherSpi {
private String oaepHashAlgorithm = "SHA-1"; private String oaepHashAlgorithm = "SHA-1";
public RSACipher() { public RSACipher() {
SunJCE.ensureIntegrity(getClass());
paddingType = PAD_PKCS1; paddingType = PAD_PKCS1;
} }
......
/* /*
* Copyright 2005-2007 Sun Microsystems, Inc. All Rights Reserved. * Copyright 2005-2009 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -226,9 +226,6 @@ final class SslMacCore { ...@@ -226,9 +226,6 @@ final class SslMacCore {
static final byte[] md5Pad1 = genPad((byte)0x36, 48); static final byte[] md5Pad1 = genPad((byte)0x36, 48);
static final byte[] md5Pad2 = genPad((byte)0x5c, 48); static final byte[] md5Pad2 = genPad((byte)0x5c, 48);
static {
SunJCE.ensureIntegrity(SslMacMD5.class);
}
} }
// nested static class for the SslMacMD5 implementation // nested static class for the SslMacMD5 implementation
...@@ -262,9 +259,6 @@ final class SslMacCore { ...@@ -262,9 +259,6 @@ final class SslMacCore {
static final byte[] shaPad1 = genPad((byte)0x36, 40); static final byte[] shaPad1 = genPad((byte)0x36, 40);
static final byte[] shaPad2 = genPad((byte)0x5c, 40); static final byte[] shaPad2 = genPad((byte)0x5c, 40);
static {
SunJCE.ensureIntegrity(SslMacSHA1.class);
}
} }
} }
/* /*
* Copyright 1997-2007 Sun Microsystems, Inc. All Rights Reserved. * Copyright 1997-2009 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -93,10 +93,6 @@ public final class SunJCE extends Provider { ...@@ -93,10 +93,6 @@ public final class SunJCE extends Provider {
static final SecureRandom RANDOM = new SecureRandom(); static final SecureRandom RANDOM = new SecureRandom();
// After the SunJCE passed self-integrity checking,
// verifiedSelfIntegrity will be set to true.
private static boolean verifiedSelfIntegrity = false;
public SunJCE() { public SunJCE() {
/* We are the "SunJCE" provider */ /* We are the "SunJCE" provider */
super("SunJCE", 1.7d, info); super("SunJCE", 1.7d, info);
...@@ -441,21 +437,4 @@ public final class SunJCE extends Provider { ...@@ -441,21 +437,4 @@ public final class SunJCE extends Provider {
} }
}); });
} }
// set to true once self verification is complete
private static volatile boolean integrityVerified;
static void ensureIntegrity(Class c) {
if (verifySelfIntegrity(c) == false) {
throw new SecurityException("The SunJCE provider may have " +
"been tampered.");
}
}
static final boolean verifySelfIntegrity(Class c) {
if (verifiedSelfIntegrity) {
return true;
}
return (integrityVerified = JarVerifier.verify(c));
}
} }
/* /*
* Copyright 2005-2007 Sun Microsystems, Inc. All Rights Reserved. * Copyright 2005-2009 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -52,7 +52,6 @@ public final class TlsKeyMaterialGenerator extends KeyGeneratorSpi { ...@@ -52,7 +52,6 @@ public final class TlsKeyMaterialGenerator extends KeyGeneratorSpi {
private int protocolVersion; private int protocolVersion;
public TlsKeyMaterialGenerator() { public TlsKeyMaterialGenerator() {
SunJCE.ensureIntegrity(getClass());
} }
protected void engineInit(SecureRandom random) { protected void engineInit(SecureRandom random) {
......
/* /*
* Copyright 2005-2007 Sun Microsystems, Inc. All Rights Reserved. * Copyright 2005-2009 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -51,7 +51,6 @@ public final class TlsMasterSecretGenerator extends KeyGeneratorSpi { ...@@ -51,7 +51,6 @@ public final class TlsMasterSecretGenerator extends KeyGeneratorSpi {
private int protocolVersion; private int protocolVersion;
public TlsMasterSecretGenerator() { public TlsMasterSecretGenerator() {
SunJCE.ensureIntegrity(getClass());
} }
protected void engineInit(SecureRandom random) { protected void engineInit(SecureRandom random) {
......
/* /*
* Copyright 2005-2007 Sun Microsystems, Inc. All Rights Reserved. * Copyright 2005-2009 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -109,7 +109,6 @@ public final class TlsPrfGenerator extends KeyGeneratorSpi { ...@@ -109,7 +109,6 @@ public final class TlsPrfGenerator extends KeyGeneratorSpi {
private TlsPrfParameterSpec spec; private TlsPrfParameterSpec spec;
public TlsPrfGenerator() { public TlsPrfGenerator() {
SunJCE.ensureIntegrity(getClass());
} }
protected void engineInit(SecureRandom random) { protected void engineInit(SecureRandom random) {
......
/* /*
* Copyright 2005-2007 Sun Microsystems, Inc. All Rights Reserved. * Copyright 2005-2009 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -48,7 +48,6 @@ public final class TlsRsaPremasterSecretGenerator extends KeyGeneratorSpi { ...@@ -48,7 +48,6 @@ public final class TlsRsaPremasterSecretGenerator extends KeyGeneratorSpi {
private SecureRandom random; private SecureRandom random;
public TlsRsaPremasterSecretGenerator() { public TlsRsaPremasterSecretGenerator() {
SunJCE.ensureIntegrity(getClass());
} }
protected void engineInit(SecureRandom random) { protected void engineInit(SecureRandom random) {
......
/* /*
* Copyright 2007 Sun Microsystems, Inc. All Rights Reserved. * Copyright 2007-2009 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -28,9 +28,7 @@ package javax.crypto; ...@@ -28,9 +28,7 @@ package javax.crypto;
import java.io.*; import java.io.*;
import java.net.*; import java.net.*;
import java.security.*; import java.security.*;
import java.util.*;
import java.util.jar.*; import java.util.jar.*;
import javax.crypto.CryptoPolicyParser.ParsingException;
/** /**
* This class verifies JAR files (and any supporting JAR files), and * This class verifies JAR files (and any supporting JAR files), and
...@@ -134,17 +132,6 @@ final class JarVerifier { ...@@ -134,17 +132,6 @@ final class JarVerifier {
} }
} }
/**
* Verify that the provided JarEntry was indeed signed by the
* framework signing certificate.
*
* @param je the URL of the jar entry to be checked.
* @throws Exception if the jar entry was not signed by
* the proper certificate
*/
static void verifyFrameworkSigned(URL je) throws Exception {
}
/** /**
* Verify that the provided certs include the * Verify that the provided certs include the
* framework signing certificate. * framework signing certificate.
......
/* /*
* Copyright 1997-2007 Sun Microsystems, Inc. All Rights Reserved. * Copyright 1997-2009 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -25,7 +25,6 @@ ...@@ -25,7 +25,6 @@
package javax.crypto; package javax.crypto;
import java.lang.ref.*;
import java.util.*; import java.util.*;
import java.util.jar.*; import java.util.jar.*;
import java.io.*; import java.io.*;
...@@ -256,11 +255,6 @@ final class JceSecurity { ...@@ -256,11 +255,6 @@ final class JceSecurity {
("Cannot locate policy or framework files!"); ("Cannot locate policy or framework files!");
} }
// Enforce the signer restraint, i.e. signer of JCE framework
// jar should also be the signer of the two jurisdiction policy
// jar files.
JarVerifier.verifyFrameworkSigned(jceCipherURL);
// Read jurisdiction policies. // Read jurisdiction policies.
CryptoPermissions defaultExport = new CryptoPermissions(); CryptoPermissions defaultExport = new CryptoPermissions();
CryptoPermissions exemptExport = new CryptoPermissions(); CryptoPermissions exemptExport = new CryptoPermissions();
......
/* /*
* Copyright 1997-2008 Sun Microsystems, Inc. All Rights Reserved. * Copyright 1997-2009 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -739,6 +739,11 @@ public class JFileChooser extends JComponent implements Accessible { ...@@ -739,6 +739,11 @@ public class JFileChooser extends JComponent implements Accessible {
dialog.show(); dialog.show();
firePropertyChange("JFileChooserDialogIsClosingProperty", dialog, null); firePropertyChange("JFileChooserDialogIsClosingProperty", dialog, null);
// Remove all components from dialog. The MetalFileChooserUI.installUI() method (and other LAFs)
// registers AWT listener for dialogs and produces memory leaks. It happens when
// installUI invoked after the showDialog method.
dialog.getContentPane().removeAll();
dialog.dispose(); dialog.dispose();
dialog = null; dialog = null;
return returnValue; return returnValue;
......
...@@ -26,13 +26,10 @@ ...@@ -26,13 +26,10 @@
package javax.swing; package javax.swing;
import java.awt.*; import java.awt.*;
import java.awt.event.*;
import java.beans.PropertyVetoException; import java.beans.PropertyVetoException;
import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeEvent;
import java.util.EventListener;
import javax.swing.border.Border;
import javax.swing.event.InternalFrameEvent; import javax.swing.event.InternalFrameEvent;
import javax.swing.event.InternalFrameListener; import javax.swing.event.InternalFrameListener;
import javax.swing.plaf.*; import javax.swing.plaf.*;
...@@ -40,7 +37,6 @@ import javax.swing.plaf.*; ...@@ -40,7 +37,6 @@ import javax.swing.plaf.*;
import javax.accessibility.*; import javax.accessibility.*;
import java.io.ObjectOutputStream; import java.io.ObjectOutputStream;
import java.io.ObjectInputStream;
import java.io.IOException; import java.io.IOException;
import java.lang.StringBuilder; import java.lang.StringBuilder;
import java.beans.PropertyChangeListener; import java.beans.PropertyChangeListener;
...@@ -1459,19 +1455,22 @@ public class JInternalFrame extends JComponent implements ...@@ -1459,19 +1455,22 @@ public class JInternalFrame extends JComponent implements
SwingUtilities2.compositeRequestFocus(getDesktopIcon()); SwingUtilities2.compositeRequestFocus(getDesktopIcon());
} }
else { else {
// FocusPropertyChangeListener will eventually update Component component = KeyboardFocusManager.getCurrentKeyboardFocusManager().getPermanentFocusOwner();
// lastFocusOwner. As focus requests are asynchronous if ((component == null) || !SwingUtilities.isDescendingFrom(component, this)) {
// lastFocusOwner may be accessed before it has been correctly // FocusPropertyChangeListener will eventually update
// updated. To avoid any problems, lastFocusOwner is immediately // lastFocusOwner. As focus requests are asynchronous
// set, assuming the request will succeed. // lastFocusOwner may be accessed before it has been correctly
lastFocusOwner = getMostRecentFocusOwner(); // updated. To avoid any problems, lastFocusOwner is immediately
if (lastFocusOwner == null) { // set, assuming the request will succeed.
// Make sure focus is restored somewhere, so that setLastFocusOwner(getMostRecentFocusOwner());
// we don't leave a focused component in another frame while if (lastFocusOwner == null) {
// this frame is selected. // Make sure focus is restored somewhere, so that
lastFocusOwner = getContentPane(); // we don't leave a focused component in another frame while
// this frame is selected.
setLastFocusOwner(getContentPane());
}
lastFocusOwner.requestFocus();
} }
lastFocusOwner.requestFocus();
} }
} }
......
/* /*
* Copyright 1997-2008 Sun Microsystems, Inc. All Rights Reserved. * Copyright 1997-2009 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -32,9 +32,6 @@ import javax.swing.event.*; ...@@ -32,9 +32,6 @@ import javax.swing.event.*;
import javax.swing.border.*; import javax.swing.border.*;
import javax.swing.plaf.*; import javax.swing.plaf.*;
import java.beans.*; import java.beans.*;
import java.util.EventListener;
import java.io.Serializable;
/** /**
* Basic L&F for a minimized window on a desktop. * Basic L&F for a minimized window on a desktop.
...@@ -47,7 +44,6 @@ public class BasicDesktopIconUI extends DesktopIconUI { ...@@ -47,7 +44,6 @@ public class BasicDesktopIconUI extends DesktopIconUI {
protected JInternalFrame.JDesktopIcon desktopIcon; protected JInternalFrame.JDesktopIcon desktopIcon;
protected JInternalFrame frame; protected JInternalFrame frame;
private DesktopIconMover desktopIconMover;
/** /**
* The title pane component used in the desktop icon. * The title pane component used in the desktop icon.
...@@ -128,21 +124,12 @@ public class BasicDesktopIconUI extends DesktopIconUI { ...@@ -128,21 +124,12 @@ public class BasicDesktopIconUI extends DesktopIconUI {
mouseInputListener = createMouseInputListener(); mouseInputListener = createMouseInputListener();
desktopIcon.addMouseMotionListener(mouseInputListener); desktopIcon.addMouseMotionListener(mouseInputListener);
desktopIcon.addMouseListener(mouseInputListener); desktopIcon.addMouseListener(mouseInputListener);
getDesktopIconMover().installListeners();
} }
protected void uninstallListeners() { protected void uninstallListeners() {
desktopIcon.removeMouseMotionListener(mouseInputListener); desktopIcon.removeMouseMotionListener(mouseInputListener);
desktopIcon.removeMouseListener(mouseInputListener); desktopIcon.removeMouseListener(mouseInputListener);
mouseInputListener = null; mouseInputListener = null;
getDesktopIconMover().uninstallListeners();
}
private DesktopIconMover getDesktopIconMover() {
if (desktopIconMover == null) {
desktopIconMover = new DesktopIconMover(desktopIcon);
}
return desktopIconMover;
} }
protected void installDefaults() { protected void installDefaults() {
......
/* /*
* Copyright 1998-2008 Sun Microsystems, Inc. All Rights Reserved. * Copyright 1998-2009 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -232,6 +232,10 @@ public class BasicDirectoryModel extends AbstractListModel implements PropertyCh ...@@ -232,6 +232,10 @@ public class BasicDirectoryModel extends AbstractListModel implements PropertyCh
public void run0() { public void run0() {
FileSystemView fileSystem = filechooser.getFileSystemView(); FileSystemView fileSystem = filechooser.getFileSystemView();
if (isInterrupted()) {
return;
}
File[] list = fileSystem.getFiles(currentDirectory, filechooser.isFileHidingEnabled()); File[] list = fileSystem.getFiles(currentDirectory, filechooser.isFileHidingEnabled());
if (isInterrupted()) { if (isInterrupted()) {
...@@ -268,8 +272,8 @@ public class BasicDirectoryModel extends AbstractListModel implements PropertyCh ...@@ -268,8 +272,8 @@ public class BasicDirectoryModel extends AbstractListModel implements PropertyCh
// To avoid loads of synchronizations with Invoker and improve performance we // To avoid loads of synchronizations with Invoker and improve performance we
// execute the whole block on the COM thread // execute the whole block on the COM thread
DoChangeContents doChangeContents = ShellFolder.getInvoker().invoke(new Callable<DoChangeContents>() { DoChangeContents doChangeContents = ShellFolder.invoke(new Callable<DoChangeContents>() {
public DoChangeContents call() throws Exception { public DoChangeContents call() {
int newSize = newFileCache.size(); int newSize = newFileCache.size();
int oldSize = fileCache.size(); int oldSize = fileCache.size();
......
...@@ -27,16 +27,10 @@ package javax.swing.plaf.basic; ...@@ -27,16 +27,10 @@ package javax.swing.plaf.basic;
import java.awt.*; import java.awt.*;
import java.awt.event.*; import java.awt.event.*;
import java.awt.peer.LightweightPeer;
import javax.swing.*; import javax.swing.*;
import javax.swing.border.*;
import javax.swing.plaf.*; import javax.swing.plaf.*;
import javax.swing.event.*; import javax.swing.event.*;
import java.beans.*; import java.beans.*;
import java.io.Serializable;
import sun.swing.DefaultLookup; import sun.swing.DefaultLookup;
import sun.swing.UIAction; import sun.swing.UIAction;
...@@ -55,6 +49,7 @@ public class BasicInternalFrameUI extends InternalFrameUI ...@@ -55,6 +49,7 @@ public class BasicInternalFrameUI extends InternalFrameUI
protected MouseInputAdapter borderListener; protected MouseInputAdapter borderListener;
protected PropertyChangeListener propertyChangeListener; protected PropertyChangeListener propertyChangeListener;
protected LayoutManager internalFrameLayout; protected LayoutManager internalFrameLayout;
protected ComponentListener componentListener;
protected MouseInputListener glassPaneDispatcher; protected MouseInputListener glassPaneDispatcher;
private InternalFrameListener internalFrameListener; private InternalFrameListener internalFrameListener;
...@@ -66,9 +61,9 @@ public class BasicInternalFrameUI extends InternalFrameUI ...@@ -66,9 +61,9 @@ public class BasicInternalFrameUI extends InternalFrameUI
protected BasicInternalFrameTitlePane titlePane; // access needs this protected BasicInternalFrameTitlePane titlePane; // access needs this
private static DesktopManager sharedDesktopManager; private static DesktopManager sharedDesktopManager;
private boolean componentListenerAdded = false;
private Rectangle parentBounds; private Rectangle parentBounds;
private DesktopIconMover desktopIconMover;
private boolean dragging = false; private boolean dragging = false;
private boolean resizing = false; private boolean resizing = false;
...@@ -209,17 +204,14 @@ public class BasicInternalFrameUI extends InternalFrameUI ...@@ -209,17 +204,14 @@ public class BasicInternalFrameUI extends InternalFrameUI
frame.getGlassPane().addMouseListener(glassPaneDispatcher); frame.getGlassPane().addMouseListener(glassPaneDispatcher);
frame.getGlassPane().addMouseMotionListener(glassPaneDispatcher); frame.getGlassPane().addMouseMotionListener(glassPaneDispatcher);
} }
componentListener = createComponentListener();
if (frame.getParent() != null) { if (frame.getParent() != null) {
parentBounds = frame.getParent().getBounds(); parentBounds = frame.getParent().getBounds();
} }
getDesktopIconMover().installListeners(); if ((frame.getParent() != null) && !componentListenerAdded) {
} frame.getParent().addComponentListener(componentListener);
componentListenerAdded = true;
private DesktopIconMover getDesktopIconMover() {
if (desktopIconMover == null) {
desktopIconMover = new DesktopIconMover(frame);
} }
return desktopIconMover;
} }
// Provide a FocusListener to listen for a WINDOW_LOST_FOCUS event, // Provide a FocusListener to listen for a WINDOW_LOST_FOCUS event,
...@@ -290,7 +282,11 @@ public class BasicInternalFrameUI extends InternalFrameUI ...@@ -290,7 +282,11 @@ public class BasicInternalFrameUI extends InternalFrameUI
* @since 1.3 * @since 1.3
*/ */
protected void uninstallListeners() { protected void uninstallListeners() {
getDesktopIconMover().uninstallListeners(); if ((frame.getParent() != null) && componentListenerAdded) {
frame.getParent().removeComponentListener(componentListener);
componentListenerAdded = false;
}
componentListener = null;
if (glassPaneDispatcher != null) { if (glassPaneDispatcher != null) {
frame.getGlassPane().removeMouseListener(glassPaneDispatcher); frame.getGlassPane().removeMouseListener(glassPaneDispatcher);
frame.getGlassPane().removeMouseMotionListener(glassPaneDispatcher); frame.getGlassPane().removeMouseMotionListener(glassPaneDispatcher);
...@@ -1228,6 +1224,15 @@ public class BasicInternalFrameUI extends InternalFrameUI ...@@ -1228,6 +1224,15 @@ public class BasicInternalFrameUI extends InternalFrameUI
} }
} }
// Relocate the icon base on the new parent bounds.
if (icon != null) {
Rectangle iconBounds = icon.getBounds();
int y = iconBounds.y +
(parentNewBounds.height - parentBounds.height);
icon.setBounds(iconBounds.x, y,
iconBounds.width, iconBounds.height);
}
// Update the new parent bounds for next resize. // Update the new parent bounds for next resize.
if (!parentBounds.equals(parentNewBounds)) { if (!parentBounds.equals(parentNewBounds)) {
parentBounds = parentNewBounds; parentBounds = parentNewBounds;
...@@ -1399,6 +1404,9 @@ public class BasicInternalFrameUI extends InternalFrameUI ...@@ -1399,6 +1404,9 @@ public class BasicInternalFrameUI extends InternalFrameUI
// Cancel a resize in progress if the internal frame // Cancel a resize in progress if the internal frame
// gets a setClosed(true) or dispose(). // gets a setClosed(true) or dispose().
cancelResize(); cancelResize();
if ((frame.getParent() != null) && componentListenerAdded) {
frame.getParent().removeComponentListener(componentListener);
}
closeFrame(f); closeFrame(f);
} }
} else if (JInternalFrame.IS_MAXIMUM_PROPERTY == prop) { } else if (JInternalFrame.IS_MAXIMUM_PROPERTY == prop) {
...@@ -1431,6 +1439,10 @@ public class BasicInternalFrameUI extends InternalFrameUI ...@@ -1431,6 +1439,10 @@ public class BasicInternalFrameUI extends InternalFrameUI
} else { } else {
parentBounds = null; parentBounds = null;
} }
if ((frame.getParent() != null) && !componentListenerAdded) {
f.getParent().addComponentListener(componentListener);
componentListenerAdded = true;
}
} else if (JInternalFrame.TITLE_PROPERTY == prop || } else if (JInternalFrame.TITLE_PROPERTY == prop ||
prop == "closable" || prop == "iconable" || prop == "closable" || prop == "iconable" ||
prop == "maximizable") { prop == "maximizable") {
......
/* /*
* Copyright 1997-2005 Sun Microsystems, Inc. All Rights Reserved. * Copyright 1997-2009 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -37,17 +37,12 @@ import java.beans.PropertyChangeListener; ...@@ -37,17 +37,12 @@ import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeEvent;
import java.awt.Component; import java.awt.Component;
import java.awt.Container;
import java.awt.LayoutManager;
import java.awt.Rectangle; import java.awt.Rectangle;
import java.awt.Dimension; import java.awt.Dimension;
import java.awt.Point; import java.awt.Point;
import java.awt.Insets; import java.awt.Insets;
import java.awt.Graphics; import java.awt.Graphics;
import java.awt.event.*; import java.awt.event.*;
import java.io.Serializable;
import java.awt.Toolkit;
import java.awt.ComponentOrientation;
/** /**
* A default L&F implementation of ScrollPaneUI. * A default L&F implementation of ScrollPaneUI.
...@@ -63,6 +58,7 @@ public class BasicScrollPaneUI ...@@ -63,6 +58,7 @@ public class BasicScrollPaneUI
protected ChangeListener viewportChangeListener; protected ChangeListener viewportChangeListener;
protected PropertyChangeListener spPropertyChangeListener; protected PropertyChangeListener spPropertyChangeListener;
private MouseWheelListener mouseScrollListener; private MouseWheelListener mouseScrollListener;
private int oldExtent = Integer.MIN_VALUE;
/** /**
* PropertyChangeListener installed on the vertical scrollbar. * PropertyChangeListener installed on the vertical scrollbar.
...@@ -327,9 +323,13 @@ public class BasicScrollPaneUI ...@@ -327,9 +323,13 @@ public class BasicScrollPaneUI
* leave it until someone claims. * leave it until someone claims.
*/ */
value = Math.max(0, Math.min(max - extent, max - extent - viewPosition.x)); value = Math.max(0, Math.min(max - extent, max - extent - viewPosition.x));
if (oldExtent > extent) {
value -= oldExtent - extent;
}
} }
} }
} }
oldExtent = extent;
hsb.setValues(value, extent, 0, max); hsb.setValues(value, extent, 0, max);
} }
...@@ -1020,7 +1020,7 @@ public class BasicScrollPaneUI ...@@ -1020,7 +1020,7 @@ public class BasicScrollPaneUI
if (viewport != null) { if (viewport != null) {
if (e.getSource() == viewport) { if (e.getSource() == viewport) {
viewportStateChanged(e); syncScrollPaneWithViewport();
} }
else { else {
JScrollBar hsb = scrollpane.getHorizontalScrollBar(); JScrollBar hsb = scrollpane.getHorizontalScrollBar();
...@@ -1077,11 +1077,6 @@ public class BasicScrollPaneUI ...@@ -1077,11 +1077,6 @@ public class BasicScrollPaneUI
viewport.setViewPosition(p); viewport.setViewPosition(p);
} }
private void viewportStateChanged(ChangeEvent e) {
syncScrollPaneWithViewport();
}
// //
// PropertyChangeListener: This is installed on both the JScrollPane // PropertyChangeListener: This is installed on both the JScrollPane
// and the horizontal/vertical scrollbars. // and the horizontal/vertical scrollbars.
......
/*
* Copyright 1997-2008 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Sun designates this
* particular file as subject to the "Classpath" exception as provided
* by Sun in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
* CA 95054 USA or visit www.sun.com if you need additional information or
* have any questions.
*/
package javax.swing.plaf.basic;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.beans.*;
/**
* DesktopIconMover is intended to move desktop icon
* when parent window is resized.
*/
class DesktopIconMover implements ComponentListener, PropertyChangeListener {
private Component parent;
private JInternalFrame frame; // if not null, DesktopIconMover(frame)
// constructor was used
private JInternalFrame.JDesktopIcon icon;
private Rectangle parentBounds;
private boolean componentListenerAdded = false;
public DesktopIconMover(JInternalFrame frame) {
if (frame == null) {
throw new NullPointerException("Frame cannot be null");
}
this.frame = frame;
this.icon = frame.getDesktopIcon();
if (icon == null) {
throw new NullPointerException(
"frame.getDesktopIcon() cannot be null");
}
this.parent = frame.getParent();
if (this.parent != null) {
parentBounds = this.parent.getBounds();
}
}
public DesktopIconMover(JInternalFrame.JDesktopIcon icon) {
if (icon == null) {
throw new NullPointerException("Icon cannot be null");
}
this.icon = icon;
this.parent = icon.getParent();
if (this.parent != null) {
parentBounds = this.parent.getBounds();
}
}
public void installListeners() {
if (frame != null) {
frame.addPropertyChangeListener(this);
} else {
icon.addPropertyChangeListener(this);
}
addComponentListener();
}
public void uninstallListeners() {
if (frame != null) {
frame.removePropertyChangeListener(this);
} else {
icon.removePropertyChangeListener(this);
}
removeComponentListener();
}
public void propertyChange(PropertyChangeEvent evt) {
String propName = evt.getPropertyName();
if ("ancestor".equals(propName)) {
Component newAncestor = (Component) evt.getNewValue();
// Remove component listener if parent is changing
Component probablyNewParent = getCurrentParent();
if ((probablyNewParent != null) &&
(!probablyNewParent.equals(parent))) {
removeComponentListener();
parent = probablyNewParent;
}
if (newAncestor == null) {
removeComponentListener();
} else {
addComponentListener();
}
// Update parentBounds
if (parent != null) {
parentBounds = parent.getBounds();
} else {
parentBounds = null;
}
} else if (JInternalFrame.IS_CLOSED_PROPERTY.equals(propName)) {
removeComponentListener();
}
}
private void addComponentListener() {
if (!componentListenerAdded && (parent != null)) {
parent.addComponentListener(this);
componentListenerAdded = true;
}
}
private void removeComponentListener() {
if ((parent != null) && componentListenerAdded) {
parent.removeComponentListener(this);
componentListenerAdded = false;
}
}
private Component getCurrentParent() {
if (frame != null) {
return frame.getParent();
} else {
return icon.getParent();
}
}
public void componentResized(ComponentEvent e) {
if ((parent == null) || (parentBounds == null)) {
return;
}
Rectangle parentNewBounds = parent.getBounds();
if ((parentNewBounds == null) || parentNewBounds.equals(parentBounds)) {
return;
}
// Move desktop icon only in up-down direction
int newIconY = icon.getLocation().y +
(parentNewBounds.height - parentBounds.height);
icon.setLocation(icon.getLocation().x, newIconY);
parentBounds = parentNewBounds;
}
public void componentMoved(ComponentEvent e) {
}
public void componentShown(ComponentEvent e) {
}
public void componentHidden(ComponentEvent e) {
}
}
...@@ -227,10 +227,10 @@ public abstract class AbstractRegionPainter implements Painter<JComponent> { ...@@ -227,10 +227,10 @@ public abstract class AbstractRegionPainter implements Painter<JComponent> {
* *
* @param x an encoded x value (0...1, or 1...2, or 2...3) * @param x an encoded x value (0...1, or 1...2, or 2...3)
* @return the decoded x value * @return the decoded x value
* @throws IllegalArgumentException
* if {@code x < 0} or {@code x > 3}
*/ */
protected final float decodeX(float x) { protected final float decodeX(float x) {
if (ctx.canvasSize == null) return x;
if (x >= 0 && x <= 1) { if (x >= 0 && x <= 1) {
return x * leftWidth; return x * leftWidth;
} else if (x > 1 && x < 2) { } else if (x > 1 && x < 2) {
...@@ -238,7 +238,7 @@ public abstract class AbstractRegionPainter implements Painter<JComponent> { ...@@ -238,7 +238,7 @@ public abstract class AbstractRegionPainter implements Painter<JComponent> {
} else if (x >= 2 && x <= 3) { } else if (x >= 2 && x <= 3) {
return ((x-2) * rightWidth) + leftWidth + centerWidth; return ((x-2) * rightWidth) + leftWidth + centerWidth;
} else { } else {
throw new AssertionError("Invalid x"); throw new IllegalArgumentException("Invalid x");
} }
} }
...@@ -248,10 +248,10 @@ public abstract class AbstractRegionPainter implements Painter<JComponent> { ...@@ -248,10 +248,10 @@ public abstract class AbstractRegionPainter implements Painter<JComponent> {
* *
* @param y an encoded y value (0...1, or 1...2, or 2...3) * @param y an encoded y value (0...1, or 1...2, or 2...3)
* @return the decoded y value * @return the decoded y value
* @throws IllegalArgumentException
* if {@code y < 0} or {@code y > 3}
*/ */
protected final float decodeY(float y) { protected final float decodeY(float y) {
if (ctx.canvasSize == null) return y;
if (y >= 0 && y <= 1) { if (y >= 0 && y <= 1) {
return y * topHeight; return y * topHeight;
} else if (y > 1 && y < 2) { } else if (y > 1 && y < 2) {
...@@ -259,7 +259,7 @@ public abstract class AbstractRegionPainter implements Painter<JComponent> { ...@@ -259,7 +259,7 @@ public abstract class AbstractRegionPainter implements Painter<JComponent> {
} else if (y >= 2 && y <= 3) { } else if (y >= 2 && y <= 3) {
return ((y-2) * bottomHeight) + topHeight + centerHeight; return ((y-2) * bottomHeight) + topHeight + centerHeight;
} else { } else {
throw new AssertionError("Invalid y"); throw new IllegalArgumentException("Invalid y");
} }
} }
...@@ -271,10 +271,10 @@ public abstract class AbstractRegionPainter implements Painter<JComponent> { ...@@ -271,10 +271,10 @@ public abstract class AbstractRegionPainter implements Painter<JComponent> {
* @param x an encoded x value of the bezier control point (0...1, or 1...2, or 2...3) * @param x an encoded x value of the bezier control point (0...1, or 1...2, or 2...3)
* @param dx the offset distance to the anchor from the control point x * @param dx the offset distance to the anchor from the control point x
* @return the decoded x location of the control point * @return the decoded x location of the control point
* @throws IllegalArgumentException
* if {@code x < 0} or {@code x > 3}
*/ */
protected final float decodeAnchorX(float x, float dx) { protected final float decodeAnchorX(float x, float dx) {
if (ctx.canvasSize == null) return x + dx;
if (x >= 0 && x <= 1) { if (x >= 0 && x <= 1) {
return decodeX(x) + (dx * leftScale); return decodeX(x) + (dx * leftScale);
} else if (x > 1 && x < 2) { } else if (x > 1 && x < 2) {
...@@ -282,7 +282,7 @@ public abstract class AbstractRegionPainter implements Painter<JComponent> { ...@@ -282,7 +282,7 @@ public abstract class AbstractRegionPainter implements Painter<JComponent> {
} else if (x >= 2 && x <= 3) { } else if (x >= 2 && x <= 3) {
return decodeX(x) + (dx * rightScale); return decodeX(x) + (dx * rightScale);
} else { } else {
throw new AssertionError("Invalid x"); throw new IllegalArgumentException("Invalid x");
} }
} }
...@@ -294,10 +294,10 @@ public abstract class AbstractRegionPainter implements Painter<JComponent> { ...@@ -294,10 +294,10 @@ public abstract class AbstractRegionPainter implements Painter<JComponent> {
* @param y an encoded y value of the bezier control point (0...1, or 1...2, or 2...3) * @param y an encoded y value of the bezier control point (0...1, or 1...2, or 2...3)
* @param dy the offset distance to the anchor from the control point y * @param dy the offset distance to the anchor from the control point y
* @return the decoded y position of the control point * @return the decoded y position of the control point
* @throws IllegalArgumentException
* if {@code y < 0} or {@code y > 3}
*/ */
protected final float decodeAnchorY(float y, float dy) { protected final float decodeAnchorY(float y, float dy) {
if (ctx.canvasSize == null) return y + dy;
if (y >= 0 && y <= 1) { if (y >= 0 && y <= 1) {
return decodeY(y) + (dy * topScale); return decodeY(y) + (dy * topScale);
} else if (y > 1 && y < 2) { } else if (y > 1 && y < 2) {
...@@ -305,7 +305,7 @@ public abstract class AbstractRegionPainter implements Painter<JComponent> { ...@@ -305,7 +305,7 @@ public abstract class AbstractRegionPainter implements Painter<JComponent> {
} else if (y >= 2 && y <= 3) { } else if (y >= 2 && y <= 3) {
return decodeY(y) + (dy * bottomScale); return decodeY(y) + (dy * bottomScale);
} else { } else {
throw new AssertionError("Invalid y"); throw new IllegalArgumentException("Invalid y");
} }
} }
...@@ -363,6 +363,15 @@ public abstract class AbstractRegionPainter implements Painter<JComponent> { ...@@ -363,6 +363,15 @@ public abstract class AbstractRegionPainter implements Painter<JComponent> {
* @param midpoints * @param midpoints
* @param colors * @param colors
* @return a valid LinearGradientPaint. This method never returns null. * @return a valid LinearGradientPaint. This method never returns null.
* @throws NullPointerException
* if {@code midpoints} array is null,
* or {@code colors} array is null,
* @throws IllegalArgumentException
* if start and end points are the same points,
* or {@code midpoints.length != colors.length},
* or {@code colors} is less than 2 in size,
* or a {@code midpoints} value is less than 0.0 or greater than 1.0,
* or the {@code midpoints} are not provided in strictly increasing order
*/ */
protected final LinearGradientPaint decodeGradient(float x1, float y1, float x2, float y2, float[] midpoints, Color[] colors) { protected final LinearGradientPaint decodeGradient(float x1, float y1, float x2, float y2, float[] midpoints, Color[] colors) {
if (x1 == x2 && y1 == y2) { if (x1 == x2 && y1 == y2) {
...@@ -384,6 +393,15 @@ public abstract class AbstractRegionPainter implements Painter<JComponent> { ...@@ -384,6 +393,15 @@ public abstract class AbstractRegionPainter implements Painter<JComponent> {
* @param midpoints * @param midpoints
* @param colors * @param colors
* @return a valid RadialGradientPaint. This method never returns null. * @return a valid RadialGradientPaint. This method never returns null.
* @throws NullPointerException
* if {@code midpoints} array is null,
* or {@code colors} array is null
* @throws IllegalArgumentException
* if {@code r} is non-positive,
* or {@code midpoints.length != colors.length},
* or {@code colors} is less than 2 in size,
* or a {@code midpoints} value is less than 0.0 or greater than 1.0,
* or the {@code midpoints} are not provided in strictly increasing order
*/ */
protected final RadialGradientPaint decodeRadialGradient(float x, float y, float r, float[] midpoints, Color[] colors) { protected final RadialGradientPaint decodeRadialGradient(float x, float y, float r, float[] midpoints, Color[] colors) {
if (r == 0f) { if (r == 0f) {
...@@ -537,10 +555,10 @@ public abstract class AbstractRegionPainter implements Painter<JComponent> { ...@@ -537,10 +555,10 @@ public abstract class AbstractRegionPainter implements Painter<JComponent> {
this.maxVerticalScaleFactor = maxV; this.maxVerticalScaleFactor = maxV;
if (canvasSize != null) { if (canvasSize != null) {
a = insets.left; a = stretchingInsets.left;
b = canvasSize.width - insets.right; b = canvasSize.width - stretchingInsets.right;
c = insets.top; c = stretchingInsets.top;
d = canvasSize.height - insets.bottom; d = canvasSize.height - stretchingInsets.bottom;
this.canvasSize = canvasSize; this.canvasSize = canvasSize;
this.inverted = inverted; this.inverted = inverted;
if (inverted) { if (inverted) {
......
...@@ -84,6 +84,8 @@ class NimbusIcon extends SynthIcon { ...@@ -84,6 +84,8 @@ class NimbusIcon extends SynthIcon {
translatex = 1; translatex = 1;
} }
} }
} else if (c instanceof JMenu) {
flip = ! c.getComponentOrientation().isLeftToRight();
} }
if (g instanceof Graphics2D){ if (g instanceof Graphics2D){
Graphics2D gfx = (Graphics2D)g; Graphics2D gfx = (Graphics2D)g;
......
...@@ -719,8 +719,9 @@ public class GlyphView extends View implements TabableView, Cloneable { ...@@ -719,8 +719,9 @@ public class GlyphView extends View implements TabableView, Cloneable {
checkPainter(); checkPainter();
int p0 = getStartOffset(); int p0 = getStartOffset();
int p1 = painter.getBoundedPosition(this, p0, pos, len); int p1 = painter.getBoundedPosition(this, p0, pos, len);
return ((p1 > p0) && (getBreakSpot(p0, p1) != BreakIterator.DONE)) ? return p1 == p0 ? View.BadBreakWeight :
View.ExcellentBreakWeight : View.BadBreakWeight; getBreakSpot(p0, p1) != BreakIterator.DONE ?
View.ExcellentBreakWeight : View.GoodBreakWeight;
} }
return super.getBreakWeight(axis, pos, len); return super.getBreakWeight(axis, pos, len);
} }
......
...@@ -174,23 +174,6 @@ public class ParagraphView extends FlowView implements TabExpander { ...@@ -174,23 +174,6 @@ public class ParagraphView extends FlowView implements TabExpander {
return layoutPool.getView(index); return layoutPool.getView(index);
} }
/**
* Adjusts the given row if possible to fit within the
* layout span. By default this will try to find the
* highest break weight possible nearest the end of
* the row. If a forced break is encountered, the
* break will be positioned there.
* <p>
* This is meant for internal usage, and should not be used directly.
*
* @param r the row to adjust to the current layout
* span
* @param desiredSpan the current layout span >= 0
* @param x the location r starts at
*/
protected void adjustRow(Row r, int desiredSpan, int x) {
}
/** /**
* Returns the next visual position for the cursor, in * Returns the next visual position for the cursor, in
* either the east or west direction. * either the east or west direction.
......
/* /*
* Copyright 2000-2008 Sun Microsystems, Inc. All Rights Reserved. * Copyright 2000-2009 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -289,8 +289,8 @@ public abstract class ShellFolder extends File { ...@@ -289,8 +289,8 @@ public abstract class ShellFolder extends File {
// To avoid loads of synchronizations with Invoker and improve performance we // To avoid loads of synchronizations with Invoker and improve performance we
// synchronize the whole code of the sort method once // synchronize the whole code of the sort method once
getInvoker().invoke(new Callable<Void>() { invoke(new Callable<Void>() {
public Void call() throws Exception { public Void call() {
// Check that we can use the ShellFolder.sortChildren() method: // Check that we can use the ShellFolder.sortChildren() method:
// 1. All files have the same non-null parent // 1. All files have the same non-null parent
// 2. All files is ShellFolders // 2. All files is ShellFolders
...@@ -330,8 +330,8 @@ public abstract class ShellFolder extends File { ...@@ -330,8 +330,8 @@ public abstract class ShellFolder extends File {
public void sortChildren(final List<? extends File> files) { public void sortChildren(final List<? extends File> files) {
// To avoid loads of synchronizations with Invoker and improve performance we // To avoid loads of synchronizations with Invoker and improve performance we
// synchronize the whole code of the sort method once // synchronize the whole code of the sort method once
getInvoker().invoke(new Callable<Void>() { invoke(new Callable<Void>() {
public Void call() throws Exception { public Void call() {
Collections.sort(files, FILE_COMPARATOR); Collections.sort(files, FILE_COMPARATOR);
return null; return null;
...@@ -501,18 +501,62 @@ public abstract class ShellFolder extends File { ...@@ -501,18 +501,62 @@ public abstract class ShellFolder extends File {
return invoker; return invoker;
} }
/**
* Invokes the {@code task} which doesn't throw checked exceptions
* from its {@code call} method. If invokation is interrupted then Thread.currentThread().isInterrupted() will
* be set and result will be {@code null}
*/
public static <T> T invoke(Callable<T> task) {
try {
return invoke(task, RuntimeException.class);
} catch (InterruptedException e) {
return null;
}
}
/**
* Invokes the {@code task} which throws checked exceptions from its {@code call} method.
* If invokation is interrupted then Thread.currentThread().isInterrupted() will
* be set and InterruptedException will be thrown as well.
*/
public static <T, E extends Throwable> T invoke(Callable<T> task, Class<E> exceptionClass)
throws InterruptedException, E {
try {
return getInvoker().invoke(task);
} catch (Exception e) {
if (e instanceof RuntimeException) {
// Rethrow unchecked exceptions
throw (RuntimeException) e;
}
if (e instanceof InterruptedException) {
// Set isInterrupted flag for current thread
Thread.currentThread().interrupt();
// Rethrow InterruptedException
throw (InterruptedException) e;
}
if (exceptionClass.isInstance(e)) {
throw exceptionClass.cast(e);
}
throw new RuntimeException("Unexpected error", e);
}
}
/** /**
* Interface allowing to invoke tasks in different environments on different platforms. * Interface allowing to invoke tasks in different environments on different platforms.
*/ */
public static interface Invoker { public static interface Invoker {
/** /**
* Invokes a callable task. If the {@code task} throws a checked exception, * Invokes a callable task.
* it will be wrapped into a {@link RuntimeException}
* *
* @param task a task to invoke * @param task a task to invoke
* @throws Exception {@code InterruptedException} or an exception that was thrown from the {@code task}
* @return the result of {@code task}'s invokation * @return the result of {@code task}'s invokation
*/ */
<T> T invoke(Callable<T> task); <T> T invoke(Callable<T> task) throws Exception;
} }
/** /**
......
/* /*
* Copyright 2000-2008 Sun Microsystems, Inc. All Rights Reserved. * Copyright 2000-2009 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -108,12 +108,8 @@ class ShellFolderManager { ...@@ -108,12 +108,8 @@ class ShellFolderManager {
} }
private static class DirectInvoker implements ShellFolder.Invoker { private static class DirectInvoker implements ShellFolder.Invoker {
public <T> T invoke(Callable<T> task) { public <T> T invoke(Callable<T> task) throws Exception {
try { return task.call();
return task.call();
} catch (Exception e) {
throw new RuntimeException(e);
}
} }
} }
} }
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
* *
* You should have received a copy of the GNU General Public License version * You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation, * 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Sf, tifth Floor, Boston, MA 02110-1301 USA. * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
* *
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
* CA 95054 USA or visit www.sun.com if you need additional information or * CA 95054 USA or visit www.sun.com if you need additional information or
......
/*
* Copyright 2007 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Sun designates this
* particular file as subject to the "Classpath" exception as provided
* by Sun in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
* CA 95054 USA or visit www.sun.com if you need additional information or
* have any questions.
*/
package sun.security.pkcs11;
// NOTE: this class is duplicated amongst SunJCE, SunPKCS11, and SunMSCAPI.
// All files should be kept in sync.
import java.io.*;
import java.util.*;
import java.util.jar.*;
import java.net.URL;
import java.net.JarURLConnection;
import java.net.MalformedURLException;
import java.security.*;
import java.security.cert.*;
import java.security.cert.Certificate;
/**
* This class verifies JAR files (and any supporting JAR files), and
* determines whether they may be used in this implementation.
*
* The JCE in OpenJDK has an open cryptographic interface, meaning it
* does not restrict which providers can be used. Compliance with
* United States export controls and with local law governing the
* import/export of products incorporating the JCE in the OpenJDK is
* the responsibility of the licensee.
*
* @since 1.7
*/
final class JarVerifier {
private static final boolean debug = false;
/**
* Verify the JAR file is signed by an entity which has a certificate
* issued by a trusted CA.
*
* Note: this is a temporary method and will change soon to use the
* exception chaining mechanism, which can provide more details
* as to why the verification failed.
*
* @param c the class to be verified.
* @return true if verification is successful.
*/
static boolean verify(final Class c) {
return true;
}
}
/* /*
* Copyright 2003-2008 Sun Microsystems, Inc. All Rights Reserved. * Copyright 2003-2009 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -390,24 +390,6 @@ public final class SunPKCS11 extends AuthProvider { ...@@ -390,24 +390,6 @@ public final class SunPKCS11 extends AuthProvider {
return sb.toString(); return sb.toString();
} }
// set to true once self verification is complete
private static volatile boolean integrityVerified;
static void verifySelfIntegrity(Class c) {
if (integrityVerified) {
return;
}
doVerifySelfIntegrity(c);
}
private static synchronized void doVerifySelfIntegrity(Class c) {
integrityVerified = JarVerifier.verify(c);
if (integrityVerified == false) {
throw new ProviderException
("The SunPKCS11 provider may have been tampered with.");
}
}
public boolean equals(Object obj) { public boolean equals(Object obj) {
return this == obj; return this == obj;
} }
...@@ -923,7 +905,6 @@ public final class SunPKCS11 extends AuthProvider { ...@@ -923,7 +905,6 @@ public final class SunPKCS11 extends AuthProvider {
if (type == MD) { if (type == MD) {
return new P11Digest(token, algorithm, mechanism); return new P11Digest(token, algorithm, mechanism);
} else if (type == CIP) { } else if (type == CIP) {
verifySelfIntegrity(getClass());
if (algorithm.startsWith("RSA")) { if (algorithm.startsWith("RSA")) {
return new P11RSACipher(token, algorithm, mechanism); return new P11RSACipher(token, algorithm, mechanism);
} else { } else {
...@@ -932,12 +913,10 @@ public final class SunPKCS11 extends AuthProvider { ...@@ -932,12 +913,10 @@ public final class SunPKCS11 extends AuthProvider {
} else if (type == SIG) { } else if (type == SIG) {
return new P11Signature(token, algorithm, mechanism); return new P11Signature(token, algorithm, mechanism);
} else if (type == MAC) { } else if (type == MAC) {
verifySelfIntegrity(getClass());
return new P11Mac(token, algorithm, mechanism); return new P11Mac(token, algorithm, mechanism);
} else if (type == KPG) { } else if (type == KPG) {
return new P11KeyPairGenerator(token, algorithm, mechanism); return new P11KeyPairGenerator(token, algorithm, mechanism);
} else if (type == KA) { } else if (type == KA) {
verifySelfIntegrity(getClass());
if (algorithm.equals("ECDH")) { if (algorithm.equals("ECDH")) {
return new P11ECDHKeyAgreement(token, algorithm, mechanism); return new P11ECDHKeyAgreement(token, algorithm, mechanism);
} else { } else {
...@@ -946,11 +925,8 @@ public final class SunPKCS11 extends AuthProvider { ...@@ -946,11 +925,8 @@ public final class SunPKCS11 extends AuthProvider {
} else if (type == KF) { } else if (type == KF) {
return token.getKeyFactory(algorithm); return token.getKeyFactory(algorithm);
} else if (type == SKF) { } else if (type == SKF) {
verifySelfIntegrity(getClass());
return new P11SecretKeyFactory(token, algorithm); return new P11SecretKeyFactory(token, algorithm);
} else if (type == KG) { } else if (type == KG) {
verifySelfIntegrity(getClass());
// reference equality // reference equality
if (algorithm == "SunTlsRsaPremasterSecret") { if (algorithm == "SunTlsRsaPremasterSecret") {
return new P11TlsRsaPremasterSecretGenerator( return new P11TlsRsaPremasterSecretGenerator(
......
/* /*
* Copyright 2003-2008 Sun Microsystems, Inc. All Rights Reserved. * Copyright 2003-2009 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -905,8 +904,8 @@ public class FilePane extends JPanel implements PropertyChangeListener { ...@@ -905,8 +904,8 @@ public class FilePane extends JPanel implements PropertyChangeListener {
@Override @Override
public void sort() { public void sort() {
ShellFolder.getInvoker().invoke(new Callable<Void>() { ShellFolder.invoke(new Callable<Void>() {
public Void call() throws Exception { public Void call() {
DetailsTableRowSorter.super.sort(); DetailsTableRowSorter.super.sort();
return null; return null;
} }
......
...@@ -718,10 +718,10 @@ public class MenuItemLayoutHelper { ...@@ -718,10 +718,10 @@ public class MenuItemLayoutHelper {
} }
private void alignRect(Rectangle rect, int alignment, int origWidth) { private void alignRect(Rectangle rect, int alignment, int origWidth) {
if (alignment != SwingUtilities.LEFT) { if (alignment == SwingConstants.RIGHT) {
rect.x = rect.x + rect.width - origWidth; rect.x = rect.x + rect.width - origWidth;
rect.width = origWidth;
} }
rect.width = origWidth;
} }
protected void layoutIconAndTextInLabelRect(LayoutResult lr) { protected void layoutIconAndTextInLabelRect(LayoutResult lr) {
......
...@@ -27,6 +27,7 @@ package sun.awt.X11; ...@@ -27,6 +27,7 @@ package sun.awt.X11;
import java.awt.*; import java.awt.*;
import java.awt.peer.*; import java.awt.peer.*;
import sun.awt.X11GraphicsConfig; import sun.awt.X11GraphicsConfig;
import sun.awt.SunToolkit;
class XRobotPeer implements RobotPeer { class XRobotPeer implements RobotPeer {
private X11GraphicsConfig xgc = null; private X11GraphicsConfig xgc = null;
...@@ -38,7 +39,8 @@ class XRobotPeer implements RobotPeer { ...@@ -38,7 +39,8 @@ class XRobotPeer implements RobotPeer {
XRobotPeer(GraphicsConfiguration gc) { XRobotPeer(GraphicsConfiguration gc) {
this.xgc = (X11GraphicsConfig)gc; this.xgc = (X11GraphicsConfig)gc;
setup(); SunToolkit tk = (SunToolkit)Toolkit.getDefaultToolkit();
setup(tk.getNumberOfButtons());
} }
public void dispose() { public void dispose() {
...@@ -81,7 +83,7 @@ class XRobotPeer implements RobotPeer { ...@@ -81,7 +83,7 @@ class XRobotPeer implements RobotPeer {
return pixelArray; return pixelArray;
} }
private static native synchronized void setup(); private static native synchronized void setup(int numberOfButtons);
private static native synchronized void mouseMoveImpl(X11GraphicsConfig xgc, int x, int y); private static native synchronized void mouseMoveImpl(X11GraphicsConfig xgc, int x, int y);
private static native synchronized void mousePressImpl(int buttons); private static native synchronized void mousePressImpl(int buttons);
......
...@@ -51,9 +51,8 @@ ...@@ -51,9 +51,8 @@
extern struct X11GraphicsConfigIDs x11GraphicsConfigIDs; extern struct X11GraphicsConfigIDs x11GraphicsConfigIDs;
extern int32_t getNumButtons();
static jint * masks; static jint * masks;
static jint num_buttons;
static int32_t isXTestAvailable() { static int32_t isXTestAvailable() {
int32_t major_opcode, first_event, first_error; int32_t major_opcode, first_event, first_error;
...@@ -164,34 +163,34 @@ static XImage *getWindowImage(Display * display, Window window, ...@@ -164,34 +163,34 @@ static XImage *getWindowImage(Display * display, Window window,
/*********************************************************************************************/ /*********************************************************************************************/
// this should be called from XRobotPeer constructor
JNIEXPORT void JNICALL JNIEXPORT void JNICALL
Java_sun_awt_X11_XRobotPeer_setup (JNIEnv * env, jclass cls) { Java_sun_awt_X11_XRobotPeer_setup (JNIEnv * env, jclass cls, jint numberOfButtons) {
int32_t xtestAvailable; int32_t xtestAvailable;
// this should be called from XRobotPeer constructor DTRACE_PRINTLN("RobotPeer: setup()");
num_buttons = numberOfButtons;
jclass inputEventClazz = (*env)->FindClass(env, "java/awt/event/InputEvent"); jclass inputEventClazz = (*env)->FindClass(env, "java/awt/event/InputEvent");
jmethodID getButtonDownMasksID = (*env)->GetStaticMethodID(env, inputEventClazz, "getButtonDownMasks", "()[I"); jmethodID getButtonDownMasksID = (*env)->GetStaticMethodID(env, inputEventClazz, "getButtonDownMasks", "()[I");
jintArray obj = (jintArray)(*env)->CallStaticObjectMethod(env, inputEventClazz, getButtonDownMasksID); jintArray obj = (jintArray)(*env)->CallStaticObjectMethod(env, inputEventClazz, getButtonDownMasksID);
jsize len = (*env)->GetArrayLength(env, obj);
jint * tmp = (*env)->GetIntArrayElements(env, obj, JNI_FALSE); jint * tmp = (*env)->GetIntArrayElements(env, obj, JNI_FALSE);
masks = (jint *)malloc(sizeof(jint)*len); masks = (jint *)malloc(sizeof(jint) * num_buttons);
if (masks == (jint *) NULL) { if (masks == (jint *) NULL) {
JNU_ThrowOutOfMemoryError((JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2), NULL); JNU_ThrowOutOfMemoryError((JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2), NULL);
goto finally; goto finally;
} }
int i; int i;
for (i = 0; i < len; i++) { for (i = 0; i < num_buttons; i++) {
masks[i] = tmp[i]; masks[i] = tmp[i];
} }
(*env)->ReleaseIntArrayElements(env, obj, tmp, 0); (*env)->ReleaseIntArrayElements(env, obj, tmp, 0);
(*env)->DeleteLocalRef(env, obj); (*env)->DeleteLocalRef(env, obj);
DTRACE_PRINTLN("RobotPeer: setup()");
AWT_LOCK(); AWT_LOCK();
xtestAvailable = isXTestAvailable(); xtestAvailable = isXTestAvailable();
DTRACE_PRINTLN1("RobotPeer: XTest available = %d", xtestAvailable); DTRACE_PRINTLN1("RobotPeer: XTest available = %d", xtestAvailable);
if (!xtestAvailable) { if (!xtestAvailable) {
...@@ -338,8 +337,6 @@ void mouseAction(JNIEnv *env, ...@@ -338,8 +337,6 @@ void mouseAction(JNIEnv *env,
{ {
AWT_LOCK(); AWT_LOCK();
int32_t num_buttons = getNumButtons(); //from XToolkit.c
DTRACE_PRINTLN1("RobotPeer: mouseAction(%i)", buttonMask); DTRACE_PRINTLN1("RobotPeer: mouseAction(%i)", buttonMask);
DTRACE_PRINTLN1("RobotPeer: mouseAction, press = %d", isMousePress); DTRACE_PRINTLN1("RobotPeer: mouseAction, press = %d", isMousePress);
......
/* /*
* Copyright 2003-2008 Sun Microsystems, Inc. All Rights Reserved. * Copyright 2003-2009 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -58,10 +58,15 @@ public class Win32ShellFolderManager2 extends ShellFolderManager { ...@@ -58,10 +58,15 @@ public class Win32ShellFolderManager2 extends ShellFolderManager {
} }
public ShellFolder createShellFolder(File file) throws FileNotFoundException { public ShellFolder createShellFolder(File file) throws FileNotFoundException {
return createShellFolder(getDesktop(), file); try {
return createShellFolder(getDesktop(), file);
} catch (InterruptedException e) {
throw new FileNotFoundException("Execution was interrupted");
}
} }
static Win32ShellFolder2 createShellFolder(Win32ShellFolder2 parent, File file) throws FileNotFoundException { static Win32ShellFolder2 createShellFolder(Win32ShellFolder2 parent, File file)
throws FileNotFoundException, InterruptedException {
long pIDL; long pIDL;
try { try {
pIDL = parent.parseDisplayName(file.getCanonicalPath()); pIDL = parent.parseDisplayName(file.getCanonicalPath());
...@@ -77,7 +82,8 @@ public class Win32ShellFolderManager2 extends ShellFolderManager { ...@@ -77,7 +82,8 @@ public class Win32ShellFolderManager2 extends ShellFolderManager {
return folder; return folder;
} }
static Win32ShellFolder2 createShellFolderFromRelativePIDL(Win32ShellFolder2 parent, long pIDL) { static Win32ShellFolder2 createShellFolderFromRelativePIDL(Win32ShellFolder2 parent, long pIDL)
throws InterruptedException {
// Walk down this relative pIDL, creating new nodes for each of the entries // Walk down this relative pIDL, creating new nodes for each of the entries
while (pIDL != 0) { while (pIDL != 0) {
long curPIDL = Win32ShellFolder2.copyFirstPIDLEntry(pIDL); long curPIDL = Win32ShellFolder2.copyFirstPIDLEntry(pIDL);
...@@ -108,7 +114,9 @@ public class Win32ShellFolderManager2 extends ShellFolderManager { ...@@ -108,7 +114,9 @@ public class Win32ShellFolderManager2 extends ShellFolderManager {
try { try {
desktop = new Win32ShellFolder2(DESKTOP); desktop = new Win32ShellFolder2(DESKTOP);
} catch (IOException e) { } catch (IOException e) {
desktop = null; // Ignore error
} catch (InterruptedException e) {
// Ignore error
} }
} }
return desktop; return desktop;
...@@ -119,7 +127,9 @@ public class Win32ShellFolderManager2 extends ShellFolderManager { ...@@ -119,7 +127,9 @@ public class Win32ShellFolderManager2 extends ShellFolderManager {
try { try {
drives = new Win32ShellFolder2(DRIVES); drives = new Win32ShellFolder2(DRIVES);
} catch (IOException e) { } catch (IOException e) {
drives = null; // Ignore error
} catch (InterruptedException e) {
// Ignore error
} }
} }
return drives; return drives;
...@@ -132,8 +142,10 @@ public class Win32ShellFolderManager2 extends ShellFolderManager { ...@@ -132,8 +142,10 @@ public class Win32ShellFolderManager2 extends ShellFolderManager {
if (path != null) { if (path != null) {
recent = createShellFolder(getDesktop(), new File(path)); recent = createShellFolder(getDesktop(), new File(path));
} }
} catch (InterruptedException e) {
// Ignore error
} catch (IOException e) { } catch (IOException e) {
recent = null; // Ignore error
} }
} }
return recent; return recent;
...@@ -144,7 +156,9 @@ public class Win32ShellFolderManager2 extends ShellFolderManager { ...@@ -144,7 +156,9 @@ public class Win32ShellFolderManager2 extends ShellFolderManager {
try { try {
network = new Win32ShellFolder2(NETWORK); network = new Win32ShellFolder2(NETWORK);
} catch (IOException e) { } catch (IOException e) {
network = null; // Ignore error
} catch (InterruptedException e) {
// Ignore error
} }
} }
return network; return network;
...@@ -164,8 +178,10 @@ public class Win32ShellFolderManager2 extends ShellFolderManager { ...@@ -164,8 +178,10 @@ public class Win32ShellFolderManager2 extends ShellFolderManager {
personal.setIsPersonal(); personal.setIsPersonal();
} }
} }
} catch (InterruptedException e) {
// Ignore error
} catch (IOException e) { } catch (IOException e) {
personal = null; // Ignore error
} }
} }
return personal; return personal;
...@@ -267,6 +283,9 @@ public class Win32ShellFolderManager2 extends ShellFolderManager { ...@@ -267,6 +283,9 @@ public class Win32ShellFolderManager2 extends ShellFolderManager {
} }
} catch (IOException e) { } catch (IOException e) {
// Skip this value // Skip this value
} catch (InterruptedException e) {
// Return empty result
return new File[0];
} }
} while (value != null); } while (value != null);
...@@ -476,33 +495,39 @@ public class Win32ShellFolderManager2 extends ShellFolderManager { ...@@ -476,33 +495,39 @@ public class Win32ShellFolderManager2 extends ShellFolderManager {
return comThread; return comThread;
} }
public <T> T invoke(Callable<T> task) { public <T> T invoke(Callable<T> task) throws Exception {
try { if (Thread.currentThread() == comThread) {
if (Thread.currentThread() == comThread) { // if it's already called from the COM
// if it's already called from the COM // thread, we don't need to delegate the task
// thread, we don't need to delegate the task return task.call();
return task.call(); } else {
} else { Future<T> future;
while (true) {
Future<T> future = submit(task); try {
future = submit(task);
try { } catch (RejectedExecutionException e) {
return future.get(); throw new InterruptedException(e.getMessage());
} catch (InterruptedException e) {
// Repeat the attempt
future.cancel(true);
}
}
}
} catch (Exception e) {
Throwable cause = (e instanceof ExecutionException) ? e.getCause() : e;
if (cause instanceof RuntimeException) {
throw (RuntimeException) cause;
} }
if (cause instanceof Error) {
throw (Error) cause; try {
return future.get();
} catch (InterruptedException e) {
future.cancel(true);
throw e;
} catch (ExecutionException e) {
Throwable cause = e.getCause();
if (cause instanceof Exception) {
throw (Exception) cause;
}
if (cause instanceof Error) {
throw (Error) cause;
}
throw new RuntimeException("Unexpected error", cause);
} }
throw new RuntimeException(cause);
} }
} }
} }
......
/*
* Copyright 2007 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Sun designates this
* particular file as subject to the "Classpath" exception as provided
* by Sun in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
* CA 95054 USA or visit www.sun.com if you need additional information or
* have any questions.
*/
package sun.security.mscapi;
// NOTE: this class is duplicated amongst SunJCE, SunPKCS11, and SunMSCAPI.
// All files should be kept in sync.
import java.io.*;
import java.util.*;
import java.util.jar.*;
import java.net.URL;
import java.net.JarURLConnection;
import java.net.MalformedURLException;
import java.security.*;
import java.security.cert.*;
import java.security.cert.Certificate;
/**
* This class verifies JAR files (and any supporting JAR files), and
* determines whether they may be used in this implementation.
*
* The JCE in OpenJDK has an open cryptographic interface, meaning it
* does not restrict which providers can be used. Compliance with
* United States export controls and with local law governing the
* import/export of products incorporating the JCE in the OpenJDK is
* the responsibility of the licensee.
*
* @since 1.7
*/
final class JarVerifier {
private static final boolean debug = false;
/**
* Verify the JAR file is signed by an entity which has a certificate
* issued by a trusted CA.
*
* Note: this is a temporary method and will change soon to use the
* exception chaining mechanism, which can provide more details
* as to why the verification failed.
*
* @param c the class to be verified.
* @return true if verification is successful.
*/
static boolean verify(final Class c) {
return true;
}
}
/* /*
* Copyright 2005-2007 Sun Microsystems, Inc. All Rights Reserved. * Copyright 2005-2009 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -93,7 +93,6 @@ public final class RSACipher extends CipherSpi { ...@@ -93,7 +93,6 @@ public final class RSACipher extends CipherSpi {
private sun.security.mscapi.Key privateKey; private sun.security.mscapi.Key privateKey;
public RSACipher() { public RSACipher() {
SunMSCAPI.verifySelfIntegrity(getClass());
paddingType = PAD_PKCS1; paddingType = PAD_PKCS1;
} }
......
/* /*
* Copyright 2005-2008 Sun Microsystems, Inc. All Rights Reserved. * Copyright 2005-2009 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -117,22 +117,4 @@ public final class SunMSCAPI extends Provider { ...@@ -117,22 +117,4 @@ public final class SunMSCAPI extends Provider {
AccessController.doPrivileged(new PutAllAction(this, map)); AccessController.doPrivileged(new PutAllAction(this, map));
} }
} }
// set to true once self verification is complete
private static volatile boolean integrityVerified;
static void verifySelfIntegrity(Class c) {
if (integrityVerified) {
return;
}
doVerifySelfIntegrity(c);
}
private static synchronized void doVerifySelfIntegrity(Class c) {
integrityVerified = JarVerifier.verify(c);
if (integrityVerified == false) {
throw new ProviderException
("The SunMSCAPI provider may have been tampered with.");
}
}
} }
...@@ -3739,11 +3739,12 @@ void AwtComponent::SetCandidateWindow(int iCandType, int x, int y) ...@@ -3739,11 +3739,12 @@ void AwtComponent::SetCandidateWindow(int iCandType, int x, int y)
MsgRouting AwtComponent::WmImeSetContext(BOOL fSet, LPARAM *lplParam) MsgRouting AwtComponent::WmImeSetContext(BOOL fSet, LPARAM *lplParam)
{ {
// This message causes native status window shown even it is disabled. So don't // If the Windows input context is disabled, do not let Windows
// let DefWindowProc process this message if this IMC is disabled. // display any UIs.
HIMC hIMC = ImmGetContext(); HIMC hIMC = ImmGetContext();
if (hIMC == NULL) { if (hIMC == NULL) {
return mrConsume; *lplParam = 0;
return mrDoDefault;
} }
if (fSet) { if (fSet) {
......
/* /*
* Copyright 2008 Sun Microsystems, Inc. All Rights Reserved. * Copyright 2008-2009 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -23,7 +23,7 @@ ...@@ -23,7 +23,7 @@
/* @test /* @test
* *
* @bug 6638195 * @bug 6638195 6844297
* @author Igor Kushnirskiy * @author Igor Kushnirskiy
* @summary tests if EventQueueDelegate.Delegate is invoked. * @summary tests if EventQueueDelegate.Delegate is invoked.
*/ */
...@@ -47,11 +47,22 @@ public class bug6638195 { ...@@ -47,11 +47,22 @@ public class bug6638195 {
} }
private static void runTest(MyEventQueueDelegate delegate) throws Exception { private static void runTest(MyEventQueueDelegate delegate) throws Exception {
// We need an empty runnable here, so the next event is
// processed with a new EventQueueDelegate. See 6844297
// for details
EventQueue.invokeLater( EventQueue.invokeLater(
new Runnable() { new Runnable() {
public void run() { public void run() {
} }
}); });
// The following event is expected to be processed by
// the EventQueueDelegate instance
EventQueue.invokeLater(
new Runnable() {
public void run() {
}
});
// Finally, proceed on the main thread
final CountDownLatch latch = new CountDownLatch(1); final CountDownLatch latch = new CountDownLatch(1);
EventQueue.invokeLater( EventQueue.invokeLater(
new Runnable() { new Runnable() {
...@@ -60,7 +71,7 @@ public class bug6638195 { ...@@ -60,7 +71,7 @@ public class bug6638195 {
} }
}); });
latch.await(); latch.await();
if (! delegate.allInvoked()) { if (!delegate.allInvoked()) {
throw new RuntimeException("failed"); throw new RuntimeException("failed");
} }
} }
...@@ -125,6 +136,7 @@ public class bug6638195 { ...@@ -125,6 +136,7 @@ public class bug6638195 {
return objectMap; return objectMap;
} }
static class MyEventQueueDelegate implements EventQueueDelegate.Delegate { static class MyEventQueueDelegate implements EventQueueDelegate.Delegate {
private volatile boolean getNextEventInvoked = false; private volatile boolean getNextEventInvoked = false;
private volatile boolean beforeDispatchInvoked = false; private volatile boolean beforeDispatchInvoked = false;
......
/* /*
* Copyright 2009 Red Hat, Inc. All Rights Reserved. * Copyright 2009 Red Hat, Inc. All Rights Reserved.
* Portions Copyright 2009 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -37,35 +38,62 @@ ...@@ -37,35 +38,62 @@
* Test fails if size of window is wrong * Test fails if size of window is wrong
*/ */
import java.awt.Dimension; import java.awt.*;
import java.awt.Frame;
public class TestFrameSize { public class TestFrameSize {
static Dimension desiredDimensions = new Dimension(200, 200); static Dimension desiredDimensions = new Dimension(200, 200);
static int ERROR_MARGIN = 15; static Frame mainWindow;
static Frame mainWindow;
private static Dimension getClientSize(Frame window) {
public static void drawGui() { Dimension size = window.getSize();
mainWindow = new Frame(""); Insets insets = window.getInsets();
mainWindow.setPreferredSize(desiredDimensions);
mainWindow.pack(); System.out.println("getClientSize() for " + window);
System.out.println(" size: " + size);
Dimension actualDimensions = mainWindow.getSize(); System.out.println(" insets: " + insets);
System.out.println("Desired dimensions: " + desiredDimensions.toString());
System.out.println("Actual dimensions: " + actualDimensions.toString()); return new Dimension(
if (Math.abs(actualDimensions.height - desiredDimensions.height) > ERROR_MARGIN) { size.width - insets.left - insets.right,
throw new RuntimeException("Incorrect widow size"); size.height - insets.top - insets.bottom);
} }
public static void drawGui() {
mainWindow = new Frame("");
mainWindow.setPreferredSize(desiredDimensions);
mainWindow.pack();
Dimension actualDimensions = mainWindow.getSize();
System.out.println("Desired dimensions: " + desiredDimensions.toString());
System.out.println("Actual dimensions: " + actualDimensions.toString());
if (!actualDimensions.equals(desiredDimensions)) {
throw new RuntimeException("Incorrect widow size");
}
// pack() guarantees to preserve the size of the client area after
// showing the window.
Dimension clientSize1 = getClientSize(mainWindow);
System.out.println("Client size before showing: " + clientSize1);
mainWindow.setVisible(true);
((sun.awt.SunToolkit)Toolkit.getDefaultToolkit()).realSync();
Dimension clientSize2 = getClientSize(mainWindow);
System.out.println("Client size after showing: " + clientSize2);
if (!clientSize2.equals(clientSize1)) {
throw new RuntimeException("Incorrect client area size.");
} }
}
public static void main(String[] args) { public static void main(String[] args) {
try { try {
drawGui(); drawGui();
} finally { } finally {
if (mainWindow != null) { if (mainWindow != null) {
mainWindow.dispose(); mainWindow.dispose();
} }
}
} }
}
} }
...@@ -30,6 +30,10 @@ case "$OS" in ...@@ -30,6 +30,10 @@ case "$OS" in
PS=":" PS=":"
FS="/" FS="/"
;; ;;
CYGWIN* )
PS=";"
FS="/"
;;
Windows* ) Windows* )
PS=";" PS=";"
FS="\\" FS="\\"
...@@ -39,7 +43,7 @@ case "$OS" in ...@@ -39,7 +43,7 @@ case "$OS" in
exit 1; exit 1;
;; ;;
esac esac
${TESTJAVA}${FS}bin${FS}javac -d . -classpath ${TESTSRC}${FS}..${FS}..${FS}..${FS}sun${FS}net${FS}www${FS}httptest ${TESTSRC}${FS}B4933582.java ${TESTJAVA}${FS}bin${FS}javac -d . -classpath "${TESTSRC}${FS}..${FS}..${FS}..${FS}sun${FS}net${FS}www${FS}httptest" ${TESTSRC}${FS}B4933582.java
rm -f cache.ser auth.save rm -f cache.ser auth.save
${TESTJAVA}${FS}bin${FS}java -classpath ${TESTSRC}${FS}..${FS}..${FS}..${FS}sun${FS}net${FS}www${FS}httptest${PS}. B4933582 first ${TESTJAVA}${FS}bin${FS}java -classpath "${TESTSRC}${FS}..${FS}..${FS}..${FS}sun${FS}net${FS}www${FS}httptest${PS}." B4933582 first
${TESTJAVA}${FS}bin${FS}java -classpath ${TESTSRC}${FS}..${FS}..${FS}..${FS}sun${FS}net${FS}www${FS}httptest${PS}. B4933582 second ${TESTJAVA}${FS}bin${FS}java -classpath "${TESTSRC}${FS}..${FS}..${FS}..${FS}sun${FS}net${FS}www${FS}httptest${PS}." B4933582 second
...@@ -35,6 +35,10 @@ case "$OS" in ...@@ -35,6 +35,10 @@ case "$OS" in
PATHSEP=":" PATHSEP=":"
FILESEP="/" FILESEP="/"
;; ;;
CYGWIN* )
PATHSEP=";"
FILESEP="/"
;;
Windows* ) Windows* )
PATHSEP=";" PATHSEP=";"
FILESEP="\\" FILESEP="\\"
......
...@@ -32,6 +32,10 @@ case "$OS" in ...@@ -32,6 +32,10 @@ case "$OS" in
PS=":" PS=":"
FS="/" FS="/"
;; ;;
CYGWIN* )
PS=";"
FS="/"
;;
Windows* ) Windows* )
PS=";" PS=";"
FS="\\" FS="\\"
......
...@@ -29,6 +29,10 @@ case "$OS" in ...@@ -29,6 +29,10 @@ case "$OS" in
SunOS | Linux ) SunOS | Linux )
exit 0 exit 0
;; ;;
CYGWIN* )
PS=";"
FS="/"
;;
Windows* ) Windows* )
PS=";" PS=";"
FS="\\" FS="\\"
......
...@@ -31,6 +31,10 @@ case "$OS" in ...@@ -31,6 +31,10 @@ case "$OS" in
PS=":" PS=":"
FS="/" FS="/"
;; ;;
CYGWIN* )
PS=";"
FS="/"
;;
Windows* ) Windows* )
PS=";" PS=";"
FS="\\" FS="\\"
......
...@@ -42,6 +42,10 @@ case "$OS" in ...@@ -42,6 +42,10 @@ case "$OS" in
PS=":" PS=":"
FS="/" FS="/"
;; ;;
CYGWIN* )
PS=";"
FS="/"
;;
Windows* ) Windows* )
PS=";" PS=";"
FS="\\" FS="\\"
......
...@@ -35,6 +35,10 @@ case "$OS" in ...@@ -35,6 +35,10 @@ case "$OS" in
PS=":" PS=":"
FS="/" FS="/"
;; ;;
CYGWIN* )
PS=";"
FS="/"
;;
Windows* ) Windows* )
PS=";" PS=";"
FS="\\" FS="\\"
...@@ -49,10 +53,10 @@ esac ...@@ -49,10 +53,10 @@ esac
if [ x"$TESTJAVA" = x ]; then TESTJAVA=$1; fi if [ x"$TESTJAVA" = x ]; then TESTJAVA=$1; fi
if [ x"$TESTSRC" = x ]; then TESTSRC=.; fi if [ x"$TESTSRC" = x ]; then TESTSRC=.; fi
CLASSPATH=.${PS}${TESTSRC}${FS}a${PS}${TESTSRC}${FS}b.jar CLASSPATH=".${PS}${TESTSRC}${FS}a${PS}${TESTSRC}${FS}b.jar"
${TESTJAVA}${FS}bin${FS}javac -classpath ${CLASSPATH} -d . ${TESTSRC}${FS}CheckSealed.java ${TESTJAVA}${FS}bin${FS}javac -classpath "${CLASSPATH}" -d . ${TESTSRC}${FS}CheckSealed.java
${TESTJAVA}${FS}bin${FS}java -cp ${CLASSPATH} CheckSealed 1 ${TESTJAVA}${FS}bin${FS}java -cp "${CLASSPATH}" CheckSealed 1
if [ $? != 0 ]; then exit 1; fi if [ $? != 0 ]; then exit 1; fi
${TESTJAVA}${FS}bin${FS}java -cp ${CLASSPATH} CheckSealed 2 ${TESTJAVA}${FS}bin${FS}java -cp "${CLASSPATH}" CheckSealed 2
if [ $? != 0 ]; then exit 1; fi if [ $? != 0 ]; then exit 1; fi
...@@ -41,6 +41,10 @@ case "$OS" in ...@@ -41,6 +41,10 @@ case "$OS" in
PS=":" PS=":"
FS="/" FS="/"
;; ;;
CYGWIN* )
PS=";"
FS="/"
;;
Windows* ) Windows* )
PS=";" PS=";"
FS="\\" FS="\\"
......
...@@ -54,6 +54,10 @@ case "$OS" in ...@@ -54,6 +54,10 @@ case "$OS" in
PATHSEP=":" PATHSEP=":"
FILESEP="/" FILESEP="/"
;; ;;
CYGWIN* )
PATHSEP=";"
FILESEP="/"
;;
Windows* ) Windows* )
PATHSEP=";" PATHSEP=";"
FILESEP="\\" FILESEP="\\"
...@@ -81,7 +85,7 @@ ${TESTJAVA}${FILESEP}bin${FILESEP}javac \ ...@@ -81,7 +85,7 @@ ${TESTJAVA}${FILESEP}bin${FILESEP}javac \
# run the test # run the test
${TESTJAVA}${FILESEP}bin${FILESEP}java \ ${TESTJAVA}${FILESEP}bin${FILESEP}java \
-classpath ${TESTCLASSES}${PATHSEP}${TESTSRC}${FILESEP}Deadlock.jar \ -classpath "${TESTCLASSES}${PATHSEP}${TESTSRC}${FILESEP}Deadlock.jar" \
ClassLoaderDeadlock ClassLoaderDeadlock
exit $? exit $?
...@@ -42,6 +42,10 @@ case "$OS" in ...@@ -42,6 +42,10 @@ case "$OS" in
PATHSEP=":" PATHSEP=":"
FILESEP="/" FILESEP="/"
;; ;;
CYGWIN* )
PATHSEP=";"
FILESEP="/"
;;
Windows* ) Windows* )
PATHSEP=";" PATHSEP=";"
FILESEP="\\" FILESEP="\\"
...@@ -54,5 +58,5 @@ esac ...@@ -54,5 +58,5 @@ esac
JAVA="${TESTJAVA}${FILESEP}bin${FILESEP}java" JAVA="${TESTJAVA}${FILESEP}bin${FILESEP}java"
${JAVA} -cp ${TESTCLASSES}${PATHSEP}${TESTSRC}${FILESEP}Deadlock.jar Deadlock ${JAVA} -cp "${TESTCLASSES}${PATHSEP}${TESTSRC}${FILESEP}Deadlock.jar" Deadlock
...@@ -54,6 +54,10 @@ case "$OS" in ...@@ -54,6 +54,10 @@ case "$OS" in
PATHSEP=":" PATHSEP=":"
FILESEP="/" FILESEP="/"
;; ;;
CYGWIN* )
PATHSEP=";"
FILESEP="/"
;;
Windows* ) Windows* )
PATHSEP=";" PATHSEP=";"
FILESEP="\\" FILESEP="\\"
...@@ -76,7 +80,7 @@ ${TESTJAVA}${FILESEP}bin${FILESEP}javac \ ...@@ -76,7 +80,7 @@ ${TESTJAVA}${FILESEP}bin${FILESEP}javac \
# run the test # run the test
${TESTJAVA}${FILESEP}bin${FILESEP}java \ ${TESTJAVA}${FILESEP}bin${FILESEP}java \
-classpath ${TESTCLASSES}${PATHSEP}${TESTSRC}${FILESEP}exp.jar \ -classpath "${TESTCLASSES}${PATHSEP}${TESTSRC}${FILESEP}exp.jar" \
DynSignedProvFirst DynSignedProvFirst
exit $? exit $?
...@@ -54,6 +54,10 @@ case "$OS" in ...@@ -54,6 +54,10 @@ case "$OS" in
PATHSEP=":" PATHSEP=":"
FILESEP="/" FILESEP="/"
;; ;;
CYGWIN* )
PATHSEP=";"
FILESEP="/"
;;
Windows* ) Windows* )
PATHSEP=";" PATHSEP=";"
FILESEP="\\" FILESEP="\\"
...@@ -70,14 +74,14 @@ rm StaticSignedProvFirst.class ...@@ -70,14 +74,14 @@ rm StaticSignedProvFirst.class
# compile the test program # compile the test program
${TESTJAVA}${FILESEP}bin${FILESEP}javac \ ${TESTJAVA}${FILESEP}bin${FILESEP}javac \
-classpath ${TESTCLASSES}${PATHSEP}${TESTSRC}${FILESEP}exp.jar \ -classpath "${TESTCLASSES}${PATHSEP}${TESTSRC}${FILESEP}exp.jar" \
-d ${TESTCLASSES}${FILESEP} \ -d ${TESTCLASSES}${FILESEP} \
${TESTSRC}${FILESEP}StaticSignedProvFirst.java ${TESTSRC}${FILESEP}StaticSignedProvFirst.java
# run the test # run the test
cd ${TESTSRC}${FILESEP} cd ${TESTSRC}${FILESEP}
${TESTJAVA}${FILESEP}bin${FILESEP}java \ ${TESTJAVA}${FILESEP}bin${FILESEP}java \
-classpath ${TESTCLASSES}${PATHSEP}${TESTSRC}${FILESEP}exp.jar \ -classpath "${TESTCLASSES}${PATHSEP}${TESTSRC}${FILESEP}exp.jar" \
-Djava.security.properties=file:${TESTSRC}${FILESEP}Static.props \ -Djava.security.properties=file:${TESTSRC}${FILESEP}Static.props \
StaticSignedProvFirst StaticSignedProvFirst
......
...@@ -56,6 +56,11 @@ case "$OS" in ...@@ -56,6 +56,11 @@ case "$OS" in
PS=":" PS=":"
FS="/" FS="/"
;; ;;
CYGWIN* )
NULL=/dev/null
PS=";"
FS="/"
;;
Windows* ) Windows* )
NULL=NUL NULL=NUL
PS=";" PS=";"
...@@ -69,7 +74,7 @@ esac ...@@ -69,7 +74,7 @@ esac
${TESTJAVA}${FS}bin${FS}javac \ ${TESTJAVA}${FS}bin${FS}javac \
-d . \ -d . \
-classpath ${TESTSRC}${FS}P1.jar${PS}${TESTSRC}${FS}P2.jar \ -classpath "${TESTSRC}${FS}P1.jar${PS}${TESTSRC}${FS}P2.jar" \
${TESTSRC}${FS}FailOverTest.java ${TESTSRC}${FS}FailOverTest.java
if [ $? -ne 0 ]; then if [ $? -ne 0 ]; then
...@@ -77,7 +82,7 @@ if [ $? -ne 0 ]; then ...@@ -77,7 +82,7 @@ if [ $? -ne 0 ]; then
fi fi
${TESTJAVA}${FS}bin${FS}java \ ${TESTJAVA}${FS}bin${FS}java \
-classpath ${TESTSRC}${FS}P1.jar${PS}${TESTSRC}${FS}P2.jar${PS}. \ -classpath "${TESTSRC}${FS}P1.jar${PS}${TESTSRC}${FS}P2.jar${PS}." \
FailOverTest FailOverTest
result=$? result=$?
......
...@@ -43,6 +43,11 @@ case "$OS" in ...@@ -43,6 +43,11 @@ case "$OS" in
FS="/" FS="/"
RM="/bin/rm -f" RM="/bin/rm -f"
;; ;;
CYGWIN* )
PS=";"
FS="/"
RM="rm"
;;
Windows* ) Windows* )
PS=";" PS=";"
FS="\\" FS="\\"
......
/*
* Copyright 2009 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
* CA 95054 USA or visit www.sun.com if you need additional information or
* have any questions.
*/
/*
* @test
* @bug 6505027
* @summary Tests focus problem inside internal frame
* @author Sergey Malenkov
*/
import java.awt.AWTException;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Container;
import java.awt.KeyboardFocusManager;
import java.awt.Point;
import java.awt.Robot;
import java.awt.event.InputEvent;
import javax.swing.DefaultCellEditor;
import javax.swing.JComboBox;
import javax.swing.JDesktopPane;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumn;
public class Test6505027 implements Runnable {
private static final boolean INTERNAL = true;
private static final boolean TERMINATE = true;
private static final int WIDTH = 450;
private static final int HEIGHT = 200;
private static final int OFFSET = 10;
private static final long PAUSE = 2048L;
private static final String[] COLUMNS = { "Size", "Shape" }; // NON-NLS
private static final String[] ITEMS = { "a", "b", "c", "d" }; // NON-NLS
private static final String KEY = "terminateEditOnFocusLost"; // NON-NLS
public static void main(String[] args) {
SwingUtilities.invokeLater(new Test6505027());
Component component = null;
while (component == null) {
try {
Thread.sleep(PAUSE);
}
catch (InterruptedException exception) {
// ignore interrupted exception
}
component = KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner();
}
if (!component.getClass().equals(JComboBox.class)) {
throw new Error("unexpected focus owner: " + component);
}
SwingUtilities.getWindowAncestor(component).dispose();
}
private JTable table;
private Point point;
public void run() {
if (this.table == null) {
JFrame main = new JFrame();
main.setSize(WIDTH + OFFSET * 3, HEIGHT + OFFSET * 5);
main.setLocationRelativeTo(null);
main.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
main.setVisible(true);
Container container = main;
if (INTERNAL) {
JInternalFrame frame = new JInternalFrame();
frame.setBounds(OFFSET, OFFSET, WIDTH, HEIGHT);
frame.setVisible(true);
JDesktopPane desktop = new JDesktopPane();
desktop.add(frame, new Integer(1));
container.add(desktop);
container = frame;
}
this.table = new JTable(new DefaultTableModel(COLUMNS, 2));
if (TERMINATE) {
this.table.putClientProperty(KEY, Boolean.TRUE);
}
TableColumn column = this.table.getColumn(COLUMNS[1]);
column.setCellEditor(new DefaultCellEditor(new JComboBox(ITEMS)));
container.add(BorderLayout.NORTH, new JTextField());
container.add(BorderLayout.CENTER, new JScrollPane(this.table));
SwingUtilities.invokeLater(this);
}
else if (this.point == null) {
this.point = this.table.getCellRect(1, 1, false).getLocation();
SwingUtilities.convertPointToScreen(this.point, this.table);
SwingUtilities.invokeLater(this);
}
else {
try {
Robot robot = new Robot();
robot.mouseMove(this.point.x + 1, this.point.y + 1);
robot.mousePress(InputEvent.BUTTON1_MASK);
}
catch (AWTException exception) {
throw new Error("unexpected exception", exception);
}
}
}
}
/*
* Copyright 2009 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
* CA 95054 USA or visit www.sun.com if you need additional information or
* have any questions.
*/
/*
* @test
* @bug 6802868
* @summary JInternalFrame is not maximized when maximized parent frame
* @author Alexander Potochkin
*/
import sun.awt.SunToolkit;
import java.awt.Dimension;
import java.awt.Point;
import java.awt.Robot;
import java.awt.Toolkit;
import java.beans.PropertyVetoException;
import javax.swing.JDesktopPane;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;
import javax.swing.SwingUtilities;
public class Test6802868 {
static JInternalFrame jif;
static JFrame frame;
static Dimension size;
static Point location;
public static void main(String[] args) throws Exception {
Robot robot = new Robot();
robot.setAutoDelay(20);
SunToolkit toolkit = (SunToolkit) Toolkit.getDefaultToolkit();
SwingUtilities.invokeAndWait(new Runnable() {
public void run() {
frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JDesktopPane jdp = new JDesktopPane();
frame.getContentPane().add(jdp);
jif = new JInternalFrame("Title", true, true, true, true);
jdp.add(jif);
jif.setVisible(true);
frame.setSize(200, 200);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
try {
jif.setMaximum(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
toolkit.realSync();
SwingUtilities.invokeAndWait(new Runnable() {
public void run() {
size = jif.getSize();
frame.setSize(300, 300);
}
});
toolkit.realSync();
SwingUtilities.invokeAndWait(new Runnable() {
public void run() {
if (jif.getSize().equals(size)) {
throw new RuntimeException("InternalFrame hasn't changed its size");
}
try {
jif.setIcon(true);
} catch (PropertyVetoException e) {
e.printStackTrace();
}
location = jif.getDesktopIcon().getLocation();
frame.setSize(400, 400);
}
});
toolkit.realSync();
SwingUtilities.invokeAndWait(new Runnable() {
public void run() {
if (jif.getDesktopIcon().getLocation().equals(location)) {
throw new RuntimeException("JDesktopIcon hasn't moved");
}
}
});
}
}
/*
* Copyright 2009 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
* CA 95054 USA or visit www.sun.com if you need additional information or
* have any questions.
*/
/*
* @test
* @bug 6526631
* @summary Resizes right-oriented scroll pane
* @author Sergey Malenkov
* @library ..
* @build SwingTest
* @run main Test6526631
*/
import java.awt.Dimension;
import javax.swing.JFrame;
import javax.swing.JScrollBar;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JViewport;
import static java.awt.ComponentOrientation.RIGHT_TO_LEFT;
public class Test6526631 {
private static final int COLS = 90;
private static final int ROWS = 50;
private static final int OFFSET = 10;
public static void main(String[] args) {
SwingTest.start(Test6526631.class);
}
private final JScrollPane pane;
private final JFrame frame;
public Test6526631(JFrame frame) {
this.pane = new JScrollPane(new JTextArea(ROWS, COLS));
this.pane.setComponentOrientation(RIGHT_TO_LEFT);
this.frame = frame;
this.frame.add(this.pane);
}
private void update(int offset) {
Dimension size = this.frame.getSize();
size.width += offset;
this.frame.setSize(size);
}
public void validateFirst() {
validateThird();
update(OFFSET);
}
public void validateSecond() {
validateThird();
update(-OFFSET);
}
public void validateThird() {
JViewport viewport = this.pane.getViewport();
JScrollBar scroller = this.pane.getHorizontalScrollBar();
if (!scroller.getComponentOrientation().equals(RIGHT_TO_LEFT)) {
throw new IllegalStateException("unexpected component orientation");
}
int value = scroller.getValue();
if (value != 0) {
throw new IllegalStateException("unexpected scroll value");
}
int extent = viewport.getExtentSize().width;
if (extent != scroller.getVisibleAmount()) {
throw new IllegalStateException("unexpected visible amount");
}
int size = viewport.getViewSize().width;
if (size != scroller.getMaximum()) {
throw new IllegalStateException("unexpected maximum");
}
int pos = size - extent - value;
if (pos != viewport.getViewPosition().x) {
throw new IllegalStateException("unexpected position");
}
}
}
/*
* Copyright 2009 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
* CA 95054 USA or visit www.sun.com if you need additional information or
* have any questions.
*/
import java.io.PrintWriter;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.util.Comparator;
import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;
import javax.swing.JFrame;
import static javax.swing.SwingUtilities.invokeLater;
/**
* SwingTestHelper is a utility class for writing regression tests
* that require interacting with the UI.
*
* @author Sergey A. Malenkov
*/
final class SwingTest implements Runnable {
private static final int WIDTH = 640;
private static final int HEIGHT = 480;
public static void start(Class<?> type) {
new SwingTest(type).start();
}
private final PrintWriter writer = new PrintWriter(System.out, true);
private Class<?> type;
private JFrame frame;
private Iterator<Method> methods;
private Object object;
private Method method;
private Throwable error;
private SwingTest(Class<?> type) {
this.type = type;
}
public void run() {
synchronized (this.writer) {
if (this.error != null) {
this.frame.dispose();
this.frame = null;
}
else if (this.object == null) {
invoke();
Set<Method> methods = new TreeSet<Method>(new Comparator<Method>() {
public int compare(Method first, Method second) {
return first.getName().compareTo(second.getName());
}
});
for (Method method : this.type.getMethods()) {
if (method.getDeclaringClass().equals(this.type)) {
if (method.getReturnType().equals(void.class)) {
if (0 == method.getParameterTypes().length) {
methods.add(method);
}
}
}
}
this.methods = methods.iterator();
}
else if (this.method != null) {
invoke();
}
else if (this.methods.hasNext()) {
this.method = this.methods.next();
}
else {
this.frame.dispose();
this.frame = null;
this.type = null;
}
this.writer.notifyAll();
}
}
private void start() {
synchronized (this.writer) {
while (this.type != null) {
if ((this.method != null) && Modifier.isStatic(this.method.getModifiers())) {
invoke();
}
else {
invokeLater(this);
try {
this.writer.wait();
}
catch (InterruptedException exception) {
exception.printStackTrace(this.writer);
}
}
if ((this.frame == null) && (this.error != null)) {
throw new Error("unexpected error", this.error);
}
}
}
}
private void invoke() {
try {
if (this.method != null) {
this.writer.println(this.method);
this.method.invoke(this.object);
this.method = null;
}
else {
this.writer.println(this.type);
this.frame = new JFrame(this.type.getSimpleName());
this.frame.setSize(WIDTH, HEIGHT);
this.frame.setLocationRelativeTo(null);
this.object = this.type.getConstructor(JFrame.class).newInstance(this.frame);
this.frame.setVisible(true);
}
}
catch (NoSuchMethodException exception) {
this.error = exception;
}
catch (SecurityException exception) {
this.error = exception;
}
catch (IllegalAccessException exception) {
this.error = exception;
}
catch (IllegalArgumentException exception) {
this.error = exception;
}
catch (InstantiationException exception) {
this.error = exception;
}
catch (InvocationTargetException exception) {
this.error = exception.getTargetException();
}
}
}
...@@ -56,6 +56,12 @@ case "$OS" in ...@@ -56,6 +56,12 @@ case "$OS" in
FS="/" FS="/"
TMP=/tmp TMP=/tmp
;; ;;
CYGWIN* )
NULL=/dev/null
PS=";"
FS="/"
TMP=/tmp
;;
Windows_95 | Windows_98 | Windows_NT ) Windows_95 | Windows_98 | Windows_NT )
NULL=NUL NULL=NUL
PS=";" PS=";"
......
...@@ -32,6 +32,10 @@ case "$OS" in ...@@ -32,6 +32,10 @@ case "$OS" in
PS=":" PS=":"
FS="/" FS="/"
;; ;;
CYGWIN* )
PS=";"
FS="/"
;;
Windows* ) Windows* )
PS=";" PS=";"
FS="\\" FS="\\"
......
...@@ -32,6 +32,10 @@ case "$OS" in ...@@ -32,6 +32,10 @@ case "$OS" in
PS=":" PS=":"
FS="/" FS="/"
;; ;;
CYGWIN* )
PS=";"
FS="/"
;;
Windows* ) Windows* )
PS=";" PS=";"
FS="\\" FS="\\"
......
...@@ -32,6 +32,10 @@ case "$OS" in ...@@ -32,6 +32,10 @@ case "$OS" in
PS=":" PS=":"
FS="/" FS="/"
;; ;;
CYGWIN* )
PS=";"
FS="/"
;;
Windows* ) Windows* )
PS=";" PS=";"
FS="\\" FS="\\"
......
...@@ -39,6 +39,10 @@ case "$OS" in ...@@ -39,6 +39,10 @@ case "$OS" in
PS=":" PS=":"
FS="/" FS="/"
;; ;;
CYGWIN* )
PS=";"
FS="/"
;;
Windows* ) Windows* )
PS=";" PS=";"
FS="\\" FS="\\"
......
...@@ -28,23 +28,54 @@ ...@@ -28,23 +28,54 @@
# @summary various resource and classloading bugs related to jar files # @summary various resource and classloading bugs related to jar files
#set -x #set -x
DEST=`pwd` DEST=`pwd`
OS=`uname -s`
case "$OS" in
SunOS )
PS=":"
FS="/"
;;
Linux )
PS=":"
FS="/"
;;
Windows* )
PS=";"
FS="\\"
;;
CYGWIN* )
PS=";"
FS="/"
#
# javac does not like /cygdrive produced by `pwd`.
#
DEST=`cygpath -d ${DEST}`
;;
* )
echo "Unrecognized system!"
exit 1;
;;
esac
# #
# build jar1 # build jar1
# #
mkdir ${DEST}/jar1 mkdir -p ${DEST}${FS}jar1
cd ${TESTSRC}/etc/jar1 cd ${TESTSRC}${FS}etc${FS}jar1
cp -r . ${DEST}/jar1 cp -r . ${DEST}${FS}jar1
${TESTJAVA}/bin/javac -d ${DEST}/jar1 ${TESTSRC}/src/jar1/LoadResourceBundle.java ${TESTJAVA}${FS}bin${FS}javac -d ${DEST}${FS}jar1 \
${TESTJAVA}/bin/javac -d ${DEST}/jar1 ${TESTSRC}/src/jar1/GetResource.java ${TESTSRC}${FS}src${FS}jar1${FS}LoadResourceBundle.java
cd ${DEST}/jar1 ${TESTJAVA}${FS}bin${FS}javac -d ${DEST}${FS}jar1 \
${TESTJAVA}/bin/jar cfM jar1.jar jar1 res1.txt ${TESTSRC}${FS}src${FS}jar1${FS}GetResource.java
cd ${DEST}${FS}jar1
${TESTJAVA}${FS}bin${FS}jar cfM jar1.jar jar1 res1.txt
mv jar1.jar .. mv jar1.jar ..
# #
# build the test sources and run them # build the test sources and run them
# #
${TESTJAVA}/bin/javac -d ${DEST} ${TESTSRC}/src/test/*.java ${TESTJAVA}${FS}bin${FS}javac -d ${DEST} ${TESTSRC}${FS}src${FS}test${FS}*.java
cd ${DEST} cd ${DEST}
${TESTJAVA}/bin/java RunAllTests ${TESTJAVA}${FS}bin${FS}java RunAllTests
result=$? result=$?
if [ "$result" -ne "0" ]; then if [ "$result" -ne "0" ]; then
exit 1 exit 1
......
...@@ -68,6 +68,20 @@ case "$OS" in ...@@ -68,6 +68,20 @@ case "$OS" in
CP="cp" CP="cp"
CHMOD="chmod" CHMOD="chmod"
;; ;;
CYGWIN* )
FS="/"
PS=";"
CP="cp"
CHMOD="chmod"
#
# javac does not like /cygdrive produced by `pwd`
#
TESTSRC=`cygpath -d ${TESTSRC}`
;;
* )
echo "Unrecognized system!"
exit 1;
;;
esac esac
# compile test # compile test
......
...@@ -69,6 +69,20 @@ case "$OS" in ...@@ -69,6 +69,20 @@ case "$OS" in
CP="cp" CP="cp"
CHMOD="chmod" CHMOD="chmod"
;; ;;
CYGWIN* )
FS="/"
PS=";"
CP="cp"
CHMOD="chmod"
#
# javac does not like /cygdrive produced by `pwd`
#
TESTSRC=`cygpath -d ${TESTSRC}`
;;
* )
echo "Unrecognized system!"
exit 1;
;;
esac esac
# first make cert/key DBs writable # first make cert/key DBs writable
......
...@@ -55,6 +55,10 @@ case "$OS" in ...@@ -55,6 +55,10 @@ case "$OS" in
PS=":" PS=":"
FS="/" FS="/"
;; ;;
CYGWIN* )
PS=";"
FS="/"
;;
Windows* ) Windows* )
PS=";" PS=";"
FS="\\" FS="\\"
......
...@@ -43,10 +43,17 @@ fi ...@@ -43,10 +43,17 @@ fi
OS=`uname -s` OS=`uname -s`
case "$OS" in case "$OS" in
SunOS | Linux ) SunOS | Linux )
FILESEP="/"
PATHSEP=":" PATHSEP=":"
;; ;;
CYGWIN* )
FILESEP="/"
PATHSEP=";"
;;
Windows* ) Windows* )
FILESEP="\\"
PATHSEP=";" PATHSEP=";"
;; ;;
esac esac
...@@ -56,11 +63,13 @@ set -ex ...@@ -56,11 +63,13 @@ set -ex
# #
# Compile the tests, package into their respective jars # Compile the tests, package into their respective jars
# #
${TESTJAVA}/bin/javac -d . \ ${TESTJAVA}${FILESEP}bin${FILESEP}javac -d . \
${TESTSRC}/NotifyHandshakeTest.java \ ${TESTSRC}${FILESEP}NotifyHandshakeTest.java \
${TESTSRC}/NotifyHandshakeTestHeyYou.java ${TESTSRC}${FILESEP}NotifyHandshakeTestHeyYou.java
${TESTJAVA}/bin/jar -cvf com.jar com/NotifyHandshakeTest*.class ${TESTJAVA}${FILESEP}bin${FILESEP}jar -cvf com.jar \
${TESTJAVA}/bin/jar -cvf edu.jar edu/NotifyHandshakeTestHeyYou.class com${FILESEP}NotifyHandshakeTest*.class
${TESTJAVA}${FILESEP}bin${FILESEP}jar -cvf edu.jar \
edu${FILESEP}NotifyHandshakeTestHeyYou.class
# #
# Don't want the original class files to be used, because # Don't want the original class files to be used, because
...@@ -73,11 +82,11 @@ rm -rf com edu ...@@ -73,11 +82,11 @@ rm -rf com edu
# This is the only thing we really care about as far as # This is the only thing we really care about as far as
# test status goes. # test status goes.
# #
${TESTJAVA}/bin/java \ ${TESTJAVA}${FILESEP}bin${FILESEP}java \
-Dtest.src=${TESTSRC} \ -Dtest.src=${TESTSRC} \
-classpath "com.jar${PATHSEP}edu.jar" \ -classpath "com.jar${PATHSEP}edu.jar" \
-Djava.security.manager \ -Djava.security.manager \
-Djava.security.policy=${TESTSRC}/NotifyHandshakeTest.policy \ -Djava.security.policy=${TESTSRC}${FILESEP}NotifyHandshakeTest.policy \
com.NotifyHandshakeTest com.NotifyHandshakeTest
retval=$? retval=$?
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册