LCOV - code coverage report
Current view: top level - dom/events - CustomEvent.cpp (source / functions) Hit Total Coverage
Test: output.info Lines: 33 69 47.8 %
Date: 2017-07-14 16:53:18 Functions: 10 16 62.5 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
       2             : /* vim: set ts=8 sts=2 et sw=2 tw=80: */
       3             : /* This Source Code Form is subject to the terms of the Mozilla Public
       4             :  * License, v. 2.0. If a copy of the MPL was not distributed with this
       5             :  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
       6             : 
       7             : #include "CustomEvent.h"
       8             : #include "mozilla/dom/CustomEventBinding.h"
       9             : 
      10             : #include "mozilla/dom/BindingUtils.h"
      11             : #include "nsContentUtils.h"
      12             : #include "nsIXPConnect.h"
      13             : 
      14             : using namespace mozilla;
      15             : using namespace mozilla::dom;
      16             : 
      17           9 : CustomEvent::CustomEvent(mozilla::dom::EventTarget* aOwner,
      18             :                          nsPresContext* aPresContext,
      19           9 :                          mozilla::WidgetEvent* aEvent)
      20             :   : Event(aOwner, aPresContext, aEvent)
      21           9 :   , mDetail(JS::NullValue())
      22             : {
      23           9 :   mozilla::HoldJSObjects(this);
      24           9 : }
      25             : 
      26           0 : CustomEvent::~CustomEvent()
      27             : {
      28           0 :   mozilla::DropJSObjects(this);
      29           0 : }
      30             : 
      31             : NS_IMPL_CYCLE_COLLECTION_CLASS(CustomEvent)
      32           0 : NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN_INHERITED(CustomEvent, Event)
      33           0 :   tmp->mDetail.setUndefined();
      34           0 :   mozilla::DropJSObjects(this);
      35           0 : NS_IMPL_CYCLE_COLLECTION_UNLINK_END
      36             : 
      37           9 : NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN_INHERITED(CustomEvent, Event)
      38           9 : NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
      39             : 
      40          20 : NS_IMPL_CYCLE_COLLECTION_TRACE_BEGIN_INHERITED(CustomEvent, Event)
      41          20 :   NS_IMPL_CYCLE_COLLECTION_TRACE_JS_MEMBER_CALLBACK(mDetail)
      42          20 : NS_IMPL_CYCLE_COLLECTION_TRACE_END
      43             : 
      44          20 : NS_IMPL_ADDREF_INHERITED(CustomEvent, Event)
      45          11 : NS_IMPL_RELEASE_INHERITED(CustomEvent, Event)
      46             : 
      47         174 : NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION_INHERITED(CustomEvent)
      48          89 :   NS_INTERFACE_MAP_ENTRY(nsIDOMCustomEvent)
      49          89 : NS_INTERFACE_MAP_END_INHERITING(Event)
      50             : 
      51             : already_AddRefed<CustomEvent>
      52           9 : CustomEvent::Constructor(const GlobalObject& aGlobal,
      53             :                          const nsAString& aType,
      54             :                          const CustomEventInit& aParam,
      55             :                          ErrorResult& aRv)
      56             : {
      57          18 :   nsCOMPtr<mozilla::dom::EventTarget> t = do_QueryInterface(aGlobal.GetAsSupports());
      58          27 :   RefPtr<CustomEvent> e = new CustomEvent(t, nullptr, nullptr);
      59           9 :   bool trusted = e->Init(t);
      60          18 :   JS::Rooted<JS::Value> detail(aGlobal.Context(), aParam.mDetail);
      61           9 :   e->InitCustomEvent(aGlobal.Context(), aType, aParam.mBubbles, aParam.mCancelable, detail, aRv);
      62           9 :   e->SetTrusted(trusted);
      63           9 :   e->SetComposed(aParam.mComposed);
      64          18 :   return e.forget();
      65             : }
      66             : 
      67             : JSObject*
      68           9 : CustomEvent::WrapObjectInternal(JSContext* aCx, JS::Handle<JSObject*> aGivenProto)
      69             : {
      70           9 :   return mozilla::dom::CustomEventBinding::Wrap(aCx, this, aGivenProto);
      71             : }
      72             : 
      73             : NS_IMETHODIMP
      74           0 : CustomEvent::InitCustomEvent(const nsAString& aType,
      75             :                              bool aCanBubble,
      76             :                              bool aCancelable,
      77             :                              nsIVariant* aDetail)
      78             : {
      79           0 :   NS_ENSURE_TRUE(!mEvent->mFlags.mIsBeingDispatched, NS_OK);
      80             : 
      81           0 :   AutoJSAPI jsapi;
      82           0 :   NS_ENSURE_STATE(jsapi.Init(GetParentObject()));
      83           0 :   JSContext* cx = jsapi.cx();
      84           0 :   JS::Rooted<JS::Value> detail(cx);
      85             : 
      86           0 :   if (!aDetail) {
      87           0 :     detail = JS::NullValue();
      88           0 :   } else if (NS_WARN_IF(!VariantToJsval(cx, aDetail, &detail))) {
      89           0 :     JS_ClearPendingException(cx);
      90           0 :     return NS_ERROR_FAILURE;
      91             :   }
      92             : 
      93           0 :   Event::InitEvent(aType, aCanBubble, aCancelable);
      94           0 :   mDetail = detail;
      95             : 
      96           0 :   return NS_OK;
      97             : }
      98             : 
      99             : void
     100           9 : CustomEvent::InitCustomEvent(JSContext* aCx,
     101             :                              const nsAString& aType,
     102             :                              bool aCanBubble,
     103             :                              bool aCancelable,
     104             :                              JS::Handle<JS::Value> aDetail,
     105             :                              ErrorResult& aRv)
     106             : {
     107           9 :   NS_ENSURE_TRUE_VOID(!mEvent->mFlags.mIsBeingDispatched);
     108             : 
     109           9 :   Event::InitEvent(aType, aCanBubble, aCancelable);
     110           9 :   mDetail = aDetail;
     111             : }
     112             : 
     113             : NS_IMETHODIMP
     114           0 : CustomEvent::GetDetail(nsIVariant** aDetail)
     115             : {
     116           0 :   if (mDetail.isNull()) {
     117           0 :     *aDetail = nullptr;
     118           0 :     return NS_OK;
     119             :   }
     120             : 
     121           0 :   AutoJSAPI jsapi;
     122           0 :   NS_ENSURE_STATE(jsapi.Init(GetParentObject()));
     123           0 :   JSContext* cx = jsapi.cx();
     124           0 :   JS::Rooted<JS::Value> detail(cx, mDetail);
     125           0 :   nsIXPConnect* xpc = nsContentUtils::XPConnect();
     126             : 
     127           0 :   if (NS_WARN_IF(!xpc)) {
     128           0 :     return NS_ERROR_FAILURE;
     129             :   }
     130             : 
     131           0 :   return xpc->JSToVariant(cx, detail, aDetail);
     132             : }
     133             : 
     134             : void
     135           2 : CustomEvent::GetDetail(JSContext* aCx,
     136             :                        JS::MutableHandle<JS::Value> aRetval)
     137             : {
     138           2 :   aRetval.set(mDetail);
     139           2 : }
     140             : 
     141             : already_AddRefed<CustomEvent>
     142           0 : NS_NewDOMCustomEvent(EventTarget* aOwner,
     143             :                      nsPresContext* aPresContext,
     144             :                      mozilla::WidgetEvent* aEvent)
     145             : {
     146             :   RefPtr<CustomEvent> it =
     147           0 :     new CustomEvent(aOwner, aPresContext, aEvent);
     148           0 :   return it.forget();
     149             : }

Generated by: LCOV version 1.13