LCOV - code coverage report
Current view: top level - dom/indexedDB - ScriptErrorHelper.cpp (source / functions) Hit Total Coverage
Test: output.info Lines: 1 64 1.6 %
Date: 2017-07-14 16:53:18 Functions: 2 11 18.2 %
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 "ScriptErrorHelper.h"
       8             : 
       9             : #include "MainThreadUtils.h"
      10             : #include "mozilla/SystemGroup.h"
      11             : #include "nsCOMPtr.h"
      12             : #include "nsContentUtils.h"
      13             : #include "nsIConsoleService.h"
      14             : #include "nsIScriptError.h"
      15             : #include "nsString.h"
      16             : #include "nsThreadUtils.h"
      17             : 
      18             : namespace {
      19             : 
      20             : class ScriptErrorRunnable final : public mozilla::Runnable
      21             : {
      22             :   nsString mMessage;
      23             :   nsCString mMessageName;
      24             :   nsString mFilename;
      25             :   uint32_t mLineNumber;
      26             :   uint32_t mColumnNumber;
      27             :   uint32_t mSeverityFlag;
      28             :   uint64_t mInnerWindowID;
      29             :   bool mIsChrome;
      30             : 
      31             : public:
      32           0 :   ScriptErrorRunnable(const nsAString& aMessage,
      33             :                       const nsAString& aFilename,
      34             :                       uint32_t aLineNumber,
      35             :                       uint32_t aColumnNumber,
      36             :                       uint32_t aSeverityFlag,
      37             :                       bool aIsChrome,
      38             :                       uint64_t aInnerWindowID)
      39           0 :     : mozilla::Runnable("ScriptErrorRunnable")
      40             :     , mMessage(aMessage)
      41             :     , mFilename(aFilename)
      42             :     , mLineNumber(aLineNumber)
      43             :     , mColumnNumber(aColumnNumber)
      44             :     , mSeverityFlag(aSeverityFlag)
      45             :     , mInnerWindowID(aInnerWindowID)
      46           0 :     , mIsChrome(aIsChrome)
      47             :   {
      48           0 :     MOZ_ASSERT(!NS_IsMainThread());
      49           0 :     mMessageName.SetIsVoid(true);
      50           0 :   }
      51             : 
      52           0 :   ScriptErrorRunnable(const nsACString& aMessageName,
      53             :                       const nsAString& aFilename,
      54             :                       uint32_t aLineNumber,
      55             :                       uint32_t aColumnNumber,
      56             :                       uint32_t aSeverityFlag,
      57             :                       bool aIsChrome,
      58             :                       uint64_t aInnerWindowID)
      59           0 :     : mozilla::Runnable("ScriptErrorRunnable")
      60             :     , mMessageName(aMessageName)
      61             :     , mFilename(aFilename)
      62             :     , mLineNumber(aLineNumber)
      63             :     , mColumnNumber(aColumnNumber)
      64             :     , mSeverityFlag(aSeverityFlag)
      65             :     , mInnerWindowID(aInnerWindowID)
      66           0 :     , mIsChrome(aIsChrome)
      67             :   {
      68           0 :     MOZ_ASSERT(!NS_IsMainThread());
      69           0 :     mMessage.SetIsVoid(true);
      70           0 :   }
      71             : 
      72             :   static void
      73           0 :   DumpLocalizedMessage(const nsACString& aMessageName,
      74             :                        const nsAString& aFilename,
      75             :                        uint32_t aLineNumber,
      76             :                        uint32_t aColumnNumber,
      77             :                        uint32_t aSeverityFlag,
      78             :                        bool aIsChrome,
      79             :                        uint64_t aInnerWindowID)
      80             :   {
      81           0 :     MOZ_ASSERT(NS_IsMainThread());
      82           0 :     MOZ_ASSERT(!aMessageName.IsEmpty());
      83             : 
      84           0 :     nsXPIDLString localizedMessage;
      85           0 :     if (NS_WARN_IF(NS_FAILED(
      86             :       nsContentUtils::GetLocalizedString(nsContentUtils::eDOM_PROPERTIES,
      87             :                                          aMessageName.BeginReading(),
      88             :                                          localizedMessage)))) {
      89           0 :       return;
      90             :     }
      91             : 
      92           0 :     Dump(localizedMessage,
      93             :          aFilename,
      94             :          aLineNumber,
      95             :          aColumnNumber,
      96             :          aSeverityFlag,
      97             :          aIsChrome,
      98           0 :          aInnerWindowID);
      99             :   }
     100             : 
     101             :   static void
     102           0 :   Dump(const nsAString& aMessage,
     103             :        const nsAString& aFilename,
     104             :        uint32_t aLineNumber,
     105             :        uint32_t aColumnNumber,
     106             :        uint32_t aSeverityFlag,
     107             :        bool aIsChrome,
     108             :        uint64_t aInnerWindowID)
     109             :   {
     110           0 :     MOZ_ASSERT(NS_IsMainThread());
     111             : 
     112           0 :     nsAutoCString category;
     113           0 :     if (aIsChrome) {
     114           0 :       category.AssignLiteral("chrome ");
     115             :     } else {
     116           0 :       category.AssignLiteral("content ");
     117             :     }
     118           0 :     category.AppendLiteral("javascript");
     119             : 
     120             :     nsCOMPtr<nsIConsoleService> consoleService =
     121           0 :       do_GetService(NS_CONSOLESERVICE_CONTRACTID);
     122           0 :     MOZ_ASSERT(consoleService);
     123             : 
     124             :     nsCOMPtr<nsIScriptError> scriptError =
     125           0 :       do_CreateInstance(NS_SCRIPTERROR_CONTRACTID);
     126           0 :     MOZ_ASSERT(scriptError);
     127             : 
     128           0 :     if (aInnerWindowID) {
     129           0 :       MOZ_ALWAYS_SUCCEEDS(
     130             :         scriptError->InitWithWindowID(aMessage,
     131             :                                       aFilename,
     132             :                                       /* aSourceLine */ EmptyString(),
     133             :                                       aLineNumber,
     134             :                                       aColumnNumber,
     135             :                                       aSeverityFlag,
     136             :                                       category,
     137             :                                       aInnerWindowID));
     138             :     } else {
     139           0 :       MOZ_ALWAYS_SUCCEEDS(
     140             :         scriptError->Init(aMessage,
     141             :                           aFilename,
     142             :                           /* aSourceLine */ EmptyString(),
     143             :                           aLineNumber,
     144             :                           aColumnNumber,
     145             :                           aSeverityFlag,
     146             :                           category.get()));
     147             :     }
     148             : 
     149           0 :     MOZ_ALWAYS_SUCCEEDS(consoleService->LogMessage(scriptError));
     150           0 :   }
     151             : 
     152             :   NS_IMETHOD
     153           0 :   Run() override
     154             :   {
     155           0 :     MOZ_ASSERT(NS_IsMainThread());
     156           0 :     MOZ_ASSERT(mMessage.IsVoid() != mMessageName.IsVoid());
     157             : 
     158           0 :     if (!mMessage.IsVoid()) {
     159           0 :       Dump(mMessage,
     160             :            mFilename,
     161             :            mLineNumber,
     162             :            mColumnNumber,
     163             :            mSeverityFlag,
     164           0 :            mIsChrome,
     165           0 :            mInnerWindowID);
     166           0 :       return NS_OK;
     167             :     }
     168             : 
     169           0 :     DumpLocalizedMessage(mMessageName,
     170             :                          mFilename,
     171             :                          mLineNumber,
     172             :                          mColumnNumber,
     173             :                          mSeverityFlag,
     174           0 :                          mIsChrome,
     175           0 :                          mInnerWindowID);
     176             : 
     177           0 :     return NS_OK;
     178             :   }
     179             : 
     180             : private:
     181           0 :   virtual ~ScriptErrorRunnable() {}
     182             : };
     183             : 
     184             : } // namespace
     185             : 
     186             : namespace mozilla {
     187             : namespace dom {
     188             : namespace indexedDB {
     189             : 
     190             : /*static*/ void
     191           0 : ScriptErrorHelper::Dump(const nsAString& aMessage,
     192             :                         const nsAString& aFilename,
     193             :                         uint32_t aLineNumber,
     194             :                         uint32_t aColumnNumber,
     195             :                         uint32_t aSeverityFlag,
     196             :                         bool aIsChrome,
     197             :                         uint64_t aInnerWindowID)
     198             : {
     199           0 :   if (NS_IsMainThread()) {
     200           0 :     ScriptErrorRunnable::Dump(aMessage,
     201             :                               aFilename,
     202             :                               aLineNumber,
     203             :                               aColumnNumber,
     204             :                               aSeverityFlag,
     205             :                               aIsChrome,
     206           0 :                               aInnerWindowID);
     207             :   } else {
     208             :     RefPtr<ScriptErrorRunnable> runnable =
     209             :       new ScriptErrorRunnable(aMessage,
     210             :                               aFilename,
     211             :                               aLineNumber,
     212             :                               aColumnNumber,
     213             :                               aSeverityFlag,
     214             :                               aIsChrome,
     215           0 :                               aInnerWindowID);
     216           0 :     MOZ_ALWAYS_SUCCEEDS(
     217             :       SystemGroup::Dispatch("indexedDB::ScriptErrorHelper::Dump",
     218             :                             TaskCategory::Other,
     219             :                             runnable.forget()));
     220             :   }
     221           0 : }
     222             : 
     223             : /*static*/ void
     224           0 : ScriptErrorHelper::DumpLocalizedMessage(const nsACString& aMessageName,
     225             :                                         const nsAString& aFilename,
     226             :                                         uint32_t aLineNumber,
     227             :                                         uint32_t aColumnNumber,
     228             :                                         uint32_t aSeverityFlag,
     229             :                                         bool aIsChrome,
     230             :                                         uint64_t aInnerWindowID)
     231             : {
     232           0 :   if (NS_IsMainThread()) {
     233           0 :     ScriptErrorRunnable::DumpLocalizedMessage(aMessageName,
     234             :                                               aFilename,
     235             :                                               aLineNumber,
     236             :                                               aColumnNumber,
     237             :                                               aSeverityFlag,
     238             :                                               aIsChrome,
     239           0 :                                               aInnerWindowID);
     240             :   } else {
     241             :     RefPtr<ScriptErrorRunnable> runnable =
     242             :       new ScriptErrorRunnable(aMessageName,
     243             :                               aFilename,
     244             :                               aLineNumber,
     245             :                               aColumnNumber,
     246             :                               aSeverityFlag,
     247             :                               aIsChrome,
     248           0 :                               aInnerWindowID);
     249           0 :     MOZ_ALWAYS_SUCCEEDS(
     250             :       SystemGroup::Dispatch("indexedDB::ScriptErrorHelper::DumpLocalizedMessage",
     251             :                             TaskCategory::Other,
     252             :                             runnable.forget()));
     253             :   }
     254           0 : }
     255             : 
     256             : } // namespace indexedDB
     257             : } // namespace dom
     258           9 : } // namespace mozilla

Generated by: LCOV version 1.13