Skip to content

Commit

Permalink
capricorn86#709@trivial: Adds checks for if the element is a ShadowRo…
Browse files Browse the repository at this point in the history
…ot in more places where the host property is used.
  • Loading branch information
capricorn86 committed Feb 2, 2023
1 parent 2ea4662 commit 7d006c3
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 5 deletions.
Expand Up @@ -129,7 +129,10 @@ export default class CSSStyleDeclarationElementStyle {
}

styleAndElement = { element: null, cssTexts: [] };
} else if ((<IShadowRoot>styleAndElement.element).host) {
} else if (
styleAndElement.element.nodeType === NodeTypeEnum.documentFragmentNode &&
(<IShadowRoot>styleAndElement.element).host
) {
const styleSheets = <INodeList<IHTMLStyleElement>>(
(<IShadowRoot>styleAndElement.element).querySelectorAll('style,link[rel="stylesheet"]')
);
Expand Down
10 changes: 7 additions & 3 deletions packages/happy-dom/src/event/Event.ts
Expand Up @@ -2,8 +2,8 @@ import IEventInit from './IEventInit';
import INode from '../nodes/node/INode';
import IWindow from '../window/IWindow';
import IShadowRoot from '../nodes/shadow-root/IShadowRoot';
import ShadowRoot from '../nodes/shadow-root/ShadowRoot';
import IEventTarget from './IEventTarget';
import NodeTypeEnum from '../nodes/node/NodeTypeEnum';

/**
* Event.
Expand Down Expand Up @@ -70,8 +70,12 @@ export default class Event {
composedPath.push(eventTarget);

if (this.bubbles) {
if (this.composed && eventTarget instanceof ShadowRoot && eventTarget.host) {
eventTarget = eventTarget.host;
if (
this.composed &&
(<INode>eventTarget).nodeType === NodeTypeEnum.documentFragmentNode &&
(<IShadowRoot>eventTarget).host
) {
eventTarget = (<IShadowRoot>eventTarget).host;
} else if ((<INode>(<unknown>this.target)).ownerDocument === eventTarget) {
eventTarget = (<INode>(<unknown>this.target)).ownerDocument.defaultView;
} else {
Expand Down
2 changes: 1 addition & 1 deletion packages/happy-dom/src/nodes/node/Node.ts
Expand Up @@ -482,7 +482,7 @@ export default class Node extends EventTarget implements INode {
}

// eslint-disable-next-line
if (event.composed && (<any>this).host) {
if (event.composed && this.nodeType === NodeTypeEnum.documentFragmentNode && (<any>this).host) {
// eslint-disable-next-line
return (<any>this).host.dispatchEvent(event);
}
Expand Down

0 comments on commit 7d006c3

Please sign in to comment.