Changeset 61640 in webkit
- Timestamp:
- Jun 22, 2010 4:56:22 PM (14 years ago)
- Location:
- trunk
- Files:
-
- 3 added
- 13 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r61637 r61640 1 2010-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 1 15 2010-06-22 Eric Seidel <eric@webkit.org> 2 16 -
trunk/WebCore/ChangeLog
r61638 r61640 1 2010-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 1 30 2010-06-22 Tony Gentilcore <tonyg@chromium.org> 2 31 -
trunk/WebCore/WebCore.xcodeproj/project.pbxproj
r61637 r61640 19503 19503 B525A96511CA2340003A23A8 /* JSSQLException.h in Headers */, 19504 19504 9719AF0011D09F2C00D45831 /* HTMLInputStream.h in Headers */, 19505 19505 A853123D11D0471B00D4D077 /* FragmentScriptingPermission.h in Headers */, 19506 19506 ); 19507 19507 runOnlyForDeploymentPostprocessing = 0; -
trunk/WebCore/bindings/js/ScriptController.cpp
r61062 r61640 22 22 #include "ScriptController.h" 23 23 24 #include "DocumentParser.h" 24 25 #include "Event.h" 25 26 #include "EventNames.h" … … 61 62 ScriptController::ScriptController(Frame* frame) 62 63 : m_frame(frame) 63 , m_handlerLineNumber(0)64 64 , m_sourceURL(0) 65 65 , m_inExecuteScript(false) … … 236 236 } 237 237 238 int 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 238 246 bool ScriptController::processingUserGesture(DOMWrapperWorld* world) const 239 247 { -
trunk/WebCore/bindings/js/ScriptController.h
r61062 r61640 118 118 ScriptValue evaluateInWorld(const ScriptSourceCode&, DOMWrapperWorld*, ShouldAllowXSS shouldAllowXSS = DoNotAllowXSS); 119 119 120 void setEventHandlerLineNumber(int lineno) { m_handlerLineNumber = lineno; } 121 int eventHandlerLineNumber() { return m_handlerLineNumber; } 122 120 int eventHandlerLineNumber() const; 121 123 122 void setProcessingTimerCallback(bool b) { m_processingTimerCallback = b; } 124 123 bool processingUserGesture(DOMWrapperWorld*) const; … … 188 187 ShellMap m_windowShells; 189 188 Frame* m_frame; 190 int m_handlerLineNumber;191 189 const String* m_sourceURL; 192 190 -
trunk/WebCore/bindings/v8/ScriptController.cpp
r60670 r61640 35 35 #include "PlatformBridge.h" 36 36 #include "Document.h" 37 #include "DocumentParser.h" 37 38 #include "DOMWindow.h" 38 39 #include "Event.h" … … 259 260 } 260 261 261 void ScriptController::setEventHandlerLineNumber(int lineNumber) 262 { 263 m_proxy->setEventHandlerLineNumber(lineNumber); 262 int ScriptController::eventHandlerLineNumber() const 263 { 264 if (DocumentParser* parser = m_frame->document()->parser()) 265 return parser->lineNumber(); 266 return 0; 267 } 268 269 int ScriptController::eventHandlerColumnNumber() const 270 { 271 if (DocumentParser* parser = m_frame->document()->parser()) 272 return parser->columnNumber(); 273 return 0; 264 274 } 265 275 -
trunk/WebCore/bindings/v8/ScriptController.h
r60291 r61640 154 154 155 155 void finishedWithEvent(Event*); 156 void setEventHandlerLineNumber(int lineNumber); 156 157 int eventHandlerLineNumber() const; 158 int eventHandlerColumnNumber() const; 157 159 158 160 void setProcessingTimerCallback(bool processingTimerCallback) { m_processingTimerCallback = processingTimerCallback; } -
trunk/WebCore/bindings/v8/ScriptEventListener.cpp
r61104 r61640 65 65 } 66 66 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(); 72 69 sourceURL = node->document()->url().string(); 73 70 } … … 98 95 } 99 96 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(); 105 99 sourceURL = frame->document()->url().string(); 106 100 return V8LazyEventListener::create(attr->localName().string(), frame->document()->isSVGDocument(), attr->value(), sourceURL, lineNumber, columnNumber, WorldContextHandle(UseMainWorld)); -
trunk/WebCore/bindings/v8/V8Proxy.h
r61531 r61640 203 203 #endif 204 204 205 void setEventHandlerLineNumber(int lineNumber) { m_handlerLineNumber = lineNumber; }206 205 void finishedWithEvent(Event*) { } 207 206 … … 370 369 RefPtr<V8DOMWindowShell> m_windowShell; 371 370 372 int m_handlerLineNumber;373 374 371 // True for <a href="javascript:foo()"> and false for <script>foo()</script>. 375 372 // Only valid during execution. -
trunk/WebCore/dom/XMLDocumentParserLibxml2.cpp
r61637 r61640 45 45 #include "ResourceRequest.h" 46 46 #include "ResourceResponse.h" 47 #include "ScriptController.h"48 47 #include "ScriptElement.h" 49 48 #include "ScriptSourceCode.h" … … 784 783 } 785 784 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 790 785 handleElementAttributes(newElement.get(), libxmlAttributes, nb_attributes, ec, m_scriptingPermission); 791 786 if (ec) { … … 793 788 return; 794 789 } 795 796 if (jsProxy)797 jsProxy->setEventHandlerLineNumber(0);798 790 799 791 newElement->beginParsingChildren(); -
trunk/WebCore/html/HTML5DocumentParser.cpp
r61638 r61640 221 221 break; 222 222 223 if (ScriptController* scriptController = script())224 scriptController->setEventHandlerLineNumber(lineNumber() + 1);225 226 223 m_treeConstructor->constructTreeFromToken(m_token); 227 224 m_token.clear(); 228 229 // FIXME: Why is setEventHandlerLineNumber(0) necessary?230 if (ScriptController* scriptController = script())231 scriptController->setEventHandlerLineNumber(0);232 225 233 226 // The parser will pause itself when waiting on a script to load or run. -
trunk/WebCore/html/HTML5ScriptRunner.h
r61638 r61640 65 65 public: 66 66 PendingScript() 67 : m_watchingForLoad(false)68 , startingLineNumber(0)67 : startingLineNumber(0) 68 , m_watchingForLoad(false) 69 69 { 70 70 } -
trunk/WebCore/html/HTMLDocumentParser.cpp
r61637 r61640 49 49 #include "Page.h" 50 50 #include "PreloadScanner.h" 51 #include "ScriptController.h"52 51 #include "ScriptSourceCode.h" 53 52 #include "ScriptValue.h" … … 1894 1893 PassRefPtr<Node> HTMLDocumentParser::processToken() 1895 1894 { 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.1900 1895 if (m_dest > m_buffer) { 1901 1896 m_currentToken.text = StringImpl::createStrippingNullCharacters(m_buffer, m_dest - m_buffer); … … 1904 1899 } else if (m_currentToken.tagName == nullAtom) { 1905 1900 m_currentToken.reset(); 1906 if (scriptController)1907 scriptController->setEventHandlerLineNumber(m_lineNumber + 1); // Script line numbers are 1 based.1908 1901 return 0; 1909 1902 } … … 1923 1916 } 1924 1917 m_currentToken.reset(); 1925 if (scriptController)1926 scriptController->setEventHandlerLineNumber(0);1927 1918 1928 1919 return n.release();
Note: See TracChangeset
for help on using the changeset viewer.