js/src/ds/IdValuePair.h
author Nika Layzell <nika@thelayzells.com>
Wed, 16 Sep 2020 20:47:55 +0000
changeset 549331 ab7d302fd3186b10ada9264528c80f6840e44571
parent 449035 66eb1f485c1a3ea81372758bc92292c9428b17cd
permissions -rw-r--r--
Bug 1659696 - Check PendingInitialization before targeting in window.open, r=kmag This requires adding the flag as a synced field on the BrowsingContext, and checking it in a few more places. Attempts to open a new window in this racy manner will now raise an exception. This should avoid the issue from bug 1658854 by blocking the buggy attempts to load before the nested event loop has been exited. Differential Revision: https://phabricator.services.mozilla.com/D87927

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

#include "jsapi.h"

#include "NamespaceImports.h"
#include "gc/Tracer.h"
#include "js/GCVector.h"
#include "js/Id.h"

namespace js {

struct IdValuePair {
  Value value;
  jsid id;

  IdValuePair() : value(UndefinedValue()), id(JSID_EMPTY) {}
  explicit IdValuePair(jsid idArg) : value(UndefinedValue()), id(idArg) {}
  IdValuePair(jsid idArg, const Value& valueArg) : value(valueArg), id(idArg) {}

  void trace(JSTracer* trc) {
    TraceRoot(trc, &value, "IdValuePair::value");
    TraceRoot(trc, &id, "IdValuePair::id");
  }
};

using IdValueVector = JS::GCVector<IdValuePair, 8>;

} /* namespace js */

#endif /* ds_IdValuePair_h */