Explorar o código

UI/Qt: Spoof user agent across all tabs

Tim Ledbetter hai 1 ano
pai
achega
fdd2f9ebbd
Modificáronse 4 ficheiros con 25 adicións e 5 borrados
  1. 11 4
      Ladybird/Qt/BrowserWindow.cpp
  2. 5 0
      Ladybird/Qt/BrowserWindow.h
  3. 7 0
      Ladybird/Qt/Tab.cpp
  4. 2 1
      Ladybird/Qt/Tab.h

+ 11 - 4
Ladybird/Qt/BrowserWindow.cpp

@@ -386,12 +386,15 @@ BrowserWindow::BrowserWindow(Vector<URL::URL> const& initial_urls, WebView::Cook
         user_agent_group->addAction(action);
         spoof_user_agent_menu->addAction(action);
         QObject::connect(action, &QAction::triggered, this, [this, user_agent] {
-            debug_request("spoof-user-agent", user_agent);
-            debug_request("clear-cache"); // clear the cache to ensure requests are re-done with the new user agent
+            for_each_tab([user_agent](auto& tab) {
+                tab.set_user_agent_string(user_agent);
+            });
+            set_user_agent_string(user_agent);
         });
         return action;
     };
 
+    set_user_agent_string(Web::default_user_agent);
     auto* disable_spoofing = add_user_agent("Disabled"sv, Web::default_user_agent);
     disable_spoofing->setChecked(true);
     for (auto const& user_agent : WebView::user_agents)
@@ -404,8 +407,11 @@ BrowserWindow::BrowserWindow(Vector<URL::URL> const& initial_urls, WebView::Cook
     QObject::connect(custom_user_agent_action, &QAction::triggered, this, [this, disable_spoofing] {
         auto user_agent = QInputDialog::getText(this, "Custom User Agent", "Enter User Agent:");
         if (!user_agent.isEmpty()) {
-            debug_request("spoof-user-agent", ak_byte_string_from_qstring(user_agent));
-            debug_request("clear-cache"); // clear the cache to ensure requests are re-done with the new user agent
+            auto user_agent_byte_string = ak_byte_string_from_qstring(user_agent);
+            for_each_tab([&](auto& tab) {
+                tab.set_user_agent_string(user_agent_byte_string);
+            });
+            set_user_agent_string(user_agent_byte_string);
         } else {
             disable_spoofing->activate(QAction::Trigger);
         }
@@ -690,6 +696,7 @@ void BrowserWindow::initialize_tab(Tab* tab)
     tab->set_scripting(m_enable_scripting_action->isChecked());
     tab->set_block_popups(m_block_pop_ups_action->isChecked());
     tab->set_same_origin_policy(m_enable_same_origin_policy_action->isChecked());
+    tab->set_user_agent_string(user_agent_string());
 }
 
 void BrowserWindow::activate_tab(int index)

+ 5 - 0
Ladybird/Qt/BrowserWindow.h

@@ -164,6 +164,9 @@ private:
 
     void set_window_rect(Optional<Web::DevicePixels> x, Optional<Web::DevicePixels> y, Optional<Web::DevicePixels> width, Optional<Web::DevicePixels> height);
 
+    ByteString user_agent_string() const { return m_user_agent_string; }
+    void set_user_agent_string(ByteString const& user_agent_string) { m_user_agent_string = user_agent_string; }
+
     QScreen* m_current_screen;
     double m_device_pixel_ratio { 0 };
 
@@ -189,6 +192,8 @@ private:
     QAction* m_block_pop_ups_action { nullptr };
     QAction* m_enable_same_origin_policy_action { nullptr };
 
+    ByteString m_user_agent_string {};
+
     SettingsDialog* m_settings_dialog { nullptr };
 
     WebView::CookieJar& m_cookie_jar;

+ 7 - 0
Ladybird/Qt/Tab.cpp

@@ -976,4 +976,11 @@ void Tab::set_scripting(bool enabled)
     debug_request("scripting", enabled ? "on" : "off");
 }
 
+void Tab::set_user_agent_string(ByteString const& user_agent)
+{
+    debug_request("spoof-user-agent", user_agent);
+    // Clear the cache to ensure requests are re-done with the new user agent.
+    debug_request("clear-cache");
+}
+
 }

+ 2 - 1
Ladybird/Qt/Tab.h

@@ -41,7 +41,7 @@ public:
     void forward();
     void reload();
 
-    void debug_request(ByteString const& request, ByteString const& argument);
+    void debug_request(ByteString const& request, ByteString const& argument = "");
 
     void open_file();
     void update_reset_zoom_button();
@@ -69,6 +69,7 @@ public:
     void set_line_box_borders(bool);
     void set_same_origin_policy(bool);
     void set_scripting(bool);
+    void set_user_agent_string(ByteString const&);
 
 public slots:
     void focus_location_editor();