diff --git a/Ladybird/AppKit/UI/LadybirdWebView.h b/Ladybird/AppKit/UI/LadybirdWebView.h index f0e351c61e..f62ce10e77 100644 --- a/Ladybird/AppKit/UI/LadybirdWebView.h +++ b/Ladybird/AppKit/UI/LadybirdWebView.h @@ -12,7 +12,6 @@ #include #include #include -#include #include #import @@ -29,17 +28,15 @@ - (void)loadURL:(URL::URL const&)url; - (void)onLoadStart:(URL::URL const&)url isRedirect:(BOOL)is_redirect; - (void)onLoadFinish:(URL::URL const&)url; -- (void)onURLUpdated:(URL::URL const&)url - historyBehavior:(Web::HTML::HistoryHandlingBehavior)history_behavior; + +- (void)onURLChange:(URL::URL const&)url; +- (void)onBackNavigationEnabled:(BOOL)back_enabled + forwardNavigationEnabled:(BOOL)forward_enabled; - (void)onTitleChange:(ByteString const&)title; - (void)onFaviconChange:(Gfx::Bitmap const&)bitmap; - (void)onAudioPlayStateChange:(Web::HTML::AudioPlayState)play_state; -- (void)onNavigateBack; -- (void)onNavigateForward; -- (void)onReload; - @end @interface LadybirdWebView : NSClipView @@ -49,6 +46,10 @@ - (void)loadURL:(URL::URL const&)url; - (void)loadHTML:(StringView)html; +- (void)navigateBack; +- (void)navigateForward; +- (void)reload; + - (WebView::ViewImplementation&)view; - (String const&)handle; diff --git a/Ladybird/AppKit/UI/LadybirdWebView.mm b/Ladybird/AppKit/UI/LadybirdWebView.mm index c063892d12..8d2dff143b 100644 --- a/Ladybird/AppKit/UI/LadybirdWebView.mm +++ b/Ladybird/AppKit/UI/LadybirdWebView.mm @@ -128,6 +128,21 @@ struct HideCursor { m_web_view_bridge->load_html(html); } +- (void)navigateBack +{ + m_web_view_bridge->traverse_the_history_by_delta(-1); +} + +- (void)navigateForward +{ + m_web_view_bridge->traverse_the_history_by_delta(1); +} + +- (void)reload +{ + m_web_view_bridge->reload(); +} + - (WebView::ViewImplementation&)view { return *m_web_view_bridge; @@ -282,8 +297,13 @@ static void copy_data_to_clipboard(StringView data, NSPasteboardType pasteboard_ [self.observer onLoadFinish:url]; }; - m_web_view_bridge->on_history_api_push_or_replace = [self](auto const& url, auto history_behavior) { - [self.observer onURLUpdated:url historyBehavior:history_behavior]; + m_web_view_bridge->on_url_change = [self](auto const& url) { + [self.observer onURLChange:url]; + }; + + m_web_view_bridge->on_navigation_buttons_state_changed = [self](auto back_enabled, auto forward_enabled) { + [self.observer onBackNavigationEnabled:back_enabled + forwardNavigationEnabled:forward_enabled]; }; m_web_view_bridge->on_title_change = [self](auto const& title) { @@ -402,15 +422,15 @@ static void copy_data_to_clipboard(StringView data, NSPasteboardType pasteboard_ }; m_web_view_bridge->on_navigate_back = [self]() { - [self.observer onNavigateBack]; + [self navigateBack]; }; m_web_view_bridge->on_navigate_forward = [self]() { - [self.observer onNavigateForward]; + [self navigateForward]; }; m_web_view_bridge->on_refresh = [self]() { - [self.observer onReload]; + [self reload]; }; m_web_view_bridge->on_enter_tooltip_area = [self](auto, auto const& tooltip) { diff --git a/Ladybird/AppKit/UI/Tab.mm b/Ladybird/AppKit/UI/Tab.mm index 33e71d8837..9bf907454c 100644 --- a/Ladybird/AppKit/UI/Tab.mm +++ b/Ladybird/AppKit/UI/Tab.mm @@ -287,10 +287,16 @@ static constexpr CGFloat const WINDOW_HEIGHT = 800; } } -- (void)onURLUpdated:(URL::URL const&)url - historyBehavior:(Web::HTML::HistoryHandlingBehavior)history_behavior +- (void)onURLChange:(URL::URL const&)url { - [[self tabController] onURLUpdated:url historyBehavior:history_behavior]; + [[self tabController] onURLChange:url]; +} + +- (void)onBackNavigationEnabled:(BOOL)back_enabled + forwardNavigationEnabled:(BOOL)forward_enabled +{ + [[self tabController] onBackNavigationEnabled:back_enabled + forwardNavigationEnabled:forward_enabled]; } - (void)onTitleChange:(ByteString const&)title @@ -343,21 +349,6 @@ static constexpr CGFloat const WINDOW_HEIGHT = 800; } } -- (void)onNavigateBack -{ - [[self tabController] navigateBack:nil]; -} - -- (void)onNavigateForward -{ - [[self tabController] navigateForward:nil]; -} - -- (void)onReload -{ - [[self tabController] reload:nil]; -} - #pragma mark - NSWindow - (void)setIsVisible:(BOOL)flag diff --git a/Ladybird/AppKit/UI/TabController.h b/Ladybird/AppKit/UI/TabController.h index 1f6cb17d43..69993ae1ef 100644 --- a/Ladybird/AppKit/UI/TabController.h +++ b/Ladybird/AppKit/UI/TabController.h @@ -8,7 +8,6 @@ #include #include -#include #import @@ -28,8 +27,11 @@ struct TabSettings { - (void)loadHTML:(StringView)html url:(URL::URL const&)url; - (void)onLoadStart:(URL::URL const&)url isRedirect:(BOOL)isRedirect; -- (void)onURLUpdated:(URL::URL const&)url - historyBehavior:(Web::HTML::HistoryHandlingBehavior)history_behavior; + +- (void)onURLChange:(URL::URL const&)url; +- (void)onBackNavigationEnabled:(BOOL)back_enabled + forwardNavigationEnabled:(BOOL)forward_enabled; + - (void)onTitleChange:(ByteString const&)title; - (void)navigateBack:(id)sender; diff --git a/Ladybird/AppKit/UI/TabController.mm b/Ladybird/AppKit/UI/TabController.mm index 027b45930f..278d06c5fb 100644 --- a/Ladybird/AppKit/UI/TabController.mm +++ b/Ladybird/AppKit/UI/TabController.mm @@ -4,7 +4,6 @@ * SPDX-License-Identifier: BSD-2-Clause */ -#include #include #include @@ -29,11 +28,6 @@ static NSString* const TOOLBAR_ZOOM_IDENTIFIER = @"ToolbarZoomIdentifier"; static NSString* const TOOLBAR_NEW_TAB_IDENTIFIER = @"ToolbarNewTabIdentifier"; static NSString* const TOOLBAR_TAB_OVERVIEW_IDENTIFIER = @"ToolbarTabOverviewIdentifer"; -enum class IsHistoryNavigation { - Yes, - No, -}; - @interface LocationSearchField : NSSearchField - (BOOL)becomeFirstResponder; @@ -56,10 +50,10 @@ enum class IsHistoryNavigation { { ByteString m_title; - WebView::History m_history; - IsHistoryNavigation m_is_history_navigation; - TabSettings m_settings; + + bool m_can_navigate_back; + bool m_can_navigate_forward; } @property (nonatomic, strong) NSToolbar* toolbar; @@ -97,8 +91,9 @@ enum class IsHistoryNavigation { [self.toolbar setAllowsUserCustomization:NO]; [self.toolbar setSizeMode:NSToolbarSizeModeRegular]; - m_is_history_navigation = IsHistoryNavigation::No; m_settings = {}; + m_can_navigate_back = false; + m_can_navigate_forward = false; } return self; @@ -118,41 +113,25 @@ enum class IsHistoryNavigation { - (void)onLoadStart:(URL::URL const&)url isRedirect:(BOOL)isRedirect { - if (isRedirect) { - m_history.replace_current(url, m_title); - } - [self setLocationFieldText:url.serialize()]; - - if (m_is_history_navigation == IsHistoryNavigation::Yes) { - m_is_history_navigation = IsHistoryNavigation::No; - } else { - m_history.push(url, m_title); - } - - [self updateNavigationButtonStates]; } -- (void)onURLUpdated:(URL::URL const&)url - historyBehavior:(Web::HTML::HistoryHandlingBehavior)history_behavior +- (void)onURLChange:(URL::URL const&)url { - switch (history_behavior) { - case Web::HTML::HistoryHandlingBehavior::Push: - m_history.push(url, m_title); - break; - case Web::HTML::HistoryHandlingBehavior::Replace: - m_history.replace_current(url, m_title); - break; - } - [self setLocationFieldText:url.serialize()]; +} + +- (void)onBackNavigationEnabled:(BOOL)back_enabled + forwardNavigationEnabled:(BOOL)forward_enabled +{ + m_can_navigate_back = back_enabled; + m_can_navigate_forward = forward_enabled; [self updateNavigationButtonStates]; } - (void)onTitleChange:(ByteString const&)title { m_title = title; - m_history.update_title(m_title); } - (void)zoomIn:(id)sender @@ -175,55 +154,27 @@ enum class IsHistoryNavigation { - (void)navigateBack:(id)sender { - if (!m_history.can_go_back()) { - return; - } - - m_is_history_navigation = IsHistoryNavigation::Yes; - m_history.go_back(); - - auto url = m_history.current().url; - [self loadURL:url]; + [[[self tab] web_view] navigateBack]; } - (void)navigateForward:(id)sender { - if (!m_history.can_go_forward()) { - return; - } - - m_is_history_navigation = IsHistoryNavigation::Yes; - m_history.go_forward(); - - auto url = m_history.current().url; - [self loadURL:url]; + [[[self tab] web_view] navigateForward]; } - (void)reload:(id)sender { - if (m_history.is_empty()) { - return; - } - - m_is_history_navigation = IsHistoryNavigation::Yes; - - auto url = m_history.current().url; - [self loadURL:url]; + [[[self tab] web_view] reload]; } - (void)clearHistory { - m_history.clear(); - [self updateNavigationButtonStates]; + // FIXME: Reimplement clearing history using WebContent's history. } - (void)debugRequest:(ByteString const&)request argument:(ByteString const&)argument { - if (request == "dump-history") { - m_history.dump(); - } else { - [[[self tab] web_view] debugRequest:request argument:argument]; - } + [[[self tab] web_view] debugRequest:request argument:argument]; } - (void)viewSource:(id)sender @@ -298,13 +249,10 @@ enum class IsHistoryNavigation { - (void)updateNavigationButtonStates { auto* navigate_back_button = (NSButton*)[[self navigate_back_toolbar_item] view]; - [navigate_back_button setEnabled:m_history.can_go_back()]; + [navigate_back_button setEnabled:m_can_navigate_back]; auto* navigate_forward_button = (NSButton*)[[self navigate_forward_toolbar_item] view]; - [navigate_forward_button setEnabled:m_history.can_go_forward()]; - - auto* reload_button = (NSButton*)[[self reload_toolbar_item] view]; - [reload_button setEnabled:!m_history.is_empty()]; + [navigate_forward_button setEnabled:m_can_navigate_forward]; } - (void)showTabOverview:(id)sender @@ -357,7 +305,7 @@ enum class IsHistoryNavigation { - (void)dumpHistory:(id)sender { - [self debugRequest:"dump-history" argument:""]; + [self debugRequest:"dump-session-history" argument:""]; } - (void)dumpLocalStorage:(id)sender