Bug 1604962 - use NS_INLINE_DECL_PURE_VIRTUAL_REFCOUNTING to support refcounting for abstrach classes. r=chunmin

Inheriting from `nsISupports` is too complicated if we just want to support refcounting. Instead, we can use `NS_INLINE_DECL_PURE_VIRTUAL_REFCOUNTING` to declare `Add/RemoveRef()` as pure virtual functions in order to create ref-counted abstract classes.

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

--HG--
extra : moz-landing-system : lando
This commit is contained in:
alwu 2019-12-21 00:05:53 +00:00
Родитель a2e90147ab
Коммит 6c23e730f2
7 изменённых файлов: 15 добавлений и 18 удалений

Просмотреть файл

@ -25,8 +25,6 @@ namespace dom {
("MediaControlKeysHandler=%p, " msg, this, \
ToMediaControlKeysEventStr(key), ##__VA_ARGS__));
NS_IMPL_ISUPPORTS0(MediaControlKeysHandler)
void MediaControlKeysHandler::OnKeyPressed(MediaControlKeysEvent aKeyEvent) {
LOG_KEY("OnKeyPressed '%s'", aKeyEvent);
@ -71,8 +69,6 @@ void MediaControlKeysHandler::OnKeyPressed(MediaControlKeysEvent aKeyEvent) {
}
}
NS_IMPL_ISUPPORTS0(MediaControlKeysEventSource)
void MediaControlKeysEventSource::AddListener(
MediaControlKeysEventListener* aListener) {
MOZ_ASSERT(aListener);

Просмотреть файл

@ -36,8 +36,9 @@ enum class MediaControlKeysEvent : uint32_t {
* and then everytime when the media key events occur, `OnKeyPressed` will be
* called so that we can do related handling.
*/
class MediaControlKeysEventListener : public nsISupports {
class MediaControlKeysEventListener {
public:
NS_INLINE_DECL_PURE_VIRTUAL_REFCOUNTING
MediaControlKeysEventListener() = default;
virtual void OnKeyPressed(MediaControlKeysEvent aKeyEvent) = 0;
@ -52,8 +53,7 @@ class MediaControlKeysEventListener : public nsISupports {
*/
class MediaControlKeysHandler final : public MediaControlKeysEventListener {
public:
NS_DECL_ISUPPORTS
NS_INLINE_DECL_REFCOUNTING(MediaControlKeysHandler, override)
void OnKeyPressed(MediaControlKeysEvent aKeyEvent) override;
private:
@ -61,14 +61,13 @@ class MediaControlKeysHandler final : public MediaControlKeysEventListener {
};
/**
* MediaControlKeysEventSource is a base class which is used to implement
* MediaControlKeysEventSource is an abstract class which is used to implement
* transporting media control keys event to all its listeners when media keys
* event happens.
*/
class MediaControlKeysEventSource : public nsISupports {
class MediaControlKeysEventSource {
public:
NS_DECL_ISUPPORTS
NS_INLINE_DECL_PURE_VIRTUAL_REFCOUNTING
MediaControlKeysEventSource() = default;
virtual void AddListener(MediaControlKeysEventListener* aListener);

Просмотреть файл

@ -20,9 +20,6 @@
namespace mozilla {
namespace dom {
NS_IMPL_ISUPPORTS_INHERITED0(MediaControlKeysManager,
MediaControlKeysEventSource)
bool MediaControlKeysManager::IsOpened() const {
// As MediaControlKeysManager represents a platform-indenpendent event source,
// which we can use to add other listeners to moniter media key events, we

Просмотреть файл

@ -22,7 +22,8 @@ namespace dom {
class MediaControlKeysManager final : public MediaControlKeysEventSource,
public MediaControlKeysEventListener {
public:
NS_DECL_ISUPPORTS_INHERITED
NS_INLINE_DECL_REFCOUNTING(MediaControlKeysManager, override)
MediaControlKeysManager() = default;
// MediaControlKeysEventSource methods

Просмотреть файл

@ -8,8 +8,13 @@
using namespace mozilla::dom;
class MediaControlKeysEventSourceTestImpl : public MediaControlKeysEventSource {
public:
NS_INLINE_DECL_REFCOUNTING(MediaControlKeysEventSourceTestImpl, override)
bool Open() override { return true; }
bool IsOpened() const override { return true; }
private:
~MediaControlKeysEventSourceTestImpl() = default;
};
TEST(MediaControlKeysEvent, TestAddOrRemoveListener)

Просмотреть файл

@ -19,7 +19,7 @@ static const int kSystemDefinedEventMediaKeysSubtype = 8;
class MediaHardwareKeysEventListenerTest : public MediaControlKeysEventListener {
public:
NS_DECL_ISUPPORTS
NS_INLINE_DECL_REFCOUNTING(MediaHardwareKeysEventListenerTest, override)
void OnKeyPressed(MediaControlKeysEvent aKeyEvent) override {
mReceivedEvent = mozilla::Some(aKeyEvent);
@ -37,8 +37,6 @@ class MediaHardwareKeysEventListenerTest : public MediaControlKeysEventListener
mozilla::Maybe<MediaControlKeysEvent> mReceivedEvent;
};
NS_IMPL_ISUPPORTS0(MediaHardwareKeysEventListenerTest)
static void SendFakeEvent(RefPtr<MediaHardwareKeysEventSourceMac>& aSource, int aKeyData) {
NSEvent* event = [NSEvent otherEventWithType:NSSystemDefined
location:NSZeroPoint

Просмотреть файл

@ -17,6 +17,7 @@ namespace widget {
class MediaHardwareKeysEventSourceMac final
: public mozilla::dom::MediaControlKeysEventSource {
public:
NS_INLINE_DECL_REFCOUNTING(MediaHardwareKeysEventSourceMac, override)
MediaHardwareKeysEventSourceMac() = default;
static CGEventRef EventTapCallback(CGEventTapProxy proxy, CGEventType type,