LCOV - code coverage report
Current view: top level - js/xpconnect/src - XPCRuntimeService.cpp (source / functions) Hit Total Coverage
Test: output.info Lines: 44 78 56.4 %
Date: 2017-07-14 16:53:18 Functions: 12 19 63.2 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
       2             : /* vim: set ts=8 sts=4 et sw=4 tw=99: */
       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 "xpcprivate.h"
       8             : 
       9             : #include "nsContentUtils.h"
      10             : #include "BackstagePass.h"
      11             : #include "nsDOMClassInfo.h"
      12             : #include "nsIPrincipal.h"
      13             : #include "mozilla/dom/BindingUtils.h"
      14             : 
      15       46201 : NS_INTERFACE_MAP_BEGIN(BackstagePass)
      16       46201 :   NS_INTERFACE_MAP_ENTRY(nsIGlobalObject)
      17       37108 :   NS_INTERFACE_MAP_ENTRY(nsIXPCScriptable)
      18        4951 :   NS_INTERFACE_MAP_ENTRY(nsIClassInfo)
      19        1803 :   NS_INTERFACE_MAP_ENTRY(nsIScriptObjectPrincipal)
      20        1803 :   NS_INTERFACE_MAP_ENTRY(nsISupportsWeakReference)
      21        1803 :   NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIXPCScriptable)
      22        1290 : NS_INTERFACE_MAP_END
      23             : 
      24       82276 : NS_IMPL_ADDREF(BackstagePass)
      25       80949 : NS_IMPL_RELEASE(BackstagePass)
      26             : 
      27             : // The nsIXPCScriptable map declaration that will generate stubs for us...
      28             : #define XPC_MAP_CLASSNAME         BackstagePass
      29             : #define XPC_MAP_QUOTED_CLASSNAME "BackstagePass"
      30             : #define XPC_MAP_FLAGS (XPC_SCRIPTABLE_WANT_RESOLVE | \
      31             :                        XPC_SCRIPTABLE_WANT_ENUMERATE | \
      32             :                        XPC_SCRIPTABLE_WANT_FINALIZE | \
      33             :                        XPC_SCRIPTABLE_WANT_PRECREATE | \
      34             :                        XPC_SCRIPTABLE_USE_JSSTUB_FOR_ADDPROPERTY |  \
      35             :                        XPC_SCRIPTABLE_USE_JSSTUB_FOR_DELPROPERTY |  \
      36             :                        XPC_SCRIPTABLE_USE_JSSTUB_FOR_SETPROPERTY |  \
      37             :                        XPC_SCRIPTABLE_DONT_ENUM_QUERY_INTERFACE |  \
      38             :                        XPC_SCRIPTABLE_IS_GLOBAL_OBJECT |  \
      39             :                        XPC_SCRIPTABLE_DONT_REFLECT_INTERFACE_NAMES)
      40             : #include "xpc_map_end.h" /* This will #undef the above */
      41             : 
      42             : 
      43             : JSObject*
      44       19179 : BackstagePass::GetGlobalJSObject()
      45             : {
      46       19179 :     if (mWrapper)
      47       19179 :         return mWrapper->GetFlatJSObject();
      48           0 :     return nullptr;
      49             : }
      50             : 
      51             : void
      52         255 : BackstagePass::SetGlobalObject(JSObject* global)
      53             : {
      54         255 :     nsISupports* p = XPCWrappedNative::Get(global);
      55         255 :     MOZ_ASSERT(p);
      56         255 :     mWrapper = static_cast<XPCWrappedNative*>(p);
      57         255 : }
      58             : 
      59             : NS_IMETHODIMP
      60       13610 : BackstagePass::Resolve(nsIXPConnectWrappedNative* wrapper,
      61             :                        JSContext * cx, JSObject * objArg,
      62             :                        jsid idArg, bool* resolvedp,
      63             :                        bool* _retval)
      64             : {
      65       27220 :     JS::RootedObject obj(cx, objArg);
      66       27220 :     JS::RootedId id(cx, idArg);
      67       13610 :     *_retval = mozilla::dom::SystemGlobalResolve(cx, obj, id, resolvedp);
      68       27220 :     return *_retval ? NS_OK : NS_ERROR_FAILURE;
      69             : }
      70             : 
      71             : NS_IMETHODIMP
      72           0 : BackstagePass::Enumerate(nsIXPConnectWrappedNative* wrapper, JSContext* cx,
      73             :                          JSObject* objArg, bool* _retval)
      74             : {
      75           0 :     JS::RootedObject obj(cx, objArg);
      76           0 :     *_retval = mozilla::dom::SystemGlobalEnumerate(cx, obj);
      77           0 :     return *_retval ? NS_OK : NS_ERROR_FAILURE;
      78             : }
      79             : 
      80             : /***************************************************************************/
      81             : NS_IMETHODIMP
      82         255 : BackstagePass::GetInterfaces(uint32_t* aCount, nsIID * **aArray)
      83             : {
      84         255 :     const uint32_t count = 2;
      85         255 :     *aCount = count;
      86             :     nsIID** array;
      87         255 :     *aArray = array = static_cast<nsIID**>(moz_xmalloc(count * sizeof(nsIID*)));
      88         255 :     if (!array)
      89           0 :         return NS_ERROR_OUT_OF_MEMORY;
      90             : 
      91         255 :     uint32_t index = 0;
      92             :     nsIID* clone;
      93             : #define PUSH_IID(id)                                                          \
      94             :     clone = static_cast<nsIID*>(nsMemory::Clone(&NS_GET_IID( id ),           \
      95             :                                                  sizeof(nsIID)));             \
      96             :     if (!clone)                                                               \
      97             :         goto oom;                                                             \
      98             :     array[index++] = clone;
      99             : 
     100         255 :     PUSH_IID(nsIXPCScriptable)
     101         255 :     PUSH_IID(nsIScriptObjectPrincipal)
     102             : #undef PUSH_IID
     103             : 
     104         255 :     return NS_OK;
     105             : oom:
     106           0 :     while (index)
     107           0 :         free(array[--index]);
     108           0 :     free(array);
     109           0 :     *aArray = nullptr;
     110           0 :     return NS_ERROR_OUT_OF_MEMORY;
     111             : }
     112             : 
     113             : NS_IMETHODIMP
     114         255 : BackstagePass::GetScriptableHelper(nsIXPCScriptable** retval)
     115             : {
     116         510 :     nsCOMPtr<nsIXPCScriptable> scriptable = this;
     117         255 :     scriptable.forget(retval);
     118         510 :     return NS_OK;
     119             : }
     120             : 
     121             : NS_IMETHODIMP
     122           0 : BackstagePass::GetContractID(char * *aContractID)
     123             : {
     124           0 :     *aContractID = nullptr;
     125           0 :     return NS_ERROR_NOT_AVAILABLE;
     126             : }
     127             : 
     128             : NS_IMETHODIMP
     129           0 : BackstagePass::GetClassDescription(char * *aClassDescription)
     130             : {
     131             :     static const char classDescription[] = "BackstagePass";
     132           0 :     *aClassDescription = (char*)nsMemory::Clone(classDescription, sizeof(classDescription));
     133           0 :     return *aClassDescription ? NS_OK : NS_ERROR_OUT_OF_MEMORY;
     134             : }
     135             : 
     136             : NS_IMETHODIMP
     137           0 : BackstagePass::GetClassID(nsCID * *aClassID)
     138             : {
     139           0 :     *aClassID = nullptr;
     140           0 :     return NS_OK;
     141             : }
     142             : 
     143             : NS_IMETHODIMP
     144        2893 : BackstagePass::GetFlags(uint32_t* aFlags)
     145             : {
     146        2893 :     *aFlags = nsIClassInfo::MAIN_THREAD_ONLY;
     147        2893 :     return NS_OK;
     148             : }
     149             : 
     150             : NS_IMETHODIMP
     151           0 : BackstagePass::GetClassIDNoAlloc(nsCID* aClassIDNoAlloc)
     152             : {
     153           0 :     return NS_ERROR_NOT_AVAILABLE;
     154             : }
     155             : 
     156             : NS_IMETHODIMP
     157           0 : BackstagePass::Finalize(nsIXPConnectWrappedNative* wrapper, JSFreeOp * fop, JSObject * obj)
     158             : {
     159           0 :     nsCOMPtr<nsIGlobalObject> bsp(do_QueryWrappedNative(wrapper));
     160           0 :     MOZ_ASSERT(bsp);
     161           0 :     static_cast<BackstagePass*>(bsp.get())->ForgetGlobalObject();
     162           0 :     return NS_OK;
     163             : }
     164             : 
     165             : NS_IMETHODIMP
     166           0 : BackstagePass::PreCreate(nsISupports* nativeObj, JSContext* cx,
     167             :                          JSObject* globalObj, JSObject** parentObj)
     168             : {
     169             :     // We do the same trick here as for WindowSH. Return the js global
     170             :     // as parent, so XPConenct can find the right scope and the wrapper
     171             :     // that already exists.
     172           0 :     nsCOMPtr<nsIGlobalObject> global(do_QueryInterface(nativeObj));
     173           0 :     MOZ_ASSERT(global, "nativeObj not a global object!");
     174             : 
     175           0 :     JSObject* jsglobal = global->GetGlobalJSObject();
     176           0 :     if (jsglobal)
     177           0 :         *parentObj = jsglobal;
     178           0 :     return NS_OK;
     179             : }
     180             : 
     181             : nsresult
     182         255 : NS_NewBackstagePass(BackstagePass** ret)
     183             : {
     184             :     RefPtr<BackstagePass> bsp = new BackstagePass(
     185         765 :         nsContentUtils::GetSystemPrincipal());
     186         255 :     bsp.forget(ret);
     187         510 :     return NS_OK;
     188           9 : }

Generated by: LCOV version 1.13