Changeset 69587 in webkit


Ignore:
Timestamp:
Oct 12, 2010 10:20:13 AM (14 years ago)
Author:
weinig@apple.com
Message:

Need WebKit2 API to get the cell above a table cell
<rdar://problem/8537111>
https://bugs.webkit.org/show_bug.cgi?id=47532

Reviewed by Anders Carlsson.

WebCore:

Re-factor functionality to get the cell above a table cell
into a function on HTMLTableCellElement and export it for use
as SPI.

  • WebCore.exp.in:
  • WebCore.xcodeproj/project.pbxproj:
  • html/HTMLTableCellElement.cpp:

(WebCore::HTMLTableCellElement::cellAbove): Move implementation here...

  • html/HTMLTableCellElement.h:
  • page/Frame.cpp:

(WebCore::Frame::searchForLabelsAboveCell): ...from here.

WebKit2:

  • WebProcess/InjectedBundle/API/c/WKBundleNodeHandle.cpp:

(WKBundleNodeHandleCopyHTMLTableCellElementCellAbove):

  • WebProcess/InjectedBundle/API/c/WKBundleNodeHandlePrivate.h:
  • WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.cpp:

(WebKit::InjectedBundleNodeHandle::copyHTMLTableCellElementCellAbove):

  • WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.h:
Location:
trunk
Files:
11 edited

Legend:

Unmodified
Added
Removed
  • trunk/WebCore/ChangeLog

    r69586 r69587  
     12010-10-12  Sam Weinig  <sam@webkit.org>
     2
     3        Reviewed by Anders Carlsson.
     4
     5        Need WebKit2 API to get the cell above a table cell
     6        <rdar://problem/8537111>
     7        https://bugs.webkit.org/show_bug.cgi?id=47532
     8
     9        Re-factor functionality to get the cell above a table cell
     10        into a function on HTMLTableCellElement and export it for use
     11        as SPI.
     12
     13        * WebCore.exp.in:
     14        * WebCore.xcodeproj/project.pbxproj:
     15        * html/HTMLTableCellElement.cpp:
     16        (WebCore::HTMLTableCellElement::cellAbove): Move implementation here...
     17        * html/HTMLTableCellElement.h:
     18        * page/Frame.cpp:
     19        (WebCore::Frame::searchForLabelsAboveCell): ...from here.
     20
    1212010-10-12  Dave Moore  <davemoore@chromium.org>
    222
  • trunk/WebCore/WebCore.exp.in

    r69549 r69587  
    981981__ZNK7WebCore19SelectionController31getClippedVisibleTextRectanglesERN3WTF6VectorINS_9FloatRectELm0EEE
    982982__ZNK7WebCore19SelectionController6boundsEb
     983__ZNK7WebCore20HTMLTableCellElement9cellAboveEv
    983984__ZNK7WebCore20ResourceResponseBase14httpStatusCodeEv
    984985__ZNK7WebCore20ResourceResponseBase14httpStatusTextEv
  • trunk/WebCore/WebCore.xcodeproj/project.pbxproj

    r69549 r69587  
    33673367                A871DB280A150BD600B12A68 /* HTMLTableElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A871DB1A0A150BD600B12A68 /* HTMLTableElement.cpp */; };
    33683368                A871DB290A150BD600B12A68 /* HTMLTableColElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A871DB1B0A150BD600B12A68 /* HTMLTableColElement.cpp */; };
    3369                 A871DB2A0A150BD600B12A68 /* HTMLTableCellElement.h in Headers */ = {isa = PBXBuildFile; fileRef = A871DB1C0A150BD600B12A68 /* HTMLTableCellElement.h */; };
     3369                A871DB2A0A150BD600B12A68 /* HTMLTableCellElement.h in Headers */ = {isa = PBXBuildFile; fileRef = A871DB1C0A150BD600B12A68 /* HTMLTableCellElement.h */; settings = {ATTRIBUTES = (Private, ); }; };
    33703370                A871DB2B0A150BD600B12A68 /* HTMLTableCaptionElement.h in Headers */ = {isa = PBXBuildFile; fileRef = A871DB1D0A150BD600B12A68 /* HTMLTableCaptionElement.h */; };
    3371                 A871DB2C0A150BD600B12A68 /* HTMLTablePartElement.h in Headers */ = {isa = PBXBuildFile; fileRef = A871DB1E0A150BD600B12A68 /* HTMLTablePartElement.h */; };
     3371                A871DB2C0A150BD600B12A68 /* HTMLTablePartElement.h in Headers */ = {isa = PBXBuildFile; fileRef = A871DB1E0A150BD600B12A68 /* HTMLTablePartElement.h */; settings = {ATTRIBUTES = (Private, ); }; };
    33723372                A871DB2D0A150BD600B12A68 /* HTMLTablePartElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A871DB1F0A150BD600B12A68 /* HTMLTablePartElement.cpp */; };
    33733373                A871DB2E0A150BD600B12A68 /* HTMLTableCellElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A871DB200A150BD600B12A68 /* HTMLTableCellElement.cpp */; };
  • trunk/WebCore/html/HTMLTableCellElement.cpp

    r61959 r69587  
    166166}
    167167
     168HTMLTableCellElement* HTMLTableCellElement::cellAbove() const
     169{
     170    RenderObject* cellRenderer = renderer();
     171    if (!cellRenderer)
     172        return 0;
     173    if (!cellRenderer->isTableCell())
     174        return 0;
     175
     176    RenderTableCell* tableCellRenderer = toRenderTableCell(cellRenderer);
     177    RenderTableCell* cellAboveRenderer = tableCellRenderer->table()->cellAbove(tableCellRenderer);
     178    if (!cellAboveRenderer)
     179        return 0;
     180
     181    return static_cast<HTMLTableCellElement*>(cellAboveRenderer->node());
    168182}
     183
     184} // namespace WebCore
  • trunk/WebCore/html/HTMLTableCellElement.h

    r66057 r69587  
    5454    String scope() const;
    5555
     56    HTMLTableCellElement* cellAbove() const;
     57
    5658private:
    5759    HTMLTableCellElement(const QualifiedName&, Document*);
  • trunk/WebCore/page/Frame.cpp

    r69039 r69587  
    344344String Frame::searchForLabelsAboveCell(RegularExpression* regExp, HTMLTableCellElement* cell, size_t* resultDistanceFromStartOfCell)
    345345{
    346     RenderObject* cellRenderer = cell->renderer();
    347 
    348     if (cellRenderer && cellRenderer->isTableCell()) {
    349         RenderTableCell* tableCellRenderer = toRenderTableCell(cellRenderer);
    350         RenderTableCell* cellAboveRenderer = tableCellRenderer->table()->cellAbove(tableCellRenderer);
    351 
    352         if (cellAboveRenderer) {
    353             HTMLTableCellElement* aboveCell =
    354                 static_cast<HTMLTableCellElement*>(cellAboveRenderer->node());
    355 
    356             if (aboveCell) {
    357                 // search within the above cell we found for a match
    358                 size_t lengthSearched = 0;   
    359                 for (Node* n = aboveCell->firstChild(); n; n = n->traverseNextNode(aboveCell)) {
    360                     if (n->isTextNode() && n->renderer() && n->renderer()->style()->visibility() == VISIBLE) {
    361                         // For each text chunk, run the regexp
    362                         String nodeString = n->nodeValue();
    363                         int pos = regExp->searchRev(nodeString);
    364                         if (pos >= 0) {
    365                             if (resultDistanceFromStartOfCell)
    366                                 *resultDistanceFromStartOfCell = lengthSearched;
    367                             return nodeString.substring(pos, regExp->matchedLength());
    368                         }
    369                         lengthSearched += nodeString.length();
    370                     }
     346    HTMLTableCellElement* aboveCell = cell->cellAbove();
     347    if (aboveCell) {
     348        // search within the above cell we found for a match
     349        size_t lengthSearched = 0;   
     350        for (Node* n = aboveCell->firstChild(); n; n = n->traverseNextNode(aboveCell)) {
     351            if (n->isTextNode() && n->renderer() && n->renderer()->style()->visibility() == VISIBLE) {
     352                // For each text chunk, run the regexp
     353                String nodeString = n->nodeValue();
     354                int pos = regExp->searchRev(nodeString);
     355                if (pos >= 0) {
     356                    if (resultDistanceFromStartOfCell)
     357                        *resultDistanceFromStartOfCell = lengthSearched;
     358                    return nodeString.substring(pos, regExp->matchedLength());
    371359                }
     360                lengthSearched += nodeString.length();
    372361            }
    373362        }
    374363    }
     364
    375365    // Any reason in practice to search all cells in that are above cell?
    376366    if (resultDistanceFromStartOfCell)
  • trunk/WebKit2/ChangeLog

    r69584 r69587  
     12010-10-12  Sam Weinig  <sam@webkit.org>
     2
     3        Reviewed by Anders Carlsson.
     4
     5        Need WebKit2 API to get the cell above a table cell
     6        <rdar://problem/8537111>
     7        https://bugs.webkit.org/show_bug.cgi?id=47532
     8
     9        * WebProcess/InjectedBundle/API/c/WKBundleNodeHandle.cpp:
     10        (WKBundleNodeHandleCopyHTMLTableCellElementCellAbove):
     11        * WebProcess/InjectedBundle/API/c/WKBundleNodeHandlePrivate.h:
     12        * WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.cpp:
     13        (WebKit::InjectedBundleNodeHandle::copyHTMLTableCellElementCellAbove):
     14        * WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.h:
     15
    1162010-10-11  Anders Carlsson  <andersca@apple.com>
    217
  • trunk/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleNodeHandle.cpp

    r69545 r69587  
    5353    toImpl(htmlInputElementHandleRef)->setHTMLInputElementAutofilled(filled);
    5454}
     55
     56WKBundleNodeHandleRef WKBundleNodeHandleCopyHTMLTableCellElementCellAbove(WKBundleNodeHandleRef htmlTableCellElementHandleRef)
     57{
     58    RefPtr<InjectedBundleNodeHandle> nodeHandle = toImpl(htmlTableCellElementHandleRef)->copyHTMLTableCellElementCellAbove();
     59    return toAPI(nodeHandle.release().releaseRef());
     60}
  • trunk/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleNodeHandlePrivate.h

    r69545 r69587  
    3737WK_EXPORT WKBundleNodeHandleRef WKBundleNodeHandleCreate(JSContextRef context, JSObjectRef object);
    3838
     39
    3940/* Additional DOM Operations */
    4041
     42/* HTMLInputElement Operations */
    4143WK_EXPORT void WKBundleNodeHandleSetHTMLInputElementValueForUser(WKBundleNodeHandleRef htmlInputElementHandle, WKStringRef value);
    4244WK_EXPORT void WKBundleNodeHandleSetHTMLInputElementAutofilled(WKBundleNodeHandleRef htmlInputElementHandle, bool filled);
     45
     46/* HTMLTableCellElement Operations */
     47WK_EXPORT WKBundleNodeHandleRef WKBundleNodeHandleCopyHTMLTableCellElementCellAbove(WKBundleNodeHandleRef htmlTableCellElementHandle);
    4348
    4449#ifdef __cplusplus
  • trunk/WebKit2/WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.cpp

    r69545 r69587  
    2828#include <JavaScriptCore/APICast.h>
    2929#include <WebCore/HTMLInputElement.h>
     30#include <WebCore/HTMLTableCellElement.h>
    3031#include <WebCore/JSNode.h>
    3132#include <WebCore/Node.h>
     
    106107}
    107108
     109PassRefPtr<InjectedBundleNodeHandle> InjectedBundleNodeHandle::copyHTMLTableCellElementCellAbove()
     110{
     111    if (!m_node->hasTagName(tdTag))
     112        return 0;
     113
     114    return getOrCreate(static_cast<HTMLTableCellElement*>(m_node.get())->cellAbove());
     115}
     116
    108117} // namespace WebKit
  • trunk/WebKit2/WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.h

    r69545 r69587  
    5353    void setHTMLInputElementValueForUser(const String&);
    5454    void setHTMLInputElementAutofilled(bool);
     55    PassRefPtr<InjectedBundleNodeHandle> copyHTMLTableCellElementCellAbove();
    5556
    5657private:
Note: See TracChangeset for help on using the changeset viewer.