URLSearchParams.h 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. /*
  2. * Copyright (c) 2021, Idan Horowitz <idan.horowitz@serenityos.org>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #pragma once
  7. #include <AK/URL.h>
  8. #include <AK/Vector.h>
  9. #include <LibWeb/Bindings/Wrappable.h>
  10. #include <LibWeb/DOM/ExceptionOr.h>
  11. namespace Web::URL {
  12. struct QueryParam {
  13. String name;
  14. String value;
  15. };
  16. String url_encode(const Vector<QueryParam>&, AK::URL::PercentEncodeSet);
  17. Vector<QueryParam> url_decode(StringView const&);
  18. class URLSearchParams : public Bindings::Wrappable
  19. , public RefCounted<URLSearchParams> {
  20. public:
  21. using WrapperType = Bindings::URLSearchParamsWrapper;
  22. static NonnullRefPtr<URLSearchParams> create(Vector<QueryParam> list)
  23. {
  24. return adopt_ref(*new URLSearchParams(move(list)));
  25. }
  26. static DOM::ExceptionOr<NonnullRefPtr<URLSearchParams>> create_with_global_object(Bindings::WindowObject&, const String& init);
  27. void append(String const& name, String const& value);
  28. void delete_(String const& name);
  29. String get(String const& name);
  30. bool has(String const& name);
  31. void set(String const& name, String const& value);
  32. void sort();
  33. String to_string();
  34. private:
  35. friend class URL;
  36. explicit URLSearchParams(Vector<QueryParam> list)
  37. : m_list(move(list)) {};
  38. void update();
  39. Vector<QueryParam> m_list;
  40. WeakPtr<URL> m_url;
  41. };
  42. }
  43. namespace Web::Bindings {
  44. URLSearchParamsWrapper* wrap(JS::GlobalObject&, URL::URLSearchParams&);
  45. }