diff --git a/shell/browser/ui/cocoa/delayed_native_view_host.mm b/shell/browser/ui/cocoa/delayed_native_view_host.mm index e8f4f0305d..6d594e9647 100644 --- a/shell/browser/ui/cocoa/delayed_native_view_host.mm +++ b/shell/browser/ui/cocoa/delayed_native_view_host.mm @@ -15,13 +15,9 @@ DelayedNativeViewHost::~DelayedNativeViewHost() = default; void DelayedNativeViewHost::ViewHierarchyChanged( const views::ViewHierarchyChangedDetails& details) { - // NativeViewHost doesn't expect to have children, so filter the - // ViewHierarchyChanged events before passing them on. - if (details.child == this) { - NativeViewHost::ViewHierarchyChanged(details); - if (details.is_add && GetWidget() && !native_view()) - Attach(native_view_); - } + NativeViewHost::ViewHierarchyChanged(details); + if (details.is_add && GetWidget() && !native_view()) + Attach(native_view_); } bool DelayedNativeViewHost::OnMousePressed(const ui::MouseEvent& ui_event) { diff --git a/spec/api-view-spec.ts b/spec/api-view-spec.ts index de2aac8b91..9d7f39bf4d 100644 --- a/spec/api-view-spec.ts +++ b/spec/api-view-spec.ts @@ -36,6 +36,18 @@ describe('View', () => { expect(w.contentView.children).to.have.lengthOf(1); }); + it('can be added as a child of another View', async () => { + const w = new BaseWindow(); + const v1 = new View(); + const v2 = new View(); + + v1.addChildView(v2); + w.contentView.addChildView(v1); + + expect(w.contentView.children).to.deep.equal([v1]); + expect(v1.children).to.deep.equal([v2]); + }); + it('correctly reorders children', () => { w = new BaseWindow({ show: false }); const cv = new View(); diff --git a/spec/api-web-contents-view-spec.ts b/spec/api-web-contents-view-spec.ts index cfbca6dc19..1525986b77 100644 --- a/spec/api-web-contents-view-spec.ts +++ b/spec/api-web-contents-view-spec.ts @@ -135,6 +135,20 @@ describe('WebContentsView', () => { expect(w.isFullScreen()).to.be.true('isFullScreen'); }); + it('can be added as a child of another View', async () => { + const w = new BaseWindow(); + const v = new View(); + const wcv = new WebContentsView(); + + await wcv.webContents.loadURL('data:text/html,
This is a simple div.
'); + + v.addChildView(wcv); + w.contentView.addChildView(v); + + expect(w.contentView.children).to.deep.equal([v]); + expect(v.children).to.deep.equal([wcv]); + }); + describe('visibilityState', () => { async function haveVisibilityState (view: WebContentsView, state: string) { const docVisState = await view.webContents.executeJavaScript('document.visibilityState');