gecko-dev/dom/plugins/ipc/StreamNotifyChild.h
Alex Gaynor 0f01791ffc Bug 1512990 - Part 4 - remove declarations of Recv/Answer methods from IPDL protocol base class; r=froydnj
For cases where the class has direct calls (that is, we cast `this` to the
subclass before making the call) no longer declare Recv/Answer methods on the
base class at all. This should ensure that slots for them are not generated in
vtables, and also allow the derived class to choose the method signature (e.g.
whether it wants to take something by reference or by value).

Differential Revision: https://phabricator.services.mozilla.com/D18132

--HG--
extra : moz-landing-system : lando
2019-02-06 15:58:43 +00:00

61 lines
1.8 KiB
C++

/* -*- Mode: C++; c-basic-offset: 2; indent-tabs-mode: nil; tab-width: 8 -*- */
/* vim: set sw=2 ts=2 et : */
/* 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 mozilla_plugins_StreamNotifyChild_h
#define mozilla_plugins_StreamNotifyChild_h
#include "mozilla/plugins/PStreamNotifyChild.h"
namespace mozilla {
namespace plugins {
class BrowserStreamChild;
class StreamNotifyChild : public PStreamNotifyChild {
friend class PluginInstanceChild;
friend class BrowserStreamChild;
friend class PStreamNotifyChild;
public:
explicit StreamNotifyChild(const nsCString& aURL)
: mURL(aURL), mClosure(nullptr), mBrowserStream(nullptr) {}
virtual void ActorDestroy(ActorDestroyReason why) override;
void SetValid(void* aClosure) { mClosure = aClosure; }
void NPP_URLNotify(NPReason reason);
private:
virtual mozilla::ipc::IPCResult Recv__delete__(
const NPReason& reason) override;
mozilla::ipc::IPCResult RecvRedirectNotify(const nsCString& url,
const int32_t& status);
/**
* If a stream is created for this this URLNotify, we associate the objects
* so that the NPP_URLNotify call is not fired before the stream data is
* completely delivered. The BrowserStreamChild takes responsibility for
* calling NPP_URLNotify and deleting this object.
*/
void SetAssociatedStream(BrowserStreamChild* bs);
nsCString mURL;
void* mClosure;
/**
* If mBrowserStream is true, it is responsible for deleting this C++ object
* and DeallocPStreamNotify is not, so that the delayed delivery of
* NPP_URLNotify is possible.
*/
BrowserStreamChild* mBrowserStream;
};
} // namespace plugins
} // namespace mozilla
#endif