Commit graph

7798 commits

Author SHA1 Message Date
Andreas Kling
68b04d5c78 LibWeb: Implement getting and setting element.innerHTML
Getting the innerHTML property will recurse through the subtree inside
the element and serialize it into a string as it goes.

Setting it will parse the set value as an HTML fragment. It will then
remove all current children of the element and replace them with all
the children inside the parsed fragment.

Setting element.innerHTML will currently force a complete rebuild of
the document's layout tree.

This is pretty neat! :^)
2020-03-25 18:53:20 +01:00
Andreas Kling
632cc53e2c LibWeb: Add ParentNode::remove_all_children()
This safely removes all children from a Node.
2020-03-25 18:52:03 +01:00
Andreas Kling
1146ab0fae LibWeb: Add Document::invalidate_layout()
This function allows you to throw away the entire layout tree if that's
something you want to do.

It's certainly not super cheap to reconstruct, but hey, who am I to
tell you what to do? :^)
2020-03-25 18:51:04 +01:00
Andreas Kling
90a53b3520 LibWeb: Commit uncommitted text at the end of HTML parse
If there's any text left in the parse buffer at the end of HTML parsing
we now commit it as a Text node.
2020-03-25 18:50:10 +01:00
Andreas Kling
5b87043221 LibWeb: Make dump_tree() look okay for DocumentFragments 2020-03-25 18:49:29 +01:00
Andreas Kling
a32f3b29a3 LibWeb: Detach any LayoutNode from its parent if present in ~Node() 2020-03-25 18:48:32 +01:00
Andreas Kling
3ad1e7d6b7 LibWeb: Node::is_parent_node() should return true for DocumentFragments 2020-03-25 18:48:10 +01:00
Andreas Kling
faa3bf195a Meta: Ignore the LibJS test runner script when linting
Making this work in the absence of bash is more cumbersome than simply
skipping it at the moment.
2020-03-25 16:30:58 +01:00
Alex Muscar
fefc2665d6
WindowServer: Don't ignore mouse events after showing modal window (#1495)
Fixes #1464
2020-03-25 16:26:33 +01:00
redoste
30649ed93f Keymap: Add FR keymap layout
This adds the standard French "AZERTY" keyboard layout. Some keys are unmapped
because some characters are not supported : ²éèçà°€¨£¤ùµ§
2020-03-25 16:24:38 +01:00
Andreas Kling
fac6f62cf7 Build: Oops, LibJS tests were meant to go in /home/anon/js-tests 2020-03-25 16:16:04 +01:00
Andreas Kling
6c9d2cfa5e LibJS: Handle "for" statements with empty initializer and updater 2020-03-25 16:14:51 +01:00
Andreas Kling
30d24af54a LibJS: Add a basic test for the "throw" keyword 2020-03-25 16:09:23 +01:00
Andreas Kling
9e8d3d6287 LibJS: Rename some tests
"feature-basic" is a bit more logical than having a ton of
"basic-feature" (when it comes to the visual overview of it all.)
2020-03-25 15:57:18 +01:00
Andreas Kling
f5418f40cc Ports/bash: Make a /bin/bash symlink to /usr/local/bin/bash
I've added a post_install step to the system that allows you to run
arbitrary commands after the regular install step.

This allows scripts that start with "#!/bin/bash" to work in Serenity.
2020-03-25 15:55:28 +01:00
Andreas Kling
202055a72a Build: Copy LibJS/Tests into /home/anon/js-tests
The test runner currently depends on the bash port being installed.
If you have it, you can run the LibJS test suite inside Serenity
by simply entering /home/anon/js-tests and doing ./run-tests :^)
2020-03-25 15:53:47 +01:00
Andreas Kling
78923d986e LibJS: Tweak run-tests output a bit 2020-03-25 15:52:17 +01:00
Andreas Kling
efbcdd6d34 uname: Remove trailing space character 2020-03-25 15:48:35 +01:00
Andreas Kling
45488401b1 LibJS: Add a very basic test runner (shell script) + some tests 2020-03-25 15:32:17 +01:00
Andreas Kling
a94a150df0 LibJS: Remove unnecessary space character at the end of console.log() 2020-03-25 14:08:47 +01:00
Andreas Kling
05311782d7 LibWeb: Remove debug spam about getting a 2D canvas context 2020-03-25 09:54:46 +01:00
Andreas Kling
9ee7142227 LibJS: Fix parsing of if (typeof "foo" === "string")
Move parsing of unary expressions into the primary expression parsing
step so that `typeof` takes precedence over `===` in the above example.
2020-03-25 09:51:54 +01:00
Andreas Kling
7a5ef0a87f LibJS: Disable HEAP_DEBUG logging on non-SerenityOS platforms
This makes it a bit easier to work with LibJS on Linux for now.
2020-03-25 09:49:14 +01:00
Andreas Kling
2fc56abd4b js: Remove debug message about what the interpreter returned
If you want to see what the interpreter returned, use "js -l" :^)
2020-03-25 09:48:37 +01:00
Andreas Kling
e34fe556ca AK: Fix JsonParser kernel build (no floats/doubles in kernel code) 2020-03-24 22:37:24 +01:00
Andreas Kling
faddf3a1db LibJS: Implement "throw"
You can now throw an expression to the nearest catcher! :^)

To support throwing arbitrary values, I added an Exception class that
sits as a wrapper around whatever is thrown. In the future it will be
a logical place to store a call stack.
2020-03-24 22:21:58 +01:00
Andreas Kling
db024a9cb1 LibJS: Remove debug spam in Error.prototype.name 2020-03-24 22:21:58 +01:00
Emanuel Sprung
bca5762542 AK: Add parsing of JSON double values
This patch adds the parsing of double values to the JSON parser.
There is another char buffer that get's filled when a "." is present
in the number parsing. When number finished, a divider is calculated
to transform the number behind the "." to the actual fraction value.
2020-03-24 22:20:07 +01:00
Emanuel Sprung
45921328e4 AK: Add get_or() method to JsonObject
This allows to retrieve a default value for items thare are not
available in the json object.
2020-03-24 22:20:07 +01:00
Liav A
5f579904c1 Interrupts: Handle spurious IRQs from eoi() method 2020-03-24 16:15:33 +01:00
Liav A
8d9b6c57b5 Interrupts: Use Optional container in IOAPIC
We return the Optional container in find_redirection_entry_by_vector()
method instead of a raw integer. This makes the code more readable and
correct.
2020-03-24 16:15:33 +01:00
Liav A
0b7fc525e1 Interrupts: Simplify IRQ disabling & enabling in IRQController(s)
Instead of blindly setting masks, if we want to disable an IRQ and it's
already masked, we just return. The same happens if we want to enable an
IRQ and it's unmasked.
2020-03-24 16:15:33 +01:00
Liav A
3f98a67d75 Interrupts: Remove unused methods 2020-03-24 16:15:33 +01:00
Liav A
8b38be3072 Kernel: Simplify disable_irq() and enable_irq() methods in IRQHandler
Setting the m_enabled variable to true or false can help
with monitoring the IRQHandler object(s) later, and there's no good
reason to have an if-else statement in those methods anyway.
2020-03-24 16:15:33 +01:00
Liav A
cb676f1211 Interrupts: Do a specific EOI when using the PIC
Before this change, we did a non-specific EOI, which could lead to
problems with other IRQs that are handled in the PIC. Since the original
8259A datasheet permits such functionality and we are not losing any
functionality, this change is acceptable even though we don't experience
problems with the EOI currently.
2020-03-24 16:15:33 +01:00
Liav A
06e7fc9dee Kernel: Limit IRQ rate within E1000 network adapter
This is not a complete fix, since spurious IRQs under heavy loads can
still occur. However, this fix limits the amount of spurious IRQs.

It is encouraged to provide a better fix in the future, probably
something that takes into account handling of PCI level-triggered
interrupts.
2020-03-24 16:15:33 +01:00
Liav A
dbc536e917 Interrupts: Assert if trying to install an handler on syscall vector
Installing an interrupt handler on the syscall IDT vector can lead to
fatal results, so we must assert if that happens.
2020-03-24 16:15:33 +01:00
Liav A
f86be46c98 Kernel: Abstract IRQ controller handling from Interrupt handlers
Now we don't send raw numbers, but we let the IRQController object to
figure out the correct IRQ number.
This helps in a situation when we have 2 or more IOAPICs, so if IOAPIC
1 is assigned for IRQs 0-23 and IOAPIC 2 is assigned for IRQs 24-47,
if an IRQHandler of IRQ 25 invokes disable() for example, it will call
his responsible IRQController (IOAPIC 2), and the IRQController will
subtract the IRQ number with his assigned offset, and the result is that
the second redirection entry in IOAPIC 2 will be masked.
2020-03-24 16:15:33 +01:00
Liav A
666990fbcb Kernel: Correct Spurious Interrupt handlers' controller model() method
We don't return blindly the IRQ controller's model(), if the Spurious
IRQ handler is installed in IOAPIC environment, it's misleading to
return "IOAPIC" string since IOAPIC doesn't really handle Spurious
IRQs, therefore we return a "" string.
2020-03-24 16:15:33 +01:00
Liav A
4cc96a7aa9 Kernel: Create an interface for conversion between IRQs and interrupts 2020-03-24 16:15:33 +01:00
Liav A
c2c0e9fb04 Kernel: Ensure that we don't use a hard-disabled IRQController 2020-03-24 16:15:33 +01:00
Liav A
893d4a41c2 Kernel: Enable IRQs before sending commands to the E1000 adapter
This change prevents a race condition, in which case we send a command
and we are losing an interrupt.
2020-03-24 16:15:33 +01:00
Liav A
7c859efa85 Kernel: Change the Spurious Interrupt Handler offset in the APIC
The Spurious Interrupt Handler number that is written to
APIC_REG_SIV is correct now.
2020-03-24 16:15:33 +01:00
Liav A
f7b207c7ae CPU: Move EOI call to the end of handle_interrupt() 2020-03-24 16:15:33 +01:00
Liav A
1bc7ba8df8 Kernel: Run QEMU machine with two virtual processors 2020-03-24 16:15:33 +01:00
Liav A
c55d5eeef9 Kernel: Change noacpi GRUB entry to use the right boot argument 2020-03-24 16:15:33 +01:00
Andreas Kling
7dc78b5e38 LibJS: Use correct |this| value when getting/setting native properties 2020-03-24 16:14:10 +01:00
Andreas Kling
8705c5ffeb js: Make the -l command-line argument actually work 2020-03-24 16:14:10 +01:00
Andreas Kling
343e224aa8 LibJS: Implement basic exception throwing
You can now throw exceptions by calling Interpreter::throw_exception().
Anyone who calls ASTNode::execute() needs to check afterwards if the
Interpreter now has an exception(), and if so, stop what they're doing
and simply return.

When catching an exception, we'll first execute the CatchClause node
if present. After that, we'll execute the finalizer block if present.

This is unlikely to be completely correct, but it's a start! :^)
2020-03-24 16:14:10 +01:00
Andreas Kling
c33d4aefc3 LibJS: Parse "try", "catch" and "finally"
This is the first step towards support exceptions. :^)
2020-03-24 16:14:10 +01:00