LCOV - code coverage report
Current view: top level - dom/events - ClipboardEvent.cpp (source / functions) Hit Total Coverage
Test: output.info Lines: 0 54 0.0 %
Date: 2017-07-14 16:53:18 Functions: 0 10 0.0 %
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 "mozilla/dom/ClipboardEvent.h"
       8             : #include "mozilla/ContentEvents.h"
       9             : #include "mozilla/dom/DataTransfer.h"
      10             : #include "nsIClipboard.h"
      11             : 
      12             : namespace mozilla {
      13             : namespace dom {
      14             : 
      15           0 : ClipboardEvent::ClipboardEvent(EventTarget* aOwner,
      16             :                                nsPresContext* aPresContext,
      17           0 :                                InternalClipboardEvent* aEvent)
      18             :   : Event(aOwner, aPresContext,
      19           0 :           aEvent ? aEvent : new InternalClipboardEvent(false, eVoidEvent))
      20             : {
      21           0 :   if (aEvent) {
      22           0 :     mEventIsInternal = false;
      23             :   } else {
      24           0 :     mEventIsInternal = true;
      25           0 :     mEvent->mTime = PR_Now();
      26             :   }
      27           0 : }
      28             : 
      29           0 : NS_INTERFACE_MAP_BEGIN(ClipboardEvent)
      30           0 :   NS_INTERFACE_MAP_ENTRY(nsIDOMClipboardEvent)
      31           0 : NS_INTERFACE_MAP_END_INHERITING(Event)
      32             : 
      33           0 : NS_IMPL_ADDREF_INHERITED(ClipboardEvent, Event)
      34           0 : NS_IMPL_RELEASE_INHERITED(ClipboardEvent, Event)
      35             : 
      36             : nsresult
      37           0 : ClipboardEvent::InitClipboardEvent(const nsAString& aType,
      38             :                                    bool aCanBubble,
      39             :                                    bool aCancelable,
      40             :                                    nsIDOMDataTransfer* aClipboardData)
      41             : {
      42           0 :   nsCOMPtr<DataTransfer> clipboardData = do_QueryInterface(aClipboardData);
      43             :   // Null clipboardData is OK
      44             : 
      45           0 :   ErrorResult rv;
      46           0 :   InitClipboardEvent(aType, aCanBubble, aCancelable, clipboardData);
      47             : 
      48           0 :   return rv.StealNSResult();
      49             : }
      50             : 
      51             : void
      52           0 : ClipboardEvent::InitClipboardEvent(const nsAString& aType, bool aCanBubble,
      53             :                                    bool aCancelable,
      54             :                                    DataTransfer* aClipboardData)
      55             : {
      56           0 :   NS_ENSURE_TRUE_VOID(!mEvent->mFlags.mIsBeingDispatched);
      57             : 
      58           0 :   Event::InitEvent(aType, aCanBubble, aCancelable);
      59           0 :   mEvent->AsClipboardEvent()->mClipboardData = aClipboardData;
      60             : }
      61             : 
      62             : already_AddRefed<ClipboardEvent>
      63           0 : ClipboardEvent::Constructor(const GlobalObject& aGlobal,
      64             :                             const nsAString& aType,
      65             :                             const ClipboardEventInit& aParam,
      66             :                             ErrorResult& aRv)
      67             : {
      68           0 :   nsCOMPtr<EventTarget> t = do_QueryInterface(aGlobal.GetAsSupports());
      69           0 :   RefPtr<ClipboardEvent> e = new ClipboardEvent(t, nullptr, nullptr);
      70           0 :   bool trusted = e->Init(t);
      71             : 
      72           0 :   RefPtr<DataTransfer> clipboardData;
      73           0 :   if (e->mEventIsInternal) {
      74           0 :     InternalClipboardEvent* event = e->mEvent->AsClipboardEvent();
      75           0 :     if (event) {
      76             :       // Always create a clipboardData for the copy event. If this is changed to
      77             :       // support other types of events, make sure that read/write privileges are
      78             :       // checked properly within DataTransfer.
      79           0 :       clipboardData = new DataTransfer(ToSupports(e), eCopy, false, -1);
      80           0 :       clipboardData->SetData(aParam.mDataType, aParam.mData,
      81           0 :                              *aGlobal.GetSubjectPrincipal(), aRv);
      82           0 :       NS_ENSURE_TRUE(!aRv.Failed(), nullptr);
      83             :     }
      84             :   }
      85             : 
      86           0 :   e->InitClipboardEvent(aType, aParam.mBubbles, aParam.mCancelable,
      87           0 :                         clipboardData);
      88           0 :   e->SetTrusted(trusted);
      89           0 :   e->SetComposed(aParam.mComposed);
      90           0 :   return e.forget();
      91             : }
      92             : 
      93             : NS_IMETHODIMP
      94           0 : ClipboardEvent::GetClipboardData(nsIDOMDataTransfer** aClipboardData)
      95             : {
      96           0 :   NS_IF_ADDREF(*aClipboardData = GetClipboardData());
      97           0 :   return NS_OK;
      98             : }
      99             : 
     100             : DataTransfer*
     101           0 : ClipboardEvent::GetClipboardData()
     102             : {
     103           0 :   InternalClipboardEvent* event = mEvent->AsClipboardEvent();
     104             : 
     105           0 :   if (!event->mClipboardData) {
     106           0 :     if (mEventIsInternal) {
     107             :       event->mClipboardData =
     108           0 :         new DataTransfer(ToSupports(this), eCopy, false, -1);
     109             :     } else {
     110             :       event->mClipboardData =
     111           0 :         new DataTransfer(ToSupports(this), event->mMessage,
     112           0 :                          event->mMessage == ePaste,
     113           0 :                          nsIClipboard::kGlobalClipboard);
     114             :     }
     115             :   }
     116             : 
     117           0 :   return event->mClipboardData;
     118             : }
     119             : 
     120             : } // namespace dom
     121             : } // namespace mozilla
     122             : 
     123             : using namespace mozilla;
     124             : using namespace mozilla::dom;
     125             : 
     126             : already_AddRefed<ClipboardEvent>
     127           0 : NS_NewDOMClipboardEvent(EventTarget* aOwner,
     128             :                         nsPresContext* aPresContext,
     129             :                         InternalClipboardEvent* aEvent)
     130             : {
     131             :   RefPtr<ClipboardEvent> it =
     132           0 :     new ClipboardEvent(aOwner, aPresContext, aEvent);
     133           0 :   return it.forget();
     134             : }

Generated by: LCOV version 1.13