Construct URLSearchParams from sequence or from string

This commit is contained in:
JustOff 2019-03-13 21:20:12 +02:00 committed by Roy Tam
commit 5fc488fe61
3 changed files with 24 additions and 43 deletions

View file

@ -314,14 +314,6 @@ URLSearchParams::URLSearchParams(nsISupports* aParent,
{
}
URLSearchParams::URLSearchParams(nsISupports* aParent,
const URLSearchParams& aOther)
: mParams(new URLParams(*aOther.mParams.get()))
, mParent(aParent)
, mObserver(nullptr)
{
}
URLSearchParams::~URLSearchParams()
{
DeleteAll();
@ -335,34 +327,37 @@ URLSearchParams::WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto)
/* static */ already_AddRefed<URLSearchParams>
URLSearchParams::Constructor(const GlobalObject& aGlobal,
const nsAString& aInit,
const USVStringSequenceSequenceOrUSVString& aInit,
ErrorResult& aRv)
{
RefPtr<URLSearchParams> sp =
new URLSearchParams(aGlobal.GetAsSupports(), nullptr);
NS_ConvertUTF16toUTF8 input(aInit);
if (StringBeginsWith(input, NS_LITERAL_CSTRING("?"))) {
sp->ParseInput(Substring(input, 1, input.Length() - 1));
if (aInit.IsUSVString()) {
NS_ConvertUTF16toUTF8 input(aInit.GetAsUSVString());
if (StringBeginsWith(input, NS_LITERAL_CSTRING("?"))) {
sp->ParseInput(Substring(input, 1, input.Length() - 1));
} else {
sp->ParseInput(input);
}
} else if (aInit.IsUSVStringSequenceSequence()) {
const Sequence<Sequence<nsString>>& list =
aInit.GetAsUSVStringSequenceSequence();
for (uint32_t i = 0; i < list.Length(); ++i) {
const Sequence<nsString>& item = list[i];
if (item.Length() != 2) {
aRv.Throw(NS_ERROR_DOM_TYPE_ERR);
return nullptr;
}
sp->Append(item[0], item[1]);
}
} else {
sp->ParseInput(input);
MOZ_CRASH("This should not happen.");
}
return sp.forget();
}
/* static */ already_AddRefed<URLSearchParams>
URLSearchParams::Constructor(const GlobalObject& aGlobal,
URLSearchParams& aInit,
ErrorResult& aRv)
{
RefPtr<URLSearchParams> sp =
new URLSearchParams(aGlobal.GetAsSupports(), aInit);
return sp.forget();
}
void
URLSearchParams::ParseInput(const nsACString& aInput)
{

View file

@ -20,6 +20,7 @@ namespace mozilla {
namespace dom {
class URLSearchParams;
class USVStringSequenceSequenceOrUSVString;
class URLSearchParamsObserver : public nsISupports
{
@ -43,14 +44,6 @@ public:
DeleteAll();
}
explicit URLParams(const URLParams& aOther)
: mParams(aOther.mParams)
{}
URLParams(const URLParams&& aOther)
: mParams(Move(aOther.mParams))
{}
class ForEachIterator
{
public:
@ -144,9 +137,6 @@ public:
explicit URLSearchParams(nsISupports* aParent,
URLSearchParamsObserver* aObserver=nullptr);
URLSearchParams(nsISupports* aParent,
const URLSearchParams& aOther);
// WebIDL methods
nsISupports* GetParentObject() const
{
@ -157,11 +147,8 @@ public:
WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto) override;
static already_AddRefed<URLSearchParams>
Constructor(const GlobalObject& aGlobal, const nsAString& aInit,
ErrorResult& aRv);
static already_AddRefed<URLSearchParams>
Constructor(const GlobalObject& aGlobal, URLSearchParams& aInit,
Constructor(const GlobalObject& aGlobal,
const USVStringSequenceSequenceOrUSVString& aInit,
ErrorResult& aRv);
void ParseInput(const nsACString& aInput);

View file

@ -13,8 +13,7 @@
* http://www.openwebfoundation.org/legal/the-owf-1-0-agreements/owfa-1-0.
*/
[Constructor(optional USVString init = ""),
Constructor(URLSearchParams init),
[Constructor(optional (sequence<sequence<USVString>> or USVString) init = ""),
Exposed=(Window,Worker,WorkerDebugger,System)]
interface URLSearchParams {
void append(USVString name, USVString value);