Home | History | Annotate | Download | only in android
      1 /*
      2  * Copyright (C) 2011 Google Inc. All rights reserved.
      3  *
      4  * Redistribution and use in source and binary forms, with or without
      5  * modification, are permitted provided that the following conditions
      6  * are met:
      7  * 1.  Redistributions of source code must retain the above copyright
      8  *     notice, this list of conditions and the following disclaimer.
      9  * 2.  Redistributions in binary form must reproduce the above copyright
     10  *     notice, this list of conditions and the following disclaimer in the
     11  *     documentation and/or other materials provided with the distribution.
     12  *
     13  * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
     14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
     15  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
     16  * DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
     17  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
     18  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
     19  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
     20  * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     21  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
     22  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     23  */
     24 
     25 #include "config.h"
     26 #include "android/WebDOMTextContentWalker.h"
     27 
     28 #include "DOMTextContentWalker.h"
     29 #include "Element.h"
     30 #include "Node.h"
     31 #include "Range.h"
     32 #include "RenderObject.h"
     33 #include "Text.h"
     34 #include "VisiblePosition.h"
     35 #include "android/WebHitTestInfo.h"
     36 
     37 using namespace WebCore;
     38 
     39 namespace WebKit {
     40 
     41 WebDOMTextContentWalker::WebDOMTextContentWalker()
     42 {
     43 }
     44 
     45 WebDOMTextContentWalker::~WebDOMTextContentWalker()
     46 {
     47     m_private.reset(0);
     48 }
     49 
     50 WebDOMTextContentWalker::WebDOMTextContentWalker(const WebHitTestInfo& hitTestInfo, size_t maxLength)
     51 {
     52     Node* node = hitTestInfo.node();
     53     if (!node)
     54         return;
     55 
     56     Element* element = node->parentElement();
     57     if (!node->inDocument() && element && element->inDocument())
     58         node = element;
     59     m_private.reset(new DOMTextContentWalker(node->renderer()->positionForPoint(hitTestInfo.point()), maxLength));
     60 }
     61 
     62 WebDOMTextContentWalker::WebDOMTextContentWalker(Node* node, size_t offset, size_t maxLength)
     63 {
     64     if (!node || !node->isTextNode() || offset >= node->nodeValue().length())
     65         return;
     66 
     67     m_private.reset(new DOMTextContentWalker(VisiblePosition(Position(static_cast<Text*>(node), offset).parentAnchoredEquivalent(), DOWNSTREAM), maxLength));
     68 }
     69 
     70 WebString WebDOMTextContentWalker::content() const
     71 {
     72     return m_private->content();
     73 }
     74 
     75 size_t WebDOMTextContentWalker::hitOffsetInContent() const
     76 {
     77     return m_private->hitOffsetInContent();
     78 }
     79 
     80 WebRange WebDOMTextContentWalker::contentOffsetsToRange(size_t startInContent, size_t endInContent)
     81 {
     82     return m_private->contentOffsetsToRange(startInContent, endInContent);
     83 }
     84 
     85 } // namespace WebKit
     86