Bug 1847469 - Part 9: Use column number types in SavedFrame API. r=iain

Differential Revision: https://phabricator.services.mozilla.com/D185747
This commit is contained in:
Tooru Fujisawa 2023-08-16 17:31:38 +00:00
parent f2974ab488
commit 0ceff7d136
6 changed files with 27 additions and 22 deletions

View file

@ -61,10 +61,10 @@ DEF_TEST(DeserializedStackFrameUbiStackFrames, {
JS::GetSavedFrameLine(cx, principals, savedFrame, &frameLine));
EXPECT_EQ(line, frameLine);
uint32_t frameColumn;
JS::TaggedColumnNumberOneOrigin frameColumn;
ASSERT_EQ(JS::SavedFrameResult::Ok,
JS::GetSavedFrameColumn(cx, principals, savedFrame, &frameColumn));
EXPECT_EQ(column.oneOriginValue(), frameColumn);
EXPECT_EQ(column, frameColumn);
JS::Rooted<JSObject*> parent(cx);
ASSERT_EQ(JS::SavedFrameResult::Ok,

View file

@ -8,6 +8,7 @@
#include "JSOracleParent.h"
#include "js/CallAndConstruct.h" // JS::Call
#include "js/ColumnNumber.h" // JS::TaggedColumnNumberOneOrigin
#include "js/CharacterEncoding.h"
#include "js/Object.h" // JS::GetClass
#include "js/PropertyAndElement.h" // JS_DefineProperty, JS_DefinePropertyById, JS_Enumerate, JS_GetProperty, JS_GetPropertyById, JS_SetProperty, JS_SetPropertyById, JS::IdVector
@ -1596,7 +1597,7 @@ void ChromeUtils::CreateError(const GlobalObject& aGlobal,
{
JS::Rooted<JSString*> fileName(cx, JS_GetEmptyString(cx));
uint32_t line = 0;
uint32_t column = 0;
JS::TaggedColumnNumberOneOrigin column;
Maybe<JSAutoRealm> ar;
JS::Rooted<JSObject*> stack(cx);
@ -1626,8 +1627,9 @@ void ChromeUtils::CreateError(const GlobalObject& aGlobal,
}
JS::Rooted<JS::Value> err(cx);
if (!JS::CreateError(cx, JSEXN_ERR, stack, fileName, line, column, nullptr,
message, JS::NothingHandleValue, &err)) {
if (!JS::CreateError(cx, JSEXN_ERR, stack, fileName, line,
column.oneOriginValue(), nullptr, message,
JS::NothingHandleValue, &err)) {
return;
}

View file

@ -6,6 +6,7 @@
#include "mozilla/dom/Exceptions.h"
#include "js/ColumnNumber.h" // JS::TaggedColumnNumberOneOrigin
#include "js/RootingAPI.h"
#include "js/TypeDecls.h"
#include "jsapi.h"
@ -518,7 +519,7 @@ int32_t JSStackFrame::GetColumnNumber(JSContext* aCx) {
return 0;
}
uint32_t col;
JS::TaggedColumnNumberOneOrigin col;
bool canCache = false, useCachedValue = false;
GetValueIfNotCached(aCx, mStack, JS::GetSavedFrameColumn, mColNoInitialized,
&canCache, &useCachedValue, &col);
@ -528,11 +529,11 @@ int32_t JSStackFrame::GetColumnNumber(JSContext* aCx) {
}
if (canCache) {
mColNo = col;
mColNo = col.oneOriginValue();
mColNoInitialized = true;
}
return col;
return col.oneOriginValue();
}
NS_IMETHODIMP

View file

@ -13,6 +13,7 @@
#include "jstypes.h" // JS_PUBLIC_API
#include "js/ColumnNumber.h" // JS::TaggedColumnNumberOneOrigin
#include "js/TypeDecls.h"
struct JSPrincipals;
@ -82,12 +83,11 @@ extern JS_PUBLIC_API SavedFrameResult GetSavedFrameLine(
SavedFrameSelfHosted selfHosted = SavedFrameSelfHosted::Include);
/**
* Given a SavedFrame JSObject, get its column property (1-origin).
* Defaults to 0.
* Given a SavedFrame JSObject, get its column property. Defaults to 0.
*/
extern JS_PUBLIC_API SavedFrameResult GetSavedFrameColumn(
JSContext* cx, JSPrincipals* principals, Handle<JSObject*> savedFrame,
uint32_t* columnp,
JS::TaggedColumnNumberOneOrigin* columnp,
SavedFrameSelfHosted selfHosted = SavedFrameSelfHosted::Include);
/**

View file

@ -7,6 +7,7 @@
#include "mozilla/Utf8.h" // mozilla::Utf8Unit
#include "builtin/TestingFunctions.h"
#include "js/ColumnNumber.h" // JS::LimitedColumnNumberOneOrigin, JS::TaggedColumnNumberOneOrigin
#include "js/CompilationAndEvaluation.h" // JS::Evaluate
#include "js/Exception.h"
#include "js/SavedFrameAPI.h"
@ -46,10 +47,10 @@ BEGIN_TEST(testSavedStacks_ApiDefaultValues) {
CHECK(line == 0);
// Column
uint32_t column = 123;
JS::TaggedColumnNumberOneOrigin column(JS::LimitedColumnNumberOneOrigin(123));
result = JS::GetSavedFrameColumn(cx, principals, savedFrame, &column);
CHECK(result == JS::SavedFrameResult::AccessDenied);
CHECK(column == 0);
CHECK(column == JS::TaggedColumnNumberOneOrigin());
// Function display name
result =
@ -256,11 +257,11 @@ BEGIN_TEST(testSavedStacks_selfHostedFrames) {
CHECK_EQUAL(line, 3U);
// Column
uint32_t column = 123;
JS::TaggedColumnNumberOneOrigin column(JS::LimitedColumnNumberOneOrigin(123));
result = JS::GetSavedFrameColumn(cx, principals, selfHostedFrame, &column,
JS::SavedFrameSelfHosted::Exclude);
CHECK(result == JS::SavedFrameResult::Ok);
CHECK_EQUAL(column, 9U);
CHECK_EQUAL(column.oneOriginValue(), 9U);
// Function display name
result = JS::GetSavedFrameFunctionDisplayName(
@ -360,11 +361,12 @@ BEGIN_TEST(test_GetPendingExceptionStack) {
CHECK_EQUAL(line, expected[i].line);
// Column
uint32_t column = 123;
JS::TaggedColumnNumberOneOrigin column(
JS::LimitedColumnNumberOneOrigin(123));
result = JS::GetSavedFrameColumn(cx, principals, frame, &column,
JS::SavedFrameSelfHosted::Exclude);
CHECK(result == JS::SavedFrameResult::Ok);
CHECK_EQUAL(column, expected[i].column);
CHECK_EQUAL(column.oneOriginValue(), expected[i].column);
// Source
JS::RootedString str(cx);

View file

@ -829,7 +829,7 @@ JS_PUBLIC_API SavedFrameResult GetSavedFrameLine(
JS_PUBLIC_API SavedFrameResult GetSavedFrameColumn(
JSContext* cx, JSPrincipals* principals, HandleObject savedFrame,
uint32_t* columnp,
JS::TaggedColumnNumberOneOrigin* columnp,
SavedFrameSelfHosted selfHosted /* = SavedFrameSelfHosted::Include */) {
js::AssertHeapIsIdle();
CHECK_THREAD(cx);
@ -840,10 +840,10 @@ JS_PUBLIC_API SavedFrameResult GetSavedFrameColumn(
Rooted<js::SavedFrame*> frame(cx, UnwrapSavedFrame(cx, principals, savedFrame,
selfHosted, skippedAsync));
if (!frame) {
*columnp = 0;
*columnp = JS::TaggedColumnNumberOneOrigin();
return SavedFrameResult::AccessDenied;
}
*columnp = frame->getColumn().rawValue();
*columnp = frame->getColumn();
return SavedFrameResult::Ok;
}
@ -1225,10 +1225,10 @@ bool SavedFrame::lineProperty(JSContext* cx, unsigned argc, Value* vp) {
bool SavedFrame::columnProperty(JSContext* cx, unsigned argc, Value* vp) {
THIS_SAVEDFRAME(cx, argc, vp, "(get column)", args, frame);
JSPrincipals* principals = cx->realm()->principals();
uint32_t column;
JS::TaggedColumnNumberOneOrigin column;
if (JS::GetSavedFrameColumn(cx, principals, frame, &column) ==
JS::SavedFrameResult::Ok) {
args.rval().setNumber(column);
args.rval().setNumber(column.oneOriginValue());
} else {
args.rval().setNull();
}