LCOV - code coverage report
Current view: top level - dom/base - nsIGlobalObject.cpp (source / functions) Hit Total Coverage
Test: output.info Lines: 10 45 22.2 %
Date: 2017-07-14 16:53:18 Functions: 3 11 27.3 %
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 "nsIGlobalObject.h"
       8             : #include "nsContentUtils.h"
       9             : #include "nsThreadUtils.h"
      10             : #include "nsHostObjectProtocolHandler.h"
      11             : 
      12           0 : nsIGlobalObject::~nsIGlobalObject()
      13             : {
      14           0 :   UnlinkHostObjectURIs();
      15           0 : }
      16             : 
      17             : nsIPrincipal*
      18         629 : nsIGlobalObject::PrincipalOrNull()
      19             : {
      20         629 :   JSObject *global = GetGlobalJSObject();
      21         629 :   if (NS_WARN_IF(!global))
      22           0 :     return nullptr;
      23             : 
      24         629 :   return nsContentUtils::ObjectPrincipal(global);
      25             : }
      26             : 
      27             : void
      28           0 : nsIGlobalObject::RegisterHostObjectURI(const nsACString& aURI)
      29             : {
      30           0 :   MOZ_ASSERT(!mHostObjectURIs.Contains(aURI));
      31           0 :   mHostObjectURIs.AppendElement(aURI);
      32           0 : }
      33             : 
      34             : void
      35           0 : nsIGlobalObject::UnregisterHostObjectURI(const nsACString& aURI)
      36             : {
      37           0 :   mHostObjectURIs.RemoveElement(aURI);
      38           0 : }
      39             : 
      40             : namespace {
      41             : 
      42             : class UnlinkHostObjectURIsRunnable final : public mozilla::Runnable
      43             : {
      44             : public:
      45           0 :   explicit UnlinkHostObjectURIsRunnable(nsTArray<nsCString>& aURIs)
      46           0 :     : mozilla::Runnable("UnlinkHostObjectURIsRunnable")
      47             :   {
      48           0 :     mURIs.SwapElements(aURIs);
      49           0 :   }
      50             : 
      51           0 :   NS_IMETHOD Run() override
      52             :   {
      53           0 :     MOZ_ASSERT(NS_IsMainThread());
      54             : 
      55           0 :     for (uint32_t index = 0; index < mURIs.Length(); ++index) {
      56           0 :       nsHostObjectProtocolHandler::RemoveDataEntry(mURIs[index]);
      57             :     }
      58             : 
      59           0 :     return NS_OK;
      60             :   }
      61             : 
      62             : private:
      63           0 :   ~UnlinkHostObjectURIsRunnable() {}
      64             : 
      65             :   nsTArray<nsCString> mURIs;
      66             : };
      67             : 
      68             : } // namespace
      69             : 
      70             : void
      71           3 : nsIGlobalObject::UnlinkHostObjectURIs()
      72             : {
      73           3 :   if (mHostObjectURIs.IsEmpty()) {
      74           6 :     return;
      75             :   }
      76             : 
      77           0 :   if (NS_IsMainThread()) {
      78           0 :     for (uint32_t index = 0; index < mHostObjectURIs.Length(); ++index) {
      79           0 :       nsHostObjectProtocolHandler::RemoveDataEntry(mHostObjectURIs[index]);
      80             :     }
      81             : 
      82           0 :     mHostObjectURIs.Clear();
      83           0 :     return;
      84             :   }
      85             : 
      86             :   // nsHostObjectProtocolHandler is main-thread only.
      87             : 
      88             :   RefPtr<UnlinkHostObjectURIsRunnable> runnable =
      89           0 :     new UnlinkHostObjectURIsRunnable(mHostObjectURIs);
      90           0 :   MOZ_ASSERT(mHostObjectURIs.IsEmpty());
      91             : 
      92           0 :   nsresult rv = NS_DispatchToMainThread(runnable);
      93           0 :   if (NS_FAILED(rv)) {
      94           0 :     NS_WARNING("Failed to dispatch a runnable to the main-thread.");
      95             :   }
      96             : }
      97             : 
      98             : void
      99           2 : nsIGlobalObject::TraverseHostObjectURIs(nsCycleCollectionTraversalCallback &aCb)
     100             : {
     101           2 :   if (mHostObjectURIs.IsEmpty()) {
     102           2 :     return;
     103             :   }
     104             : 
     105             :   // Currently we only store BlobImpl objects off the the main-thread and they
     106             :   // are not CCed.
     107           0 :   if (!NS_IsMainThread()) {
     108           0 :     return;
     109             :   }
     110             : 
     111           0 :   for (uint32_t index = 0; index < mHostObjectURIs.Length(); ++index) {
     112           0 :     nsHostObjectProtocolHandler::Traverse(mHostObjectURIs[index], aCb);
     113             :   }
     114             : }

Generated by: LCOV version 1.13