ソースを参照

LibWebView: Log the result of taking screenshots to Inspector's console

It probably isn't obvious that screenshots are saved to the user's
Downloads folder, so add a console message to inform them.
Timothy Flynn 1 年間 前
コミット
42c0ac9352

+ 16 - 0
Base/res/ladybird/inspector.css

@@ -204,6 +204,14 @@ details > :not(:first-child) {
         color: cyan;
     }
 
+    .console-message {
+        color: lightskyblue;
+    }
+
+    .console-warning {
+        color: orange;
+    }
+
     .console-input {
         background-color: rgb(57, 57, 57);
     }
@@ -218,6 +226,14 @@ details > :not(:first-child) {
         color: blue;
     }
 
+    .console-message {
+        color: blue;
+    }
+
+    .console-warning {
+        color: darkorange;
+    }
+
     .console-input {
         background-color: rgb(229, 229, 229);
     }

+ 22 - 2
Userland/Libraries/LibWebView/InspectorClient.cpp

@@ -249,7 +249,10 @@ void InspectorClient::context_menu_screenshot_dom_node()
 {
     VERIFY(m_context_menu_data.has_value());
 
-    m_content_web_view.take_dom_node_screenshot(m_context_menu_data->dom_node_id).release_value_but_fixme_should_propagate_errors();
+    if (auto result = m_content_web_view.take_dom_node_screenshot(m_context_menu_data->dom_node_id); result.is_error())
+        append_console_warning(MUST(String::formatted("Warning: {}", result.error())));
+    else
+        append_console_message(MUST(String::formatted("Screenshot saved to: {}", result.value())));
 
     m_context_menu_data.clear();
 }
@@ -645,13 +648,30 @@ void InspectorClient::handle_console_messages(i32 start_index, ReadonlySpan<Depr
 void InspectorClient::append_console_source(StringView source)
 {
     StringBuilder builder;
-
     builder.append("<span class=\"console-prompt\">&gt;&nbsp;</span>"sv);
     builder.append(MUST(JS::MarkupGenerator::html_from_source(source)));
 
     append_console_output(builder.string_view());
 }
 
+void InspectorClient::append_console_message(StringView message)
+{
+    StringBuilder builder;
+    builder.append("<span class=\"console-prompt\">#&nbsp;</span>"sv);
+    builder.appendff("<span class=\"console-message\">{}</span>", message);
+
+    append_console_output(builder.string_view());
+}
+
+void InspectorClient::append_console_warning(StringView warning)
+{
+    StringBuilder builder;
+    builder.append("<span class=\"console-prompt\">#&nbsp;</span>"sv);
+    builder.appendff("<span class=\"console-warning\">{}</span>", warning);
+
+    append_console_output(builder.string_view());
+}
+
 void InspectorClient::append_console_output(StringView html)
 {
     auto html_base64 = MUST(encode_base64(html.bytes()));

+ 2 - 0
Userland/Libraries/LibWebView/InspectorClient.h

@@ -53,6 +53,8 @@ private:
     void handle_console_messages(i32 start_index, ReadonlySpan<DeprecatedString> message_types, ReadonlySpan<DeprecatedString> messages);
 
     void append_console_source(StringView);
+    void append_console_message(StringView);
+    void append_console_warning(StringView);
     void append_console_output(StringView);
     void clear_console_output();
 

+ 6 - 10
Userland/Libraries/LibWebView/ViewImplementation.cpp

@@ -5,7 +5,6 @@
  */
 
 #include <AK/Error.h>
-#include <AK/LexicalPath.h>
 #include <AK/String.h>
 #include <LibCore/DateTime.h>
 #include <LibCore/StandardPaths.h>
@@ -394,7 +393,7 @@ void ViewImplementation::handle_web_content_process_crash()
     load_html(builder.to_deprecated_string());
 }
 
-static ErrorOr<void> save_screenshot(Gfx::ShareableBitmap const& bitmap)
+static ErrorOr<LexicalPath> save_screenshot(Gfx::ShareableBitmap const& bitmap)
 {
     if (!bitmap.is_valid())
         return Error::from_string_view("Failed to take a screenshot"sv);
@@ -407,10 +406,10 @@ static ErrorOr<void> save_screenshot(Gfx::ShareableBitmap const& bitmap)
     auto screenshot_file = TRY(Core::File::open(path.string(), Core::File::OpenMode::Write));
     TRY(screenshot_file->write_until_depleted(encoded));
 
-    return {};
+    return path;
 }
 
-ErrorOr<void> ViewImplementation::take_screenshot(ScreenshotType type)
+ErrorOr<LexicalPath> ViewImplementation::take_screenshot(ScreenshotType type)
 {
     Gfx::ShareableBitmap bitmap;
 
@@ -424,16 +423,13 @@ ErrorOr<void> ViewImplementation::take_screenshot(ScreenshotType type)
         break;
     }
 
-    TRY(save_screenshot(bitmap));
-    return {};
+    return save_screenshot(bitmap);
 }
 
-ErrorOr<void> ViewImplementation::take_dom_node_screenshot(i32 node_id)
+ErrorOr<LexicalPath> ViewImplementation::take_dom_node_screenshot(i32 node_id)
 {
     auto bitmap = client().take_dom_node_screenshot(node_id);
-    TRY(save_screenshot(bitmap));
-
-    return {};
+    return save_screenshot(bitmap);
 }
 
 void ViewImplementation::set_user_style_sheet(String source)

+ 3 - 2
Userland/Libraries/LibWebView/ViewImplementation.h

@@ -9,6 +9,7 @@
 
 #include <AK/Forward.h>
 #include <AK/Function.h>
+#include <AK/LexicalPath.h>
 #include <AK/String.h>
 #include <LibGfx/Forward.h>
 #include <LibGfx/StandardCursor.h>
@@ -95,8 +96,8 @@ public:
         Visible,
         Full,
     };
-    ErrorOr<void> take_screenshot(ScreenshotType);
-    ErrorOr<void> take_dom_node_screenshot(i32);
+    ErrorOr<LexicalPath> take_screenshot(ScreenshotType);
+    ErrorOr<LexicalPath> take_dom_node_screenshot(i32);
 
     void set_user_style_sheet(String source);
     // Load Native.css as the User style sheet, which attempts to make WebView content look as close to