Changeset 61640 in webkit


Ignore:
Timestamp:
Jun 22, 2010 4:56:22 PM (14 years ago)
Author:
abarth@webkit.org
Message:

2010-06-22 Tony Gentilcore <tonyg@chromium.org>

Reviewed by Eric Seidel.

Add layout tests which test line numbers for both inline and event handler
scripts in HTML documents.
https://bugs.webkit.org/show_bug.cgi?id=40649

  • fast/js/resources/script-line-number.js: Added. (getLineFromError): (assertErrorOnLine):
  • fast/js/script-line-number-expected.txt: Added.
  • fast/js/script-line-number.html: Added.

2010-06-22 Tony Gentilcore <tonyg@chromium.org>

Reviewed by Eric Seidel.

Pull script line number from DocumentParser instead of pushing it to ScriptController
https://bugs.webkit.org/show_bug.cgi?id=40649

This approach is cleaner and improves WebCore/benchmarks/parser/html-parser.html by ~2%.

Tests: fast/js/script-line-number.html

  • bindings/js/ScriptController.cpp: (WebCore::ScriptController::ScriptController): (WebCore::ScriptController::eventHandlerLineNumber):
  • bindings/js/ScriptController.h:
  • bindings/v8/ScriptController.cpp: (WebCore::ScriptController::eventHandlerLineNumber): (WebCore::ScriptController::eventHandlerColumnNumber):
  • bindings/v8/ScriptController.h:
  • bindings/v8/ScriptEventListener.cpp: (WebCore::createAttributeEventListener):
  • bindings/v8/V8Proxy.h:
  • dom/XMLDocumentParserLibxml2.cpp: (WebCore::XMLDocumentParser::startElementNs):
  • html/HTML5DocumentParser.cpp: (WebCore::HTML5DocumentParser::pumpLexer):
  • html/HTMLDocumentParser.cpp: (WebCore::HTMLDocumentParser::processToken):
Location:
trunk
Files:
3 added
13 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r61637 r61640  
     12010-06-22  Tony Gentilcore  <tonyg@chromium.org>
     2
     3        Reviewed by Eric Seidel.
     4
     5        Add layout tests which test line numbers for both inline and event handler
     6        scripts in HTML documents.
     7        https://bugs.webkit.org/show_bug.cgi?id=40649
     8
     9        * fast/js/resources/script-line-number.js: Added.
     10        (getLineFromError):
     11        (assertErrorOnLine):
     12        * fast/js/script-line-number-expected.txt: Added.
     13        * fast/js/script-line-number.html: Added.
     14
    1152010-06-22  Eric Seidel  <eric@webkit.org>
    216
  • trunk/WebCore/ChangeLog

    r61638 r61640  
     12010-06-22  Tony Gentilcore  <tonyg@chromium.org>
     2
     3        Reviewed by Eric Seidel.
     4
     5        Pull script line number from DocumentParser instead of pushing it to ScriptController
     6        https://bugs.webkit.org/show_bug.cgi?id=40649
     7
     8        This approach is cleaner and improves WebCore/benchmarks/parser/html-parser.html by ~2%.
     9
     10        Tests: fast/js/script-line-number.html
     11
     12        * bindings/js/ScriptController.cpp:
     13        (WebCore::ScriptController::ScriptController):
     14        (WebCore::ScriptController::eventHandlerLineNumber):
     15        * bindings/js/ScriptController.h:
     16        * bindings/v8/ScriptController.cpp:
     17        (WebCore::ScriptController::eventHandlerLineNumber):
     18        (WebCore::ScriptController::eventHandlerColumnNumber):
     19        * bindings/v8/ScriptController.h:
     20        * bindings/v8/ScriptEventListener.cpp:
     21        (WebCore::createAttributeEventListener):
     22        * bindings/v8/V8Proxy.h:
     23        * dom/XMLDocumentParserLibxml2.cpp:
     24        (WebCore::XMLDocumentParser::startElementNs):
     25        * html/HTML5DocumentParser.cpp:
     26        (WebCore::HTML5DocumentParser::pumpLexer):
     27        * html/HTMLDocumentParser.cpp:
     28        (WebCore::HTMLDocumentParser::processToken):
     29
    1302010-06-22  Tony Gentilcore  <tonyg@chromium.org>
    231
  • trunk/WebCore/WebCore.xcodeproj/project.pbxproj

    r61637 r61640  
    1950319503                                B525A96511CA2340003A23A8 /* JSSQLException.h in Headers */,
    1950419504                                9719AF0011D09F2C00D45831 /* HTMLInputStream.h in Headers */,
    19505                                 A853123D11D0471B00D4D077 /* FragmentScriptingPermission.h in Headers */,
     19505                                A853123D11D0471B00D4D077 /* FragmentScriptingPermission.h in Headers */,
    1950619506                        );
    1950719507                        runOnlyForDeploymentPostprocessing = 0;
  • trunk/WebCore/bindings/js/ScriptController.cpp

    r61062 r61640  
    2222#include "ScriptController.h"
    2323
     24#include "DocumentParser.h"
    2425#include "Event.h"
    2526#include "EventNames.h"
     
    6162ScriptController::ScriptController(Frame* frame)
    6263    : m_frame(frame)
    63     , m_handlerLineNumber(0)
    6464    , m_sourceURL(0)
    6565    , m_inExecuteScript(false)
     
    236236}
    237237
     238int ScriptController::eventHandlerLineNumber() const
     239{
     240    // JSC expects 1-based line numbers, so we must add one here to get it right.
     241    if (DocumentParser* parser = m_frame->document()->parser())
     242        return parser->lineNumber() + 1;
     243    return 0;
     244}
     245   
    238246bool ScriptController::processingUserGesture(DOMWrapperWorld* world) const
    239247{
  • trunk/WebCore/bindings/js/ScriptController.h

    r61062 r61640  
    118118    ScriptValue evaluateInWorld(const ScriptSourceCode&, DOMWrapperWorld*, ShouldAllowXSS shouldAllowXSS = DoNotAllowXSS);
    119119
    120     void setEventHandlerLineNumber(int lineno) { m_handlerLineNumber = lineno; }
    121     int eventHandlerLineNumber() { return m_handlerLineNumber; }
    122 
     120    int eventHandlerLineNumber() const;
     121   
    123122    void setProcessingTimerCallback(bool b) { m_processingTimerCallback = b; }
    124123    bool processingUserGesture(DOMWrapperWorld*) const;
     
    188187    ShellMap m_windowShells;
    189188    Frame* m_frame;
    190     int m_handlerLineNumber;
    191189    const String* m_sourceURL;
    192190
  • trunk/WebCore/bindings/v8/ScriptController.cpp

    r60670 r61640  
    3535#include "PlatformBridge.h"
    3636#include "Document.h"
     37#include "DocumentParser.h"
    3738#include "DOMWindow.h"
    3839#include "Event.h"
     
    259260}
    260261
    261 void ScriptController::setEventHandlerLineNumber(int lineNumber)
    262 {
    263     m_proxy->setEventHandlerLineNumber(lineNumber);
     262int ScriptController::eventHandlerLineNumber() const
     263{
     264    if (DocumentParser* parser = m_frame->document()->parser())
     265        return parser->lineNumber();
     266    return 0;
     267}
     268
     269int ScriptController::eventHandlerColumnNumber() const
     270{
     271    if (DocumentParser* parser = m_frame->document()->parser())
     272        return parser->columnNumber();
     273    return 0;
    264274}
    265275
  • trunk/WebCore/bindings/v8/ScriptController.h

    r60291 r61640  
    154154
    155155    void finishedWithEvent(Event*);
    156     void setEventHandlerLineNumber(int lineNumber);
     156
     157    int eventHandlerLineNumber() const;
     158    int eventHandlerColumnNumber() const;
    157159
    158160    void setProcessingTimerCallback(bool processingTimerCallback) { m_processingTimerCallback = processingTimerCallback; }
  • trunk/WebCore/bindings/v8/ScriptEventListener.cpp

    r61104 r61640  
    6565        }
    6666
    67         if (frame->document()->parser()) {
    68             // FIXME: Change to use script->eventHandlerLineNumber() when implemented.
    69             lineNumber = frame->document()->parser()->lineNumber();
    70             columnNumber = frame->document()->parser()->columnNumber();
    71         }
     67        lineNumber = scriptController->eventHandlerLineNumber();
     68        columnNumber = scriptController->eventHandlerColumnNumber();
    7269        sourceURL = node->document()->url().string();
    7370    }
     
    9895    }
    9996
    100     if (frame->document()->parser()) {
    101         // FIXME: Change to use script->eventHandlerLineNumber() when implemented.
    102         lineNumber = frame->document()->parser()->lineNumber();
    103         columnNumber = frame->document()->parser()->columnNumber();
    104     }
     97    lineNumber = scriptController->eventHandlerLineNumber();
     98    columnNumber = scriptController->eventHandlerColumnNumber();
    10599    sourceURL = frame->document()->url().string();
    106100    return V8LazyEventListener::create(attr->localName().string(), frame->document()->isSVGDocument(), attr->value(), sourceURL, lineNumber, columnNumber, WorldContextHandle(UseMainWorld));
  • trunk/WebCore/bindings/v8/V8Proxy.h

    r61531 r61640  
    203203#endif
    204204
    205         void setEventHandlerLineNumber(int lineNumber) { m_handlerLineNumber = lineNumber; }
    206205        void finishedWithEvent(Event*) { }
    207206
     
    370369        RefPtr<V8DOMWindowShell> m_windowShell;
    371370
    372         int m_handlerLineNumber;
    373 
    374371        // True for <a href="javascript:foo()"> and false for <script>foo()</script>.
    375372        // Only valid during execution.
  • trunk/WebCore/dom/XMLDocumentParserLibxml2.cpp

    r61637 r61640  
    4545#include "ResourceRequest.h"
    4646#include "ResourceResponse.h"
    47 #include "ScriptController.h"
    4847#include "ScriptElement.h"
    4948#include "ScriptSourceCode.h"
     
    784783    }
    785784
    786     ScriptController* jsProxy = m_doc->frame() ? m_doc->frame()->script() : 0;
    787     if (jsProxy && m_doc->frame()->script()->canExecuteScripts(NotAboutToExecuteScript))
    788         jsProxy->setEventHandlerLineNumber(lineNumber());
    789 
    790785    handleElementAttributes(newElement.get(), libxmlAttributes, nb_attributes, ec, m_scriptingPermission);
    791786    if (ec) {
     
    793788        return;
    794789    }
    795 
    796     if (jsProxy)
    797         jsProxy->setEventHandlerLineNumber(0);
    798790
    799791    newElement->beginParsingChildren();
  • trunk/WebCore/html/HTML5DocumentParser.cpp

    r61638 r61640  
    221221            break;
    222222
    223         if (ScriptController* scriptController = script())
    224             scriptController->setEventHandlerLineNumber(lineNumber() + 1);
    225 
    226223        m_treeConstructor->constructTreeFromToken(m_token);
    227224        m_token.clear();
    228 
    229         // FIXME: Why is setEventHandlerLineNumber(0) necessary?
    230         if (ScriptController* scriptController = script())
    231             scriptController->setEventHandlerLineNumber(0);
    232225
    233226        // The parser will pause itself when waiting on a script to load or run.
  • trunk/WebCore/html/HTML5ScriptRunner.h

    r61638 r61640  
    6565    public:
    6666        PendingScript()
    67             : m_watchingForLoad(false)
    68             , startingLineNumber(0)
     67            : startingLineNumber(0)
     68            , m_watchingForLoad(false)
    6969        {
    7070        }
  • trunk/WebCore/html/HTMLDocumentParser.cpp

    r61637 r61640  
    4949#include "Page.h"
    5050#include "PreloadScanner.h"
    51 #include "ScriptController.h"
    5251#include "ScriptSourceCode.h"
    5352#include "ScriptValue.h"
     
    18941893PassRefPtr<Node> HTMLDocumentParser::processToken()
    18951894{
    1896     ScriptController* scriptController = (!m_fragment && m_doc->frame()) ? m_doc->frame()->script() : 0;
    1897     if (scriptController && scriptController->canExecuteScripts(NotAboutToExecuteScript))
    1898         // FIXME: Why isn't this m_currentScriptTagStartLineNumber?  I suspect this is wrong.
    1899         scriptController->setEventHandlerLineNumber(m_currentTagStartLineNumber + 1); // Script line numbers are 1 based.
    19001895    if (m_dest > m_buffer) {
    19011896        m_currentToken.text = StringImpl::createStrippingNullCharacters(m_buffer, m_dest - m_buffer);
     
    19041899    } else if (m_currentToken.tagName == nullAtom) {
    19051900        m_currentToken.reset();
    1906         if (scriptController)
    1907             scriptController->setEventHandlerLineNumber(m_lineNumber + 1); // Script line numbers are 1 based.
    19081901        return 0;
    19091902    }
     
    19231916    }
    19241917    m_currentToken.reset();
    1925     if (scriptController)
    1926         scriptController->setEventHandlerLineNumber(0);
    19271918
    19281919    return n.release();
Note: See TracChangeset for help on using the changeset viewer.