mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-08-11 10:41:30 +00:00
LibWeb: Return a WindowProxy from document.defaultView
This aligns our implementation with the most recent specification steps.
This commit is contained in:
parent
74f6dce9e6
commit
089139f09d
Notes:
github-actions[bot]
2024-09-21 08:06:25 +00:00
Author: https://github.com/tcl3
Commit: 089139f09d
Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/1468
6 changed files with 38 additions and 8 deletions
1
Tests/LibWeb/Text/expected/DOM/Document-defaultView.txt
Normal file
1
Tests/LibWeb/Text/expected/DOM/Document-defaultView.txt
Normal file
|
@ -0,0 +1 @@
|
|||
document.defaultView === window: true
|
7
Tests/LibWeb/Text/input/DOM/Document-defaultView.html
Normal file
7
Tests/LibWeb/Text/input/DOM/Document-defaultView.html
Normal file
|
@ -0,0 +1,7 @@
|
|||
<!DOCTYPE html>
|
||||
<script src="../include.js"></script>
|
||||
<script>
|
||||
test(() => {
|
||||
println(`document.defaultView === window: ${document.defaultView === window}`);
|
||||
});
|
||||
</script>
|
|
@ -698,6 +698,22 @@ WebIDL::ExceptionOr<void> Document::close()
|
|||
return {};
|
||||
}
|
||||
|
||||
// https://html.spec.whatwg.org/multipage/nav-history-apis.html#dom-document-defaultview
|
||||
JS::GCPtr<HTML::WindowProxy> Document::default_view()
|
||||
{
|
||||
// If this's browsing context is null, then return null.
|
||||
if (!browsing_context())
|
||||
return {};
|
||||
|
||||
// 2. Return this's browsing context's WindowProxy object.
|
||||
return browsing_context()->window_proxy();
|
||||
}
|
||||
|
||||
JS::GCPtr<HTML::WindowProxy const> Document::default_view() const
|
||||
{
|
||||
return const_cast<Document*>(this)->default_view();
|
||||
}
|
||||
|
||||
HTML::Origin Document::origin() const
|
||||
{
|
||||
return m_origin;
|
||||
|
|
|
@ -370,8 +370,8 @@ public:
|
|||
WebIDL::ExceptionOr<JS::GCPtr<HTML::WindowProxy>> open(StringView url, StringView name, StringView features);
|
||||
WebIDL::ExceptionOr<void> close();
|
||||
|
||||
HTML::Window* default_view() { return m_window.ptr(); }
|
||||
HTML::Window const* default_view() const { return m_window.ptr(); }
|
||||
JS::GCPtr<HTML::WindowProxy const> default_view() const;
|
||||
JS::GCPtr<HTML::WindowProxy> default_view();
|
||||
|
||||
String const& content_type() const { return m_content_type; }
|
||||
void set_content_type(String content_type) { m_content_type = move(content_type); }
|
||||
|
|
|
@ -48,7 +48,7 @@ interface Document : Node {
|
|||
readonly attribute DOMString inputEncoding;
|
||||
readonly attribute DOMString contentType;
|
||||
|
||||
readonly attribute Window? defaultView;
|
||||
readonly attribute WindowProxy? defaultView;
|
||||
|
||||
[CEReactions] Document open(optional DOMString unused1, optional DOMString unused2);
|
||||
WindowProxy? open(USVString url, DOMString name, DOMString features);
|
||||
|
|
|
@ -1246,7 +1246,8 @@ double Element::scroll_top() const
|
|||
return 0.0;
|
||||
|
||||
// 3. Let window be the value of document’s defaultView attribute.
|
||||
auto* window = document.default_view();
|
||||
// FIXME: The specification expects defaultView to be a Window object, but defaultView actually returns a WindowProxy object.
|
||||
auto window = document.window();
|
||||
|
||||
// 4. If window is null, return zero and terminate these steps.
|
||||
if (!window)
|
||||
|
@ -1276,6 +1277,7 @@ double Element::scroll_top() const
|
|||
return paintable_box()->scroll_offset().y().to_double();
|
||||
}
|
||||
|
||||
// https://drafts.csswg.org/cssom-view/#dom-element-scrollleft
|
||||
double Element::scroll_left() const
|
||||
{
|
||||
// 1. Let document be the element’s node document.
|
||||
|
@ -1286,7 +1288,8 @@ double Element::scroll_left() const
|
|||
return 0.0;
|
||||
|
||||
// 3. Let window be the value of document’s defaultView attribute.
|
||||
auto* window = document.default_view();
|
||||
// FIXME: The specification expects defaultView to be a Window object, but defaultView actually returns a WindowProxy object.
|
||||
auto window = document.window();
|
||||
|
||||
// 4. If window is null, return zero and terminate these steps.
|
||||
if (!window)
|
||||
|
@ -1332,7 +1335,8 @@ void Element::set_scroll_left(double x)
|
|||
return;
|
||||
|
||||
// 5. Let window be the value of document’s defaultView attribute.
|
||||
auto* window = document.default_view();
|
||||
// FIXME: The specification expects defaultView to be a Window object, but defaultView actually returns a WindowProxy object.
|
||||
auto window = document.window();
|
||||
|
||||
// 6. If window is null, terminate these steps.
|
||||
if (!window)
|
||||
|
@ -1388,7 +1392,8 @@ void Element::set_scroll_top(double y)
|
|||
return;
|
||||
|
||||
// 5. Let window be the value of document’s defaultView attribute.
|
||||
auto* window = document.default_view();
|
||||
// FIXME: The specification expects defaultView to be a Window object, but defaultView actually returns a WindowProxy object.
|
||||
auto window = document.window();
|
||||
|
||||
// 6. If window is null, terminate these steps.
|
||||
if (!window)
|
||||
|
@ -2347,7 +2352,8 @@ void Element::scroll(double x, double y)
|
|||
return;
|
||||
|
||||
// 5. Let window be the value of document’s defaultView attribute.
|
||||
auto* window = document.default_view();
|
||||
// FIXME: The specification expects defaultView to be a Window object, but defaultView actually returns a WindowProxy object.
|
||||
auto window = document.window();
|
||||
|
||||
// 6. If window is null, terminate these steps.
|
||||
if (!window)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue