Browse Source

fix: correctly propagate title updates for window with no navigation entries (#29946)

Jeremy Rose 3 years ago
parent
commit
a8b3c22518
2 changed files with 15 additions and 0 deletions
  1. 2 0
      shell/browser/api/electron_api_web_contents.cc
  2. 13 0
      spec-main/api-web-contents-spec.ts

+ 2 - 0
shell/browser/api/electron_api_web_contents.cc

@@ -1752,6 +1752,8 @@ void WebContents::TitleWasSet(content::NavigationEntry* entry) {
     } else {
       final_title = title;
     }
+  } else {
+    final_title = web_contents()->GetTitle();
   }
   for (ExtendedWebContentsObserver& observer : observers_)
     observer.OnPageTitleUpdated(final_title, explicit_set);

+ 13 - 0
spec-main/api-web-contents-spec.ts

@@ -2024,6 +2024,19 @@ describe('webContents module', () => {
     });
   });
 
+  describe('page-title-updated event', () => {
+    afterEach(closeAllWindows);
+    it('is emitted with a full title for pages with no navigation', async () => {
+      const bw = new BrowserWindow({ show: false, webPreferences: { nativeWindowOpen: true } });
+      await bw.loadURL('about:blank');
+      bw.webContents.executeJavaScript('child = window.open("", "", "show=no"); null');
+      const [, child] = await emittedOnce(app, 'web-contents-created');
+      bw.webContents.executeJavaScript('child.document.title = "new title"');
+      const [, title] = await emittedOnce(child, 'page-title-updated');
+      expect(title).to.equal('new title');
+    });
+  });
+
   describe('crashed event', () => {
     it('does not crash main process when destroying WebContents in it', (done) => {
       const contents = (webContents as any).create({ nodeIntegration: true });