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 8b9e8be658..1c84a9a1d9 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 3b2e17a81e..24291f212d 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 68140b5e26..dc943218e7 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 06868eea03..e523370042 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 21ebe19267..ba93018c83 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];