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:
parent
78d455e231
commit
4b94b0b561
14 changed files with 303 additions and 0 deletions
|
@ -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.
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
};
|
||||
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue