소스 검색

LibWeb: Add the StyleSheet.href attribute

This is only ever null at the moment, as we only set it on <style>
elements to begin with.
Andreas Kling 3 년 전
부모
커밋
0e758b4da8

+ 6 - 0
Userland/Libraries/LibWeb/CSS/StyleSheet.h

@@ -26,6 +26,11 @@ public:
     DOM::Element* owner_node() { return m_owner_node; }
     void set_owner_node(DOM::Element*);
 
+    String href() const { return m_location; }
+
+    String location() const { return m_location; }
+    void set_location(String location) { m_location = move(location); }
+
     String title() const { return m_title; }
     void set_title(String title) { m_title = move(title); }
 
@@ -51,6 +56,7 @@ private:
 
     WeakPtr<CSSStyleSheet> m_parent_style_sheet;
 
+    String m_location;
     String m_title;
     String m_type_string;
     String m_media_string;

+ 1 - 1
Userland/Libraries/LibWeb/CSS/StyleSheet.idl

@@ -7,7 +7,7 @@ interface StyleSheet {
     readonly attribute Element? ownerNode;
     readonly attribute CSSOMString type;
 
-    // readonly attribute USVString? href;
+    readonly attribute USVString? href;
     readonly attribute CSSStyleSheet? parentStyleSheet;
     readonly attribute DOMString? title;
     // [SameObject, PutForwards=mediaText] readonly attribute MediaList media;

+ 3 - 3
Userland/Libraries/LibWeb/HTML/HTMLStyleElement.cpp

@@ -74,7 +74,7 @@ static void add_a_css_style_sheet(DOM::Document& document, NonnullRefPtr<CSS::CS
 }
 
 // https://www.w3.org/TR/cssom/#create-a-css-style-sheet
-static void create_a_css_style_sheet(DOM::Document& document, String type, DOM::Element* owner_node, String media, String title, bool alternate, bool origin_clean, void* location, CSS::CSSStyleSheet* parent_style_sheet, CSS::CSSRule* owner_rule, NonnullRefPtr<CSS::CSSStyleSheet> sheet)
+static void create_a_css_style_sheet(DOM::Document& document, String type, DOM::Element* owner_node, String media, String title, bool alternate, bool origin_clean, String location, CSS::CSSStyleSheet* parent_style_sheet, CSS::CSSRule* owner_rule, NonnullRefPtr<CSS::CSSStyleSheet> sheet)
 {
     // 1. Create a new CSS style sheet object and set its properties as specified.
     // FIXME: We receive `sheet` from the caller already. This is weird.
@@ -87,7 +87,7 @@ static void create_a_css_style_sheet(DOM::Document& document, String type, DOM::
     sheet->set_title(move(title));
     sheet->set_alternate(alternate);
     sheet->set_origin_clean(origin_clean);
-    (void)location;
+    sheet->set_location(move(location));
 
     // 2. Then run the add a CSS style sheet steps for the newly created CSS style sheet.
     add_a_css_style_sheet(document, move(sheet));
@@ -144,7 +144,7 @@ void HTMLStyleElement::update_a_style_block()
         in_a_document_tree() ? attribute(HTML::AttributeNames::title) : String::empty(),
         false,
         true,
-        nullptr,
+        {},
         nullptr,
         nullptr,
         sheet.release_nonnull());