summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTimothy Flynn <trflynn89@pm.me>2023-03-21 07:22:10 -0400
committerAndreas Kling <kling@serenityos.org>2023-03-22 00:12:53 +0100
commit2a410f8985ca28a334a20ceaa54e9288cc377cb2 (patch)
tree98bfa7c1ae9553472467dd2dba7a2ab186ba5f80
parentbff109ee50ead1eeca39d90f8594eb9be8955d5e (diff)
downloadserenity-2a410f8985ca28a334a20ceaa54e9288cc377cb2.zip
LibWeb: Change "popup"-related storage types to named enums
-rw-r--r--Userland/Libraries/LibWeb/HTML/AbstractBrowsingContext.h5
-rw-r--r--Userland/Libraries/LibWeb/HTML/BrowsingContext.h3
-rw-r--r--Userland/Libraries/LibWeb/HTML/TokenizedFeatures.h7
-rw-r--r--Userland/Libraries/LibWeb/HTML/Window.cpp70
4 files changed, 32 insertions, 53 deletions
diff --git a/Userland/Libraries/LibWeb/HTML/AbstractBrowsingContext.h b/Userland/Libraries/LibWeb/HTML/AbstractBrowsingContext.h
index dfae19224d..03fadf4c3c 100644
--- a/Userland/Libraries/LibWeb/HTML/AbstractBrowsingContext.h
+++ b/Userland/Libraries/LibWeb/HTML/AbstractBrowsingContext.h
@@ -10,6 +10,7 @@
#include <LibJS/Heap/Cell.h>
#include <LibWeb/HTML/HistoryHandlingBehavior.h>
#include <LibWeb/HTML/PolicyContainers.h>
+#include <LibWeb/HTML/TokenizedFeatures.h>
#include <LibWeb/HTML/WindowProxy.h>
namespace Web::HTML {
@@ -38,7 +39,7 @@ public:
Function<void(JS::NonnullGCPtr<Fetch::Infrastructure::Response>)> process_response_end_of_body = {})
= 0;
- void set_is_popup(bool is_popup) { m_is_popup = is_popup; }
+ void set_is_popup(TokenizedFeature::Popup is_popup) { m_is_popup = is_popup; }
virtual String const& window_handle() const = 0;
virtual void set_window_handle(String handle) = 0;
@@ -47,7 +48,7 @@ protected:
DeprecatedString m_name;
// https://html.spec.whatwg.org/multipage/browsers.html#is-popup
- bool m_is_popup { false };
+ TokenizedFeature::Popup m_is_popup { TokenizedFeature::Popup::No };
// https://html.spec.whatwg.org/multipage/browsers.html#opener-browsing-context
JS::GCPtr<BrowsingContext> m_opener_browsing_context;
diff --git a/Userland/Libraries/LibWeb/HTML/BrowsingContext.h b/Userland/Libraries/LibWeb/HTML/BrowsingContext.h
index f953dd45fb..efda37f96b 100644
--- a/Userland/Libraries/LibWeb/HTML/BrowsingContext.h
+++ b/Userland/Libraries/LibWeb/HTML/BrowsingContext.h
@@ -317,9 +317,6 @@ private:
// https://html.spec.whatwg.org/multipage/browsers.html#tlbc-group
JS::GCPtr<BrowsingContextGroup> m_group;
- // https://html.spec.whatwg.org/multipage/browsers.html#is-popup
- bool m_is_popup { false };
-
// https://html.spec.whatwg.org/multipage/interaction.html#system-visibility-state
VisibilityState m_system_visibility_state { VisibilityState::Hidden };
diff --git a/Userland/Libraries/LibWeb/HTML/TokenizedFeatures.h b/Userland/Libraries/LibWeb/HTML/TokenizedFeatures.h
index df70e281d3..3b2404a3ff 100644
--- a/Userland/Libraries/LibWeb/HTML/TokenizedFeatures.h
+++ b/Userland/Libraries/LibWeb/HTML/TokenizedFeatures.h
@@ -14,7 +14,14 @@ namespace Web::HTML::TokenizedFeature {
No, \
}
+TOKENIZED_FEATURE(Location);
+TOKENIZED_FEATURE(Menubar);
TOKENIZED_FEATURE(NoOpener);
TOKENIZED_FEATURE(NoReferrer);
+TOKENIZED_FEATURE(Popup);
+TOKENIZED_FEATURE(Resizable);
+TOKENIZED_FEATURE(Scrollbars);
+TOKENIZED_FEATURE(Status);
+TOKENIZED_FEATURE(Toolbar);
}
diff --git a/Userland/Libraries/LibWeb/HTML/Window.cpp b/Userland/Libraries/LibWeb/HTML/Window.cpp
index 5c10cab613..abdea88a59 100644
--- a/Userland/Libraries/LibWeb/HTML/Window.cpp
+++ b/Userland/Libraries/LibWeb/HTML/Window.cpp
@@ -199,32 +199,6 @@ static OrderedHashMap<DeprecatedString, DeprecatedString> tokenize_open_features
}
// https://html.spec.whatwg.org/multipage/nav-history-apis.html#concept-window-open-features-parse-boolean
-static bool parse_boolean_feature(StringView value)
-{
- // 1. If value is the empty string, then return true.
- if (value.is_empty())
- return true;
-
- // 2. If value is "yes", then return true.
- if (value == "yes"sv)
- return true;
-
- // 3. If value is "true", then return true.
- if (value == "true"sv)
- return true;
-
- // 4. Let parsed be the result of parsing value as an integer.
- auto parsed = value.to_int<i64>();
-
- // 5. If parsed is an error, then set it to 0.
- if (!parsed.has_value())
- parsed = 0;
-
- // 6. Return false if parsed is 0, and true otherwise.
- return *parsed != 0;
-}
-
-// https://html.spec.whatwg.org/multipage/nav-history-apis.html#concept-window-open-features-parse-boolean
template<Enum T>
static T parse_boolean_feature(StringView value)
{
@@ -252,66 +226,66 @@ static T parse_boolean_feature(StringView value)
}
// https://html.spec.whatwg.org/multipage/window-object.html#popup-window-is-requested
-static bool check_if_a_popup_window_is_requested(OrderedHashMap<DeprecatedString, DeprecatedString> const& tokenized_features)
+static TokenizedFeature::Popup check_if_a_popup_window_is_requested(OrderedHashMap<DeprecatedString, DeprecatedString> const& tokenized_features)
{
// 1. If tokenizedFeatures is empty, then return false.
if (tokenized_features.is_empty())
- return false;
+ return TokenizedFeature::Popup::No;
// 2. If tokenizedFeatures["popup"] exists, then return the result of parsing tokenizedFeatures["popup"] as a boolean feature.
if (auto popup_feature = tokenized_features.get("popup"sv); popup_feature.has_value())
- return parse_boolean_feature(*popup_feature);
+ return parse_boolean_feature<TokenizedFeature::Popup>(*popup_feature);
// https://html.spec.whatwg.org/multipage/window-object.html#window-feature-is-set
- auto check_if_a_window_feature_is_set = [&](StringView feature_name, bool default_value) {
+ auto check_if_a_window_feature_is_set = [&]<Enum T>(StringView feature_name, T default_value) {
// 1. If tokenizedFeatures[featureName] exists, then return the result of parsing tokenizedFeatures[featureName] as a boolean feature.
if (auto feature = tokenized_features.get(feature_name); feature.has_value())
- return parse_boolean_feature(*feature);
+ return parse_boolean_feature<T>(*feature);
// 2. Return defaultValue.
return default_value;
};
// 3. Let location be the result of checking if a window feature is set, given tokenizedFeatures, "location", and false.
- auto location = check_if_a_window_feature_is_set("location"sv, false);
+ auto location = check_if_a_window_feature_is_set("location"sv, TokenizedFeature::Location::No);
// 4. Let toolbar be the result of checking if a window feature is set, given tokenizedFeatures, "toolbar", and false.
- auto toolbar = check_if_a_window_feature_is_set("toolbar"sv, false);
+ auto toolbar = check_if_a_window_feature_is_set("toolbar"sv, TokenizedFeature::Toolbar::No);
// 5. If location and toolbar are both false, then return true.
- if (!location && !toolbar)
- return true;
+ if (location == TokenizedFeature::Location::No && toolbar == TokenizedFeature::Toolbar::No)
+ return TokenizedFeature::Popup::Yes;
// 6. Let menubar be the result of checking if a window feature is set, given tokenizedFeatures, menubar", and false.
- auto menubar = check_if_a_window_feature_is_set("menubar"sv, false);
+ auto menubar = check_if_a_window_feature_is_set("menubar"sv, TokenizedFeature::Menubar::No);
// 7. If menubar is false, then return true.
- if (!menubar)
- return true;
+ if (menubar == TokenizedFeature::Menubar::No)
+ return TokenizedFeature::Popup::Yes;
// 8. Let resizable be the result of checking if a window feature is set, given tokenizedFeatures, "resizable", and true.
- auto resizable = check_if_a_window_feature_is_set("resizable"sv, true);
+ auto resizable = check_if_a_window_feature_is_set("resizable"sv, TokenizedFeature::Resizable::Yes);
// 9. If resizable is false, then return true.
- if (!resizable)
- return true;
+ if (resizable == TokenizedFeature::Resizable::No)
+ return TokenizedFeature::Popup::Yes;
// 10. Let scrollbars be the result of checking if a window feature is set, given tokenizedFeatures, "scrollbars", and false.
- auto scrollbars = check_if_a_window_feature_is_set("scrollbars"sv, false);
+ auto scrollbars = check_if_a_window_feature_is_set("scrollbars"sv, TokenizedFeature::Scrollbars::No);
// 11. If scrollbars is false, then return true.
- if (!scrollbars)
- return true;
+ if (scrollbars == TokenizedFeature::Scrollbars::No)
+ return TokenizedFeature::Popup::Yes;
// 12. Let status be the result of checking if a window feature is set, given tokenizedFeatures, "status", and false.
- auto status = check_if_a_window_feature_is_set("status"sv, false);
+ auto status = check_if_a_window_feature_is_set("status"sv, TokenizedFeature::Status::No);
// 13. If status is false, then return true.
- if (!status)
- return true;
+ if (status == TokenizedFeature::Status::No)
+ return TokenizedFeature::Popup::Yes;
// 14. Return false.
- return false;
+ return TokenizedFeature::Popup::No;
}
// FIXME: This is based on the old 'browsing context' concept, which was replaced with 'navigable'