1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/dom/nfc/MozNDEFRecord.cpp Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,129 @@ 1.4 +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ 1.5 +/* vim:set ts=2 sw=2 sts=2 et cindent: */ 1.6 +/* This Source Code Form is subject to the terms of the Mozilla Public 1.7 + * License, v. 2.0. If a copy of the MPL was not distributed with this 1.8 + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 1.9 + 1.10 +/* Copyright © 2013 Deutsche Telekom, Inc. */ 1.11 + 1.12 +#include "MozNDEFRecord.h" 1.13 +#include "mozilla/dom/MozNDEFRecordBinding.h" 1.14 +#include "mozilla/HoldDropJSObjects.h" 1.15 +#include "nsContentUtils.h" 1.16 + 1.17 + 1.18 +namespace mozilla { 1.19 +namespace dom { 1.20 + 1.21 + 1.22 +NS_IMPL_CYCLE_COLLECTION_CLASS(MozNDEFRecord) 1.23 + 1.24 +NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(MozNDEFRecord) 1.25 + NS_IMPL_CYCLE_COLLECTION_UNLINK(mWindow) 1.26 + NS_IMPL_CYCLE_COLLECTION_UNLINK_PRESERVED_WRAPPER 1.27 + tmp->DropData(); 1.28 +NS_IMPL_CYCLE_COLLECTION_UNLINK_END 1.29 + 1.30 +NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(MozNDEFRecord) 1.31 + NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mWindow) 1.32 + NS_IMPL_CYCLE_COLLECTION_TRAVERSE_SCRIPT_OBJECTS 1.33 +NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END 1.34 + 1.35 +NS_IMPL_CYCLE_COLLECTION_TRACE_BEGIN(MozNDEFRecord) 1.36 + NS_IMPL_CYCLE_COLLECTION_TRACE_JS_MEMBER_CALLBACK(mType) 1.37 + NS_IMPL_CYCLE_COLLECTION_TRACE_JS_MEMBER_CALLBACK(mId) 1.38 + NS_IMPL_CYCLE_COLLECTION_TRACE_JS_MEMBER_CALLBACK(mPayload) 1.39 + NS_IMPL_CYCLE_COLLECTION_TRACE_PRESERVED_WRAPPER 1.40 +NS_IMPL_CYCLE_COLLECTION_TRACE_END 1.41 + 1.42 +NS_IMPL_CYCLE_COLLECTING_ADDREF(MozNDEFRecord) 1.43 +NS_IMPL_CYCLE_COLLECTING_RELEASE(MozNDEFRecord) 1.44 +NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(MozNDEFRecord) 1.45 + NS_WRAPPERCACHE_INTERFACE_MAP_ENTRY 1.46 + NS_INTERFACE_MAP_ENTRY(nsISupports) 1.47 +NS_INTERFACE_MAP_END 1.48 + 1.49 +void 1.50 +MozNDEFRecord::HoldData() 1.51 +{ 1.52 + mozilla::HoldJSObjects(this); 1.53 +} 1.54 + 1.55 +void 1.56 +MozNDEFRecord::DropData() 1.57 +{ 1.58 + if (mType) { 1.59 + mType = nullptr; 1.60 + } 1.61 + if (mId) { 1.62 + mId = nullptr; 1.63 + } 1.64 + if (mPayload) { 1.65 + mPayload = nullptr; 1.66 + } 1.67 + mozilla::DropJSObjects(this); 1.68 +} 1.69 + 1.70 +/* static */ 1.71 +already_AddRefed<MozNDEFRecord> 1.72 +MozNDEFRecord::Constructor(const GlobalObject& aGlobal, 1.73 + uint8_t aTnf, 1.74 + const Optional<Uint8Array>& aType, 1.75 + const Optional<Uint8Array>& aId, 1.76 + const Optional<Uint8Array>& aPayload, 1.77 + ErrorResult& aRv) 1.78 +{ 1.79 + nsCOMPtr<nsPIDOMWindow> win = do_QueryInterface(aGlobal.GetAsSupports()); 1.80 + if (!win) { 1.81 + aRv.Throw(NS_ERROR_FAILURE); 1.82 + return nullptr; 1.83 + } 1.84 + 1.85 + nsRefPtr<MozNDEFRecord> ndefrecord = new MozNDEFRecord(aGlobal.GetContext(), 1.86 + win, aTnf, aType, aId, 1.87 + aPayload); 1.88 + if (!ndefrecord) { 1.89 + aRv.Throw(NS_ERROR_FAILURE); 1.90 + return nullptr; 1.91 + } 1.92 + return ndefrecord.forget(); 1.93 +} 1.94 + 1.95 +MozNDEFRecord::MozNDEFRecord(JSContext* aCx, nsPIDOMWindow* aWindow, 1.96 + uint8_t aTnf, 1.97 + const Optional<Uint8Array>& aType, 1.98 + const Optional<Uint8Array>& aId, 1.99 + const Optional<Uint8Array>& aPayload) 1.100 + : mTnf(aTnf) 1.101 +{ 1.102 + mWindow = aWindow; // For GetParentObject() 1.103 + 1.104 + if (aType.WasPassed()) { 1.105 + mType = Uint8Array::Create(aCx, this, aType.Value().Length(), aType.Value().Data()); 1.106 + } 1.107 + 1.108 + if (aId.WasPassed()) { 1.109 + mId = Uint8Array::Create(aCx, this, aId.Value().Length(), aId.Value().Data()); 1.110 + } 1.111 + 1.112 + if (aPayload.WasPassed()) { 1.113 + mPayload = Uint8Array::Create(aCx, this, aPayload.Value().Length(), aPayload.Value().Data()); 1.114 + } 1.115 + 1.116 + SetIsDOMBinding(); 1.117 + HoldData(); 1.118 +} 1.119 + 1.120 +MozNDEFRecord::~MozNDEFRecord() 1.121 +{ 1.122 + DropData(); 1.123 +} 1.124 + 1.125 +JSObject* 1.126 +MozNDEFRecord::WrapObject(JSContext* aCx) 1.127 +{ 1.128 + return MozNDEFRecordBinding::Wrap(aCx, this); 1.129 +} 1.130 + 1.131 +} // namespace dom 1.132 +} // namespace mozilla