fix: set userAgent on navigationHistory.restore() (#46300)

fix: set userAgent on navigationHistory restore

Co-authored-by: trop[bot] <37223003+trop[bot]@users.noreply.github.com>
Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com>
This commit is contained in:
trop[bot] 2025-03-26 19:11:39 -05:00 committed by GitHub
parent f9164968d6
commit fe445869ca
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 32 additions and 0 deletions

View file

@ -2624,6 +2624,9 @@ void WebContents::RestoreHistory(
auto navigation_entries = std::make_unique<
std::vector<std::unique_ptr<content::NavigationEntry>>>();
blink::UserAgentOverride ua_override;
ua_override.ua_string_override = GetUserAgent();
for (const auto& entry : entries) {
content::NavigationEntry* nav_entry = nullptr;
if (!gin::Converter<content::NavigationEntry*>::FromV8(isolate, entry,
@ -2636,11 +2639,15 @@ void WebContents::RestoreHistory(
std::to_string(index) + ".");
return;
}
nav_entry->SetIsOverridingUserAgent(
!ua_override.ua_string_override.empty());
navigation_entries->push_back(
std::unique_ptr<content::NavigationEntry>(nav_entry));
}
if (!navigation_entries->empty()) {
web_contents()->SetUserAgentOverride(ua_override, false);
web_contents()->GetController().Restore(
index, content::RestoreType::kRestored, navigation_entries.get());
web_contents()->GetController().LoadIfNecessary();

View file

@ -887,6 +887,31 @@ describe('webContents module', () => {
});
});
});
it('should restore an overridden user agent', async () => {
const partition = 'persist:wcvtest';
const testUA = 'MyCustomUA';
const ses = session.fromPartition(partition);
ses.setUserAgent(testUA);
const wcv = new WebContentsView({
webPreferences: { partition }
});
wcv.webContents.navigationHistory.restore({
entries: [{
url: urlPage1,
title: 'url1'
}],
index: 0
});
const ua = wcv.webContents.getUserAgent();
const wcvua = await wcv.webContents.executeJavaScript('navigator.userAgent');
expect(ua).to.equal(wcvua);
});
});
describe('getFocusedWebContents() API', () => {