From e6965b11e43bedce89617e54e7ee4f23447f65b6 Mon Sep 17 00:00:00 2001 From: Timothy Flynn Date: Tue, 17 Sep 2024 15:54:34 -0400 Subject: [PATCH] UI/AppKit: Do not open child web views with an about:blank URL This is overriding the URL passed to e.g. window.open and link clicks on an element. Note: This alone is not enough to support such use cases. We will also need to actually implement opening child web views. But getting this fix out of the way first makes that patch a bit simpler. --- Ladybird/AppKit/Application/ApplicationDelegate.mm | 5 ++++- Ladybird/AppKit/UI/LadybirdWebView.h | 2 +- Ladybird/AppKit/UI/LadybirdWebView.mm | 2 +- Ladybird/AppKit/UI/Tab.mm | 2 +- Ladybird/AppKit/UI/TabController.mm | 2 +- 5 files changed, 8 insertions(+), 5 deletions(-) diff --git a/Ladybird/AppKit/Application/ApplicationDelegate.mm b/Ladybird/AppKit/Application/ApplicationDelegate.mm index 8b9e8be658b..1c84a9a1d97 100644 --- a/Ladybird/AppKit/Application/ApplicationDelegate.mm +++ b/Ladybird/AppKit/Application/ApplicationDelegate.mm @@ -97,7 +97,10 @@ activateTab:(Web::HTML::ActivateTab)activate_tab { auto* controller = [self createNewTab:activate_tab fromTab:tab]; - [controller loadURL:url.value_or(WebView::Application::chrome_options().new_tab_page_url)]; + + if (url.has_value()) { + [controller loadURL:*url]; + } return controller; } diff --git a/Ladybird/AppKit/UI/LadybirdWebView.h b/Ladybird/AppKit/UI/LadybirdWebView.h index 3b2e17a81e3..24291f212d9 100644 --- a/Ladybird/AppKit/UI/LadybirdWebView.h +++ b/Ladybird/AppKit/UI/LadybirdWebView.h @@ -20,7 +20,7 @@ @protocol LadybirdWebViewObserver -- (String const&)onCreateNewTab:(URL::URL const&)url +- (String const&)onCreateNewTab:(Optional const&)url activateTab:(Web::HTML::ActivateTab)activate_tab; - (String const&)onCreateNewTab:(StringView)html diff --git a/Ladybird/AppKit/UI/LadybirdWebView.mm b/Ladybird/AppKit/UI/LadybirdWebView.mm index 68140b5e262..dc943218e76 100644 --- a/Ladybird/AppKit/UI/LadybirdWebView.mm +++ b/Ladybird/AppKit/UI/LadybirdWebView.mm @@ -323,7 +323,7 @@ static void copy_data_to_clipboard(StringView data, NSPasteboardType pasteboard_ return String {}; } // FIXME: Create a child tab that re-uses the ConnectionFromClient of the parent tab - return [self.observer onCreateNewTab:"about:blank"sv activateTab:activate_tab]; + return [self.observer onCreateNewTab:{} activateTab:activate_tab]; }; m_web_view_bridge->on_request_web_content = [weak_self]() { diff --git a/Ladybird/AppKit/UI/Tab.mm b/Ladybird/AppKit/UI/Tab.mm index 06868eea033..e5233700428 100644 --- a/Ladybird/AppKit/UI/Tab.mm +++ b/Ladybird/AppKit/UI/Tab.mm @@ -268,7 +268,7 @@ static constexpr CGFloat const WINDOW_HEIGHT = 800; #pragma mark - LadybirdWebViewObserver -- (String const&)onCreateNewTab:(URL::URL const&)url +- (String const&)onCreateNewTab:(Optional const&)url activateTab:(Web::HTML::ActivateTab)activate_tab { auto* delegate = (ApplicationDelegate*)[NSApp delegate]; diff --git a/Ladybird/AppKit/UI/TabController.mm b/Ladybird/AppKit/UI/TabController.mm index 21ebe192674..ba93018c830 100644 --- a/Ladybird/AppKit/UI/TabController.mm +++ b/Ladybird/AppKit/UI/TabController.mm @@ -214,7 +214,7 @@ static NSString* const TOOLBAR_TAB_OVERVIEW_IDENTIFIER = @"ToolbarTabOverviewIde self.tab.titlebarAppearsTransparent = NO; - [delegate createNewTab:OptionalNone {} + [delegate createNewTab:WebView::Application::chrome_options().new_tab_page_url fromTab:[self tab] activateTab:Web::HTML::ActivateTab::Yes];