LCOV - code coverage report
Current view: directory - storage/src - mozStorageAsyncStatementJSHelper.cpp (source / functions) Found Hit Coverage
Test: app.info Lines: 33 29 87.9 %
Date: 2012-06-02 Functions: 5 5 100.0 %

       1                 : /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
       2                 :  * vim: sw=2 ts=2 et lcs=trail\:.,tab\:>~ :
       3                 :  * ***** BEGIN LICENSE BLOCK *****
       4                 :  * Version: MPL 1.1/GPL 2.0/LGPL 2.1
       5                 :  *
       6                 :  * The contents of this file are subject to the Mozilla Public License Version
       7                 :  * 1.1 (the "License"); you may not use this file except in compliance with
       8                 :  * the License. You may obtain a copy of the License at
       9                 :  * http://www.mozilla.org/MPL/
      10                 :  *
      11                 :  * Software distributed under the License is distributed on an "AS IS" basis,
      12                 :  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
      13                 :  * for the specific language governing rights and limitations under the
      14                 :  * License.
      15                 :  *
      16                 :  * The Original Code is mozStorage code.
      17                 :  *
      18                 :  * The Initial Developer of the Original Code is the Mozilla Foundation.
      19                 :  * Portions created by the Initial Developer are Copyright (C) 2008
      20                 :  * the Initial Developer. All Rights Reserved.
      21                 :  *
      22                 :  * Contributor(s):
      23                 :  *   Shawn Wilsher <me@shawnwilsher.com> (Original Author)
      24                 :  *   Andrew Sutherland <asutherland@asutherland.org>
      25                 :  *
      26                 :  * Alternatively, the contents of this file may be used under the terms of
      27                 :  * either the GNU General Public License Version 2 or later (the "GPL"), or
      28                 :  * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
      29                 :  * in which case the provisions of the GPL or the LGPL are applicable instead
      30                 :  * of those above. If you wish to allow use of your version of this file only
      31                 :  * under the terms of either the GPL or the LGPL, and not to allow others to
      32                 :  * use your version of this file under the terms of the MPL, indicate your
      33                 :  * decision by deleting the provisions above and replace them with the notice
      34                 :  * and other provisions required by the GPL or the LGPL. If you do not delete
      35                 :  * the provisions above, a recipient may use your version of this file under
      36                 :  * the terms of any one of the MPL, the GPL or the LGPL.
      37                 :  *
      38                 :  * ***** END LICENSE BLOCK ***** */
      39                 : 
      40                 : #include "nsIXPConnect.h"
      41                 : #include "mozStorageAsyncStatement.h"
      42                 : #include "mozStorageService.h"
      43                 : 
      44                 : #include "nsMemory.h"
      45                 : #include "nsString.h"
      46                 : #include "nsServiceManagerUtils.h"
      47                 : 
      48                 : #include "mozStorageAsyncStatementJSHelper.h"
      49                 : 
      50                 : #include "mozStorageAsyncStatementParams.h"
      51                 : 
      52                 : #include "jsapi.h"
      53                 : 
      54                 : namespace mozilla {
      55                 : namespace storage {
      56                 : 
      57                 : ////////////////////////////////////////////////////////////////////////////////
      58                 : //// AsyncStatementJSHelper
      59                 : 
      60                 : nsresult
      61            7838 : AsyncStatementJSHelper::getParams(AsyncStatement *aStatement,
      62                 :                                   JSContext *aCtx,
      63                 :                                   JSObject *aScopeObj,
      64                 :                                   jsval *_params)
      65                 : {
      66                 :   nsresult rv;
      67                 : 
      68                 : #ifdef DEBUG
      69                 :   PRInt32 state;
      70            7838 :   (void)aStatement->GetState(&state);
      71            7838 :   NS_ASSERTION(state == mozIStorageAsyncStatement::MOZ_STORAGE_STATEMENT_READY,
      72                 :                "Invalid state to get the params object - all calls will fail!");
      73                 : #endif
      74                 : 
      75            7838 :   if (!aStatement->mStatementParamsHolder) {
      76                 :     nsCOMPtr<mozIStorageStatementParams> params =
      77            2552 :       new AsyncStatementParams(aStatement);
      78            1276 :     NS_ENSURE_TRUE(params, NS_ERROR_OUT_OF_MEMORY);
      79                 : 
      80            2552 :     nsCOMPtr<nsIXPConnect> xpc(Service::getXPConnect());
      81            1276 :     rv = xpc->WrapNative(
      82                 :       aCtx,
      83                 :       ::JS_GetGlobalForObject(aCtx, aScopeObj),
      84                 :       params,
      85                 :       NS_GET_IID(mozIStorageStatementParams),
      86            1276 :       getter_AddRefs(aStatement->mStatementParamsHolder)
      87            1276 :     );
      88            1276 :     NS_ENSURE_SUCCESS(rv, rv);
      89                 :   }
      90                 : 
      91            7838 :   JSObject *obj = nsnull;
      92            7838 :   rv = aStatement->mStatementParamsHolder->GetJSObject(&obj);
      93            7838 :   NS_ENSURE_SUCCESS(rv, rv);
      94                 : 
      95            7838 :   *_params = OBJECT_TO_JSVAL(obj);
      96            7838 :   return NS_OK;
      97                 : }
      98                 : 
      99            6930 : NS_IMETHODIMP_(nsrefcnt) AsyncStatementJSHelper::AddRef() { return 2; }
     100           10081 : NS_IMETHODIMP_(nsrefcnt) AsyncStatementJSHelper::Release() { return 1; }
     101            6616 : NS_INTERFACE_MAP_BEGIN(AsyncStatementJSHelper)
     102            6616 :   NS_INTERFACE_MAP_ENTRY(nsIXPCScriptable)
     103               0 :   NS_INTERFACE_MAP_ENTRY(nsISupports)
     104               0 : NS_INTERFACE_MAP_END
     105                 : 
     106                 : ////////////////////////////////////////////////////////////////////////////////
     107                 : //// nsIXPCScriptable
     108                 : 
     109                 : #define XPC_MAP_CLASSNAME AsyncStatementJSHelper
     110                 : #define XPC_MAP_QUOTED_CLASSNAME "AsyncStatementJSHelper"
     111                 : #define XPC_MAP_WANT_GETPROPERTY
     112                 : #define XPC_MAP_FLAGS nsIXPCScriptable::ALLOW_PROP_MODS_DURING_RESOLVE
     113                 : #include "xpc_map_end.h"
     114                 : 
     115                 : NS_IMETHODIMP
     116            7838 : AsyncStatementJSHelper::GetProperty(nsIXPConnectWrappedNative *aWrapper,
     117                 :                                     JSContext *aCtx,
     118                 :                                     JSObject *aScopeObj,
     119                 :                                     jsid aId,
     120                 :                                     jsval *_result,
     121                 :                                     bool *_retval)
     122                 : {
     123            7838 :   if (!JSID_IS_STRING(aId))
     124               0 :     return NS_OK;
     125                 : 
     126                 :   // Cast to async via mozI* since direct from nsISupports is ambiguous.
     127                 :   mozIStorageAsyncStatement *iAsyncStmt =
     128            7838 :     static_cast<mozIStorageAsyncStatement *>(aWrapper->Native());
     129            7838 :   AsyncStatement *stmt = static_cast<AsyncStatement *>(iAsyncStmt);
     130                 : 
     131                 : #ifdef DEBUG
     132                 :   {
     133            7838 :     nsISupports *supp = aWrapper->Native();
     134           15676 :     nsCOMPtr<mozIStorageAsyncStatement> isStatement(do_QueryInterface(supp));
     135            7838 :     NS_ASSERTION(isStatement, "How is this not an async statement?!");
     136                 :   }
     137                 : #endif
     138                 : 
     139            7838 :   if (::JS_FlatStringEqualsAscii(JSID_TO_FLAT_STRING(aId), "params"))
     140            7838 :     return getParams(stmt, aCtx, aScopeObj, _result);
     141                 : 
     142               0 :   return NS_OK;
     143                 : }
     144                 : 
     145                 : } // namespace storage
     146                 : } // namespace mozilla

Generated by: LCOV version 1.7