1
0
mirror of https://github.com/SerenityOS/serenity synced 2024-07-09 06:00:45 +00:00
Commit Graph

60412 Commits

Author SHA1 Message Date
Andrew Kaster
77f18cf062 LibCore: Add a rough abstraction class around Mach port rights 2024-04-09 16:43:27 -06:00
Andrew Kaster
4a9546a7c8 AK: Add platform macro for Mach-based operating system environments 2024-04-09 16:43:27 -06:00
Andreas Kling
870a954e11 LibWeb: Implement Element.outerHTML
This piggybacks on the same fragment serialization code that innerHTML
uses, but instead of constructing an imaginary parent element like the
spec asks us to, we just add a separate serialization mode that includes
the context element in the serialized markup.

This makes the image carousel on https://utah.edu/ show up :^)
2024-04-09 18:17:14 -04:00
Andreas Kling
0412e17bac LibWeb: Factor out attribute serialization into a separate function 2024-04-09 18:17:14 -04:00
Andrew Kaster
eefd5edc84 LibWebView: Respect dark mode/light mode TaskManager windows
Suggested-By: Timothy Flynn <trflynn89@pm.me>
2024-04-09 16:15:29 -04:00
Nico Weber
f91d8472ee LibGfx/JPEG2000: Make unimplemented markers in tile-part header fatal 2024-04-09 15:52:00 -04:00
Nico Weber
dbe179f0d5 LibGfx/JPEG2000: Decode tile-part QCD and QCC marker segment data 2024-04-09 15:52:00 -04:00
Nico Weber
8ba7c23165 LibGfx/JPEG2000: Decode QCC marker segment data
I haven't seen any images that set this in the main header, but
Tests/LibGfx/test-inputs/jpeg2000/buggie-gray.jpf sets it in a tile-part
header.
2024-04-09 15:52:00 -04:00
Nico Weber
072457edd8 LibGfx/JPEG2000: Decode tile-part COM marker segment data
We don't do anything with this (except log the contents if
JPEG2000_DEBUG is 1).
2024-04-09 15:52:00 -04:00
Nico Weber
38be93c9a1 LibGfx/JPEG2000: Store some tile and tile part data on context 2024-04-09 15:52:00 -04:00
Nico Weber
0df01dea4a LibGfx/JPEG2000: Add two spec comments 2024-04-09 15:52:00 -04:00
Nico Weber
7b7ef7dcc7 LibGfx/JPEG2000: Allow COD, COC, QCD, QCC, RGN only in first tile-part
(The FIXME was incomplete, it didn't mention RGN also only being valid
in a tile's first tile-part header.)
2024-04-09 15:52:00 -04:00
Nico Weber
1df5c01bfb LibGfx/JPEG2000: Make unimplemented markers in main header fatal
We now implement decoding enough marker segments that we can do this.
2024-04-09 15:52:00 -04:00
Nico Weber
b9677be8a7 LibGfx/JPEG2000: Decode COM marker segment data
We don't do anything with this (except log the contents if
JPEG2000_DEBUG is 1).

The motivation is that we now decode all marker segments that are
used in all JPEG2000 files I've seen so far, allowing us to make
remaining unknown marker types fatal.
2024-04-09 15:52:00 -04:00
Nico Weber
e05791f5dd LibGfx/JPEG2000: Decode QCD marker segment data
We now decode all required main header marker segments :^)
2024-04-09 15:52:00 -04:00
Nico Weber
99c1c685fc LibGfx/JPEG2000: Decode COD marker segment data 2024-04-09 15:52:00 -04:00
Nico Weber
d8811a83c9 LibGfx/JPEG2000: Decode SIZ marker segment data 2024-04-09 15:52:00 -04:00
Nico Weber
259c3fc7d3 LibGfx/JPEG2000: Check tile_part_length ("Psot") validity 2024-04-09 15:52:00 -04:00
Nico Weber
1393719f10 LibGfx/JPEG2000: Fix typo in an error mesage 2024-04-09 10:19:21 +02:00
Nico Weber
6bad4ea275 LibGfx/JPEG2000: Add parsing loop for tile-part headers
We don't interpret most of the marker data yet.

(We do have to interpret the SOT header to be able to skip the
tile data.)
2024-04-09 10:19:21 +02:00
Nico Weber
9eae6b3a90 LibGfx/JPEG2000: Add parsing loop for main header
We don't interpret any of the marker data yet.
2024-04-09 10:19:21 +02:00
Nico Weber
6c9d3f8c46 LibGfx/JPEG2000: Add constants for markers 2024-04-09 10:19:21 +02:00
Linus Groh
cad95ce274 LibJS: Implement Promise.try()
See: https://github.com/tc39/proposal-promise-try
2024-04-09 10:18:35 +02:00
Andreas Kling
2317a8a4eb LibWeb: Incorrectly skip visiting MessagePort::m_worker_event_target
This is a stopgap hack to prevent CI from hanging until we figure out
what's going on.

Bug: https://github.com/SerenityOS/serenity/issues/23899
2024-04-09 09:28:44 +02:00
Sam Atkins
7d43685927 HexEditor: Add option to display offsets in decimal or hexadecimal 2024-04-09 09:24:23 +02:00
Sam Atkins
f6a9ea7265 HexEditor: Add option for showing/hiding the offsets column 2024-04-09 09:24:23 +02:00
Sam Atkins
4640fc2c97 HexEditor: Move some calculations out of HexEditor.h header
These are gradually becoming more complicated, so they don't really make
sense in the header file any more.

No changes, just moving.
2024-04-09 09:24:23 +02:00
Bastiaan van der Plaat
8342525434 LibWeb: Use HTMLOptionElement in select item getter
fix item
2024-04-09 09:23:57 +02:00
Bastiaan van der Plaat
6f84f69677 LibWeb: Add select selected options collection getter 2024-04-09 09:23:57 +02:00
Bastiaan van der Plaat
7372c01786 LibWeb: Add select and options collection remove method 2024-04-09 09:23:57 +02:00
Bastiaan van der Plaat
5decf4b33c LibWeb: Add HTMLOptionsCollection selected index property 2024-04-09 09:23:57 +02:00
Bastiaan van der Plaat
5c277144d8 LibWeb: Add select and option collection set length 2024-04-09 09:23:57 +02:00
Bastiaan van der Plaat
4e5ce7b63e LibWeb: Add select element size property 2024-04-09 09:23:57 +02:00
Matthew Olsson
abb4b6d117 LibJSGCVerifier: Detect missing JS_CELL() calls 2024-04-09 09:13:06 +02:00
Matthew Olsson
5023e5fda3 Spreadsheet: Add calls to JS_{DECLARE,DEFINE}_ALLOCATOR() 2024-04-09 09:13:06 +02:00
Matthew Olsson
97b343f696 WebContent+WebWorker: Add calls to JS_{DECLARE,DEFINE}_ALLOCATOR() 2024-04-09 09:13:06 +02:00
Matthew Olsson
31341b280a LibWeb: Add calls to JS_{DECLARE,DEFINE}_ALLOCATOR() 2024-04-09 09:13:06 +02:00
Matthew Olsson
d62c0fcbdc LibJS: Add calls to JS_{DECLARE,DEFINE}_ALLOCATOR() 2024-04-09 09:13:06 +02:00
Matthew Olsson
312bc94ac9 LibJSGCVerifier: Detect missing JS_DECLARE_ALLOCATOR() calls
C++ classes that inherit from JS::Cell and are leaf classes should have
their own type-specific allocator. We also do this for non-leaf classes
that are constructable from JS.

To do this, JSON messages are passed to communicate information about
each class the Clang tool comes across. This is the only message we have
to worry about for now, but in the future if we want to transmit
different kinds of information, we can make this message format more
generic.
2024-04-09 09:13:06 +02:00
Matthew Olsson
dfce95ab0f LibJSGCVerifier: Support message passing between Clang processes
This allows each Clang process to send JSON messages to the
orchestrating Python process, which aggregates the message and can do
something with them all at the end. This is required because we run
Clang multithreaded to speed up the tool execution.

I did try to add a second frontend tool that accepts all the files at
once, but it was _extremely_ slow, so this is the next best thing.
2024-04-09 09:13:06 +02:00
Matthew Olsson
edf484a5ab LibJS: Force a semicolon after JS_{DECLARE,DEFINE}_ALLOCATOR()
This matches the style of other macros, and prevents IDEs from flagging
the semicolon as unnecessary.
2024-04-09 09:13:06 +02:00
Matthew Olsson
d47f656a3a LibJS+LibWeb: Mark a few variables as IGNORE_USE_IN_ESCAPING_LAMBDA
This is a bit noisy, but it'll be better once we upgrade to C++23.
2024-04-09 09:10:44 +02:00
Matthew Olsson
ff00d21d58 Everywhere: Mark a bunch of function parameters as NOESCAPE
This fixes the relevant warnings when running LibJSGCVerifier. Note that
the analysis is only performed over LibJS-adjacent code, but could be
performed over the entire codebase. That will have to wait for a future
commit.
2024-04-09 09:10:44 +02:00
Matthew Olsson
31c5cdcbd5 LibWeb+Assistant: Do not ref-capture stack vars in deferred lambdas 2024-04-09 09:10:44 +02:00
Matthew Olsson
76fa127cbf LibJSGCVerifier: Detect stack-allocated ref captures in lambdas
For example, consider the following code snippet:

    Vector<Function<void()>> m_callbacks;
    void add_callback(Function<void()> callback)
    {
    	m_callbacks.append(move(callback));
    }

    // Somewhere else...
    void do_something()
    {
    	int a = 10;
    	add_callback([&a] {
            dbgln("a is {}", a);
    	});
    } // Oops, "a" is now destroyed, but the callback in m_callbacks
      // has a reference to it!

We now statically detect the capture of "a" in the lambda above and flag
it as incorrect. Note that capturing the value implicitly with a capture
list of `[&]` would also be detected.

Of course, many functions that accept Function<...> don't store them
anywhere, instead immediately invoking them inside of the function. To
avoid a warning in this case, the parameter can be annotated with
NOESCAPE to indicate that capturing stack variables is fine:

    void do_something_now(NOESCAPE Function<...> callback)
    {
    	callback(...)
    }

Lastly, there are situations where the callback does generally escape,
but where the caller knows that it won't escape long enough to cause any
issues. For example, consider this fake example from LibWeb:

    void do_something()
    {
    	bool is_done = false;
    	HTML::queue_global_task([&] {
            do_some_work();
            is_done = true;
        });
    	HTML::main_thread_event_loop().spin_until([&] {
            return is_done;
        });
    }

In this case, we know that the lambda passed to queue_global_task will
be executed before the function returns, and will not persist
afterwards. To avoid this warning, annotate the type of the capture
with IGNORE_USE_IN_ESCAPING_LAMBDA:

    void do_something()
    {
   	IGNORE_USE_IN_ESCAPING_LAMBDA bool is_done = false;
    	// ...
    }
2024-04-09 09:10:44 +02:00
Andrew Kaster
e5415f6d86 Documentation: Add more specific instructions on how to use the GN build 2024-04-08 18:49:41 -06:00
Bastiaan van der Plaat
820f966b33 Ladybird: Add indentation to options in optgroup in select dropdown 2024-04-08 17:24:48 -04:00
Bastiaan van der Plaat
1475c1810f LibWeb: Add support for select options disabled state 2024-04-08 17:24:48 -04:00
Bastiaan van der Plaat
4408581ee0 LibWeb: Refactor SelectItem to allow selecting options without value
Currently the `<select>` dropdown IPC uses the option value attr to
find which option is selected. This won't work when options don't
have values or when multiple options have the same value. Also the
`SelectItem` contained so weird recursive structures that are
impossible to create with HTML. So I refactored `SelectItem` as a
variant, and gave the options a unique id. The id is send back to
`HTMLSelectElement` so it can find out exactly which option element
is selected.
2024-04-08 17:24:48 -04:00
Aliaksandr Kalenik
94d72c174a LibWeb: Allow executing scripts for iframes with src=about:blank
Fixes https://github.com/SerenityOS/serenity/issues/23836
2024-04-08 21:27:34 +02:00