зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1769442 - Remove nsIFactory::lockFactory, breaking compatibility with IClassFactory. r=xpcom-reviewers,Jamie,necko-reviewers,kershaw,nika
nsIFactory is binary compatible with Windows COM's IClassFactory, but nothing seems to depend on it. This patch removes the test for compatibility, TestCOM, and removes the lockFactory method that isn't otherwise needed. Differential Revision: https://phabricator.services.mozilla.com/D146386
This commit is contained in:
Родитель
18fcb78a92
Коммит
01913de302
|
@ -67,10 +67,6 @@ var AboutModuleFactory = {
|
|||
return new AboutModule().QueryInterface(aIID);
|
||||
},
|
||||
|
||||
lockFactory(aLock) {
|
||||
throw Components.Exception("", Cr.NS_ERROR_NOT_IMPLEMENTED);
|
||||
},
|
||||
|
||||
QueryInterface: ChromeUtils.generateQI(["nsIFactory"]),
|
||||
};
|
||||
|
||||
|
|
|
@ -16,9 +16,6 @@ var provider = {
|
|||
}
|
||||
return this.QueryInterface(iid);
|
||||
},
|
||||
lockFactory: function eventsink_lockf(lock) {
|
||||
throw Components.Exception("", Cr.NS_ERROR_NOT_IMPLEMENTED);
|
||||
},
|
||||
startup() {},
|
||||
watch() {},
|
||||
shutdown() {},
|
||||
|
|
|
@ -16,9 +16,6 @@ var provider = {
|
|||
}
|
||||
return this.QueryInterface(iid);
|
||||
},
|
||||
lockFactory: function eventsink_lockf(lock) {
|
||||
throw Components.Exception("", Cr.NS_ERROR_NOT_IMPLEMENTED);
|
||||
},
|
||||
startup() {},
|
||||
watch() {},
|
||||
shutdown() {},
|
||||
|
|
|
@ -12,9 +12,6 @@ var factory = {
|
|||
createInstance() {
|
||||
throw new Error("There is no history service");
|
||||
},
|
||||
lockFactory() {
|
||||
throw Components.Exception("", Cr.NS_ERROR_NOT_IMPLEMENTED);
|
||||
},
|
||||
QueryInterface: ChromeUtils.generateQI(["nsIFactory"]),
|
||||
};
|
||||
|
||||
|
|
|
@ -48,7 +48,6 @@ CustomProtocolHandler.prototype = {
|
|||
}
|
||||
return this.QueryInterface(aIID);
|
||||
},
|
||||
lockFactory() {},
|
||||
|
||||
/** nsISupports */
|
||||
QueryInterface: ChromeUtils.generateQI(["nsIProtocolHandler", "nsIFactory"]),
|
||||
|
|
|
@ -24,9 +24,6 @@ var factory = {
|
|||
}
|
||||
return unsafeAboutModule.QueryInterface(aIID);
|
||||
},
|
||||
lockFactory(aLock) {
|
||||
throw Components.Exception("", Cr.NS_ERROR_NOT_IMPLEMENTED);
|
||||
},
|
||||
QueryInterface: ChromeUtils.generateQI(["nsIFactory"]),
|
||||
};
|
||||
|
||||
|
|
|
@ -116,7 +116,6 @@ ProtocolHandler.prototype = {
|
|||
}
|
||||
return this.QueryInterface(aIID);
|
||||
},
|
||||
lockFactory() {},
|
||||
|
||||
/** nsISupports */
|
||||
QueryInterface: ChromeUtils.generateQI([
|
||||
|
|
|
@ -27,9 +27,6 @@ var sniffer = {
|
|||
}
|
||||
return this.QueryInterface(iid);
|
||||
},
|
||||
lockFactory: function sniffer_lockf(lock) {
|
||||
throw Components.Exception("", Cr.NS_ERROR_NOT_IMPLEMENTED);
|
||||
},
|
||||
|
||||
getMIMETypeFromContent(request, data, length) {
|
||||
return sniffedType;
|
||||
|
|
|
@ -26,9 +26,6 @@ var eventsink = {
|
|||
}
|
||||
return this.QueryInterface(iid);
|
||||
},
|
||||
lockFactory: function eventsink_lockf(lock) {
|
||||
throw Components.Exception("", Cr.NS_ERROR_NOT_IMPLEMENTED);
|
||||
},
|
||||
|
||||
asyncOnChannelRedirect: function eventsink_onredir(
|
||||
oldChan,
|
||||
|
|
|
@ -38,7 +38,6 @@ TestProtocolHandlerFactory.prototype = {
|
|||
createInstance(delegate, iid) {
|
||||
return new TestProtocolHandler().QueryInterface(iid);
|
||||
},
|
||||
lockFactory(lock) {},
|
||||
};
|
||||
|
||||
function register_test_protocol_handler() {
|
||||
|
|
|
@ -52,7 +52,6 @@ TestProtocolHandlerFactory.prototype = {
|
|||
createInstance(delegate, iid) {
|
||||
return new TestProtocolHandler().QueryInterface(iid);
|
||||
},
|
||||
lockFactory(lock) {},
|
||||
};
|
||||
|
||||
function register_test_protocol_handler() {
|
||||
|
|
|
@ -68,9 +68,6 @@ var MockRegistrar = Object.freeze({
|
|||
|
||||
return wrappedMock.QueryInterface(iid);
|
||||
},
|
||||
lockFactory(lock) {
|
||||
throw Components.Exception("", Cr.NS_ERROR_NOT_IMPLEMENTED);
|
||||
},
|
||||
QueryInterface: ChromeUtils.generateQI(["nsIFactory"]),
|
||||
};
|
||||
|
||||
|
|
|
@ -32,9 +32,6 @@ var newFactory = function(window) {
|
|||
}
|
||||
return new MockColorPickerInstance(window).QueryInterface(aIID);
|
||||
},
|
||||
lockFactory(aLock) {
|
||||
throw Components.Exception("", Cr.NS_ERROR_NOT_IMPLEMENTED);
|
||||
},
|
||||
QueryInterface: ChromeUtils.generateQI(["nsIFactory"]),
|
||||
};
|
||||
};
|
||||
|
|
|
@ -37,9 +37,6 @@ var newFactory = function(window) {
|
|||
}
|
||||
return new MockFilePickerInstance(window).QueryInterface(aIID);
|
||||
},
|
||||
lockFactory(aLock) {
|
||||
throw Components.Exception("", Cr.NS_ERROR_NOT_IMPLEMENTED);
|
||||
},
|
||||
QueryInterface: ChromeUtils.generateQI(["nsIFactory"]),
|
||||
};
|
||||
};
|
||||
|
|
|
@ -20,9 +20,6 @@ var newFactory = {
|
|||
}
|
||||
return new MockPermissionPromptInstance().QueryInterface(aIID);
|
||||
},
|
||||
lockFactory(aLock) {
|
||||
throw Components.Exception("", Cr.NS_ERROR_NOT_IMPLEMENTED);
|
||||
},
|
||||
QueryInterface: ChromeUtils.generateQI(["nsIFactory"]),
|
||||
};
|
||||
|
||||
|
|
|
@ -308,9 +308,6 @@ var _fakeIdleService = {
|
|||
}
|
||||
return _fakeIdleService.QueryInterface(aIID);
|
||||
},
|
||||
lockFactory(aLock) {
|
||||
throw Components.Exception("", Cr.NS_ERROR_NOT_IMPLEMENTED);
|
||||
},
|
||||
QueryInterface: ChromeUtils.generateQI(["nsIFactory"]),
|
||||
},
|
||||
|
||||
|
|
|
@ -18,10 +18,6 @@ var TestPromptFactory = {
|
|||
return this.QueryInterface(iid);
|
||||
},
|
||||
|
||||
lockFactory: function tPF_lockf(lock) {
|
||||
throw Components.Exception("", Cr.NS_ERROR_NOT_IMPLEMENTED);
|
||||
},
|
||||
|
||||
getPrompt: function tPF_getPrompt(aWindow, aIID) {
|
||||
if (aIID.equals(Ci.nsIAuthPrompt) || aIID.equals(Ci.nsIAuthPrompt2)) {
|
||||
authPromptRequestReceived = true;
|
||||
|
|
|
@ -2087,9 +2087,6 @@ nsToolkitProfileFactory::CreateInstance(nsISupports* aOuter, const nsID& aIID,
|
|||
return profileService->QueryInterface(aIID, aResult);
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsToolkitProfileFactory::LockFactory(bool aVal) { return NS_OK; }
|
||||
|
||||
nsresult NS_NewToolkitProfileFactory(nsIFactory** aResult) {
|
||||
*aResult = new nsToolkitProfileFactory();
|
||||
|
||||
|
|
|
@ -2126,9 +2126,6 @@ nsSingletonFactory::CreateInstance(nsISupports* aOuter, const nsIID& aIID,
|
|||
return mSingleton->QueryInterface(aIID, aResult);
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsSingletonFactory::LockFactory(bool) { return NS_OK; }
|
||||
|
||||
/**
|
||||
* Set our windowcreator on the WindowWatcher service.
|
||||
*/
|
||||
|
|
|
@ -16,10 +16,4 @@ GenericFactory::CreateInstance(nsISupports* aOuter, REFNSIID aIID,
|
|||
return mCtor(aOuter, aIID, aResult);
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
GenericFactory::LockFactory(bool aLock) {
|
||||
NS_ERROR("Vestigial method, never called!");
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
} // namespace mozilla
|
||||
|
|
|
@ -208,11 +208,6 @@ NS_IMETHODIMP StaticModuleFactory::CreateInstance(nsISupports* aOuter,
|
|||
return CreateInstanceImpl(mID, aIID, aResult);
|
||||
}
|
||||
|
||||
NS_IMETHODIMP StaticModuleFactory::LockFactory(bool aLock) {
|
||||
MOZ_CRASH("LockFactory is no longer a thing");
|
||||
return NS_ERROR_NOT_IMPLEMENTED;
|
||||
}
|
||||
|
||||
} // anonymous namespace
|
||||
|
||||
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
* components without specifying a concrete base class.
|
||||
*/
|
||||
|
||||
[scriptable, object, uuid(00000001-0000-0000-c000-000000000046)]
|
||||
[scriptable, object, uuid(1bb40a56-9223-41e6-97d4-da97bdeb6a4d)]
|
||||
interface nsIFactory : nsISupports {
|
||||
/**
|
||||
* Creates an instance of a component.
|
||||
|
@ -28,15 +28,4 @@ interface nsIFactory : nsISupports {
|
|||
*/
|
||||
void createInstance(in nsISupports aOuter, in nsIIDRef iid,
|
||||
[retval, iid_is(iid)] out nsQIResult result);
|
||||
|
||||
/**
|
||||
* LockFactory provides the client a way to keep the component
|
||||
* in memory until it is finished with it. The client can call
|
||||
* LockFactory(PR_TRUE) to lock the factory and LockFactory(PR_FALSE)
|
||||
* to release the factory.
|
||||
*
|
||||
* @param lock - Must be PR_TRUE or PR_FALSE
|
||||
* @throws NS_ERROR* - Method failure.
|
||||
*/
|
||||
void lockFactory(in boolean lock);
|
||||
};
|
||||
|
|
|
@ -56,9 +56,6 @@ nsINIParserFactory::CreateInstance(nsISupports* aOuter, REFNSIID aIID,
|
|||
return QueryInterface(aIID, aResult);
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsINIParserFactory::LockFactory(bool aLock) { return NS_OK; }
|
||||
|
||||
NS_IMPL_ISUPPORTS(nsINIParserImpl, nsIINIParser, nsIINIParserWriter)
|
||||
|
||||
bool nsINIParserImpl::ContainsNull(const nsACString& aStr) {
|
||||
|
|
|
@ -83,8 +83,6 @@ class Factory final : public nsIFactory {
|
|||
NS_IMETHOD CreateInstance(nsISupports* aDelegate, const nsIID& aIID,
|
||||
void** aResult) override;
|
||||
|
||||
NS_IMETHOD LockFactory(bool aLock) override { return NS_OK; }
|
||||
|
||||
bool mFirstComponentCreated;
|
||||
};
|
||||
|
||||
|
|
|
@ -7,7 +7,8 @@
|
|||
#include <unknwn.h>
|
||||
#include <stdio.h>
|
||||
#include "nsISupports.h"
|
||||
#include "nsIFactory.h"
|
||||
#include "nsCOMPtr.h"
|
||||
#include "mozilla/RefPtr.h"
|
||||
|
||||
// unknwn.h is needed to build with WIN32_LEAN_AND_MEAN
|
||||
#include <unknwn.h>
|
||||
|
@ -67,64 +68,19 @@ MozExternalRefCountType nsTestCom::Release() {
|
|||
return res;
|
||||
}
|
||||
|
||||
class nsTestComFactory final : public nsIFactory {
|
||||
~nsTestComFactory() { sDestructions++; }
|
||||
NS_DECL_ISUPPORTS
|
||||
public:
|
||||
nsTestComFactory() {}
|
||||
|
||||
NS_IMETHOD CreateInstance(nsISupports* aOuter, const nsIID& aIID,
|
||||
void** aResult) override;
|
||||
|
||||
NS_IMETHOD LockFactory(bool aLock) override { return NS_OK; }
|
||||
|
||||
static int sDestructions;
|
||||
};
|
||||
|
||||
int nsTestComFactory::sDestructions;
|
||||
|
||||
NS_IMPL_ISUPPORTS(nsTestComFactory, nsIFactory)
|
||||
|
||||
nsresult nsTestComFactory::CreateInstance(nsISupports* aOuter,
|
||||
const nsIID& aIID, void** aResult) {
|
||||
if (aOuter != nullptr) {
|
||||
return NS_ERROR_NO_AGGREGATION;
|
||||
}
|
||||
|
||||
nsTestCom* t = new nsTestCom();
|
||||
|
||||
NS_ADDREF(t);
|
||||
nsresult res = t->QueryInterface(aIID, aResult);
|
||||
NS_RELEASE(t);
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
TEST(TestCOM, WindowsInterop)
|
||||
{
|
||||
nsTestComFactory* inst = new nsTestComFactory();
|
||||
|
||||
// Test we can QI nsIFactory to an IClassFactory.
|
||||
IClassFactory* iFactory = nullptr;
|
||||
nsresult rv = inst->QueryInterface(NS_GET_IID(nsIFactory), (void**)&iFactory);
|
||||
ASSERT_TRUE(NS_SUCCEEDED(rv));
|
||||
ASSERT_TRUE(iFactory);
|
||||
|
||||
// Test we can CreateInstance with an IUnknown.
|
||||
// Test that we can QI an nsITestCom to an IUnknown.
|
||||
RefPtr<nsTestCom> t = new nsTestCom();
|
||||
IUnknown* iUnknown = nullptr;
|
||||
|
||||
HRESULT hr = iFactory->LockServer(TRUE);
|
||||
ASSERT_TRUE(SUCCEEDED(hr));
|
||||
hr = iFactory->CreateInstance(nullptr, IID_IUnknown, (void**)&iUnknown);
|
||||
ASSERT_TRUE(SUCCEEDED(hr));
|
||||
nsresult rv = t->QueryInterface(NS_GET_IID(nsISupports), (void**)&iUnknown);
|
||||
ASSERT_TRUE(NS_SUCCEEDED(rv));
|
||||
ASSERT_TRUE(iUnknown);
|
||||
hr = iFactory->LockServer(FALSE);
|
||||
ASSERT_TRUE(SUCCEEDED(hr));
|
||||
|
||||
// Test we can QI an IUnknown to nsITestCom.
|
||||
nsITestCom* iTestCom = nullptr;
|
||||
nsCOMPtr<nsITestCom> iTestCom;
|
||||
GUID testGUID = NS_ITEST_COM_IID;
|
||||
hr = iUnknown->QueryInterface(testGUID, (void**)&iTestCom);
|
||||
HRESULT hr = iUnknown->QueryInterface(testGUID, getter_AddRefs(iTestCom));
|
||||
ASSERT_TRUE(SUCCEEDED(hr));
|
||||
ASSERT_TRUE(iTestCom);
|
||||
|
||||
|
@ -133,9 +89,8 @@ TEST(TestCOM, WindowsInterop)
|
|||
ASSERT_TRUE(NS_SUCCEEDED(rv));
|
||||
|
||||
iUnknown->Release();
|
||||
iTestCom->Release();
|
||||
iFactory->Release();
|
||||
iTestCom = nullptr;
|
||||
t = nullptr;
|
||||
|
||||
ASSERT_EQ(nsTestComFactory::sDestructions, 1);
|
||||
ASSERT_EQ(nsTestCom::sDestructions, 1);
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче