URLSearchParams.h 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  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);
  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&, Variant<Vector<Vector<String>>, OrderedHashMap<String, String>, String> const& init);
  27. void append(String const& name, String const& value);
  28. void delete_(String const& name);
  29. String get(String const& name);
  30. Vector<String> get_all(String const& name);
  31. bool has(String const& name);
  32. void set(String const& name, String const& value);
  33. void sort();
  34. String to_string();
  35. using ForEachCallback = Function<JS::ThrowCompletionOr<void>(String const&, String const&)>;
  36. JS::ThrowCompletionOr<void> for_each(ForEachCallback);
  37. private:
  38. friend class URL;
  39. friend class URLSearchParamsIterator;
  40. explicit URLSearchParams(Vector<QueryParam> list)
  41. : m_list(move(list)) {};
  42. void update();
  43. Vector<QueryParam> m_list;
  44. WeakPtr<URL> m_url;
  45. };
  46. }
  47. namespace Web::Bindings {
  48. URLSearchParamsWrapper* wrap(JS::GlobalObject&, URL::URLSearchParams&);
  49. }