storage/mozStorageStatementJSHelper.h
author J. Ryan Stinnett <jryans@gmail.com>
Wed, 09 Sep 2015 15:41:20 -0500
changeset 294193 c638ef3e2f2077dde2c1d9a174bf4bddc2e20714
parent 275453 dd79977a3286d947aff8e270245d05c05e676964
child 425636 89df4227af85ff946e1611e73136c3525fdde353
permissions -rw-r--r--
Bug 1165599 - Restore basic external view source. r=jsantell CLOSED TREE This restores external view source after changes in bug 1025146. It does function in e10s, however the page descriptor is not used, so viewing a POST result will GET the page instead. This is the same as it was before bug 1025146. Follow ups will add usage tracking and improve e10s behavior if there is enough usage.

/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
 * vim: sw=2 ts=2 et lcs=trail\:.,tab\:>~ :
 * This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */

#ifndef MOZSTORAGESTATEMENTJSHELPER_H
#define MOZSTORAGESTATEMENTJSHELPER_H

#include "nsIXPCScriptable.h"
#include "nsIXPConnect.h"

class Statement;

namespace mozilla {
namespace storage {

class StatementJSHelper : public nsIXPCScriptable
{
public:
  NS_DECL_ISUPPORTS
  NS_DECL_NSIXPCSCRIPTABLE

private:
  nsresult getRow(Statement *, JSContext *, JSObject *, JS::Value *);
  nsresult getParams(Statement *, JSContext *, JSObject *, JS::Value *);
};

/**
 * Wrappers used to clean up the references JS helpers hold to the statement.
 * For cycle-avoidance reasons they do not hold reference-counted references,
 * so it is important we do this.
 */
class StatementJSObjectHolder : public nsIXPConnectJSObjectHolder
{
public:
  NS_DECL_ISUPPORTS
  NS_DECL_NSIXPCONNECTJSOBJECTHOLDER

  explicit StatementJSObjectHolder(nsIXPConnectJSObjectHolder* aHolder);

protected:
  virtual ~StatementJSObjectHolder() {};
  nsCOMPtr<nsIXPConnectJSObjectHolder> mHolder;
};

class StatementParamsHolder final: public StatementJSObjectHolder {
public:
  explicit StatementParamsHolder(nsIXPConnectJSObjectHolder* aHolder)
    : StatementJSObjectHolder(aHolder) {
  }

private:
  virtual ~StatementParamsHolder();
};

class StatementRowHolder final: public StatementJSObjectHolder {
public:
  explicit StatementRowHolder(nsIXPConnectJSObjectHolder* aHolder)
    : StatementJSObjectHolder(aHolder) {
  }

private:
  virtual ~StatementRowHolder();
};

} // namespace storage
} // namespace mozilla

#endif // MOZSTORAGESTATEMENTJSHELPER_H