1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-27 12:27:35 +00:00

LibWeb: Begin implementing the Clipboard API

https://w3c.github.io/clipboard-apis/

This implements enough for navigator.clipboard.writeText(String).
This commit is contained in:
Timothy Flynn 2023-11-10 13:29:20 -05:00 committed by Andreas Kling
parent 78d455e231
commit 4b94b0b561
14 changed files with 303 additions and 0 deletions

View file

@ -47,6 +47,12 @@ public:
// https://html.spec.whatwg.org/multipage/canvas.html#canvas-blob-serialisation-task-source
CanvasBlobSerializationTask,
// https://w3c.github.io/clipboard-apis/#clipboard-task-source
Clipboard,
// https://w3c.github.io/permissions/#permissions-task-source
Permissions,
// !!! IMPORTANT: Keep this field last!
// This serves as the base value of all unique task sources.
// Some elements, such as the HTMLMediaElement, must have a unique task source per instance.

View file

@ -8,6 +8,7 @@
#include <LibJS/Heap/Heap.h>
#include <LibJS/Runtime/Realm.h>
#include <LibWeb/Bindings/Intrinsics.h>
#include <LibWeb/Clipboard/Clipboard.h>
#include <LibWeb/HTML/Navigator.h>
#include <LibWeb/HTML/Scripting/Environments.h>
#include <LibWeb/HTML/Window.h>
@ -57,6 +58,7 @@ void Navigator::visit_edges(Cell::Visitor& visitor)
Base::visit_edges(visitor);
visitor.visit(m_mime_type_array);
visitor.visit(m_plugin_array);
visitor.visit(m_clipboard);
}
JS::NonnullGCPtr<MimeTypeArray> Navigator::mime_types()
@ -73,4 +75,11 @@ JS::NonnullGCPtr<PluginArray> Navigator::plugins()
return *m_plugin_array;
}
JS::NonnullGCPtr<Clipboard::Clipboard> Navigator::clipboard()
{
if (!m_clipboard)
m_clipboard = heap().allocate<Clipboard::Clipboard>(realm(), realm());
return *m_clipboard;
}
}

View file

@ -45,6 +45,7 @@ public:
[[nodiscard]] JS::NonnullGCPtr<MimeTypeArray> mime_types();
[[nodiscard]] JS::NonnullGCPtr<PluginArray> plugins();
[[nodiscard]] JS::NonnullGCPtr<Clipboard::Clipboard> clipboard();
virtual ~Navigator() override;
@ -58,6 +59,9 @@ private:
JS::GCPtr<PluginArray> m_plugin_array;
JS::GCPtr<MimeTypeArray> m_mime_type_array;
// https://w3c.github.io/clipboard-apis/#dom-navigator-clipboard
JS::GCPtr<Clipboard::Clipboard> m_clipboard;
};
}

View file

@ -1,3 +1,4 @@
#import <Clipboard/Clipboard.idl>
#import <HTML/MimeTypeArray.idl>
#import <HTML/NavigatorBeacon.idl>
#import <HTML/NavigatorID.idl>
@ -10,6 +11,9 @@
[Exposed=Window]
interface Navigator {
// objects implementing this interface also implement the interfaces given below
// https://w3c.github.io/clipboard-apis/#navigator-interface
[SecureContext, SameObject] readonly attribute Clipboard clipboard;
};
// NOTE: As NavigatorContentUtils, NavigatorCookies, NavigatorPlugins, and NavigatorAutomationInformation