fix: prevent title change for within page navigation (#46036)
* fix: prevent title change for on page navigation Co-authored-by: Michaela Laurencin <mlaurencin@electronjs.org> * add back and forward testing Co-authored-by: Michaela Laurencin <mlaurencin@electronjs.org> * update Chromium comment Co-authored-by: Michaela Laurencin <mlaurencin@electronjs.org> * remove errant script tag Co-authored-by: Michaela Laurencin <mlaurencin@electronjs.org> --------- Co-authored-by: trop[bot] <37223003+trop[bot]@users.noreply.github.com> Co-authored-by: Michaela Laurencin <mlaurencin@electronjs.org>
This commit is contained in:
		
					parent
					
						
							
								a1ec212049
							
						
					
				
			
			
				commit
				
					
						c87fd357fc
					
				
			
		
					 3 changed files with 37 additions and 9 deletions
				
			
		| 
						 | 
					@ -2057,6 +2057,17 @@ void WebContents::DidFinishNavigation(
 | 
				
			||||||
      if (is_main_frame) {
 | 
					      if (is_main_frame) {
 | 
				
			||||||
        Emit("did-navigate", url, http_response_code, http_status_text);
 | 
					        Emit("did-navigate", url, http_response_code, http_status_text);
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      content::NavigationEntry* entry = navigation_handle->GetNavigationEntry();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      // This check is needed due to an issue in Chromium
 | 
				
			||||||
 | 
					      // Upstream is open to patching:
 | 
				
			||||||
 | 
					      // https://bugs.chromium.org/p/chromium/issues/detail?id=1178663
 | 
				
			||||||
 | 
					      // If a history entry has been made and the forward/back call has been
 | 
				
			||||||
 | 
					      // made, proceed with setting the new title
 | 
				
			||||||
 | 
					      if (entry &&
 | 
				
			||||||
 | 
					          (entry->GetTransitionType() & ui::PAGE_TRANSITION_FORWARD_BACK))
 | 
				
			||||||
 | 
					        WebContents::TitleWasSet(entry);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    if (is_guest())
 | 
					    if (is_guest())
 | 
				
			||||||
      Emit("load-commit", url, is_main_frame);
 | 
					      Emit("load-commit", url, is_main_frame);
 | 
				
			||||||
| 
						 | 
					@ -2077,15 +2088,6 @@ void WebContents::DidFinishNavigation(
 | 
				
			||||||
           frame_process_id, frame_routing_id);
 | 
					           frame_process_id, frame_routing_id);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  content::NavigationEntry* entry = navigation_handle->GetNavigationEntry();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // This check is needed due to an issue in Chromium
 | 
					 | 
				
			||||||
  // Check the Chromium issue to keep updated:
 | 
					 | 
				
			||||||
  // https://bugs.chromium.org/p/chromium/issues/detail?id=1178663
 | 
					 | 
				
			||||||
  // If a history entry has been made and the forward/back call has been made,
 | 
					 | 
				
			||||||
  // proceed with setting the new title
 | 
					 | 
				
			||||||
  if (entry && (entry->GetTransitionType() & ui::PAGE_TRANSITION_FORWARD_BACK))
 | 
					 | 
				
			||||||
    WebContents::TitleWasSet(entry);
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void WebContents::TitleWasSet(content::NavigationEntry* entry) {
 | 
					void WebContents::TitleWasSet(content::NavigationEntry* entry) {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -631,6 +631,17 @@ describe('webContents module', () => {
 | 
				
			||||||
        w.webContents.navigationHistory.goBack();
 | 
					        w.webContents.navigationHistory.goBack();
 | 
				
			||||||
        expect(w.webContents.navigationHistory.getActiveIndex()).to.equal(0);
 | 
					        expect(w.webContents.navigationHistory.getActiveIndex()).to.equal(0);
 | 
				
			||||||
      });
 | 
					      });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      it('should have the same window title if navigating back within the page', async () => {
 | 
				
			||||||
 | 
					        const title = 'Test';
 | 
				
			||||||
 | 
					        w.webContents.on('did-finish-load', () => {
 | 
				
			||||||
 | 
					          w.setTitle(title);
 | 
				
			||||||
 | 
					          w.loadURL(`file://${fixturesPath}/pages/navigation-history-anchor-in-page.html#next`);
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					        await w.loadURL(`file://${fixturesPath}/pages/navigation-history-anchor-in-page.html`);
 | 
				
			||||||
 | 
					        w.webContents.navigationHistory.goBack();
 | 
				
			||||||
 | 
					        expect(w.getTitle()).to.equal(title);
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    describe('navigationHistory.canGoForward and navigationHistory.goForward API', () => {
 | 
					    describe('navigationHistory.canGoForward and navigationHistory.goForward API', () => {
 | 
				
			||||||
| 
						 | 
					@ -653,6 +664,16 @@ describe('webContents module', () => {
 | 
				
			||||||
        w.webContents.navigationHistory.goForward();
 | 
					        w.webContents.navigationHistory.goForward();
 | 
				
			||||||
        expect(w.webContents.navigationHistory.getActiveIndex()).to.equal(1);
 | 
					        expect(w.webContents.navigationHistory.getActiveIndex()).to.equal(1);
 | 
				
			||||||
      });
 | 
					      });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      it('should have the same window title if navigating forward within the page', async () => {
 | 
				
			||||||
 | 
					        const title = 'Test';
 | 
				
			||||||
 | 
					        w.webContents.on('did-finish-load', () => {
 | 
				
			||||||
 | 
					          w.setTitle(title);
 | 
				
			||||||
 | 
					          w.loadURL(`file://${fixturesPath}/pages/navigation-history-anchor-in-page.html#next`);
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					        await w.loadURL(`file://${fixturesPath}/pages/navigation-history-anchor-in-page.html`);
 | 
				
			||||||
 | 
					        expect(w.getTitle()).to.equal(title);
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    describe('navigationHistory.canGoToOffset(index) and navigationHistory.goToOffset(index) API', () => {
 | 
					    describe('navigationHistory.canGoToOffset(index) and navigationHistory.goToOffset(index) API', () => {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										5
									
								
								spec/fixtures/pages/navigation-history-anchor-in-page.html
									
										
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								spec/fixtures/pages/navigation-history-anchor-in-page.html
									
										
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,5 @@
 | 
				
			||||||
 | 
					<html>
 | 
				
			||||||
 | 
					<body>
 | 
				
			||||||
 | 
					  <span id="next">This is content.</span>
 | 
				
			||||||
 | 
					</body>
 | 
				
			||||||
 | 
					</html>
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue