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 (409f3966645a)

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 141 142 143 144 145 146 147
/* -*- 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;

struct nsCookieAttributes;

namespace mozilla {
namespace net {
class CookieStruct;

class CookieServiceChild : public PCookieServiceChild
                         , public nsICookieService
                         , public nsIObserver
                         , public nsITimerCallback
                         , public nsSupportsWeakReference
{
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,
                                   char **aCookieString);

  void GetCookieStringFromCookieHashTable(nsIURI *aHostURI,
                                          bool aIsForeign,
                                          bool aIsTrackingResource,
                                          bool aFirstPartyStorageAccessGranted,
                                          bool aIsSafeTopLevelNav,
                                          bool aIsSameSiteForeign,
                                          const OriginAttributes &aAttrs,
                                          nsCString &aCookieString);

  void
  GetCookieStringSyncIPC(nsIURI                 *aHostURI,
                         bool                    aIsForeign,
                         bool                    aIsTrackingResource,
                         bool                    aFirstPartyStorageAccessGranted,
                         bool                    aIsSafeTopLevelNav,
                         bool                    aIsSameSiteForeign,
                         const OriginAttributes &aAttrs,
                         nsAutoCString          &aCookieString);

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

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

  void
  SetCookieInternal(nsCookieAttributes &aCookieAttributes,
                    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();

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

  virtual
  mozilla::ipc::IPCResult RecvRemoveAll() override;

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

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

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

  virtual void ActorDestroy(ActorDestroyReason aWhy) override;

  CookiesMap mCookiesMap;
  nsCOMPtr<nsITimer> mCookieTimer;
  nsCOMPtr<mozIThirdPartyUtil> mThirdPartyUtil;
  nsCOMPtr<nsIEffectiveTLDService> mTLDService;
  uint8_t mCookieBehavior;
  bool mThirdPartySession;
  bool mThirdPartyNonsecureSession;
  bool mLeaveSecureAlone;
  bool mIPCSync;
  bool mIPCOpen;
};

} // namespace net
} // namespace mozilla

#endif // mozilla_net_CookieServiceChild_h__