Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

WICKET-7149: Add Integrity and CrossOrigin values to ResourceReference and related code #1102

Merged
merged 3 commits into from
Feb 20, 2025

Conversation

mpritt
Copy link
Contributor

@mpritt mpritt commented Feb 13, 2025

Synopsis

Added two new variables to the ResourceReference class. Added code to use these values in both the JavaScriptReferenceHeaderItem and CssReferenceHeaderItem classes. Also fixed a bug with the AbstractCssReferenceHeaderItem class where it was directly accessing the identity and crossOrigin values directly instead of going through accessor methods.

In-depth Detail:

It is easy to create the integrity and cross origin values needed when the we have the control over the creation of the JavaScriptHeaderItem or CssReferenceHeaderItem. It becomes much more difficult when there are resources that are created and then stored in wicket framework classes (whether resource references are framework or user created), because these resources are used later by the framework when it does the actual creation of the header items (i.e. like JavaScriptHeaderItem.forReference()).

Supporting scenario...try setting the integrity hash for the "wicket-ajax-jquery.js" file which is referenced from the wicket-core-10.1.0.jar. This resource is created initially through the WicketAjaxJQueryResourceReference class and used in the JavaScriptLibrarySettings class. The call getWicketAjaxReference() inside the JavaScriptLibrarySettings is used by the framework in various places, and those places create the actual JavaScriptReferenceHeaderItem (see OnDomReadyHeaderItem.getDependencies() as an example). While it is possible to extend a few framework classes to overwrite the default behavior and create the JavaScriptReferenceHeaderItem directly and add the desired hash and cross-origin values, that method is not a desirable or maintainable.

By adding integrity and cross-origin variables to the definition of a ResourceReference class, those values can then be used in the rendering of the JavaScriptReferenceHeaderItem through overriding the getIntegrity() and getCrossOrigin() functions. If the header item's integrity value was not defined (i.e. null) then use the value defined from the ResourceReference (the same goes for the cross origin value).

It was also noticed that the AbstractCssReferenceHeaderItem's internalRenderCSSReference() function was not correctly referencing the integrity and cross origin values by directly accessing the values rather than using the accessor methods. Changes were made to this class to correctly use the accessor methods.

…d using values for creating JS/CSS reference header items

Added two new variables to the ResourceReference class.  These new values allow for better JavaScriptReferenceHeaderItem and CssReferenceHeaderItem creation, allowing those classes to access the resource reference identity/CrossOrigin values if they are not already defined at the header item level.  Also fixed a bug with the AbstractCssReferenceHeaderItem class where it was directly accessing the identity and crossOrigin values instead of it going through the accessor methods like it should.
Copy link
Member

@martin-g martin-g left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good to me!
It would be nice to have some unit tests though!

Added unit tests for ResourceReference, JavaScriptReferenceHeaderItem and CssReferenceHeaderItem classes.
@mpritt
Copy link
Contributor Author

mpritt commented Feb 17, 2025 via email

@martin-g martin-g marked this pull request as draft February 20, 2025 07:42
Signed-off-by: Martin Tzvetanov Grigorov <mgrigorov@apache.org>
@martin-g martin-g changed the title Adding Integrity and CrossOrigin values to ResourceReference and related code WICKET-7149: Add Integrity and CrossOrigin values to ResourceReference and related code Feb 20, 2025
@martin-g martin-g marked this pull request as ready for review February 20, 2025 08:12
@martin-g martin-g merged commit ca8ec27 into apache:master Feb 20, 2025
3 checks passed
@martin-g
Copy link
Member

Thank you, @mpritt !

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants