widget/gtk/WakeLockListener.h
author David Major <dmajor@mozilla.com>
Mon, 09 Jul 2018 18:22:45 -0400
changeset 425566 827519f9d0326f76f524061cddff306a56f51255
parent 388772 2ef70de6105b6b0041ef9665a2ec00b9e314e78b
child 438975 526b8427a5bfa7b45867f865a83672b5191f7395
permissions -rw-r--r--
Bug 1463190 - Add forced-MSVC builds to CI to keep that platform green. r=ted

/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim:expandtab:shiftwidth=2:tabstop=2:
 */
/* 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/. */

#include <unistd.h>

#ifndef __WakeLockListener_h__
#define __WakeLockListener_h__

#include "mozilla/StaticPtr.h"
#include "nsHashKeys.h"
#include "nsClassHashtable.h"

#include "nsIDOMWakeLockListener.h"

#ifdef MOZ_ENABLE_DBUS
#include "mozilla/DBusHelpers.h"
#endif

class WakeLockTopic;

/**
 * Receives WakeLock events and simply passes it on to the right WakeLockTopic
 * to inhibit the screensaver.
 */
class WakeLockListener final : public nsIDOMMozWakeLockListener
{
public:
  NS_DECL_ISUPPORTS;

  static WakeLockListener* GetSingleton(bool aCreate = true);
  static void Shutdown();

  virtual nsresult Callback(const nsAString& topic,
                            const nsAString& state) override;

private:
  WakeLockListener();
  ~WakeLockListener() = default;

  static mozilla::StaticRefPtr<WakeLockListener> sSingleton;

#ifdef MOZ_ENABLE_DBUS
  RefPtr<DBusConnection> mConnection;
#endif
  // Map of topic names to |WakeLockTopic|s.
  // We assume a small, finite-sized set of topics.
  nsClassHashtable<nsStringHashKey, WakeLockTopic> mTopics;
};

#endif // __WakeLockListener_h__