/* -*- 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/. */ #include "mozilla/net/CookieServiceParent.h" #include "mozilla/ipc/URIUtils.h" #include "nsCookieService.h" #include "nsNetUtil.h" using namespace mozilla::ipc; static void GetAppInfoFromLoadContext(const IPC::SerializedLoadContext &aLoadContext, uint32_t& aAppId, bool& aIsInBrowserElement, bool& aIsPrivate) { // TODO: bug 782542: what to do when we get null loadContext? For now assume // NECKO_NO_APP_ID. aAppId = NECKO_NO_APP_ID; aIsInBrowserElement = false; aIsPrivate = false; if (aLoadContext.IsNotNull()) { aAppId = aLoadContext.mAppId; aIsInBrowserElement = aLoadContext.mIsInBrowserElement; } if (aLoadContext.IsPrivateBitValid()) aIsPrivate = aLoadContext.mUsePrivateBrowsing; } namespace mozilla { namespace net { CookieServiceParent::CookieServiceParent() { // Instantiate the cookieservice via the service manager, so it sticks around // until shutdown. nsCOMPtr cs = do_GetService(NS_COOKIESERVICE_CONTRACTID); // Get the nsCookieService instance directly, so we can call internal methods. mCookieService = already_AddRefed(nsCookieService::GetSingleton()); NS_ASSERTION(mCookieService, "couldn't get nsICookieService"); } CookieServiceParent::~CookieServiceParent() { } bool CookieServiceParent::RecvGetCookieString(const URIParams& aHost, const bool& aIsForeign, const bool& aFromHttp, const IPC::SerializedLoadContext& aLoadContext, nsCString* aResult) { if (!mCookieService) return true; // Deserialize URI. Having a host URI is mandatory and should always be // provided by the child; thus we consider failure fatal. nsCOMPtr hostURI = DeserializeURI(aHost); if (!hostURI) return false; uint32_t appId; bool isInBrowserElement, isPrivate; GetAppInfoFromLoadContext(aLoadContext, appId, isInBrowserElement, isPrivate); mCookieService->GetCookieStringInternal(hostURI, aIsForeign, aFromHttp, appId, isInBrowserElement, isPrivate, *aResult); return true; } bool CookieServiceParent::RecvSetCookieString(const URIParams& aHost, const bool& aIsForeign, const nsCString& aCookieString, const nsCString& aServerTime, const bool& aFromHttp, const IPC::SerializedLoadContext& aLoadContext) { if (!mCookieService) return true; // Deserialize URI. Having a host URI is mandatory and should always be // provided by the child; thus we consider failure fatal. nsCOMPtr hostURI = DeserializeURI(aHost); if (!hostURI) return false; uint32_t appId; bool isInBrowserElement, isPrivate; GetAppInfoFromLoadContext(aLoadContext, appId, isInBrowserElement, isPrivate); nsDependentCString cookieString(aCookieString, 0); mCookieService->SetCookieStringInternal(hostURI, aIsForeign, cookieString, aServerTime, aFromHttp, appId, isInBrowserElement, isPrivate); return true; } } }