зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1007724 - Part 1: tnf validation. r=smaug
From 5289124d435e3eed280c8a1728b55ab005ac0aae Mon Sep 17 00:00:00 2001 --- dom/nfc/MozNDEFRecord.cpp | 40 ++++++++++++++++++++++++++++++++++++++++ dom/nfc/MozNDEFRecord.h | 3 +++ 2 files changed, 43 insertions(+)
This commit is contained in:
Родитель
c72400c925
Коммит
f52fe75bec
|
@ -64,6 +64,42 @@ MozNDEFRecord::DropData()
|
|||
mozilla::DropJSObjects(this);
|
||||
}
|
||||
|
||||
/**
|
||||
* Validate TNF.
|
||||
* See section 3.3 THE NDEF Specification Test Requirements,
|
||||
* NDEF specification 1.0
|
||||
*/
|
||||
/* static */
|
||||
bool
|
||||
MozNDEFRecord::ValidateTNF(const MozNDEFRecordOptions& aOptions,
|
||||
ErrorResult& aRv)
|
||||
{
|
||||
// * The TNF field MUST have a value between 0x00 and 0x06.
|
||||
// * The TNF value MUST NOT be 0x07.
|
||||
// These two requirements are already handled by WebIDL bindings.
|
||||
|
||||
// If the TNF value is 0x00 (Empty), the TYPE, ID, and PAYLOAD fields MUST be
|
||||
// omitted from the record.
|
||||
if ((aOptions.mTnf == TNF::Empty) &&
|
||||
(aOptions.mType.WasPassed() || aOptions.mId.WasPassed() ||
|
||||
aOptions.mPayload.WasPassed())) {
|
||||
NS_WARNING("tnf is empty but type/id/payload is not null.");
|
||||
aRv.Throw(NS_ERROR_DOM_INVALID_STATE_ERR);
|
||||
return false;
|
||||
}
|
||||
|
||||
// If the TNF value is 0x05 (Unknown) or 0x06(Unchanged), the TYPE field MUST
|
||||
// be omitted from the NDEF record.
|
||||
if ((aOptions.mTnf == TNF::Unknown || aOptions.mTnf == TNF::Unchanged) &&
|
||||
aOptions.mType.WasPassed()) {
|
||||
NS_WARNING("tnf is unknown/unchanged but type is not null.");
|
||||
aRv.Throw(NS_ERROR_DOM_INVALID_STATE_ERR);
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/* static */
|
||||
already_AddRefed<MozNDEFRecord>
|
||||
MozNDEFRecord::Constructor(const GlobalObject& aGlobal,
|
||||
|
@ -76,6 +112,10 @@ MozNDEFRecord::Constructor(const GlobalObject& aGlobal,
|
|||
return nullptr;
|
||||
}
|
||||
|
||||
if (!ValidateTNF(aOptions, aRv)) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
nsRefPtr<MozNDEFRecord> ndefrecord = new MozNDEFRecord(aGlobal.Context(),
|
||||
win, aOptions);
|
||||
if (!ndefrecord) {
|
||||
|
|
|
@ -89,6 +89,9 @@ private:
|
|||
void HoldData();
|
||||
void DropData();
|
||||
|
||||
static bool
|
||||
ValidateTNF(const MozNDEFRecordOptions& aOptions, ErrorResult& aRv);
|
||||
|
||||
TNF mTnf;
|
||||
JS::Heap<JSObject*> mType;
|
||||
JS::Heap<JSObject*> mId;
|
||||
|
|
Загрузка…
Ссылка в новой задаче