mirror of
https://github.com/RGBCube/serenity
synced 2025-05-31 06:38:10 +00:00
LibWeb+Browser: Add Debug menu action for toggling Same-Origin Policy
Sometimes it's useful to turn off the SOP for testing purposes. Let's make that easy by having a Debug menu item for it. :^)
This commit is contained in:
parent
c181494b19
commit
19de6bb1cc
5 changed files with 29 additions and 1 deletions
|
@ -377,6 +377,15 @@ void BrowserWindow::build_menus()
|
||||||
spoof_user_agent_menu.add_action(custom_user_agent);
|
spoof_user_agent_menu.add_action(custom_user_agent);
|
||||||
m_user_agent_spoof_actions.add_action(custom_user_agent);
|
m_user_agent_spoof_actions.add_action(custom_user_agent);
|
||||||
|
|
||||||
|
debug_menu.add_separator();
|
||||||
|
auto same_origin_policy_action = GUI::Action::create_checkable(
|
||||||
|
"Enable Same &Origin Policy", [this](auto& action) {
|
||||||
|
active_tab().m_web_content_view->debug_request("same-origin-policy", action.is_checked() ? "on" : "off");
|
||||||
|
},
|
||||||
|
this);
|
||||||
|
same_origin_policy_action->set_checked(true);
|
||||||
|
debug_menu.add_action(same_origin_policy_action);
|
||||||
|
|
||||||
auto& help_menu = add_menu("&Help");
|
auto& help_menu = add_menu("&Help");
|
||||||
help_menu.add_action(WindowActions::the().about_action());
|
help_menu.add_action(WindowActions::the().about_action());
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
#include <LibWeb/HTML/BrowsingContextContainer.h>
|
#include <LibWeb/HTML/BrowsingContextContainer.h>
|
||||||
#include <LibWeb/Origin.h>
|
#include <LibWeb/Origin.h>
|
||||||
#include <LibWeb/Page/BrowsingContext.h>
|
#include <LibWeb/Page/BrowsingContext.h>
|
||||||
|
#include <LibWeb/Page/Page.h>
|
||||||
|
|
||||||
namespace Web::HTML {
|
namespace Web::HTML {
|
||||||
|
|
||||||
|
@ -43,6 +44,10 @@ Origin BrowsingContextContainer::content_origin() const
|
||||||
|
|
||||||
bool BrowsingContextContainer::may_access_from_origin(const Origin& origin) const
|
bool BrowsingContextContainer::may_access_from_origin(const Origin& origin) const
|
||||||
{
|
{
|
||||||
|
if (auto* page = document().page()) {
|
||||||
|
if (!page->is_same_origin_policy_enabled())
|
||||||
|
return true;
|
||||||
|
}
|
||||||
return origin.is_same(content_origin());
|
return origin.is_same(content_origin());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -56,11 +56,16 @@ public:
|
||||||
Gfx::Palette palette() const;
|
Gfx::Palette palette() const;
|
||||||
Gfx::IntRect screen_rect() const;
|
Gfx::IntRect screen_rect() const;
|
||||||
|
|
||||||
|
bool is_same_origin_policy_enabled() const { return m_same_origin_policy_enabled; }
|
||||||
|
void set_same_origin_policy_enabled(bool b) { m_same_origin_policy_enabled = b; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
PageClient& m_client;
|
PageClient& m_client;
|
||||||
|
|
||||||
RefPtr<BrowsingContext> m_top_level_browsing_context;
|
RefPtr<BrowsingContext> m_top_level_browsing_context;
|
||||||
WeakPtr<BrowsingContext> m_focused_context;
|
WeakPtr<BrowsingContext> m_focused_context;
|
||||||
|
|
||||||
|
bool m_same_origin_policy_enabled { true };
|
||||||
};
|
};
|
||||||
|
|
||||||
class PageClient {
|
class PageClient {
|
||||||
|
|
|
@ -18,6 +18,7 @@
|
||||||
#include <LibWeb/HTML/EventNames.h>
|
#include <LibWeb/HTML/EventNames.h>
|
||||||
#include <LibWeb/Loader/ResourceLoader.h>
|
#include <LibWeb/Loader/ResourceLoader.h>
|
||||||
#include <LibWeb/Origin.h>
|
#include <LibWeb/Origin.h>
|
||||||
|
#include <LibWeb/Page/Page.h>
|
||||||
#include <LibWeb/XHR/EventNames.h>
|
#include <LibWeb/XHR/EventNames.h>
|
||||||
#include <LibWeb/XHR/ProgressEvent.h>
|
#include <LibWeb/XHR/ProgressEvent.h>
|
||||||
#include <LibWeb/XHR/XMLHttpRequest.h>
|
#include <LibWeb/XHR/XMLHttpRequest.h>
|
||||||
|
@ -172,7 +173,11 @@ DOM::ExceptionOr<void> XMLHttpRequest::send()
|
||||||
// TODO: Add support for preflight requests to support CORS requests
|
// TODO: Add support for preflight requests to support CORS requests
|
||||||
Origin request_url_origin = Origin(request_url.protocol(), request_url.host(), request_url.port());
|
Origin request_url_origin = Origin(request_url.protocol(), request_url.host(), request_url.port());
|
||||||
|
|
||||||
if (!m_window->associated_document().origin().is_same(request_url_origin)) {
|
bool should_enforce_same_origin_policy = true;
|
||||||
|
if (auto* page = m_window->page())
|
||||||
|
should_enforce_same_origin_policy = page->is_same_origin_policy_enabled();
|
||||||
|
|
||||||
|
if (should_enforce_same_origin_policy && !m_window->associated_document().origin().is_same(request_url_origin)) {
|
||||||
dbgln("XHR failed to load: Same-Origin Policy violation: {} may not load {}", m_window->associated_document().url(), request_url);
|
dbgln("XHR failed to load: Same-Origin Policy violation: {} may not load {}", m_window->associated_document().url(), request_url);
|
||||||
auto weak_this = make_weak_ptr();
|
auto weak_this = make_weak_ptr();
|
||||||
if (!weak_this)
|
if (!weak_this)
|
||||||
|
|
|
@ -207,6 +207,10 @@ void ClientConnection::debug_request(const String& request, const String& argume
|
||||||
if (request == "spoof-user-agent") {
|
if (request == "spoof-user-agent") {
|
||||||
Web::ResourceLoader::the().set_user_agent(argument);
|
Web::ResourceLoader::the().set_user_agent(argument);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (request == "same-origin-policy") {
|
||||||
|
m_page_host->page().set_same_origin_policy_enabled(argument == "on");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ClientConnection::get_source()
|
void ClientConnection::get_source()
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue