summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Base/home/anon/www/location.html12
-rw-r--r--Libraries/LibWeb/Bindings/LocationObject.cpp9
-rw-r--r--Libraries/LibWeb/Bindings/LocationObject.h2
-rw-r--r--Libraries/LibWeb/DOM/Window.cpp11
-rw-r--r--Libraries/LibWeb/DOM/Window.h1
5 files changed, 32 insertions, 3 deletions
diff --git a/Base/home/anon/www/location.html b/Base/home/anon/www/location.html
index fd04896897..d7e08fe5d4 100644
--- a/Base/home/anon/www/location.html
+++ b/Base/home/anon/www/location.html
@@ -3,12 +3,14 @@
<head>
<title>window.location test</title>
<style>
- #clickme { background-color: red; color: yellow; }
+ #set_href { background-color: red; color: yellow; }
+ #reload { background-color: blue; color: #ccc; }
</style>
</head>
<body>
<pre></pre>
- <div id="clickme">Click me to navigate away!</div>
+ <div id="set_href">Click me to set location.href!</div>
+ <div id="reload">Click me to call location.reload()!</div>
<script>
var pre = document.querySelectorAll("pre")[0];
pre.innerHTML += "href: " + location.href + '\n';
@@ -19,9 +21,13 @@
pre.innerHTML += "hash: " + location.hash + '\n';
pre.innerHTML += "search: " + location.search + '\n';
- document.getElementById("clickme").addEventListener("mousedown", function() {
+ document.getElementById("set_href").addEventListener("mousedown", function() {
window.location.href = 'http://serenityos.org/';
});
+
+ document.getElementById("reload").addEventListener("mousedown", function() {
+ window.location.reload();
+ });
</script>
</body>
</html>
diff --git a/Libraries/LibWeb/Bindings/LocationObject.cpp b/Libraries/LibWeb/Bindings/LocationObject.cpp
index 472fb7bc92..0b3b3df9b2 100644
--- a/Libraries/LibWeb/Bindings/LocationObject.cpp
+++ b/Libraries/LibWeb/Bindings/LocationObject.cpp
@@ -45,6 +45,8 @@ LocationObject::LocationObject()
put_native_property("hash", hash_getter, nullptr);
put_native_property("search", search_getter, nullptr);
put_native_property("protocol", protocol_getter, nullptr);
+
+ put_native_function("reload", reload);
}
LocationObject::~LocationObject()
@@ -110,6 +112,13 @@ JS::Value LocationObject::protocol_getter(JS::Interpreter& interpreter)
return JS::js_string(interpreter, builder.to_string());
}
+JS::Value LocationObject::reload(JS::Interpreter& interpreter)
+{
+ auto& window = static_cast<WindowObject&>(interpreter.global_object());
+ window.impl().did_call_location_reload({});
+ return JS::js_undefined();
+}
+
}
}
diff --git a/Libraries/LibWeb/Bindings/LocationObject.h b/Libraries/LibWeb/Bindings/LocationObject.h
index 4cabdf88e3..3e253913fe 100644
--- a/Libraries/LibWeb/Bindings/LocationObject.h
+++ b/Libraries/LibWeb/Bindings/LocationObject.h
@@ -40,6 +40,8 @@ public:
private:
virtual const char* class_name() const override { return "LocationObject"; }
+ static JS::Value reload(JS::Interpreter&);
+
static JS::Value href_getter(JS::Interpreter&);
static void href_setter(JS::Interpreter&, JS::Value);
diff --git a/Libraries/LibWeb/DOM/Window.cpp b/Libraries/LibWeb/DOM/Window.cpp
index 01bf4ca225..898e466bc0 100644
--- a/Libraries/LibWeb/DOM/Window.cpp
+++ b/Libraries/LibWeb/DOM/Window.cpp
@@ -119,4 +119,15 @@ void Window::did_set_location_href(Badge<Bindings::LocationObject>, const String
view->load(new_href);
}
+void Window::did_call_location_reload(Badge<Bindings::LocationObject>)
+{
+ auto* frame = document().frame();
+ if (!frame)
+ return;
+ auto* view = frame->html_view();
+ if (!view)
+ return;
+ view->reload();
+}
+
}
diff --git a/Libraries/LibWeb/DOM/Window.h b/Libraries/LibWeb/DOM/Window.h
index 77214a7de6..0428dc6cfc 100644
--- a/Libraries/LibWeb/DOM/Window.h
+++ b/Libraries/LibWeb/DOM/Window.h
@@ -50,6 +50,7 @@ public:
void set_timeout(JS::Function&, i32);
void did_set_location_href(Badge<Bindings::LocationObject>, const String& new_href);
+ void did_call_location_reload(Badge<Bindings::LocationObject>);
private:
explicit Window(Document&);