diff --git a/Ladybird/AppKit/Application/ApplicationDelegate.mm b/Ladybird/AppKit/Application/ApplicationDelegate.mm index fcbc5cc6755..70dd2a0e592 100644 --- a/Ladybird/AppKit/Application/ApplicationDelegate.mm +++ b/Ladybird/AppKit/Application/ApplicationDelegate.mm @@ -32,6 +32,7 @@ Web::CSS::PreferredColorScheme m_preferred_color_scheme; Web::CSS::PreferredContrast m_preferred_contrast; Web::CSS::PreferredMotion m_preferred_motion; + ByteString m_navigator_compatibility_mode; WebView::SearchEngine m_search_engine; } @@ -92,6 +93,7 @@ m_preferred_color_scheme = Web::CSS::PreferredColorScheme::Auto; m_preferred_contrast = Web::CSS::PreferredContrast::Auto; m_preferred_motion = Web::CSS::PreferredMotion::Auto; + m_navigator_compatibility_mode = "chrome"; m_search_engine = WebView::default_search_engine(); // Reduce the tooltip delay, as the default delay feels quite long. @@ -663,6 +665,23 @@ [spoof_user_agent_menu_item setSubmenu:spoof_user_agent_menu]; [submenu addItem:spoof_user_agent_menu_item]; + + auto* navigator_compatibility_mode_menu = [[NSMenu alloc] init]; + auto add_navigator_compatibility_mode = [navigator_compatibility_mode_menu](ByteString name) { + [navigator_compatibility_mode_menu addItem:[[NSMenuItem alloc] initWithTitle:Ladybird::string_to_ns_string(name) + action:@selector(setNavigatorCompatibilityMode:) + keyEquivalent:@""]]; + }; + add_navigator_compatibility_mode("Chrome"); + add_navigator_compatibility_mode("Gecko"); + add_navigator_compatibility_mode("WebKit"); + + auto* navigator_compatibility_mode_menu_item = [[NSMenuItem alloc] initWithTitle:@"Navigator Compatibility Mode" + action:nil + keyEquivalent:@""]; + [navigator_compatibility_mode_menu_item setSubmenu:navigator_compatibility_mode_menu]; + + [submenu addItem:navigator_compatibility_mode_menu_item]; [submenu addItem:[NSMenuItem separatorItem]]; [submenu addItem:[[NSMenuItem alloc] initWithTitle:@"Enable Scripting" diff --git a/Ladybird/AppKit/UI/TabController.h b/Ladybird/AppKit/UI/TabController.h index 69993ae1efa..2ea99895c2c 100644 --- a/Ladybird/AppKit/UI/TabController.h +++ b/Ladybird/AppKit/UI/TabController.h @@ -17,6 +17,7 @@ struct TabSettings { BOOL block_popups { YES }; BOOL same_origin_policy_enabled { NO }; ByteString user_agent_name { "Disabled"sv }; + ByteString navigator_compatibility_mode { "chrome"sv }; }; @interface TabController : NSWindowController diff --git a/Ladybird/AppKit/UI/TabController.mm b/Ladybird/AppKit/UI/TabController.mm index 437bdb44c87..c190d364a3e 100644 --- a/Ladybird/AppKit/UI/TabController.mm +++ b/Ladybird/AppKit/UI/TabController.mm @@ -367,6 +367,14 @@ static NSString* const TOOLBAR_TAB_OVERVIEW_IDENTIFIER = @"ToolbarTabOverviewIde [self debugRequest:"clear-cache" argument:""]; // clear the cache to ensure requests are re-done with the new user agent } +- (void)setNavigatorCompatibilityMode:(NSMenuItem*)sender +{ + ByteString const compatibility_mode = [[[sender title] lowercaseString] UTF8String]; + m_settings.navigator_compatibility_mode = compatibility_mode; + + [self debugRequest:"navigator-compatibility-mode" argument:compatibility_mode]; +} + #pragma mark - Properties - (NSButton*)create_button:(NSImageName)image @@ -574,6 +582,8 @@ static NSString* const TOOLBAR_TAB_OVERVIEW_IDENTIFIER = @"ToolbarTabOverviewIde [item setState:m_settings.same_origin_policy_enabled ? NSControlStateValueOn : NSControlStateValueOff]; } else if ([item action] == @selector(setUserAgentSpoof:)) { [item setState:(m_settings.user_agent_name == [[item title] UTF8String]) ? NSControlStateValueOn : NSControlStateValueOff]; + } else if ([item action] == @selector(setNavigatorCompatibilityMode:)) { + [item setState:(m_settings.navigator_compatibility_mode == [[[item title] lowercaseString] UTF8String]) ? NSControlStateValueOn : NSControlStateValueOff]; } return YES;