Procházet zdrojové kódy

Ladybird/AppKit: Use LibWeb's history state for history navigation

Timothy Flynn před 1 rokem
rodič
revize
e5c5dcca6a

+ 8 - 7
Ladybird/AppKit/UI/LadybirdWebView.h

@@ -12,7 +12,6 @@
 #include <LibWeb/CSS/PreferredColorScheme.h>
 #include <LibWeb/HTML/ActivateTab.h>
 #include <LibWeb/HTML/AudioPlayState.h>
-#include <LibWeb/HTML/HistoryHandlingBehavior.h>
 #include <LibWebView/Forward.h>
 
 #import <System/Cocoa.h>
@@ -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 <NSMenuDelegate>
@@ -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;
 

+ 25 - 5
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) {

+ 9 - 18
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

+ 5 - 3
Ladybird/AppKit/UI/TabController.h

@@ -8,7 +8,6 @@
 
 #include <AK/Forward.h>
 #include <LibURL/URL.h>
-#include <LibWeb/HTML/HistoryHandlingBehavior.h>
 
 #import <System/Cocoa.h>
 
@@ -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;

+ 21 - 73
Ladybird/AppKit/UI/TabController.mm

@@ -4,7 +4,6 @@
  * SPDX-License-Identifier: BSD-2-Clause
  */
 
-#include <LibWebView/History.h>
 #include <LibWebView/SearchEngine.h>
 #include <LibWebView/URL.h>
 
@@ -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