/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at http://mozilla.org/MPL/2.0/. */
#ifndef SubstitutingURL_h
#define SubstitutingURL_h
#include "nsStandardURL.h"
class nsIIOService;
namespace mozilla {
namespace net {
// SubstitutingURL : overrides nsStandardURL::GetFile to provide nsIFile
// resolution
class SubstitutingURL :
public nsStandardURL {
public:
NS_DECL_ISUPPORTS_INHERITED
virtual nsStandardURL* StartClone() override;
[[nodiscard]]
virtual nsresult EnsureFile() override;
private:
explicit SubstitutingURL() : nsStandardURL(
true) {}
explicit SubstitutingURL(
bool aSupportsFileURL) : nsStandardURL(
true) {
MOZ_ASSERT(aSupportsFileURL);
}
virtual nsresult Clone(nsIURI** aURI) override {
return nsStandardURL::Clone(aURI);
}
virtual ~SubstitutingURL() =
default;
public:
class Mutator :
public TemplatedMutator<SubstitutingURL> {
NS_DECL_ISUPPORTS
public:
explicit Mutator() =
default;
private:
virtual ~Mutator() =
default;
SubstitutingURL* Create() override {
return new SubstitutingURL(); }
};
NS_IMETHOD Mutate(nsIURIMutator** aMutator) override {
RefPtr<SubstitutingURL::Mutator> mutator =
new SubstitutingURL::Mutator();
nsresult rv = mutator->InitFromURI(
this);
if (NS_FAILED(rv)) {
return rv;
}
mutator.forget(aMutator);
return NS_OK;
}
NS_IMETHOD_(
void) Serialize(ipc::URIParams& aParams) override;
friend BaseURIMutator<SubstitutingURL>;
friend TemplatedMutator<SubstitutingURL>;
};
}
// namespace net
}
// namespace mozilla
#endif /* SubstitutingURL_h */