ladybird/Libraries/LibWeb/DOM/QualifiedName.h
Andreas Kling b3fd939628 LibWeb: Make sure we run selectors for mixed-case tag names
Before this change, we would never apply CSS rules where the selector
had a mixed-case tag name. This happened because our rule caches would
key them on the lowercased tag name, but we didn't lowercase the tag
name when fetching things from the cache.

This uncovered the fact that the SVG2 spec has a bunch of style applied
to non-rendered elements in a way that doesn't match other browsers.
Instead of blindly following the spec, we now match other browsers.
2025-07-09 14:36:08 +02:00

46 lines
1.3 KiB
C++

/*
* Copyright (c) 2020, the SerenityOS developers.
* Copyright (c) 2022, Andreas Kling <andreas@ladybird.org>
* Copyright (c) 2023, Shannon Booth <shannon@serenityos.org>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#pragma once
#include <AK/FlyString.h>
#include <AK/Optional.h>
namespace Web::DOM {
class QualifiedName {
public:
QualifiedName(FlyString const& local_name, Optional<FlyString> const& prefix, Optional<FlyString> const& namespace_);
FlyString const& local_name() const { return m_impl->local_name; }
Optional<FlyString> const& prefix() const { return m_impl->prefix; }
Optional<FlyString> const& namespace_() const { return m_impl->namespace_; }
FlyString const& lowercased_local_name() const { return m_impl->lowercased_local_name; }
FlyString const& as_string() const { return m_impl->as_string; }
struct Impl : public RefCounted<Impl> {
Impl(FlyString const& local_name, Optional<FlyString> const& prefix, Optional<FlyString> const& namespace_);
~Impl();
void make_internal_string();
FlyString local_name;
FlyString lowercased_local_name;
Optional<FlyString> prefix;
Optional<FlyString> namespace_;
FlyString as_string;
};
void set_prefix(Optional<FlyString> value);
private:
NonnullRefPtr<Impl> m_impl;
};
}