diff --git a/Userland/Libraries/LibWeb/HTML/Window.cpp b/Userland/Libraries/LibWeb/HTML/Window.cpp
index 25e94e855a..9b3378d5d8 100644
--- a/Userland/Libraries/LibWeb/HTML/Window.cpp
+++ b/Userland/Libraries/LibWeb/HTML/Window.cpp
@@ -1137,6 +1137,7 @@ void Window::initialize_web_interfaces(Badge)
define_native_accessor(realm, "localStorage", local_storage_getter, {}, attr);
define_native_accessor(realm, "sessionStorage", session_storage_getter, {}, attr);
define_native_accessor(realm, "origin", origin_getter, {}, attr);
+ define_native_accessor(realm, "isSecureContext", is_secure_context_getter, {}, attr);
// Legacy
define_native_accessor(realm, "event", event_getter, event_setter, JS::Attribute::Enumerable);
@@ -1863,6 +1864,14 @@ JS_DEFINE_NATIVE_FUNCTION(Window::origin_getter)
return JS::PrimitiveString::create(vm, impl->associated_document().origin().serialize());
}
+// https://html.spec.whatwg.org/multipage/webappapis.html#dom-issecurecontext
+JS_DEFINE_NATIVE_FUNCTION(Window::is_secure_context_getter)
+{
+ auto* impl = TRY(impl_from(vm));
+ // The isSecureContext getter steps are to return true if this's relevant settings object is a secure context, or false otherwise.
+ return JS::Value(is_secure_context(impl->associated_document().relevant_settings_object()));
+}
+
JS_DEFINE_NATIVE_FUNCTION(Window::local_storage_getter)
{
auto* impl = TRY(impl_from(vm));
diff --git a/Userland/Libraries/LibWeb/HTML/Window.h b/Userland/Libraries/LibWeb/HTML/Window.h
index 1cf75d254e..32cdc96841 100644
--- a/Userland/Libraries/LibWeb/HTML/Window.h
+++ b/Userland/Libraries/LibWeb/HTML/Window.h
@@ -247,6 +247,7 @@ private:
JS_DECLARE_NATIVE_FUNCTION(local_storage_getter);
JS_DECLARE_NATIVE_FUNCTION(session_storage_getter);
JS_DECLARE_NATIVE_FUNCTION(origin_getter);
+ JS_DECLARE_NATIVE_FUNCTION(is_secure_context_getter);
JS_DECLARE_NATIVE_FUNCTION(open);
JS_DECLARE_NATIVE_FUNCTION(alert);