Browse Source

fix: set userAgent on navigationHistory restore

Shelley Vohr 3 weeks ago
parent
commit
65f247d0e5
2 changed files with 32 additions and 0 deletions
  1. 7 0
      shell/browser/api/electron_api_web_contents.cc
  2. 25 0
      spec/api-web-contents-spec.ts

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

@@ -2515,6 +2515,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,
@@ -2527,11 +2530,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();

+ 25 - 0
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', () => {