Blame dom/cache/PrincipalVerifier.h

Packit f0b94e
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
Packit f0b94e
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
Packit f0b94e
/* This Source Code Form is subject to the terms of the Mozilla Public
Packit f0b94e
 * License, v. 2.0. If a copy of the MPL was not distributed with this
Packit f0b94e
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
Packit f0b94e
Packit f0b94e
#ifndef mozilla_dom_cache_PrincipalVerifier_h
Packit f0b94e
#define mozilla_dom_cache_PrincipalVerifier_h
Packit f0b94e
Packit f0b94e
#include "mozilla/ipc/PBackgroundSharedTypes.h"
Packit f0b94e
#include "nsThreadUtils.h"
Packit f0b94e
#include "nsTObserverArray.h"
Packit f0b94e
Packit f0b94e
namespace mozilla {
Packit f0b94e
Packit f0b94e
namespace ipc {
Packit f0b94e
class PBackgroundParent;
Packit f0b94e
}  // namespace ipc
Packit f0b94e
Packit f0b94e
namespace dom {
Packit f0b94e
namespace cache {
Packit f0b94e
Packit f0b94e
class ManagerId;
Packit f0b94e
Packit f0b94e
class PrincipalVerifier final : public Runnable {
Packit f0b94e
 public:
Packit f0b94e
  // An interface to be implemented by code wishing to use the
Packit f0b94e
  // PrincipalVerifier.  Note, the Listener implementation is responsible
Packit f0b94e
  // for calling RemoveListener() on the PrincipalVerifier to clear the
Packit f0b94e
  // weak reference.
Packit f0b94e
  class Listener {
Packit f0b94e
   public:
Packit f0b94e
    virtual void OnPrincipalVerified(nsresult aRv, ManagerId* aManagerId) = 0;
Packit f0b94e
  };
Packit f0b94e
Packit f0b94e
  static already_AddRefed<PrincipalVerifier> CreateAndDispatch(
Packit f0b94e
      Listener* aListener, mozilla::ipc::PBackgroundParent* aActor,
Packit f0b94e
      const mozilla::ipc::PrincipalInfo& aPrincipalInfo);
Packit f0b94e
Packit f0b94e
  void AddListener(Listener* aListener);
Packit f0b94e
Packit f0b94e
  // The Listener must call RemoveListener() when OnPrincipalVerified() is
Packit f0b94e
  // called or when the Listener is destroyed.
Packit f0b94e
  void RemoveListener(Listener* aListener);
Packit f0b94e
Packit f0b94e
 private:
Packit f0b94e
  PrincipalVerifier(Listener* aListener,
Packit f0b94e
                    mozilla::ipc::PBackgroundParent* aActor,
Packit f0b94e
                    const mozilla::ipc::PrincipalInfo& aPrincipalInfo);
Packit f0b94e
  virtual ~PrincipalVerifier();
Packit f0b94e
Packit f0b94e
  void VerifyOnMainThread();
Packit f0b94e
  void CompleteOnInitiatingThread();
Packit f0b94e
Packit f0b94e
  void DispatchToInitiatingThread(nsresult aRv);
Packit f0b94e
Packit f0b94e
  // Weak reference cleared by RemoveListener()
Packit f0b94e
  typedef nsTObserverArray<Listener*> ListenerList;
Packit f0b94e
  ListenerList mListenerList;
Packit f0b94e
Packit f0b94e
  // set in originating thread at construction, but must be accessed and
Packit f0b94e
  // released on main thread
Packit f0b94e
  RefPtr<ContentParent> mActor;
Packit f0b94e
Packit f0b94e
  const mozilla::ipc::PrincipalInfo mPrincipalInfo;
Packit f0b94e
  nsCOMPtr<nsIEventTarget> mInitiatingEventTarget;
Packit f0b94e
  nsresult mResult;
Packit f0b94e
  RefPtr<ManagerId> mManagerId;
Packit f0b94e
Packit f0b94e
 public:
Packit f0b94e
  NS_DECL_NSIRUNNABLE
Packit f0b94e
};
Packit f0b94e
Packit f0b94e
}  // namespace cache
Packit f0b94e
}  // namespace dom
Packit f0b94e
}  // namespace mozilla
Packit f0b94e
Packit f0b94e
#endif  // mozilla_dom_cache_PrincipalVerifier_h