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)); JS::GetSavedFrameLine(cx, principals, savedFrame, &frameLine));
EXPECT_EQ(line, frameLine); EXPECT_EQ(line, frameLine);
uint32_t frameColumn; JS::TaggedColumnNumberOneOrigin frameColumn;
ASSERT_EQ(JS::SavedFrameResult::Ok, ASSERT_EQ(JS::SavedFrameResult::Ok,
JS::GetSavedFrameColumn(cx, principals, savedFrame, &frameColumn)); JS::GetSavedFrameColumn(cx, principals, savedFrame, &frameColumn));
EXPECT_EQ(column.oneOriginValue(), frameColumn); EXPECT_EQ(column, frameColumn);
JS::Rooted<JSObject*> parent(cx); JS::Rooted<JSObject*> parent(cx);
ASSERT_EQ(JS::SavedFrameResult::Ok, ASSERT_EQ(JS::SavedFrameResult::Ok,

View file

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

View file

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

View file

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

View file

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

View file

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