JSObject * JSAPITest::createGlobal(JSPrincipals *principals) { /* Create the global object. */ global = JS_NewGlobalObject(cx, getGlobalClass(), principals); if (!global) return NULL; JS_AddNamedObjectRoot(cx, &global, "test-global"); JS::HandleObject globalHandle = JS::HandleObject::fromMarkedLocation(&global); JSAutoCompartment ac(cx, globalHandle); /* Populate the global object with the standard globals, like Object and Array. */ if (!JS_InitStandardClasses(cx, globalHandle)) return NULL; return global; }
bool eval(const char *asciiChars, JSPrincipals *principals, JSPrincipals *originPrincipals, jsval *rval) { size_t len = strlen(asciiChars); jschar *chars = new jschar[len+1]; for (size_t i = 0; i < len; ++i) chars[i] = asciiChars[i]; chars[len] = 0; JS::RootedObject global(cx, JS_NewGlobalObject(cx, getGlobalClass(), principals, JS::FireOnNewGlobalHook)); CHECK(global); JSAutoCompartment ac(cx, global); CHECK(JS_InitStandardClasses(cx, global)); bool ok = JS_EvaluateUCScriptForPrincipalsVersionOrigin(cx, global, principals, originPrincipals, chars, len, "", 0, rval, JSVERSION_DEFAULT); delete[] chars; return ok; }
JSObject * JSAPITest::createGlobal(JSPrincipals *principals) { /* Create the global object. */ JS::CompartmentOptions options; options.setVersion(JSVERSION_LATEST); global = JS_NewGlobalObject(cx, getGlobalClass(), principals, JS::FireOnNewGlobalHook, options); if (!global) return nullptr; JS::AddNamedObjectRoot(cx, &global, "test-global"); JS::HandleObject globalHandle = JS::HandleObject::fromMarkedLocation(global.unsafeGet()); JSAutoCompartment ac(cx, globalHandle); /* Populate the global object with the standard globals, like Object and Array. */ if (!JS_InitStandardClasses(cx, globalHandle)) { global = nullptr; JS::RemoveObjectRoot(cx, &global); } return global; }
bool eval(const char* asciiChars, bool mutedErrors, JS::MutableHandleValue rval) { size_t len = strlen(asciiChars); mozilla::UniquePtr<char16_t[]> chars(new char16_t[len+1]); for (size_t i = 0; i < len; ++i) chars[i] = asciiChars[i]; chars[len] = 0; JS::RootedObject global(cx, JS_NewGlobalObject(cx, getGlobalClass(), nullptr, JS::FireOnNewGlobalHook)); CHECK(global); JSAutoCompartment ac(cx, global); CHECK(JS_InitStandardClasses(cx, global)); JS::CompileOptions options(cx); options.setMutedErrors(mutedErrors) .setFileAndLine("", 0); return JS::Evaluate(cx, options, chars.get(), len, rval); }
JSObject *createTestGlobal() { JS::CompartmentOptions options; options.setVersion(JSVERSION_LATEST); return JS_NewGlobalObject(cx, getGlobalClass(), nullptr, JS::FireOnNewGlobalHook, options); }
/* -*- 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/. */ // Test that heap snapshots walk the compartment boundaries correctly. #include "DevTools.h" DEF_TEST(DoesntCrossCompartmentBoundaries, { // Create a new global to get a new compartment. JS::CompartmentOptions options; JS::RootedObject newGlobal(cx, JS_NewGlobalObject(cx, getGlobalClass(), nullptr, JS::FireOnNewGlobalHook, options)); ASSERT_TRUE(newGlobal); JSCompartment* newCompartment = nullptr; { JSAutoCompartment ac(cx, newGlobal); ASSERT_TRUE(JS_InitStandardClasses(cx, newGlobal)); newCompartment = js::GetContextCompartment(cx); } ASSERT_TRUE(newCompartment); ASSERT_NE(newCompartment, compartment); // Our set of target compartments is only the pre-existing compartment and // does not include the new compartment. JS::CompartmentSet targetCompartments; ASSERT_TRUE(targetCompartments.init());
/* -*- 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/. */ // Test that heap snapshots walk the compartment boundaries correctly. #include "DevTools.h" DEF_TEST(DoesntCrossCompartmentBoundaries, { // Create a new global to get a new compartment. JS::RealmOptions options; JS::RootedObject newGlobal( cx, JS_NewGlobalObject(cx, getGlobalClass(), nullptr, JS::FireOnNewGlobalHook, options)); ASSERT_TRUE(newGlobal); JS::Compartment* newCompartment = nullptr; { JSAutoRealm ar(cx, newGlobal); ASSERT_TRUE(JS::InitRealmStandardClasses(cx)); newCompartment = js::GetContextCompartment(cx); } ASSERT_TRUE(newCompartment); ASSERT_NE(newCompartment, compartment); // Our set of target compartments is only the pre-existing compartment and // does not include the new compartment. JS::CompartmentSet targetCompartments; ASSERT_TRUE(targetCompartments.put(compartment)); FakeNode nodeA;
JSObject* createTestGlobal() { JS::CompartmentOptions options; return JS_NewGlobalObject(cx, getGlobalClass(), nullptr, JS::FireOnNewGlobalHook, options); }