1e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch/* 2e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch * Copyright (C) 2013 Google, Inc. 3e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch * 4e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch * Redistribution and use in source and binary forms, with or without 5e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch * modification, are permitted provided that the following conditions 6e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch * are met: 7e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch * 1. Redistributions of source code must retain the above copyright 8e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch * notice, this list of conditions and the following disclaimer. 9e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch * 2. Redistributions in binary form must reproduce the above copyright 10e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch * notice, this list of conditions and the following disclaimer in the 11e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch * documentation and/or other materials provided with the distribution. 12e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch * 13e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY 14e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 15e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 16e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR 17e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 18e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 19e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 20e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 21e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 22e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 23e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 24e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch */ 25e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 26e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "config.h" 27e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "core/xml/DocumentXPathEvaluator.h" 28e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 29197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#include "bindings/core/v8/ExceptionState.h" 30e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "core/xml/XPathExpression.h" 31e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "core/xml/XPathResult.h" 32e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 33c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)namespace blink { 34e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 35e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben MurdochDocumentXPathEvaluator::DocumentXPathEvaluator() 36e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch{ 37e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch} 38e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 39d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)DocumentXPathEvaluator& DocumentXPathEvaluator::from(DocumentSupplementable& document) 40e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch{ 411e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) DocumentXPathEvaluator* cache = static_cast<DocumentXPathEvaluator*>(DocumentSupplement::from(document, supplementName())); 42e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch if (!cache) { 43e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch cache = new DocumentXPathEvaluator(); 44f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu DocumentSupplement::provideTo(document, supplementName(), adoptPtrWillBeNoop(cache)); 45e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch } 46d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) return *cache; 47e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch} 48e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 49d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)PassRefPtrWillBeRawPtr<XPathExpression> DocumentXPathEvaluator::createExpression(DocumentSupplementable& document, 50d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) const String& expression, PassRefPtrWillBeRawPtr<XPathNSResolver> resolver, ExceptionState& exceptionState) 51e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch{ 52d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) DocumentXPathEvaluator& suplement = from(document); 53d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) if (!suplement.m_xpathEvaluator) 54d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) suplement.m_xpathEvaluator = XPathEvaluator::create(); 55d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) return suplement.m_xpathEvaluator->createExpression(expression, resolver, exceptionState); 56e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch} 57e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 58d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)PassRefPtrWillBeRawPtr<XPathNSResolver> DocumentXPathEvaluator::createNSResolver(DocumentSupplementable& document, Node* nodeResolver) 59e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch{ 60d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) DocumentXPathEvaluator& suplement = from(document); 61d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) if (!suplement.m_xpathEvaluator) 62d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) suplement.m_xpathEvaluator = XPathEvaluator::create(); 63d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) return suplement.m_xpathEvaluator->createNSResolver(nodeResolver); 64e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch} 65e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 66d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)PassRefPtrWillBeRawPtr<XPathResult> DocumentXPathEvaluator::evaluate(DocumentSupplementable& document, const String& expression, 67d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) Node* contextNode, PassRefPtrWillBeRawPtr<XPathNSResolver> resolver, unsigned short type, 6851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) XPathResult* result, ExceptionState& exceptionState) 69e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch{ 70d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) DocumentXPathEvaluator& suplement = from(document); 71d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) if (!suplement.m_xpathEvaluator) 72d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) suplement.m_xpathEvaluator = XPathEvaluator::create(); 73d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) return suplement.m_xpathEvaluator->evaluate(expression, contextNode, resolver, type, result, exceptionState); 74e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch} 75e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 76f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liuvoid DocumentXPathEvaluator::trace(Visitor* visitor) 77f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu{ 78f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu visitor->trace(m_xpathEvaluator); 79323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) DocumentSupplement::trace(visitor); 80f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu} 81f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu 82c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)} // namespace blink 83