dom/xslt/xpath/XPathExpression.h
author Carsten "Tomcat" Book <cbook@mozilla.com>
Mon, 12 Jan 2015 14:48:15 +0100
changeset 223354 a7f64e53893ef5d4bed1996acce1e0d459b8df8d
parent 223334 12dd1ad43923ac63fa00cdf1484991d5624c4daf
child 223547 8e4a528db0d9da3bf35f037c17e46c3709882dde
permissions -rw-r--r--
Backed out 12 changesets (bug 1096328) for M11 and M5 Test failures on a CLOSED TREE Backed out changeset 12dd1ad43923 (bug 1096328) Backed out changeset 4a067de94f22 (bug 1096328) Backed out changeset 676112a4f092 (bug 1096328) Backed out changeset e2e64e751ece (bug 1096328) Backed out changeset 9ed945e9a8a5 (bug 1096328) Backed out changeset 47be69b84be5 (bug 1096328) Backed out changeset d6e68ba4846d (bug 1096328) Backed out changeset 899d8cd8c4e8 (bug 1096328) Backed out changeset 55c831086864 (bug 1096328) Backed out changeset 6005fd357342 (bug 1096328) Backed out changeset 0f330a5dd346 (bug 1096328) Backed out changeset c37e10cff765 (bug 1096328)

/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/* 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 mozilla_dom_XPathExpression_h
#define mozilla_dom_XPathExpression_h

#include "nsAutoPtr.h"
#include "nsCycleCollectionParticipant.h"
#include "nsIWeakReferenceUtils.h"
#include "mozilla/Attributes.h"
#include "mozilla/dom/NonRefcountedDOMObject.h"
#include "mozilla/dom/XPathExpressionBinding.h"

class Expr;
class nsIDocument;
class nsINode;
class txResultRecycler;
class txXPathNode;

namespace mozilla {
namespace dom {

class XPathResult;

/**
 * A class for evaluating an XPath expression string
 */
class XPathExpression MOZ_FINAL : public NonRefcountedDOMObject
{
public:
    XPathExpression(nsAutoPtr<Expr>&& aExpression, txResultRecycler* aRecycler,
                    nsIDocument *aDocument);
    ~XPathExpression();

    JSObject* WrapObject(JSContext* aCx, bool* aTookOwnership)
    {
        return XPathExpressionBinding::Wrap(aCx, this, aTookOwnership);
    }

    already_AddRefed<XPathResult>
        Evaluate(JSContext* aCx, nsINode& aContextNode, uint16_t aType,
                 JS::Handle<JSObject*> aInResult, ErrorResult& aRv)
    {
        return EvaluateWithContext(aCx, aContextNode, 1, 1, aType, aInResult,
                                   aRv);
    }
    already_AddRefed<XPathResult>
        EvaluateWithContext(JSContext* aCx, nsINode& aContextNode,
                            uint32_t aContextPosition, uint32_t aContextSize,
                            uint16_t aType, JS::Handle<JSObject*> aInResult,
                            ErrorResult& aRv);
    already_AddRefed<XPathResult>
        Evaluate(nsINode& aContextNode, uint16_t aType, XPathResult* aInResult,
                 ErrorResult& aRv)
    {
        return EvaluateWithContext(aContextNode, 1, 1, aType, aInResult, aRv);
    }
    already_AddRefed<XPathResult>
        EvaluateWithContext(nsINode& aContextNode, uint32_t aContextPosition,
                            uint32_t aContextSize, uint16_t aType,
                            XPathResult* aInResult, ErrorResult& aRv);

private:
    nsAutoPtr<Expr> mExpression;
    nsRefPtr<txResultRecycler> mRecycler;
    nsWeakPtr mDocument;
    bool mCheckDocument;
};

} // namespace dom
} // namespace mozilla

#endif /* mozilla_dom_XPathExpression_h */