コード例 #1
0
ファイル: MediaParent.cpp プロジェクト: Nazi-Nigger/gecko-dev
template<class Super> bool
Parent<Super>::RecvSanitizeOriginKeys(const uint64_t& aSinceWhen,
                                      const bool& aOnlyPrivateBrowsing)
{
    MOZ_ASSERT(NS_IsMainThread());
    nsCOMPtr<nsIFile> profileDir;
    nsresult rv = NS_GetSpecialDirectory(NS_APP_USER_PROFILE_50_DIR,
                                         getter_AddRefs(profileDir));
    if (NS_WARN_IF(NS_FAILED(rv))) {
        return false;
    }
    // Over to stream-transport thread to do the file io.

    nsCOMPtr<nsIEventTarget> sts = do_GetService(NS_STREAMTRANSPORTSERVICE_CONTRACTID);
    MOZ_ASSERT(sts);
    RefPtr<OriginKeyStore> store(mOriginKeyStore);

    rv = sts->Dispatch(NewRunnableFrom([profileDir, store, aSinceWhen,
    aOnlyPrivateBrowsing]() -> nsresult {
        MOZ_ASSERT(!NS_IsMainThread());
        store->mPrivateBrowsingOriginKeys.Clear(aSinceWhen);
        if (!aOnlyPrivateBrowsing) {
            store->mOriginKeys.SetProfileDir(profileDir);
            store->mOriginKeys.Clear(aSinceWhen);
        }
        return NS_OK;
    }), NS_DISPATCH_NORMAL);
    if (NS_WARN_IF(NS_FAILED(rv))) {
        return false;
    }
    return true;
}
コード例 #2
0
ファイル: MediaParent.cpp プロジェクト: Nazi-Nigger/gecko-dev
template<class Super> bool
Parent<Super>::RecvGetOriginKey(const uint32_t& aRequestId,
                                const nsCString& aOrigin,
                                const bool& aPrivateBrowsing,
                                const bool& aPersist)
{
    MOZ_ASSERT(NS_IsMainThread());

    // First, get profile dir.

    MOZ_ASSERT(NS_IsMainThread());
    nsCOMPtr<nsIFile> profileDir;
    nsresult rv = NS_GetSpecialDirectory(NS_APP_USER_PROFILE_50_DIR,
                                         getter_AddRefs(profileDir));
    if (NS_WARN_IF(NS_FAILED(rv))) {
        return false;
    }

    // Then over to stream-transport thread to do the actual file io.
    // Stash a pledge to hold the answer and get an id for this request.

    RefPtr<Pledge<nsCString>> p = new Pledge<nsCString>();
    uint32_t id = mOutstandingPledges.Append(*p);

    nsCOMPtr<nsIEventTarget> sts = do_GetService(NS_STREAMTRANSPORTSERVICE_CONTRACTID);
    MOZ_ASSERT(sts);
    RefPtr<OriginKeyStore> store(mOriginKeyStore);
    bool sameProcess = mSameProcess;

    rv = sts->Dispatch(NewRunnableFrom([id, profileDir, store, sameProcess, aOrigin,
    aPrivateBrowsing, aPersist]() -> nsresult {
        MOZ_ASSERT(!NS_IsMainThread());
        store->mOriginKeys.SetProfileDir(profileDir);
        nsCString result;
        if (aPrivateBrowsing) {
            store->mPrivateBrowsingOriginKeys.GetOriginKey(aOrigin, result);
        } else {
            store->mOriginKeys.GetOriginKey(aOrigin, result, aPersist);
        }

        // Pass result back to main thread.
        nsresult rv;
        rv = NS_DispatchToMainThread(NewRunnableFrom([id, store, sameProcess,
        result]() -> nsresult {
            Parent* parent = GccGetSingleton<Super>(); // GetSingleton();
            if (!parent) {
                return NS_OK;
            }
            RefPtr<Pledge<nsCString>> p = parent->mOutstandingPledges.Remove(id);
            if (!p) {
                return NS_ERROR_UNEXPECTED;
            }
            p->Resolve(result);
            return NS_OK;
        }), NS_DISPATCH_NORMAL);

        if (NS_WARN_IF(NS_FAILED(rv))) {
            return rv;
        }
        return NS_OK;
    }), NS_DISPATCH_NORMAL);

    if (NS_WARN_IF(NS_FAILED(rv))) {
        return false;
    }

    p->Then([aRequestId, sameProcess](const nsCString& aKey) mutable {
        if (!sameProcess) {
            if (!sIPCServingParent) {
                return NS_OK;
            }
            Unused << sIPCServingParent->SendGetOriginKeyResponse(aRequestId, aKey);
        } else {
            RefPtr<MediaManager> mgr = MediaManager::GetInstance();
            if (!mgr) {
                return NS_OK;
            }
            RefPtr<Pledge<nsCString>> pledge =
            mgr->mGetOriginKeyPledges.Remove(aRequestId);
            if (pledge) {
                pledge->Resolve(aKey);
            }
        }
        return NS_OK;
    });
    return true;
}
コード例 #3
0
template<class Super> mozilla::ipc::IPCResult
Parent<Super>::RecvGetPrincipalKey(const uint32_t& aRequestId,
                                   const ipc::PrincipalInfo& aPrincipalInfo,
                                   const bool& aPersist)
{
  MOZ_ASSERT(NS_IsMainThread());

  // First, get profile dir.

  MOZ_ASSERT(NS_IsMainThread());
  nsCOMPtr<nsIFile> profileDir;
  nsresult rv = NS_GetSpecialDirectory(NS_APP_USER_PROFILE_50_DIR,
                                       getter_AddRefs(profileDir));
  if (NS_WARN_IF(NS_FAILED(rv))) {
    return IPCResult(this, false);
  }

  // Then over to stream-transport thread to do the actual file io.
  // Stash a pledge to hold the answer and get an id for this request.

  RefPtr<Pledge<nsCString>> p = new Pledge<nsCString>();
  uint32_t id = mOutstandingPledges.Append(*p);

  nsCOMPtr<nsIEventTarget> sts = do_GetService(NS_STREAMTRANSPORTSERVICE_CONTRACTID);
  MOZ_ASSERT(sts);
  RefPtr<Parent<Super>> that(this);

  rv = sts->Dispatch(NewRunnableFrom([this, that, id, profileDir,
                                      aPrincipalInfo, aPersist]() -> nsresult {
    MOZ_ASSERT(!NS_IsMainThread());
    mOriginKeyStore->mOriginKeys.SetProfileDir(profileDir);

    nsresult rv;
    nsAutoCString result;
    if (IsPincipalInfoPrivate(aPrincipalInfo)) {
      rv = mOriginKeyStore->mPrivateBrowsingOriginKeys.GetPrincipalKey(aPrincipalInfo, result);
    } else {
      rv = mOriginKeyStore->mOriginKeys.GetPrincipalKey(aPrincipalInfo, result, aPersist);
    }

    if (NS_WARN_IF(NS_FAILED(rv))) {
      return rv;
    }

    // Pass result back to main thread.
    rv = NS_DispatchToMainThread(NewRunnableFrom([this, that, id,
                                                  result]() -> nsresult {
      if (mDestroyed) {
        return NS_OK;
      }
      RefPtr<Pledge<nsCString>> p = mOutstandingPledges.Remove(id);
      if (!p) {
        return NS_ERROR_UNEXPECTED;
      }
      p->Resolve(result);
      return NS_OK;
    }), NS_DISPATCH_NORMAL);

    if (NS_WARN_IF(NS_FAILED(rv))) {
      return rv;
    }
    return NS_OK;
  }), NS_DISPATCH_NORMAL);

  if (NS_WARN_IF(NS_FAILED(rv))) {
    return IPCResult(this, false);
  }
  p->Then([this, that, aRequestId](const nsCString& aKey) mutable {
    if (mDestroyed) {
      return NS_OK;
    }
    Unused << this->SendGetPrincipalKeyResponse(aRequestId, aKey);
    return NS_OK;
  });
  return IPC_OK();
}