LibDevTools: Share storage field descriptor creation
Storage actors all describe table columns with the same DevTools field object shape. Extract a helper for constructing those objects so that cookies, local storage, session storage, and soon IndexedDB, do not each spell out the JSON fields by hand.
This commit is contained in:
parent
61a53553ab
commit
a3e85ada85
4 changed files with 39 additions and 40 deletions
|
|
@ -270,37 +270,22 @@ void CookiesActor::handle_message(Message const& message)
|
|||
|
||||
void CookiesActor::get_fields(Message const& message)
|
||||
{
|
||||
enum class FieldState : u8 {
|
||||
Immutable,
|
||||
Editable,
|
||||
Hidden,
|
||||
Private,
|
||||
};
|
||||
auto make_field = [](StringView name, FieldState state) {
|
||||
JsonObject field;
|
||||
field.set("name"sv, name);
|
||||
field.set("editable"sv, state == FieldState::Editable);
|
||||
field.set("hidden"sv, state == FieldState::Hidden);
|
||||
field.set("private"sv, state == FieldState::Private);
|
||||
return field;
|
||||
};
|
||||
|
||||
JsonArray fields;
|
||||
fields.must_append(make_field("uniqueKey"sv, FieldState::Private));
|
||||
fields.must_append(make_field("name"sv, FieldState::Editable));
|
||||
fields.must_append(make_field("value"sv, FieldState::Editable));
|
||||
fields.must_append(make_field("host"sv, FieldState::Editable));
|
||||
fields.must_append(make_field("path"sv, FieldState::Editable));
|
||||
fields.must_append(make_field("expires"sv, FieldState::Editable));
|
||||
fields.must_append(make_field("size"sv, FieldState::Immutable));
|
||||
fields.must_append(make_field("isHttpOnly"sv, FieldState::Editable));
|
||||
fields.must_append(make_field("isSecure"sv, FieldState::Editable));
|
||||
fields.must_append(make_field("sameSite"sv, FieldState::Immutable));
|
||||
fields.must_append(make_field("lastAccessed"sv, FieldState::Immutable));
|
||||
fields.must_append(make_field("creationTime"sv, FieldState::Hidden));
|
||||
fields.must_append(make_field("updateTime"sv, FieldState::Hidden));
|
||||
fields.must_append(make_field("hostOnly"sv, FieldState::Hidden));
|
||||
fields.must_append(make_field("partitionKey"sv, FieldState::Immutable));
|
||||
fields.must_append(define_storage_field("uniqueKey"sv, StorageFieldType::Private));
|
||||
fields.must_append(define_storage_field("name"sv, StorageFieldType::Mutable));
|
||||
fields.must_append(define_storage_field("value"sv, StorageFieldType::Mutable));
|
||||
fields.must_append(define_storage_field("host"sv, StorageFieldType::Mutable));
|
||||
fields.must_append(define_storage_field("path"sv, StorageFieldType::Mutable));
|
||||
fields.must_append(define_storage_field("expires"sv, StorageFieldType::Mutable));
|
||||
fields.must_append(define_storage_field("size"sv, StorageFieldType::Immutable));
|
||||
fields.must_append(define_storage_field("isHttpOnly"sv, StorageFieldType::Mutable));
|
||||
fields.must_append(define_storage_field("isSecure"sv, StorageFieldType::Mutable));
|
||||
fields.must_append(define_storage_field("sameSite"sv, StorageFieldType::Immutable));
|
||||
fields.must_append(define_storage_field("lastAccessed"sv, StorageFieldType::Immutable));
|
||||
fields.must_append(define_storage_field("creationTime"sv, StorageFieldType::Hidden));
|
||||
fields.must_append(define_storage_field("updateTime"sv, StorageFieldType::Hidden));
|
||||
fields.must_append(define_storage_field("hostOnly"sv, StorageFieldType::Hidden));
|
||||
fields.must_append(define_storage_field("partitionKey"sv, StorageFieldType::Immutable));
|
||||
|
||||
JsonObject response;
|
||||
response.set("value"sv, move(fields));
|
||||
|
|
|
|||
|
|
@ -17,14 +17,6 @@ namespace DevTools {
|
|||
|
||||
static constexpr auto max_store_object_count = 50uz;
|
||||
|
||||
static JsonObject storage_field(StringView name)
|
||||
{
|
||||
JsonObject field;
|
||||
field.set("name"sv, name);
|
||||
field.set("editable"sv, true);
|
||||
return field;
|
||||
}
|
||||
|
||||
static JsonObject serialize_storage_item(DevToolsDelegate::StorageItem const& item)
|
||||
{
|
||||
JsonObject object;
|
||||
|
|
@ -161,8 +153,8 @@ void StorageActor::handle_message(Message const& message)
|
|||
void StorageActor::get_fields(Message const& message)
|
||||
{
|
||||
JsonArray fields;
|
||||
fields.must_append(storage_field("name"sv));
|
||||
fields.must_append(storage_field("value"sv));
|
||||
fields.must_append(define_storage_field("name"sv, StorageFieldType::Mutable));
|
||||
fields.must_append(define_storage_field("value"sv, StorageFieldType::Mutable));
|
||||
|
||||
JsonObject response;
|
||||
response.set("value"sv, move(fields));
|
||||
|
|
|
|||
|
|
@ -11,6 +11,20 @@
|
|||
|
||||
namespace DevTools {
|
||||
|
||||
JsonObject define_storage_field(StringView name, StorageFieldType state)
|
||||
{
|
||||
JsonObject field;
|
||||
field.set("name"sv, name);
|
||||
field.set("editable"sv, state == StorageFieldType::Mutable);
|
||||
|
||||
if (state == StorageFieldType::Hidden)
|
||||
field.set("hidden"sv, true);
|
||||
else if (state == StorageFieldType::Private)
|
||||
field.set("private"sv, true);
|
||||
|
||||
return field;
|
||||
}
|
||||
|
||||
Optional<String> storage_host_for_url(String const& url_string)
|
||||
{
|
||||
auto url = URL::Parser::basic_parse(url_string);
|
||||
|
|
|
|||
|
|
@ -17,6 +17,14 @@ namespace DevTools {
|
|||
DEVTOOLS_API Optional<String> storage_host_for_url(String const&);
|
||||
DEVTOOLS_API Optional<String> storage_host_name(String const&);
|
||||
|
||||
enum class StorageFieldType : u8 {
|
||||
Immutable,
|
||||
Mutable,
|
||||
Hidden,
|
||||
Private,
|
||||
};
|
||||
JsonObject define_storage_field(StringView name, StorageFieldType);
|
||||
|
||||
JsonObject to_storage_operation_result(Optional<String> const& error_string);
|
||||
JsonObject to_storage_operation_result(ErrorOr<void> const& result);
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue