diff --git a/packages/core/src/sanitization/iframe_attrs_validation.ts b/packages/core/src/sanitization/iframe_attrs_validation.ts index 5b210a29079467..07e08eb64254fa 100644 --- a/packages/core/src/sanitization/iframe_attrs_validation.ts +++ b/packages/core/src/sanitization/iframe_attrs_validation.ts @@ -10,6 +10,8 @@ import {RuntimeError, RuntimeErrorCode} from '../errors'; import {getTemplateLocationDetails} from '../render3/instructions/element_validation'; import {TNodeType} from '../render3/interfaces/node'; import {RComment, RElement} from '../render3/interfaces/renderer_dom'; +import {RENDERER} from '../render3/interfaces/view'; +import {nativeRemoveNode} from '../render3/node_manipulation'; import {getLView, getSelectedTNode} from '../render3/state'; import {getNativeByTNode} from '../render3/util/view_utils'; import {trustedHTMLFromString} from '../util/security/trusted_types'; @@ -32,15 +34,16 @@ export function ɵɵvalidateIframeAttribute(attrValue: any, tagName: string, att // Restrict any dynamic bindings of security-sensitive attributes/properties // on an + + `, + }) + class IframeComp { + @ViewChild('container', {read: ViewContainerRef}) container!: ViewContainerRef; + @ViewChild('template') template!: TemplateRef; + + createEmbeddedView() { + this.container.createEmbeddedView(this.template); + } + } + + const fixture = TestBed.createComponent(IframeComp); + fixture.detectChanges(); + + expect(() => { + fixture.componentInstance.createEmbeddedView(); + fixture.detectChanges(); + }).toThrowError(getErrorMessageRegexp()); + + ensureNoIframePresent(fixture); + }); + describe('i18n', () => { it('should error when a security-sensitive attribute is set as ' + 'a property binding on an