Commit graph

44639 commits

Author SHA1 Message Date
Filiph Sandström
ace44dc13b Ladybird: Hide TabBar if count <= 1 2022-12-25 07:58:58 -07:00
Andreas Kling
74c71804c7 Ladybird: Add "View Source" menu action (Ctrl+U) 2022-12-25 07:58:58 -07:00
Thitat Auareesuksakul
1400a160bc Ladybird: Set singleStep for scroll bars in WebView
Sets singleStep to 24px, this allows you to scroll using your mouse
scroll wheel :^)
2022-12-25 07:58:58 -07:00
Thitat Auareesuksakul
d89fbf3aa0 Ladybird: Set pageStep for scroll bars in WebView
This allows PageUp/PageDown keys to scroll 1 viewport size at a time.
This also fixes the scroll bar drag handle to be a correct length.
2022-12-25 07:58:58 -07:00
Andreas Kling
096164ea1a Ladybird: Revert accidentally commited local settings 2022-12-25 07:58:58 -07:00
Andreas Kling
487544d7b4 Ladybird: Port over part of the "Debug" menu from the SerenityOS browser
This is pretty messy, but we have to start somewhere. Eventually we
should find a way to share this code with SerenityOS.
2022-12-25 07:58:58 -07:00
David Gannerud
eea012472e Ladybird: Prevent loading of invalid URL
Loading invalid URL will result in a crash.
2022-12-25 07:58:58 -07:00
Andreas Kling
b97c74331c Ladybird: Don't include scrollbars in viewport rect size 2022-12-25 07:58:58 -07:00
Andreas Kling
a08e83e2cc Ladybird: Check for errors while decoding favicons 2022-12-25 07:58:58 -07:00
Andreas Kling
50b3672f52 Ladybird: Add keyboard shortcut for focusing the location edit (Ctrl+L) 2022-12-25 07:58:58 -07:00
Andreas Kling
303fda074a Ladybird: Fix build with Qt 6.2.4 2022-12-25 07:58:58 -07:00
Matthew Costa
7681ef25da Ladybird: Expanded toolbar with browser history and home button
This patch takes the browser history code from the Serenity browser and
wires it up to the QT interface. This is tied in with a few extra
toolbar buttons associated with each tab.
2022-12-25 07:58:58 -07:00
Matthew Costa
67ab6dd2e6 Ladybird: Allow browser tabs to be closed
This is a small patch which wires up the tab close button.
2022-12-25 07:58:58 -07:00
Matthew Costa
8af5b49cba Ladybird: Rudimentary tabbed browsing support
This patch removes the browser WebView from the window and places it
inside a Tab object, all wrapped up in a QT tab control. So far you can
create tabs, but can't close them.
2022-12-25 07:58:58 -07:00
Thitat Auareesuksakul
ec44691b56 Ladybird: Add basic cursor shape support in WebView 2022-12-25 07:58:58 -07:00
Andreas Kling
a7cb558783 Ladybird: Fix broken favicon conversion from Gfx::Bitmap to QPixmap 2022-12-25 07:58:58 -07:00
Alfonso Saavedra "Son Link
48de1fb1b1 Ladybird: Added Arch Linux/Manjaro required packages to build 2022-12-25 07:58:58 -07:00
Andreas Kling
f96b53f118 Ladybird: Stop using deprecated Qt API and re-enable deprecated warnings 2022-12-25 07:58:58 -07:00
Andreas Kling
419d3ec646 Ladybird: Use QtNetwork for HTTP and HTTPS requests
Until we can get our own RequestServer infrastructure up and running,
running the TLS and HTTP code in-process was causing lots of crashes
due to unexpected reentrancy via nested event loops.

This patch adds a simple backend for HTTP and HTTPS requests that simply
funnels them through QNetworkAccessManager.
2022-12-25 07:58:58 -07:00
Andreas Kling
69d264828f Ladybird: Add a "Reload" action to reload the current URL 2022-12-25 07:58:58 -07:00
Matthew Costa
7bf3010185 Ladybird: Trigger browser to quit when the main window is closed
This patch adds an event handler to the main window which allows it to
respond to a user closing the window. This event is then passed on to
the LibCore event loop, which allows the application quit itself.
Previously the application would hang, only running in the background,
until killed by an external force.
2022-12-25 07:58:58 -07:00
Keir Davis
95e3e06a1e Ladybird: Add Favicon to the window 2022-12-25 07:58:58 -07:00
Matthew Costa
47d7f1efec Ladybird: Apply inverse image scaling to ensure WebView renders at 1:1
On high-dpi systems QT will automatically scale up painting operations.
This results in an ugly blurry browser window surrounded by a nicely
scaled window frame. This patch applies an inverse scale to the WebView
widget, ensuring the painting and mouse events are lined up and draw
with a 1:1 pixel ratio with respect to the display's device pixels.
2022-12-25 07:58:58 -07:00
Timothy Flynn
9edd334beb Ladybird/Meta: Add libgl1-mesa-dev to build dependencies
Without this package, CMake fails with the error:

    Could NOT find OpenGL (missing: OPENGL_INCLUDE_DIR)

This package is listed in Qt's requirements here:
https://doc.qt.io/qt-6/linux.html#requirements-for-development-host
2022-12-25 07:58:58 -07:00
Andreas Kling
874e73e0c9 Ladybird/WebView: Apply viewport scroll offset to mouse event coordinate 2022-12-25 07:58:58 -07:00
Andreas Kling
96170a4f24 Ladybird/Meta: QT => Qt in the README :^) 2022-12-25 07:58:58 -07:00
Andrew Kaster
74fda4aff5 Ladybird/Meta: Convert to CMake build 2022-12-25 07:58:58 -07:00
Andreas Kling
da19b78dea Ladybird: Don't set a fixed height on the location edit 2022-12-25 07:58:58 -07:00
Andreas Kling
f5d033b8ba Ladybird: Show the web page title in the window titlebar :^) 2022-12-25 07:58:58 -07:00
Andreas Kling
8b7000e151 Ladybird: Add a location bar and allow navigating to new pages :^) 2022-12-25 07:58:58 -07:00
Andreas Kling
88d256c109 Ladybird: Show hovered link URLs in the status bar :^) 2022-12-25 07:58:58 -07:00
Andreas Kling
9b8fe16e3d Ladybird: Plumb Qt mouse events into LibWeb 2022-12-25 07:58:58 -07:00
Andreas Kling
f16ba7945a Ladybird: Make HTTPS loads default to port 443 instead of 80 :^) 2022-12-25 07:58:58 -07:00
Andreas Kling
80526625e8 Ladybird: Basic scrolling support 2022-12-25 07:58:58 -07:00
Andreas Kling
1eb653115b Ladybird: Initial import :^) 2022-12-25 07:58:58 -07:00
Xexxa
26fb41d1f8 Base: Adjust emoji
🥕 - U+1F955 CARROT
Add some shadow
🔝 - U+1F51D TOP ARROW
Adjust "o" in emoji
2022-12-25 15:50:58 +01:00
Xexxa
b89bdd9497 Base: Add more emoji
💞 - U+1F49E REVOLVING HEARTS
🧅 - U+1F9C5 ONION
🎾 - U+1F3BE TENNIS
🛷 - U+1F6F7 SLED
👛 - U+1F45B PURSE
🎼 - U+1F3BC MUSICAL SCORE
🧻 - U+1F9FB ROLL OF PAPER
㊗️ - U+3297 JAPANESE “CONGRATULATIONS” BUTTON
❤️‍🩹 - U+2764 U+200D U+1FA79 MENDING HEART
👩‍❤️‍👩 - U+1F469 U+200D U+2764 U+200D U+1F469
COUPLE WITH HEART: WOMAN, WOMAN
👨‍👩‍👦 - U+1F468 U+200D U+1F469 U+200D U+1F466
FAMILY: MAN, WOMAN, BOY
👨‍👩‍👧 - U+1F468 U+200D U+1F469 U+200D U+1F467
FAMILY: MAN, WOMAN, GIRL
👨‍👨‍👦 - U+1F468 U+200D U+1F468 U+200D U+1F466
FAMILY: MAN, MAN, BOY
👨‍👨‍👧 - U+1F468 U+200D U+1F468 U+200D U+1F467
FAMILY: MAN, MAN, GIRL
👩‍👩‍👦 - U+1F469 U+200D U+1F469 U+200D U+1F466
FAMILY: WOMAN, WOMAN, BOY
👩‍👩‍👧 - U+1F469 U+200D U+1F469 U+200D U+1F467
FAMILY: WOMAN, WOMAN, GIRL
👨‍👦 - U+1F468 U+200D U+1F466 FAMILY: MAN, BOY
👨‍👧 - U+1F468 U+200D U+1F467 FAMILY: MAN, GIRL
👨‍👧‍👦 - U+1F468 U+200D U+1F467 U+200D U+1F466
FAMILY: MAN, GIRL, BOY
👨‍👧‍👧 - U+1F468 U+200D U+1F467 U+200D U+1F467
FAMILY: MAN, GIRL, GIRL
🪒 - U+1FA92 RAZOR
2022-12-25 15:50:58 +01:00
Jelle Raaijmakers
ae82b14e59 LibGL+LibWeb: Remove WebGL-specific API from GLContext
The OpenGL API has ways to retrieve these values, so let's make sure to
implement them. :^)
2022-12-25 15:48:59 +01:00
Aayush
bc1293925a Hackstudio: Use `GUI::TextEditor' actions for cut/copy/paste buttons
This fixes a bug where hackstudio's language server will crash upon
clicking the 'cut' button when no text is selected.  This was because
the actions were not disabled on empty selection.

We now disable the actions depending on if there is empty selection
inside current tab. We update the cut/copy/paste buttons' actions when
changing tabs.
2022-12-25 15:40:46 +01:00
MacDue
2b1342b120 LibWeb: Remove done gradient painting TODO
This code is already generalised to every gradient in existence.
2022-12-25 15:35:31 +01:00
MacDue
f2fe3245cf LibWeb: Speed up gradient painting quite a lot
Previously gradient painting was dominated by the clipping checks in
Painter::set_pixel(). This commit changes gradient painting to use the
new Painter::fill_pixels() function (which does all these checks outside
the hot loop).

With this change gradient painting drops from 96% of the profile to 51%
when scrolling around on gradients.html. A nice 45% reduction :^)
2022-12-25 15:35:31 +01:00
MacDue
ca01017f32 LibGfx: Add Painter::fill_pixels()
This function fills a region of pixels with the result of a callback
function. This is an alternative to a for loop that repeatedly calls
Painter::set_pixel(), which can get very expensive due to the clipping
checks set_pixel() does each call.
2022-12-25 15:35:31 +01:00
Luke Wilde
7e701f6256 LibWeb: Keep unhandledrejection event promises alive when task is queued
This is fixed by making the "about to be notified rejected promises
list" use JS::Handle instead of JS::NonnullGCPtr. This UAF happens
because notify_about_rejected_promises makes a local copy of this list,
empties the member variable list and then moves the local copy into a
JS::SafeFunction lambda. JS::SafeFunction can only see GC pointers that
are in its storage, not external storage.

Example exploit (requires fixed microtask timing by removing the dummy
execution context):
```html
<script>
Promise.reject(new Error);

// Exit the script block, causing a microtask checkpoint and thus
// queuing of a task to fire the unhandled rejection event for the
// above promise.
// During the time after being queued but before being ran, these
// promises are not kept alive. This is because JS::SafeFunction cannot
// see into a Vector, meaning it can't visit the stored NonnullGCPtrs.
</script>

<script defer>
// Cause a garbage collection, destroying the above promise.
const b = [];
for (var i = 0; i < 200000; i++)
    b.push({});

// Some time after this script block, the queued unhandled rejection
// event task will fire, with the event object containing the dead
// promise.
window.onunhandledrejection = (event) => {
    let value = event.promise;
    console.log(value);
}
</script>
```
2022-12-25 15:32:51 +01:00
Timothy Flynn
2334b4cebd Meta: Move UCD/CLDR/TZDB downloaded artifacts to Build/caches
They currently reside under Build/<arch>, meaning that they would be
redownloaded for each architecture/toolchain build combo. Move them to a
location that can be re-used for all builds.
2022-12-24 09:46:28 -05:00
Timothy Flynn
186accb81d Meta: Add downloaded artifact caches to nightly static analysis builds 2022-12-24 09:46:28 -05:00
Timothy Flynn
fba1569eaf Meta: Use correct cache key for CLDR data during CI
Not a huge deal because this at least would still differ from the UCD
cache due to the locale_data.cmake. But this will use the same cache key
as other CI jobs.
2022-12-24 09:46:28 -05:00
Andreas Kling
32e35a02f9 LibWeb: Apply CSS text-transform during layout
Previously we were doing this at the painting stage, which meant that
layout potentially used the wrong glyphs when measuring text.

This would lead to incorrect layout metrics and was visible on the
HTML5Test score display, for example. :^)
2022-12-24 12:27:46 +01:00
Kampsjaak
cf47c850e7 TextEditor: Add option to open the current file in File Manager
This change adds functionality to open the current file in the File
Manager from the File menu or through a button on the toolbar. If
there is no saved data then the functionality is disabled.
2022-12-23 19:20:53 -05:00
Yedaya Katsman
c2655d3733 LibSQL: Output a more specific error on failed socket creation
This can fail if /run/user/$pid/ doesn't exist, which can happen on wsl
without systemd.
2022-12-23 23:31:07 +01:00
Thomas Keppler
6805f71a83 pro: Add ability to log request/response metadata for HTTP URLs
In order to debug WebServer and responses we can't handle yet, it's
beneficial to being able to see what we request and what we get back.
As a first measure, we just log URL, response code, reason phrase and
headers.
2022-12-23 23:29:57 +01:00