зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1583044: Make nsMozIconURI serializeable. r=valentin
Differential Revision: https://phabricator.services.mozilla.com/D49442 --HG-- extra : moz-landing-system : lando
This commit is contained in:
Родитель
5f72da5f69
Коммит
89195abaf2
|
@ -0,0 +1,12 @@
|
|||
<html>
|
||||
<head>
|
||||
<title>
|
||||
Bug 1583044
|
||||
</title>
|
||||
</head>
|
||||
<body>
|
||||
<script>
|
||||
window.location.href="moz-icon://.pdf?size=128";
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1 @@
|
|||
load 1583044.html
|
|
@ -12,6 +12,9 @@
|
|||
#include "mozilla/Sprintf.h"
|
||||
|
||||
#include "nsIIOService.h"
|
||||
#include "nsISerializable.h"
|
||||
#include "nsIObjectInputStream.h"
|
||||
#include "nsIObjectOutputStream.h"
|
||||
#include "nsIURL.h"
|
||||
#include "nsNetUtil.h"
|
||||
#include "plstr.h"
|
||||
|
@ -30,6 +33,10 @@ using namespace mozilla::ipc;
|
|||
# define SANE_FILE_NAME_LEN 1024
|
||||
#endif
|
||||
|
||||
static NS_DEFINE_CID(kThisIconURIImplementationCID,
|
||||
NS_THIS_ICONURI_IMPLEMENTATION_CID);
|
||||
static NS_DEFINE_CID(kIconURICID, NS_ICONURI_CID);
|
||||
|
||||
// helper function for parsing out attributes like size, and contentType
|
||||
// from the icon url.
|
||||
static void extractAttributeValue(const char* aSearchString,
|
||||
|
@ -51,11 +58,14 @@ nsMozIconURI::~nsMozIconURI() {}
|
|||
NS_IMPL_ADDREF(nsMozIconURI)
|
||||
NS_IMPL_RELEASE(nsMozIconURI)
|
||||
|
||||
NS_INTERFACE_MAP_BEGIN(nsMozIconURI)
|
||||
NS_INTERFACE_MAP_ENTRY(nsIMozIconURI)
|
||||
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIURI)
|
||||
NS_INTERFACE_MAP_ENTRY(nsIURI)
|
||||
NS_INTERFACE_MAP_ENTRY_CONDITIONAL(nsINestedURI, mIconURL)
|
||||
NS_INTERFACE_TABLE_HEAD(nsMozIconURI)
|
||||
NS_INTERFACE_TABLE(nsMozIconURI, nsIMozIconURI, nsIURI, nsISerializable,
|
||||
nsIClassInfo)
|
||||
NS_INTERFACE_TABLE_TO_MAP_SEGUE
|
||||
if (aIID.Equals(kThisIconURIImplementationCID))
|
||||
foundInterface = static_cast<nsIURI*>(this);
|
||||
else if (aIID.Equals(NS_GET_IID(nsINestedURI)) && mIconURL)
|
||||
foundInterface = static_cast<nsINestedURI*>(this);
|
||||
NS_INTERFACE_MAP_END
|
||||
|
||||
#define MOZICON_SCHEME "moz-icon:"
|
||||
|
@ -132,7 +142,8 @@ nsMozIconURI::GetHasRef(bool* result) {
|
|||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMPL_ISUPPORTS(nsMozIconURI::Mutator, nsIURISetters, nsIURIMutator)
|
||||
NS_IMPL_NSIURIMUTATOR_ISUPPORTS(nsMozIconURI::Mutator, nsIURISetters,
|
||||
nsIURIMutator, nsISerializable)
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsMozIconURI::Mutate(nsIURIMutator** aMutator) {
|
||||
|
@ -617,3 +628,74 @@ NS_IMETHODIMP
|
|||
nsMozIconURI::GetInnermostURI(nsIURI** aURI) {
|
||||
return NS_ImplGetInnermostURI(this, aURI);
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsMozIconURI::Read(nsIObjectInputStream* aStream) {
|
||||
MOZ_ASSERT_UNREACHABLE("Use nsIURIMutator.read() instead");
|
||||
return NS_ERROR_NOT_IMPLEMENTED;
|
||||
}
|
||||
|
||||
nsresult nsMozIconURI::ReadPrivate(nsIObjectInputStream* aStream) {
|
||||
nsAutoCString spec;
|
||||
nsresult rv = aStream->ReadCString(spec);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
return SetSpecInternal(spec);
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsMozIconURI::Write(nsIObjectOutputStream* aStream) {
|
||||
nsAutoCString spec;
|
||||
nsresult rv = GetSpec(spec);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
return aStream->WriteStringZ(spec.get());
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
// nsSimpleURI::nsIClassInfo
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsMozIconURI::GetInterfaces(nsTArray<nsIID>& array) {
|
||||
array.Clear();
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsMozIconURI::GetScriptableHelper(nsIXPCScriptable** _retval) {
|
||||
*_retval = nullptr;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsMozIconURI::GetContractID(nsACString& aContractID) {
|
||||
// Make sure to modify any subclasses as needed if this ever
|
||||
// changes.
|
||||
aContractID.SetIsVoid(true);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsMozIconURI::GetClassDescription(nsACString& aClassDescription) {
|
||||
aClassDescription.SetIsVoid(true);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsMozIconURI::GetClassID(nsCID** aClassID) {
|
||||
// Make sure to modify any subclasses as needed if this ever
|
||||
// changes to not call the virtual GetClassIDNoAlloc.
|
||||
*aClassID = (nsCID*)moz_xmalloc(sizeof(nsCID));
|
||||
return GetClassIDNoAlloc(*aClassID);
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsMozIconURI::GetFlags(uint32_t* aFlags) {
|
||||
*aFlags = nsIClassInfo::MAIN_THREAD_ONLY;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsMozIconURI::GetClassIDNoAlloc(nsCID* aClassIDNoAlloc) {
|
||||
*aClassIDNoAlloc = kIconURICID;
|
||||
return NS_OK;
|
||||
}
|
||||
|
|
|
@ -10,19 +10,32 @@
|
|||
#include "nsIIconURI.h"
|
||||
#include "nsCOMPtr.h"
|
||||
#include "nsString.h"
|
||||
#include "nsIClassInfo.h"
|
||||
#include "nsINestedURI.h"
|
||||
#include "nsIURIMutator.h"
|
||||
|
||||
#define NS_THIS_ICONURI_IMPLEMENTATION_CID \
|
||||
{ /* 0b9bb0c2-fee6-470b-b9b9-9fd9462b5e19 */ \
|
||||
0x5c3e417f, 0xb686, 0x4105, { \
|
||||
0x86, 0xe7, 0xf9, 0x1b, 0xac, 0x97, 0x4d, 0x5c \
|
||||
} \
|
||||
}
|
||||
|
||||
namespace mozilla {
|
||||
class Encoding;
|
||||
}
|
||||
|
||||
class nsMozIconURI final : public nsIMozIconURI, public nsINestedURI {
|
||||
class nsMozIconURI final : public nsIMozIconURI,
|
||||
public nsINestedURI,
|
||||
public nsISerializable,
|
||||
public nsIClassInfo {
|
||||
public:
|
||||
NS_DECL_THREADSAFE_ISUPPORTS
|
||||
NS_DECL_NSIURI
|
||||
NS_DECL_NSIMOZICONURI
|
||||
NS_DECL_NSINESTEDURI
|
||||
NS_DECL_NSISERIALIZABLE
|
||||
NS_DECL_NSICLASSINFO
|
||||
|
||||
protected:
|
||||
nsMozIconURI();
|
||||
|
@ -56,14 +69,25 @@ class nsMozIconURI final : public nsIMozIconURI, public nsINestedURI {
|
|||
nsresult SetQuery(const nsACString& input);
|
||||
nsresult SetQueryWithEncoding(const nsACString& input,
|
||||
const mozilla::Encoding* encoding);
|
||||
nsresult ReadPrivate(nsIObjectInputStream* stream);
|
||||
bool Deserialize(const mozilla::ipc::URIParams&);
|
||||
|
||||
public:
|
||||
class Mutator final : public nsIURIMutator,
|
||||
public BaseURIMutator<nsMozIconURI> {
|
||||
public BaseURIMutator<nsMozIconURI>,
|
||||
public nsISerializable {
|
||||
NS_DECL_ISUPPORTS
|
||||
NS_FORWARD_SAFE_NSIURISETTERS_RET(mURI)
|
||||
|
||||
NS_IMETHOD
|
||||
Write(nsIObjectOutputStream* aOutputStream) override {
|
||||
return NS_ERROR_NOT_IMPLEMENTED;
|
||||
}
|
||||
|
||||
MOZ_MUST_USE NS_IMETHOD Read(nsIObjectInputStream* aStream) override {
|
||||
return InitFromInputStream(aStream);
|
||||
}
|
||||
|
||||
NS_IMETHOD Deserialize(const mozilla::ipc::URIParams& aParams) override {
|
||||
return InitFromIPCParams(aParams);
|
||||
}
|
||||
|
|
|
@ -59,6 +59,14 @@
|
|||
} \
|
||||
}
|
||||
|
||||
// component implementing nsIURI, nsISerializable, and nsIClassInfo.
|
||||
#define NS_ICONURI_CID \
|
||||
{ /* 1460df3b-774c-4205-8349-838e507c3ef9 */ \
|
||||
0x1460df3b, 0x774c, 0x4205, { \
|
||||
0x83, 0x49, 0x83, 0x8e, 0x50, 0x7c, 0x3e, 0xf9 \
|
||||
} \
|
||||
}
|
||||
|
||||
#define NS_SIMPLEURIMUTATOR_CONTRACTID \
|
||||
"@mozilla.org/network/simple-uri-mutator;1"
|
||||
#define NS_SIMPLEURIMUTATOR_CID \
|
||||
|
|
|
@ -25,6 +25,7 @@ skip-if(!webrtc) include ../../dom/media/tests/crashtests/crashtests.list
|
|||
include ../../dom/media/webspeech/synth/crashtests/crashtests.list
|
||||
include ../../dom/offline/crashtests/crashtests.list
|
||||
include ../../dom/plugins/test/crashtests/crashtests.list
|
||||
include ../../dom/security/test/crashtests/crashtests.list
|
||||
include ../../dom/smil/crashtests/crashtests.list
|
||||
include ../../dom/svg/crashtests/crashtests.list
|
||||
include ../../dom/workers/test/crashtests/crashtests.list
|
||||
|
|
Загрузка…
Ссылка в новой задаче