Age | Commit message (Collapse) | Author |
|
More presentational attribute stuff. HN looking more and more like it's
supposed to. :^)
|
|
I think maybe this is only supposed to happen in quirks mode but I'm
not entirely sure. This makes "<center><table>..." behave as expected.
|
|
|
|
- Parsing invalid JSON no longer asserts
Instead of asserting when coming across malformed JSON,
JsonParser::parse now returns an Optional<JsonValue>.
- Disallow trailing commas in JSON objects and arrays
- No longer parse 'undefined', as that is a purely JS thing
- No longer allow non-whitespace after anything consumed by the initial
parse() call. Examples of things that were valid and no longer are:
- undefineddfz
- {"foo": 1}abcd
- [1,2,3]4
- JsonObject.for_each_member now iterates in original insertion order
|
|
|
|
Remove char mapping logic and constant character map.
|
|
|
|
|
|
Change key paint to more like a real key :)
|
|
|
|
If two rules have equal specificity, they should be applied in the
order in which we encountered them.
|
|
|
|
|
|
No need to check for presence of the href attribute as that is already
checked by enclosing_link_element().
|
|
If we don't do this, something like "a:visited" is parsed as "a" which
may then take precedence over a previous "a:link" etc.
|
|
Table row layout is now split into two phases:
1. Compute all the column widths (even taking colspan into account!)
2. Place all cells at the correct x,y offsets based on column widths.
Both phases visit all rows and all cells.
|
|
This is very hackish and will be fixed by writing a proper CSS parser.
|
|
|
|
A convenient function for looking up a cell's colspan attribute.
|
|
This first version simply auto-sizes all table cells and then places
them on a horizontal line.
|
|
|
|
|
|
|
|
This allows you to inspect the layout tree, along side the DOM tree.
It will need more functionality to be truly useful, but it's a start.
|
|
If the (optional) URL specified on the command line is an existing file
we now resolve its real path before turning into a URL. This makes
relative URLs inside the loaded document work correctly.
Also interpret all other specified URLs the same way we would if you
had typed them into the location bar.
|
|
A slightly convenient wrapper around realpath(3).
|
|
Get rid of the weird old signature:
- int StringType::to_int(bool& ok) const
And replace it with sensible new signature:
- Optional<int> StringType::to_int() const
|
|
And moved everything to AudioServer namespace
|
|
In the presence of negative margins, we subtract the largest negative
margin from max(0, largest positive margin).
|
|
We now collapse a block's top margin with the previous sibling's
bottom margin so that the larger margin wins.
|
|
|
|
|
|
Before this, it has been possible to assign a RefCounted object to another
RefCounted object. Hilariosly (or sadly), that copied the refcount among
the other fields, meaning the target value ended up with a wrong refcount.
Ensure this never happens by disallowing copies and moves for RefCounted types.
|
|
We don't really have a good way to prevent this kind of overflow,
but let's at least immediately panic in this case.
|
|
This fixes all sorts of race conditions, primarily in the kernel, where till
now it's been possible to obtain either double free or use-after-free by
exploiting refcounting races.
|
|
And while fixing all the tests that look at ref_count(),
sneak in a fix for the test suite name.
|
|
|
|
|
|
|
|
|
|
We have to include <stddef.h> to get its definition.
|
|
Skip over absolutely positioned children when laying out the inline
children of a block. This takes them out of the flow and allows them
to be positioned correctly relative to the (absolute) containing block.
|
|
Absolutely positioned elements are placed by their containing block.
Instead of trying to compute its own position, LayoutReplaced will
now simply add itself as an absolutely positioned descendant of its
containing block.
|
|
Fixed position elements have the ICB as their containing block.
The magic of fixed positioning is implemented at the rendering stage,
where we temporarily translate painting by the current scroll offset.
Note that "absolutely positioned" includes both position:absolute
and position:fixed.
|
|
|
|
This matches the other member names (padding_box() and border_box().)
|
|
Absolutely positioned blocks now register themselves with their
containing block (and note that the containing block of an absolutely
positioned box is the nearest non-statically positioned block ancestor
or the ICB as fallback.)
Containing blocks then drive the layout of their tracked absolutely
positioned descendants as a separate layout pass.
This is very far from perfect but the general direction seems good.
|
|
This makes it a lot easier to see which layout node is which DOM node.
|
|
Thanks @brynet for noticing. :^)
|
|
IPC::ClientConnection now tracks the time since the last time we got
a message from the client and calls a virtual function on itself after
3 seconds: may_have_become_unresponsive().
Subclasses of ClientConnection can then react to this if they like.
We use this mechanism in WindowServer to send out a friendly Ping
message to the client. If he doesn't Pong within 1 second, we mark
the client as "unresponsive" and recompose all of his windows with
a darkened appearance and amended title until he Pongs us.
This is a little on the aggressive side and we should figure out a way
to wake up less often. Perhaps this could only be done to windows the
user is currently interacting with, for example.
Anyways, this is pretty cool! :^)
|