mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 06:37:43 +00:00
LibWeb: Add an Internals API to trigger a user-activated (trusted) event
Some DOM APIs are restricted to user-activated events. For example, you can't just invoke `navigator.clipboard.writeText` from JS - it has to be accompanied by a user gesture, such as a mouse-down event. This adds an Internals API to simulate such a gesture.
This commit is contained in:
parent
6761791c9a
commit
78d455e231
3 changed files with 13 additions and 0 deletions
|
@ -8,6 +8,8 @@
|
||||||
#include <LibWeb/Bindings/InternalsPrototype.h>
|
#include <LibWeb/Bindings/InternalsPrototype.h>
|
||||||
#include <LibWeb/Bindings/Intrinsics.h>
|
#include <LibWeb/Bindings/Intrinsics.h>
|
||||||
#include <LibWeb/DOM/Document.h>
|
#include <LibWeb/DOM/Document.h>
|
||||||
|
#include <LibWeb/DOM/Event.h>
|
||||||
|
#include <LibWeb/DOM/EventTarget.h>
|
||||||
#include <LibWeb/HTML/BrowsingContext.h>
|
#include <LibWeb/HTML/BrowsingContext.h>
|
||||||
#include <LibWeb/HTML/Window.h>
|
#include <LibWeb/HTML/Window.h>
|
||||||
#include <LibWeb/Internals/Internals.h>
|
#include <LibWeb/Internals/Internals.h>
|
||||||
|
@ -58,4 +60,10 @@ JS::Object* Internals::hit_test(double x, double y)
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
WebIDL::ExceptionOr<bool> Internals::dispatch_user_activated_event(DOM::EventTarget& target, DOM::Event& event)
|
||||||
|
{
|
||||||
|
event.set_is_trusted(true);
|
||||||
|
return target.dispatch_event(event);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,6 +21,8 @@ public:
|
||||||
void gc();
|
void gc();
|
||||||
JS::Object* hit_test(double x, double y);
|
JS::Object* hit_test(double x, double y);
|
||||||
|
|
||||||
|
WebIDL::ExceptionOr<bool> dispatch_user_activated_event(DOM::EventTarget&, DOM::Event& event);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
explicit Internals(JS::Realm&);
|
explicit Internals(JS::Realm&);
|
||||||
virtual void initialize(JS::Realm&) override;
|
virtual void initialize(JS::Realm&) override;
|
||||||
|
|
|
@ -1,7 +1,10 @@
|
||||||
|
#import <DOM/EventTarget.idl>
|
||||||
|
|
||||||
[Exposed=Nobody] interface Internals {
|
[Exposed=Nobody] interface Internals {
|
||||||
|
|
||||||
undefined signalTextTestIsDone();
|
undefined signalTextTestIsDone();
|
||||||
undefined gc();
|
undefined gc();
|
||||||
object hitTest(double x, double y);
|
object hitTest(double x, double y);
|
||||||
|
boolean dispatchUserActivatedEvent(EventTarget target, Event event);
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue