diff --git a/shell/browser/api/electron_api_web_contents.cc b/shell/browser/api/electron_api_web_contents.cc index 29cc5ad342bc..0ce10289a286 100644 --- a/shell/browser/api/electron_api_web_contents.cc +++ b/shell/browser/api/electron_api_web_contents.cc @@ -2624,6 +2624,9 @@ void WebContents::RestoreHistory( auto navigation_entries = std::make_unique< std::vector>>(); + blink::UserAgentOverride ua_override; + ua_override.ua_string_override = GetUserAgent(); + for (const auto& entry : entries) { content::NavigationEntry* nav_entry = nullptr; if (!gin::Converter::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(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(); diff --git a/spec/api-web-contents-spec.ts b/spec/api-web-contents-spec.ts index 879217e37b06..930272f2ad51 100644 --- a/spec/api-web-contents-spec.ts +++ b/spec/api-web-contents-spec.ts @@ -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', () => {