DXR will be turned off on Tuesday, December 29th. It will redirect to Searchfox.
See the announcement on Discourse.

DXR is a code search and navigation tool aimed at making sense of large projects. It supports full-text and regex searches as well as structural queries.

Implementation

Mercurial (c68fe15a81fc)

VCS Links

Line Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
/* 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_dom_PresentationConnection_h
#define mozilla_dom_PresentationConnection_h
#define mozilla_dom_PresentationConnection_h

#include "mozilla/DOMEventTargetHelper.h"
#include "mozilla/dom/TypedArray.h"
#include "mozilla/WeakPtr.h"
#include "mozilla/dom/PresentationConnectionBinding.h"
#include "mozilla/dom/PresentationConnectionBinding.h"
#include "mozilla/dom/PresentationConnectionCloseEventBinding.h"
#include "nsIPresentationListener.h"
#include "nsIRequest.h"
#include "nsIWeakReferenceUtils.h"


namespace mozilla {
namespace dom {

class Blob;
class PresentationConnectionList;
class PresentationConnectionList;

class PresentationConnection final
    : public DOMEventTargetHelper,
      public nsIPresentationSessionListener,
      public nsIRequest,
      public SupportsWeakPtr<PresentationConnection> {
 public:
  NS_DECL_ISUPPORTS_INHERITED
  NS_DECL_ISUPPORTS_INHERITED
  NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(PresentationConnection,
                                           DOMEventTargetHelper)
  NS_DECL_NSIPRESENTATIONSESSIONLISTENER
  NS_DECL_NSIREQUEST
  MOZ_DECLARE_WEAKREFERENCE_TYPENAME(PresentationConnection)
  MOZ_DECLARE_WEAKREFERENCE_TYPENAME(PresentationConnection)

  static already_AddRefed<PresentationConnection> Create(
      nsPIDOMWindowInner* aWindow, const nsAString& aId, const nsAString& aUrl,
      const uint8_t aRole, PresentationConnectionList* aList = nullptr);
      const uint8_t aRole, PresentationConnectionList* aList = nullptr);

  virtual void DisconnectFromOwner() override;

  virtual JSObject* WrapObject(JSContext* aCx,
                               JS::Handle<JSObject*> aGivenProto) override;
                               JS::Handle<JSObject*> aGivenProto) override;

  // WebIDL (public APIs)
  void GetId(nsAString& aId) const;

  void GetUrl(nsAString& aUrl) const;
  void GetUrl(nsAString& aUrl) const;

  PresentationConnectionState State() const;

  PresentationConnectionBinaryType BinaryType() const;


  void SetBinaryType(PresentationConnectionBinaryType aType);

  void Send(const nsAString& aData, ErrorResult& aRv);

  void Send(Blob& aData, ErrorResult& aRv);


  void Send(const ArrayBuffer& aData, ErrorResult& aRv);

  void Send(const ArrayBufferView& aData, ErrorResult& aRv);

  void Close(ErrorResult& aRv);
  void Close(ErrorResult& aRv);

  void Terminate(ErrorResult& aRv);

  bool Equals(uint64_t aWindowId, const nsAString& aId);


  IMPL_EVENT_HANDLER(connect);
  IMPL_EVENT_HANDLER(close);
  IMPL_EVENT_HANDLER(terminate);
  IMPL_EVENT_HANDLER(message);


 private:
  PresentationConnection(nsPIDOMWindowInner* aWindow, const nsAString& aId,
                         const nsAString& aUrl, const uint8_t aRole,
                         PresentationConnectionList* aList);


  ~PresentationConnection();

  bool Init();

  void Shutdown();
  void Shutdown();

  nsresult ProcessStateChanged(nsresult aReason);

  nsresult DispatchConnectionCloseEvent(
      PresentationConnectionClosedReason aReason, const nsAString& aMessage,
      bool aDispatchNow = false);


  nsresult DispatchMessageEvent(JS::Handle<JS::Value> aData);

  nsresult ProcessConnectionWentAway();

  nsresult AddIntoLoadGroup();


  nsresult RemoveFromLoadGroup();

  void AsyncCloseConnectionWithErrorMsg(const nsAString& aMessage);

  nsresult DoReceiveMessage(const nsACString& aData, bool aIsBinary);
  nsresult DoReceiveMessage(const nsACString& aData, bool aIsBinary);

  nsString mId;
  nsString mUrl;
  uint8_t mRole;
  PresentationConnectionState mState;
  PresentationConnectionState mState;
  RefPtr<PresentationConnectionList> mOwningConnectionList;
  nsWeakPtr mWeakLoadGroup;
  PresentationConnectionBinaryType mBinaryType;
};


}  // namespace dom
}  // namespace mozilla

#endif  // mozilla_dom_PresentationConnection_h