LibWeb: Use proper enums in WorkerOptions dictionary

This commit is contained in:
Andrew Kaster 2024-09-10 20:57:48 -06:00 committed by Tim Ledbetter
commit 1d43d5b086
Notes: github-actions[bot] 2024-09-20 21:42:39 +00:00
7 changed files with 20 additions and 13 deletions

View file

@ -2,6 +2,7 @@
#import <DOM/EventHandler.idl> #import <DOM/EventHandler.idl>
#import <HTML/AbstractWorker.idl> #import <HTML/AbstractWorker.idl>
#import <HTML/MessagePort.idl> #import <HTML/MessagePort.idl>
#import <Fetch/Request.idl>
// https://html.spec.whatwg.org/#worker // https://html.spec.whatwg.org/#worker
[Exposed=(Window,DedicatedWorker,SharedWorker)] [Exposed=(Window,DedicatedWorker,SharedWorker)]
@ -18,9 +19,11 @@ interface Worker : EventTarget {
}; };
dictionary WorkerOptions { dictionary WorkerOptions {
USVString type = "classic"; WorkerType type = "classic";
USVString credentials = "same-origin"; RequestCredentials credentials = "same-origin";
DOMString name = ""; DOMString name = "";
}; };
enum WorkerType { "classic", "module" };
Worker includes AbstractWorker; Worker includes AbstractWorker;

View file

@ -6,6 +6,8 @@
#pragma once #pragma once
#include <LibWeb/Bindings/RequestPrototype.h>
#include <LibWeb/Bindings/WorkerPrototype.h>
#include <LibWeb/Forward.h> #include <LibWeb/Forward.h>
#include <LibWeb/HTML/MessagePort.h> #include <LibWeb/HTML/MessagePort.h>
#include <LibWeb/Worker/WebWorkerClient.h> #include <LibWeb/Worker/WebWorkerClient.h>
@ -13,8 +15,8 @@
namespace Web::HTML { namespace Web::HTML {
struct WorkerOptions { struct WorkerOptions {
String type { "classic"_string }; Bindings::WorkerType type { Bindings::WorkerType::Classic };
String credentials { "same-origin"_string }; Bindings::RequestCredentials credentials { Bindings::RequestCredentials::SameOrigin };
String name { String {} }; String name { String {} };
}; };

View file

@ -2,10 +2,11 @@
#include <LibIPC/File.h> #include <LibIPC/File.h>
#include <LibWeb/HTML/StructuredSerialize.h> #include <LibWeb/HTML/StructuredSerialize.h>
#include <LibWeb/HTML/Scripting/SerializedEnvironmentSettingsObject.h> #include <LibWeb/HTML/Scripting/SerializedEnvironmentSettingsObject.h>
#include <LibWeb/Bindings/WorkerPrototype.h>
endpoint WebWorkerServer { endpoint WebWorkerServer {
start_dedicated_worker(URL::URL url, String type, String credentials, String name, Web::HTML::TransferDataHolder message_port, Web::HTML::SerializedEnvironmentSettingsObject outside_settings) =| start_dedicated_worker(URL::URL url, Web::Bindings::WorkerType type, Web::Bindings::RequestCredentials credentials, String name, Web::HTML::TransferDataHolder message_port, Web::HTML::SerializedEnvironmentSettingsObject outside_settings) =|
close_worker() =| close_worker() =|

View file

@ -63,7 +63,7 @@ Web::Page const& ConnectionFromClient::page() const
return m_page_host->page(); return m_page_host->page();
} }
void ConnectionFromClient::start_dedicated_worker(URL::URL const& url, String const& type, String const&, String const& name, Web::HTML::TransferDataHolder const& implicit_port, Web::HTML::SerializedEnvironmentSettingsObject const& outside_settings) void ConnectionFromClient::start_dedicated_worker(URL::URL const& url, Web::Bindings::WorkerType const& type, Web::Bindings::RequestCredentials const&, String const& name, Web::HTML::TransferDataHolder const& implicit_port, Web::HTML::SerializedEnvironmentSettingsObject const& outside_settings)
{ {
m_worker_host = make_ref_counted<DedicatedWorkerHost>(url, type, name); m_worker_host = make_ref_counted<DedicatedWorkerHost>(url, type, name);
// FIXME: Yikes, const_cast to move? Feels like a LibIPC bug. // FIXME: Yikes, const_cast to move? Feels like a LibIPC bug.

View file

@ -41,7 +41,7 @@ private:
Web::Page& page(); Web::Page& page();
Web::Page const& page() const; Web::Page const& page() const;
virtual void start_dedicated_worker(URL::URL const& url, String const& type, String const&, String const& name, Web::HTML::TransferDataHolder const&, Web::HTML::SerializedEnvironmentSettingsObject const&) override; virtual void start_dedicated_worker(URL::URL const& url, Web::Bindings::WorkerType const& type, Web::Bindings::RequestCredentials const& credentials, String const& name, Web::HTML::TransferDataHolder const&, Web::HTML::SerializedEnvironmentSettingsObject const&) override;
virtual void handle_file_return(i32 error, Optional<IPC::File> const& file, i32 request_id) override; virtual void handle_file_return(i32 error, Optional<IPC::File> const& file, i32 request_id) override;
JS::Handle<PageHost> m_page_host; JS::Handle<PageHost> m_page_host;

View file

@ -21,9 +21,9 @@
namespace WebWorker { namespace WebWorker {
DedicatedWorkerHost::DedicatedWorkerHost(URL::URL url, String type, String name) DedicatedWorkerHost::DedicatedWorkerHost(URL::URL url, Web::Bindings::WorkerType type, String name)
: m_url(move(url)) : m_url(move(url))
, m_type(move(type)) , m_type(type)
, m_name(move(name)) , m_name(move(name))
{ {
} }
@ -219,14 +219,14 @@ void DedicatedWorkerHost::run(JS::NonnullGCPtr<Web::Page> page, Web::HTML::Trans
// and with onComplete and performFetch as defined below. // and with onComplete and performFetch as defined below.
// module: Fetch a module worker script graph given url, outside settings, destination, the value of the credentials member of options, inside settings, // module: Fetch a module worker script graph given url, outside settings, destination, the value of the credentials member of options, inside settings,
// and with onComplete and performFetch as defined below. // and with onComplete and performFetch as defined below.
if (m_type == "classic"sv) { if (m_type == Web::Bindings::WorkerType::Classic) {
if (auto err = Web::HTML::fetch_classic_worker_script(m_url, outside_settings, destination, inner_settings, perform_fetch, on_complete); err.is_error()) { if (auto err = Web::HTML::fetch_classic_worker_script(m_url, outside_settings, destination, inner_settings, perform_fetch, on_complete); err.is_error()) {
dbgln("Failed to run worker script"); dbgln("Failed to run worker script");
// FIXME: Abort the worker properly // FIXME: Abort the worker properly
TODO(); TODO();
} }
} else { } else {
VERIFY(m_type == "module"sv); VERIFY(m_type == Web::Bindings::WorkerType::Module);
// FIXME: Pass credentials // FIXME: Pass credentials
if (auto err = Web::HTML::fetch_module_worker_script_graph(m_url, outside_settings, destination, inner_settings, perform_fetch, on_complete); err.is_error()) { if (auto err = Web::HTML::fetch_module_worker_script_graph(m_url, outside_settings, destination, inner_settings, perform_fetch, on_complete); err.is_error()) {
dbgln("Failed to run worker script"); dbgln("Failed to run worker script");

View file

@ -9,6 +9,7 @@
#include <AK/RefCounted.h> #include <AK/RefCounted.h>
#include <LibURL/URL.h> #include <LibURL/URL.h>
#include <LibWeb/Bindings/MainThreadVM.h> #include <LibWeb/Bindings/MainThreadVM.h>
#include <LibWeb/Bindings/WorkerPrototype.h>
#include <LibWeb/Forward.h> #include <LibWeb/Forward.h>
#include <LibWeb/HTML/Scripting/SerializedEnvironmentSettingsObject.h> #include <LibWeb/HTML/Scripting/SerializedEnvironmentSettingsObject.h>
#include <LibWeb/HTML/StructuredSerialize.h> #include <LibWeb/HTML/StructuredSerialize.h>
@ -17,7 +18,7 @@ namespace WebWorker {
class DedicatedWorkerHost : public RefCounted<DedicatedWorkerHost> { class DedicatedWorkerHost : public RefCounted<DedicatedWorkerHost> {
public: public:
explicit DedicatedWorkerHost(URL::URL url, String type, String name); explicit DedicatedWorkerHost(URL::URL url, Web::Bindings::WorkerType type, String name);
~DedicatedWorkerHost(); ~DedicatedWorkerHost();
void run(JS::NonnullGCPtr<Web::Page>, Web::HTML::TransferDataHolder message_port_data, Web::HTML::SerializedEnvironmentSettingsObject const&); void run(JS::NonnullGCPtr<Web::Page>, Web::HTML::TransferDataHolder message_port_data, Web::HTML::SerializedEnvironmentSettingsObject const&);
@ -26,7 +27,7 @@ private:
JS::Handle<Web::HTML::WorkerDebugConsoleClient> m_console; JS::Handle<Web::HTML::WorkerDebugConsoleClient> m_console;
URL::URL m_url; URL::URL m_url;
String m_type; Web::Bindings::WorkerType m_type;
String m_name; String m_name;
}; };