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

fix: set userAgent on navigationHistory restore
This commit is contained in:
Shelley Vohr 2025-03-26 16:59:19 +01:00 committed by GitHub
parent a5076a663b
commit 3212f60d69
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 32 additions and 0 deletions

View file

@ -2533,6 +2533,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,
@ -2545,11 +2548,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', () => {