зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1121298 - Part 1: refactor MozNDEFRecord cstor. r=smaug, dimi
From f5d558e4dc3b3d1e08de09d1881bbf69a68a5791 Mon Sep 17 00:00:00 2001 --- dom/nfc/MozNDEFRecord.cpp | 102 +++++++++++++++++++++++++++++----------------- dom/nfc/MozNDEFRecord.h | 21 ++++++---- 2 files changed, 76 insertions(+), 47 deletions(-)
This commit is contained in:
Родитель
ca6537677e
Коммит
52582b044c
|
@ -69,8 +69,7 @@ MozNDEFRecord::DropData()
|
|||
* See section 3.3 THE NDEF Specification Test Requirements,
|
||||
* NDEF specification 1.0
|
||||
*/
|
||||
/* static */
|
||||
bool
|
||||
/* static */ bool
|
||||
MozNDEFRecord::ValidateTNF(const MozNDEFRecordOptions& aOptions,
|
||||
ErrorResult& aRv)
|
||||
{
|
||||
|
@ -100,66 +99,93 @@ MozNDEFRecord::ValidateTNF(const MozNDEFRecordOptions& aOptions,
|
|||
return true;
|
||||
}
|
||||
|
||||
/* static */
|
||||
already_AddRefed<MozNDEFRecord>
|
||||
/* static */ already_AddRefed<MozNDEFRecord>
|
||||
MozNDEFRecord::Constructor(const GlobalObject& aGlobal,
|
||||
const MozNDEFRecordOptions& aOptions,
|
||||
ErrorResult& aRv)
|
||||
{
|
||||
if (!ValidateTNF(aOptions, aRv)) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
nsCOMPtr<nsPIDOMWindow> win = do_QueryInterface(aGlobal.GetAsSupports());
|
||||
if (!win) {
|
||||
aRv.Throw(NS_ERROR_FAILURE);
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
if (!ValidateTNF(aOptions, aRv)) {
|
||||
return nullptr;
|
||||
}
|
||||
JSContext* context = aGlobal.Context();
|
||||
nsRefPtr<MozNDEFRecord> ndefRecord = new MozNDEFRecord(win, aOptions.mTnf);
|
||||
ndefRecord->InitType(context, aOptions.mType);
|
||||
ndefRecord->InitId(context, aOptions.mId);
|
||||
ndefRecord->InitPayload(context, aOptions.mPayload);
|
||||
|
||||
nsRefPtr<MozNDEFRecord> ndefrecord = new MozNDEFRecord(aGlobal.Context(),
|
||||
win, aOptions);
|
||||
if (!ndefrecord) {
|
||||
aRv.Throw(NS_ERROR_FAILURE);
|
||||
return nullptr;
|
||||
}
|
||||
return ndefrecord.forget();
|
||||
return ndefRecord.forget();
|
||||
}
|
||||
|
||||
MozNDEFRecord::MozNDEFRecord(JSContext* aCx, nsPIDOMWindow* aWindow,
|
||||
const MozNDEFRecordOptions& aOptions)
|
||||
MozNDEFRecord::MozNDEFRecord(nsPIDOMWindow* aWindow, TNF aTnf)
|
||||
: mWindow(aWindow) // For GetParentObject()
|
||||
, mTnf(aTnf)
|
||||
, mSize(3) // 1(flags) + 1(type_length) + 1(payload_length)
|
||||
{
|
||||
mWindow = aWindow; // For GetParentObject()
|
||||
|
||||
mTnf = aOptions.mTnf;
|
||||
mSize = 3; // 1(flags) + 1(type_length) + 1(payload_length)
|
||||
|
||||
if (aOptions.mType.WasPassed()) {
|
||||
const Uint8Array& type = aOptions.mType.Value();
|
||||
type.ComputeLengthAndData();
|
||||
mType = Uint8Array::Create(aCx, this, type.Length(), type.Data());
|
||||
mSize += type.Length();
|
||||
}
|
||||
|
||||
if (aOptions.mId.WasPassed()) {
|
||||
const Uint8Array& id = aOptions.mId.Value();
|
||||
id.ComputeLengthAndData();
|
||||
mId = Uint8Array::Create(aCx, this, id.Length(), id.Data());
|
||||
mSize += 1 /* id_length */ + id.Length();
|
||||
}
|
||||
|
||||
if (aOptions.mPayload.WasPassed()) {
|
||||
const Uint8Array& payload = aOptions.mPayload.Value();
|
||||
payload.ComputeLengthAndData();
|
||||
mPayload = Uint8Array::Create(aCx, this, payload.Length(), payload.Data());
|
||||
if (payload.Length() > 0xff) {
|
||||
mSize += 3;
|
||||
}
|
||||
mSize += payload.Length();
|
||||
}
|
||||
|
||||
HoldData();
|
||||
}
|
||||
|
||||
void
|
||||
MozNDEFRecord::InitType(JSContext* aCx, const Optional<Uint8Array>& aType)
|
||||
{
|
||||
if (!aType.WasPassed()) {
|
||||
return;
|
||||
}
|
||||
|
||||
const Uint8Array& type = aType.Value();
|
||||
type.ComputeLengthAndData();
|
||||
mType = Uint8Array::Create(aCx, this, type.Length(), type.Data());
|
||||
IncSize(type.Length());
|
||||
}
|
||||
|
||||
void
|
||||
MozNDEFRecord::InitId(JSContext* aCx, const Optional<Uint8Array>& aId)
|
||||
{
|
||||
if (!aId.WasPassed()) {
|
||||
return;
|
||||
}
|
||||
|
||||
const Uint8Array& id = aId.Value();
|
||||
id.ComputeLengthAndData();
|
||||
mId = Uint8Array::Create(aCx, this, id.Length(), id.Data());
|
||||
IncSize(1 /* id_length */ + id.Length());
|
||||
}
|
||||
|
||||
void
|
||||
MozNDEFRecord::InitPayload(JSContext* aCx, const Optional<Uint8Array>& aPayload)
|
||||
{
|
||||
if (!aPayload.WasPassed()) {
|
||||
return;
|
||||
}
|
||||
|
||||
const Uint8Array& payload = aPayload.Value();
|
||||
payload.ComputeLengthAndData();
|
||||
mPayload = Uint8Array::Create(aCx, this, payload.Length(), payload.Data());
|
||||
IncSizeForPayload(payload.Length());
|
||||
}
|
||||
|
||||
void
|
||||
MozNDEFRecord::IncSize(uint32_t aCount)
|
||||
{
|
||||
mSize += aCount;
|
||||
}
|
||||
|
||||
void
|
||||
MozNDEFRecord::IncSizeForPayload(uint32_t aLen)
|
||||
{
|
||||
if (aLen > 0xff) {
|
||||
IncSize(3);
|
||||
}
|
||||
|
||||
IncSize(aLen);
|
||||
}
|
||||
|
||||
MozNDEFRecord::~MozNDEFRecord()
|
||||
{
|
||||
DropData();
|
||||
|
|
|
@ -36,9 +36,7 @@ public:
|
|||
NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(MozNDEFRecord)
|
||||
|
||||
public:
|
||||
|
||||
MozNDEFRecord(JSContext* aCx, nsPIDOMWindow* aWindow,
|
||||
const MozNDEFRecordOptions& aOptions);
|
||||
MozNDEFRecord(nsPIDOMWindow* aWindow, TNF aTnf);
|
||||
|
||||
~MozNDEFRecord();
|
||||
|
||||
|
@ -59,28 +57,28 @@ public:
|
|||
return mTnf;
|
||||
}
|
||||
|
||||
void GetType(JSContext* cx, JS::MutableHandle<JSObject*> retval) const
|
||||
void GetType(JSContext* /* unused */, JS::MutableHandle<JSObject*> aRetVal) const
|
||||
{
|
||||
if (mType) {
|
||||
JS::ExposeObjectToActiveJS(mType);
|
||||
}
|
||||
retval.set(mType);
|
||||
aRetVal.set(mType);
|
||||
}
|
||||
|
||||
void GetId(JSContext* cx, JS::MutableHandle<JSObject*> retval) const
|
||||
void GetId(JSContext* /* unused */, JS::MutableHandle<JSObject*> aRetVal) const
|
||||
{
|
||||
if (mId) {
|
||||
JS::ExposeObjectToActiveJS(mId);
|
||||
}
|
||||
retval.set(mId);
|
||||
aRetVal.set(mId);
|
||||
}
|
||||
|
||||
void GetPayload(JSContext* cx, JS::MutableHandle<JSObject*> retval) const
|
||||
void GetPayload(JSContext* /* unused */, JS::MutableHandle<JSObject*> aRetVal) const
|
||||
{
|
||||
if (mPayload) {
|
||||
JS::ExposeObjectToActiveJS(mPayload);
|
||||
}
|
||||
retval.set(mPayload);
|
||||
aRetVal.set(mPayload);
|
||||
}
|
||||
|
||||
uint32_t Size() const
|
||||
|
@ -93,6 +91,11 @@ private:
|
|||
nsRefPtr<nsPIDOMWindow> mWindow;
|
||||
void HoldData();
|
||||
void DropData();
|
||||
void InitType(JSContext* aCx, const Optional<Uint8Array>& aType);
|
||||
void InitId(JSContext* aCx, const Optional<Uint8Array>& aId);
|
||||
void InitPayload(JSContext* aCx, const Optional<Uint8Array>& aPayload);
|
||||
void IncSize(uint32_t aCount);
|
||||
void IncSizeForPayload(uint32_t aLen);
|
||||
|
||||
static bool
|
||||
ValidateTNF(const MozNDEFRecordOptions& aOptions, ErrorResult& aRv);
|
||||
|
|
Загрузка…
Ссылка в новой задаче