зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1440771 - Part 2: Use nsCOMPtr<nsIInputStream> directly in PCacheStreamControl, r=baku
MozReview-Commit-ID: 1Ab49lZtxTI
This commit is contained in:
Родитель
bfb9a07251
Коммит
1ef4ae5a2f
|
@ -125,9 +125,8 @@ CacheStreamControlChild::OpenStream(const nsID& aId, InputStreamResolver&& aReso
|
|||
RefPtr<CacheWorkerHolder> holder = GetWorkerHolder();
|
||||
|
||||
SendOpenStream(aId)->Then(GetCurrentThreadSerialEventTarget(), __func__,
|
||||
[aResolver, holder](const OptionalIPCStream& aOptionalStream) {
|
||||
nsCOMPtr<nsIInputStream> stream = DeserializeIPCStream(aOptionalStream);
|
||||
aResolver(Move(stream));
|
||||
[aResolver, holder](const nsCOMPtr<nsIInputStream>& aOptionalStream) {
|
||||
aResolver(nsCOMPtr<nsIInputStream>(aOptionalStream));
|
||||
}, [aResolver, holder](ResponseRejectReason aReason) {
|
||||
aResolver(nullptr);
|
||||
});
|
||||
|
|
|
@ -127,20 +127,8 @@ CacheStreamControlParent::RecvOpenStream(const nsID& aStreamId,
|
|||
{
|
||||
NS_ASSERT_OWNINGTHREAD(CacheStreamControlParent);
|
||||
|
||||
// This is safe because:
|
||||
// 1. We add ourself to the Manager as an operation Listener in OpenStream().
|
||||
// 2. We remove ourself as a Listener from the Manager in ActorDestroy().
|
||||
// 3. The Manager will not "complete" the operation if the Listener has
|
||||
// been removed. This means the lambda will not be invoked.
|
||||
// 4. The ActorDestroy() will also cause the child-side MozPromise for
|
||||
// this async returning method to be rejected. So we don't have to
|
||||
// call the resolver in this case.
|
||||
CacheStreamControlParent* self = this;
|
||||
|
||||
OpenStream(aStreamId, [self, aResolver](nsCOMPtr<nsIInputStream>&& aStream) {
|
||||
AutoIPCStream stream;
|
||||
Unused << stream.Serialize(aStream, self->Manager());
|
||||
aResolver(stream.TakeOptionalValue());
|
||||
OpenStream(aStreamId, [aResolver](nsCOMPtr<nsIInputStream>&& aStream) {
|
||||
aResolver(aStream);
|
||||
});
|
||||
|
||||
return IPC_OK();
|
||||
|
|
|
@ -6,9 +6,9 @@ include protocol PBackground;
|
|||
include protocol PFileDescriptorSet;
|
||||
include protocol PChildToParentStream;
|
||||
include protocol PParentToChildStream;
|
||||
include IPCStream;
|
||||
|
||||
using struct nsID from "nsID.h";
|
||||
using nsCOMPtr<nsIInputStream> from "mozilla/ipc/IPCStreamUtils.h";
|
||||
|
||||
namespace mozilla {
|
||||
namespace dom {
|
||||
|
@ -19,7 +19,7 @@ protocol PCacheStreamControl
|
|||
manager PBackground;
|
||||
|
||||
parent:
|
||||
async OpenStream(nsID aStreamId) returns(OptionalIPCStream aStream);
|
||||
async OpenStream(nsID aStreamId) returns(nsCOMPtr<nsIInputStream> aStream);
|
||||
async NoteClosed(nsID aStreamId);
|
||||
|
||||
child:
|
||||
|
|
Загрузка…
Ссылка в новой задаче