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 (7fd12a78625c)

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

#ifndef mozilla_net_CookieServiceChild_h__
#define mozilla_net_CookieServiceChild_h__

#include "mozilla/net/PCookieServiceChild.h"
#include "nsClassHashtable.h"
#include "nsCookieKey.h"
#include "nsICookieService.h"
#include "nsIObserver.h"
#include "nsIPrefBranch.h"
#include "mozIThirdPartyUtil.h"
#include "nsWeakReference.h"
#include "nsThreadUtils.h"

class nsCookie;
class nsICookiePermission;
class nsIEffectiveTLDService;
class nsILoadInfo;

namespace mozilla {
namespace net {
class CookieStruct;

class CookieServiceChild : public PCookieServiceChild,
                           public nsICookieService,
                           public nsIObserver,
                           public nsITimerCallback,
                           public nsSupportsWeakReference {
  friend class PCookieServiceChild;

 public:
  NS_DECL_ISUPPORTS
  NS_DECL_NSICOOKIESERVICE
  NS_DECL_NSIOBSERVER
  NS_DECL_NSITIMERCALLBACK

  typedef nsTArray<RefPtr<nsCookie>> CookiesList;
  typedef nsClassHashtable<nsCookieKey, CookiesList> CookiesMap;

  CookieServiceChild();

  static already_AddRefed<CookieServiceChild> GetSingleton();

  void TrackCookieLoad(nsIChannel* aChannel);

 protected:
  virtual ~CookieServiceChild();
  void MoveCookies();

  void SerializeURIs(nsIURI* aHostURI, nsIChannel* aChannel,
                     nsCString& aHostSpec, nsCString& aHostCharset,
                     nsCString& aOriginatingSpec,
                     nsCString& aOriginatingCharset);

  nsresult GetCookieStringInternal(nsIURI* aHostURI, nsIChannel* aChannel,
                                   nsACString& aCookieString);

  void GetCookieStringFromCookieHashTable(
      nsIURI* aHostURI, bool aIsForeign, bool aIsTrackingResource,
      bool aFirstPartyStorageAccessGranted, uint32_t aRejectedReason,
      bool aIsSafeTopLevelNav, bool aIsSameSiteForeign, nsIChannel* aChannel,
      nsACString& aCookieString);

  nsresult SetCookieStringInternal(nsIURI* aHostURI, nsIChannel* aChannel,
                                   const nsACString& aCookieString,
                                   const nsACString& aServerTime,
                                   bool aFromHttp);

  void RecordDocumentCookie(nsCookie* aCookie, const OriginAttributes& aAttrs);

  void SetCookieInternal(const CookieStruct& aCookieData,
                         const mozilla::OriginAttributes& aAttrs,
                         nsIChannel* aChannel, bool aFromHttp,
                         nsICookiePermission* aPermissionService);

  uint32_t CountCookiesFromHashTable(const nsCString& aBaseDomain,
                                     const OriginAttributes& aOriginAttrs);

  void PrefChanged(nsIPrefBranch* aPrefBranch);

  bool RequireThirdPartyCheck(nsILoadInfo* aLoadInfo);

  mozilla::ipc::IPCResult RecvTrackCookiesLoad(
      nsTArray<CookieStruct>&& aCookiesList, const OriginAttributes& aAttrs);

  mozilla::ipc::IPCResult RecvRemoveAll();

  mozilla::ipc::IPCResult RecvRemoveBatchDeletedCookies(
      nsTArray<CookieStruct>&& aCookiesList,
      nsTArray<OriginAttributes>&& aAttrsList);

  mozilla::ipc::IPCResult RecvRemoveCookie(const CookieStruct& aCookie,
                                           const OriginAttributes& aAttrs);

  mozilla::ipc::IPCResult RecvAddCookie(const CookieStruct& aCookie,
                                        const OriginAttributes& aAttrs);

  CookiesMap mCookiesMap;
  nsCOMPtr<nsITimer> mCookieTimer;
  nsCOMPtr<mozIThirdPartyUtil> mThirdPartyUtil;
  nsCOMPtr<nsIEffectiveTLDService> mTLDService;
};

}  // namespace net
}  // namespace mozilla

#endif  // mozilla_net_CookieServiceChild_h__