Inspector.cpp 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. /*
  2. * Copyright (c) 2023, Tim Flynn <trflynn89@serenityos.org>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #include <LibJS/Runtime/Realm.h>
  7. #include <LibJS/Runtime/VM.h>
  8. #include <LibWeb/Bindings/InspectorPrototype.h>
  9. #include <LibWeb/Bindings/Intrinsics.h>
  10. #include <LibWeb/CSS/Selector.h>
  11. #include <LibWeb/DOM/NamedNodeMap.h>
  12. #include <LibWeb/HTML/BrowsingContext.h>
  13. #include <LibWeb/HTML/Window.h>
  14. #include <LibWeb/Internals/Inspector.h>
  15. #include <LibWeb/Page/Page.h>
  16. namespace Web::Internals {
  17. JS_DEFINE_ALLOCATOR(Inspector);
  18. Inspector::Inspector(JS::Realm& realm)
  19. : Bindings::PlatformObject(realm)
  20. {
  21. }
  22. Inspector::~Inspector() = default;
  23. void Inspector::initialize(JS::Realm& realm)
  24. {
  25. Base::initialize(realm);
  26. Object::set_prototype(&Bindings::ensure_web_prototype<Bindings::InspectorPrototype>(realm, "Inspector"_fly_string));
  27. }
  28. void Inspector::inspector_loaded()
  29. {
  30. if (auto* page = global_object().browsing_context()->page())
  31. page->client().inspector_did_load();
  32. }
  33. void Inspector::inspect_dom_node(i32 node_id, Optional<i32> const& pseudo_element)
  34. {
  35. if (auto* page = global_object().browsing_context()->page()) {
  36. page->client().inspector_did_select_dom_node(node_id, pseudo_element.map([](auto value) {
  37. VERIFY(value < to_underlying(Web::CSS::Selector::PseudoElement::PseudoElementCount));
  38. return static_cast<Web::CSS::Selector::PseudoElement>(value);
  39. }));
  40. }
  41. }
  42. void Inspector::set_dom_node_text(i32 node_id, String const& text)
  43. {
  44. if (auto* page = global_object().browsing_context()->page())
  45. page->client().inspector_did_set_dom_node_text(node_id, text);
  46. }
  47. void Inspector::set_dom_node_tag(i32 node_id, String const& tag)
  48. {
  49. if (auto* page = global_object().browsing_context()->page())
  50. page->client().inspector_did_set_dom_node_tag(node_id, tag);
  51. }
  52. void Inspector::replace_dom_node_attribute(i32 node_id, String const& name, JS::NonnullGCPtr<DOM::NamedNodeMap> replacement_attributes)
  53. {
  54. if (auto* page = global_object().browsing_context()->page())
  55. page->client().inspector_did_replace_dom_node_attribute(node_id, name, replacement_attributes);
  56. }
  57. void Inspector::execute_console_script(String const& script)
  58. {
  59. if (auto* page = global_object().browsing_context()->page())
  60. page->client().inspector_did_execute_console_script(script);
  61. }
  62. }