Просмотр исходного кода

LibWeb: Modify StylePropertiesModel to work with JSON

Now that the DOM Inspector communicates remotely with the web content,
we can't read the `StyleProperties` object from a `Node` directly, but
will receive JSON over IPC. This updates the model to match.
Sam Atkins 3 лет назад
Родитель
Сommit
57ee7b3d56

+ 13 - 10
Userland/Libraries/LibWeb/StylePropertiesModel.cpp

@@ -1,23 +1,21 @@
 /*
  * Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org>
+ * Copyright (c) 2021, Sam Atkins <atkinssj@gmail.com>
  *
  * SPDX-License-Identifier: BSD-2-Clause
  */
 
+#include "StylePropertiesModel.h"
 #include <AK/QuickSort.h>
-#include <LibWeb/CSS/PropertyID.h>
-#include <LibWeb/CSS/StyleProperties.h>
-#include <LibWeb/DOM/Document.h>
-#include <LibWeb/StylePropertiesModel.h>
 
 namespace Web {
 
-StylePropertiesModel::StylePropertiesModel(const CSS::StyleProperties& properties)
-    : m_properties(properties)
+StylePropertiesModel::StylePropertiesModel(JsonObject properties)
+    : m_properties(move(properties))
 {
-    properties.for_each_property([&](auto property_id, auto& property_value) {
+    m_properties.for_each_member([&](auto& property_name, auto& property_value) {
         Value value;
-        value.name = CSS::string_from_property_id(property_id);
+        value.name = property_name;
         value.value = property_value.to_string();
         m_values.append(value);
     });
@@ -25,7 +23,11 @@ StylePropertiesModel::StylePropertiesModel(const CSS::StyleProperties& propertie
     quick_sort(m_values, [](auto& a, auto& b) { return a.name < b.name; });
 }
 
-int StylePropertiesModel::row_count(const GUI::ModelIndex&) const
+StylePropertiesModel::~StylePropertiesModel()
+{
+}
+
+int StylePropertiesModel::row_count(GUI::ModelIndex const&) const
 {
     return m_values.size();
 }
@@ -41,7 +43,8 @@ String StylePropertiesModel::column_name(int column_index) const
         VERIFY_NOT_REACHED();
     }
 }
-GUI::Variant StylePropertiesModel::data(const GUI::ModelIndex& index, GUI::ModelRole role) const
+
+GUI::Variant StylePropertiesModel::data(GUI::ModelIndex const& index, GUI::ModelRole role) const
 {
     auto& value = m_values[index.row()];
     if (role == GUI::ModelRole::Display) {

+ 17 - 10
Userland/Libraries/LibWeb/StylePropertiesModel.h

@@ -1,19 +1,18 @@
 /*
  * Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org>
+ * Copyright (c) 2021, Sam Atkins <atkinssj@gmail.com>
  *
  * SPDX-License-Identifier: BSD-2-Clause
  */
 
 #pragma once
 
-#include <AK/NonnullRefPtrVector.h>
+#include <AK/JsonObject.h>
 #include <LibGUI/Model.h>
 #include <LibWeb/CSS/StyleProperties.h>
 
 namespace Web {
 
-class StyleProperties;
-
 class StylePropertiesModel final : public GUI::Model {
 public:
     enum Column {
@@ -22,18 +21,26 @@ public:
         __Count
     };
 
-    static NonnullRefPtr<StylePropertiesModel> create(const CSS::StyleProperties& properties) { return adopt_ref(*new StylePropertiesModel(properties)); }
+    static NonnullRefPtr<StylePropertiesModel> create(StringView properties)
+    {
+        auto json_or_error = JsonValue::from_string(properties);
+        if (!json_or_error.has_value())
+            VERIFY_NOT_REACHED();
+
+        return adopt_ref(*new StylePropertiesModel(json_or_error.value().as_object()));
+    }
+
+    virtual ~StylePropertiesModel() override;
 
-    virtual int row_count(const GUI::ModelIndex& = GUI::ModelIndex()) const override;
-    virtual int column_count(const GUI::ModelIndex& = GUI::ModelIndex()) const override { return Column::__Count; }
+    virtual int row_count(GUI::ModelIndex const& = GUI::ModelIndex()) const override;
+    virtual int column_count(GUI::ModelIndex const& = GUI::ModelIndex()) const override { return Column::__Count; }
     virtual String column_name(int) const override;
-    virtual GUI::Variant data(const GUI::ModelIndex&, GUI::ModelRole) const override;
+    virtual GUI::Variant data(GUI::ModelIndex const&, GUI::ModelRole) const override;
 
 private:
-    explicit StylePropertiesModel(const CSS::StyleProperties& properties);
-    const CSS::StyleProperties& properties() const { return *m_properties; }
+    explicit StylePropertiesModel(JsonObject);
 
-    NonnullRefPtr<CSS::StyleProperties> m_properties;
+    JsonObject m_properties;
 
     struct Value {
         String name;