dom/network/TCPSocketParent.h
author J. Ryan Stinnett <jryans@gmail.com>
Wed, 17 Feb 2016 22:35:45 -0600
changeset 324714 76944f0d24abc3e3d968f324f18a8a3835e535dc
parent 303345 e8c7dfe727cd970e2c3294934e2927b14143c205
child 332140 11edf75d48c6b3d2c4ada21841f027367777b230
permissions -rw-r--r--
Bug 1238160 - Set frame type on TabContext. r=billm,mayhemer This change renames TabContext::IsBrowserElement to IsIsolatedMozBrowserElement. Other methods that pass these values around also have name changes. Adds TabContext::IsMozBrowserElement which is set by the frame loader for all browser frames. This is in contrast to its previous implementation, which has since been renamed IsIsolatedMozBrowserElement, since it checks isolated state in OriginAttributes. TabContext methods related to browser elements (and their callers) are updated to use IsIsolatedMozBrowserElement when check isolation / origins and IsMozBrowserElement when checking frame types. MozReview-Commit-ID: DDMZTkSn5yd

/* -*- 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_TCPSocketParent_h
#define mozilla_dom_TCPSocketParent_h

#include "mozilla/dom/TCPSocketBinding.h"
#include "mozilla/net/PTCPSocketParent.h"
#include "nsCycleCollectionParticipant.h"
#include "nsCOMPtr.h"
#include "js/TypeDecls.h"
#include "mozilla/net/OfflineObserver.h"

#define TCPSOCKETPARENT_CID \
  { 0x4e7246c6, 0xa8b3, 0x426d, { 0x9c, 0x17, 0x76, 0xda, 0xb1, 0xe1, 0xe1, 0x4a } }

namespace mozilla {
namespace dom {

class TCPSocket;

class TCPSocketParentBase : public nsISupports
                          , public mozilla::net::DisconnectableParent
{
public:
  NS_DECL_CYCLE_COLLECTION_CLASS(TCPSocketParentBase)
  NS_DECL_CYCLE_COLLECTING_ISUPPORTS

  void AddIPDLReference();
  void ReleaseIPDLReference();

protected:
  TCPSocketParentBase();
  virtual ~TCPSocketParentBase();

  RefPtr<TCPSocket> mSocket;
  RefPtr<mozilla::net::OfflineObserver> mObserver;
  bool mIPCOpen;
};

class TCPSocketParent : public mozilla::net::PTCPSocketParent
                      , public TCPSocketParentBase
{
public:
  NS_IMETHOD_(MozExternalRefCountType) Release() override;

  TCPSocketParent() {}

  virtual bool RecvOpen(const nsString& aHost, const uint16_t& aPort,
                        const bool& useSSL, const bool& aUseArrayBuffers) override;

  virtual bool RecvOpenBind(const nsCString& aRemoteHost,
                            const uint16_t& aRemotePort,
                            const nsCString& aLocalAddr,
                            const uint16_t& aLocalPort,
                            const bool&     aUseSSL,
                            const bool& aUseArrayBuffers) override;

  virtual bool RecvStartTLS() override;
  virtual bool RecvSuspend() override;
  virtual bool RecvResume() override;
  virtual bool RecvClose() override;
  virtual bool RecvData(const SendableData& aData,
                        const uint32_t& aTrackingNumber) override;
  virtual bool RecvRequestDelete() override;
  virtual nsresult OfflineNotification(nsISupports *) override;
  virtual uint32_t GetAppId() override;
  bool GetInIsolatedMozBrowser();

  void FireErrorEvent(const nsAString& aName, const nsAString& aType, TCPReadyState aReadyState);
  void FireEvent(const nsAString& aType, TCPReadyState aReadyState);
  void FireArrayBufferDataEvent(nsTArray<uint8_t>& aBuffer, TCPReadyState aReadyState);
  void FireStringDataEvent(const nsACString& aData, TCPReadyState aReadyState);

  void SetSocket(TCPSocket *socket);
  nsresult GetHost(nsAString& aHost);
  nsresult GetPort(uint16_t* aPort);

private:
  virtual void ActorDestroy(ActorDestroyReason why) override;
  void SendEvent(const nsAString& aType, CallbackData aData, TCPReadyState aReadyState);
};

} // namespace dom
} // namespace mozilla

#endif