Changeset 70165 in webkit
- Timestamp:
- Oct 20, 2010 1:06:57 PM (13 years ago)
- Location:
- trunk
- Files:
-
- 2 added
- 32 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/ChangeLog
r70126 r70165 1 2010-10-20 Peter Rybin <peter.rybin@gmail.com> 2 3 Reviewed by Adam Barth. 4 5 HTML parser should provide script column position within HTML document to JavaScript engine 6 https://bugs.webkit.org/show_bug.cgi?id=45271 7 8 Adds TextPosition* classes -- a structure that stores line/column/generation 9 level coordinates inside text document. Adds *BasedNumber classes -- typesafe int 10 wrappers that emphasize whether int number is used as zero-based or 11 one-based. 12 13 * GNUmakefile.am: 14 * JavaScriptCore.gypi: 15 * JavaScriptCore.xcodeproj/project.pbxproj: 16 * wtf/text/TextPosition.h: Added. 17 (WTF::TextPosition::TextPosition): 18 (WTF::TextPosition::minimumPosition): 19 (WTF::TextPosition::belowRangePosition): 20 (WTF::ZeroBasedNumber::fromZeroBasedInt): 21 (WTF::ZeroBasedNumber::ZeroBasedNumber): 22 (WTF::ZeroBasedNumber::zeroBasedInt): 23 (WTF::ZeroBasedNumber::base): 24 (WTF::ZeroBasedNumber::belowBase): 25 (WTF::OneBasedNumber::fromOneBasedInt): 26 (WTF::OneBasedNumber::OneBasedNumber): 27 (WTF::OneBasedNumber::oneBasedInt): 28 (WTF::OneBasedNumber::convertAsZeroBasedInt): 29 (WTF::OneBasedNumber::convertToZeroBased): 30 (WTF::OneBasedNumber::base): 31 (WTF::OneBasedNumber::belowBase): 32 (WTF::toZeroBasedTextPosition): 33 (WTF::toOneBasedTextPosition): 34 (WTF::ZeroBasedNumber::convertToOneBased): 35 1 36 2010-10-19 Kwang Yul Seo <skyul@company100.net> 2 37 -
trunk/JavaScriptCore/GNUmakefile.am
r70026 r70165 518 518 JavaScriptCore/wtf/text/StringImpl.h \ 519 519 JavaScriptCore/wtf/text/StringStatics.cpp \ 520 JavaScriptCore/wtf/text/TextPosition.h \ 520 521 JavaScriptCore/wtf/text/WTFString.cpp \ 521 522 JavaScriptCore/wtf/text/WTFString.h \ -
trunk/JavaScriptCore/JavaScriptCore.gypi
r69912 r70165 461 461 'wtf/text/StringImpl.h', 462 462 'wtf/text/StringStatics.cpp', 463 'wtf/text/TextPosition.h', 463 464 'wtf/text/WTFString.cpp', 464 465 'wtf/text/WTFString.h', -
trunk/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj
r69970 r70165 555 555 E1EF79AA0CE97BA60088D500 /* UTF8.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E1EF79A80CE97BA60088D500 /* UTF8.cpp */; }; 556 556 E48E0F2D0F82151700A8CA37 /* FastAllocBase.h in Headers */ = {isa = PBXBuildFile; fileRef = E48E0F2C0F82151700A8CA37 /* FastAllocBase.h */; settings = {ATTRIBUTES = (Private, ); }; }; 557 F3BD31ED126735770065467F /* TextPosition.h in Headers */ = {isa = PBXBuildFile; fileRef = F3BD31D0126730180065467F /* TextPosition.h */; settings = {ATTRIBUTES = (Private, ); }; }; 557 558 FE1B447A0ECCD73B004F4DD1 /* StdLibExtras.h in Headers */ = {isa = PBXBuildFile; fileRef = FE1B44790ECCD73B004F4DD1 /* StdLibExtras.h */; settings = {ATTRIBUTES = (Private, ); }; }; 558 559 /* End PBXBuildFile section */ … … 1143 1144 E1EF79A90CE97BA60088D500 /* UTF8.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UTF8.h; sourceTree = "<group>"; }; 1144 1145 E48E0F2C0F82151700A8CA37 /* FastAllocBase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FastAllocBase.h; sourceTree = "<group>"; }; 1146 F3BD31D0126730180065467F /* TextPosition.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TextPosition.h; path = text/TextPosition.h; sourceTree = "<group>"; }; 1145 1147 F5BB2BC5030F772101FCFE1D /* Completion.h */ = {isa = PBXFileReference; fileEncoding = 30; indentWidth = 4; lastKnownFileType = sourcecode.c.h; path = Completion.h; sourceTree = "<group>"; tabWidth = 8; }; 1146 1148 F5C290E60284F98E018635CA /* JavaScriptCorePrefix.h */ = {isa = PBXFileReference; fileEncoding = 30; indentWidth = 4; lastKnownFileType = sourcecode.c.h; path = JavaScriptCorePrefix.h; sourceTree = "<group>"; tabWidth = 8; }; … … 1858 1860 86B99AE2117E578100DF5A90 /* StringImplBase.h */, 1859 1861 8626BECE11928E3900782FAB /* StringStatics.cpp */, 1862 F3BD31D0126730180065467F /* TextPosition.h */, 1860 1863 868BFA15117CF19900B908B1 /* WTFString.cpp */, 1861 1864 868BFA16117CF19900B908B1 /* WTFString.h */, … … 2347 2350 A730B6121250068F009D25B1 /* StrictEvalActivation.h in Headers */, 2348 2351 933F5CDC1269229B0049191E /* NullPtr.h in Headers */, 2352 F3BD31ED126735770065467F /* TextPosition.h in Headers */, 2349 2353 ); 2350 2354 runOnlyForDeploymentPostprocessing = 0; -
trunk/WebCore/ChangeLog
r70158 r70165 1 2010-10-20 Peter Rybin <peter.rybin@gmail.com> 2 3 Reviewed by Adam Barth. 4 5 HTML parser should provide script column position within HTML document to JavaScript engine 6 https://bugs.webkit.org/show_bug.cgi?id=45271 7 8 Replaces line number with TextPosition struct so that script engine 9 gets script starting line/column. 10 11 * ForwardingHeaders/wtf/text/TextPosition.h: Added. 12 * bindings/js/ScriptSourceCode.h: 13 (WebCore::ScriptSourceCode::ScriptSourceCode): 14 * bindings/v8/ScheduledAction.cpp: 15 (WebCore::ScheduledAction::ScheduledAction): 16 * bindings/v8/ScriptController.cpp: 17 (WebCore::ScriptController::eventHandlerPosition): 18 * bindings/v8/ScriptController.h: 19 * bindings/v8/ScriptEventListener.cpp: 20 (WebCore::createAttributeEventListener): 21 * bindings/v8/ScriptSourceCode.h: 22 (WebCore::ScriptSourceCode::ScriptSourceCode): 23 (WebCore::ScriptSourceCode::startLine): 24 (WebCore::ScriptSourceCode::startPosition): 25 * bindings/v8/V8LazyEventListener.cpp: 26 (WebCore::V8LazyEventListener::V8LazyEventListener): 27 (WebCore::V8LazyEventListener::prepareListenerObject): 28 * bindings/v8/V8LazyEventListener.h: 29 (WebCore::V8LazyEventListener::create): 30 * bindings/v8/V8Proxy.cpp: 31 (WebCore::V8Proxy::compileScript): 32 (WebCore::V8Proxy::evaluate): 33 (WebCore::V8Proxy::runScript): 34 * bindings/v8/V8Proxy.h: 35 * bindings/v8/WorkerContextExecutionProxy.cpp: 36 (WebCore::WorkerContextExecutionProxy::evaluate): 37 (WebCore::WorkerContextExecutionProxy::runScript): 38 * bindings/v8/WorkerContextExecutionProxy.h: 39 * bindings/v8/WorkerScriptController.cpp: 40 (WebCore::WorkerScriptController::evaluate): 41 * dom/PendingScript.cpp: 42 (WebCore::PendingScript::releaseElementAndClear): 43 * dom/PendingScript.h: 44 (WebCore::PendingScript::PendingScript): 45 (WebCore::PendingScript::operator=): 46 (WebCore::PendingScript::startingPosition): 47 * dom/ScriptableDocumentParser.h: 48 * dom/XMLDocumentParser.h: 49 * dom/XMLDocumentParserLibxml2.cpp: 50 (WebCore::XMLDocumentParser::XMLDocumentParser): 51 (WebCore::XMLDocumentParser::startElementNs): 52 (WebCore::XMLDocumentParser::endElementNs): 53 (WebCore::XMLDocumentParser::lineNumber): 54 (WebCore::XMLDocumentParser::columnNumber): 55 (WebCore::XMLDocumentParser::textPosition): 56 (WebCore::XMLDocumentParser::textPositionOneBased): 57 * dom/XMLDocumentParserQt.cpp: 58 (WebCore::XMLDocumentParser::XMLDocumentParser): 59 (WebCore::XMLDocumentParser::textPosition): 60 (WebCore::XMLDocumentParser::parseStartElement): 61 (WebCore::XMLDocumentParser::parseEndElement): 62 * html/parser/HTMLDocumentParser.cpp: 63 (WebCore::HTMLDocumentParser::runScriptsForPausedTreeBuilder): 64 (WebCore::HTMLDocumentParser::textPosition): 65 * html/parser/HTMLDocumentParser.h: 66 * html/parser/HTMLScriptRunner.cpp: 67 (WebCore::HTMLScriptRunner::sourceFromPendingScript): 68 (WebCore::HTMLScriptRunner::execute): 69 (WebCore::HTMLScriptRunner::runScript): 70 * html/parser/HTMLScriptRunner.h: 71 * html/parser/HTMLTreeBuilder.cpp: 72 (WebCore::uninitializedPositionValue1): 73 (WebCore::HTMLTreeBuilder::HTMLTreeBuilder): 74 (WebCore::HTMLTreeBuilder::takeScriptToProcess): 75 (WebCore::HTMLTreeBuilder::processEndTag): 76 (WebCore::HTMLTreeBuilder::processScriptStartTag): 77 * html/parser/HTMLTreeBuilder.h: 78 1 79 2010-10-20 David Hyatt <hyatt@apple.com> 2 80 -
trunk/WebCore/bindings/js/ScriptSourceCode.h
r50230 r70165 36 36 #include "StringSourceProvider.h" 37 37 #include "KURL.h" 38 #include <wtf/text/TextPosition.h> 38 39 #include <wtf/RefPtr.h> 39 40 … … 42 43 class ScriptSourceCode { 43 44 public: 44 ScriptSourceCode(const String& source, const KURL& url = KURL(), int startLine = 1)45 ScriptSourceCode(const String& source, const KURL& url = KURL(), const TextPosition1& startPosition = TextPosition1::minimumPosition()) 45 46 : m_provider(StringSourceProvider::create(source, url.isNull() ? String() : url.string())) 46 , m_code(m_provider, start Line)47 , m_code(m_provider, startPosition.m_line.oneBasedInt()) 47 48 , m_url(url) 48 49 { -
trunk/WebCore/bindings/v8/ScheduledAction.cpp
r64735 r70165 46 46 ScheduledAction::ScheduledAction(v8::Handle<v8::Context> context, v8::Handle<v8::Function> func, int argc, v8::Handle<v8::Value> argv[]) 47 47 : m_context(context) 48 , m_code(String(), KURL(), 0)48 , m_code(String(), KURL(), TextPosition1::belowRangePosition()) 49 49 { 50 50 m_function = v8::Persistent<v8::Function>::New(func); -
trunk/WebCore/bindings/v8/ScriptController.cpp
r69662 r70165 263 263 } 264 264 265 int ScriptController::eventHandlerLineNumber() const265 TextPosition0 ScriptController::eventHandlerPosition() const 266 266 { 267 267 ScriptableDocumentParser* parser = m_frame->document()->scriptableDocumentParser(); 268 268 if (parser) 269 return parser->lineNumber(); 270 return 0; 271 } 272 273 int ScriptController::eventHandlerColumnNumber() const 274 { 275 ScriptableDocumentParser* parser = m_frame->document()->scriptableDocumentParser(); 276 if (parser) 277 return parser->columnNumber(); 278 return 0; 269 return parser->textPosition(); 270 return TextPosition0::minimumPosition(); 279 271 } 280 272 -
trunk/WebCore/bindings/v8/ScriptController.h
r69924 r70165 156 156 void finishedWithEvent(Event*); 157 157 158 int eventHandlerLineNumber() const; 159 int eventHandlerColumnNumber() const; 158 TextPosition0 eventHandlerPosition() const; 160 159 161 160 void setProcessingTimerCallback(bool processingTimerCallback) { m_processingTimerCallback = processingTimerCallback; } -
trunk/WebCore/bindings/v8/ScriptEventListener.cpp
r62897 r70165 51 51 return 0; 52 52 53 int lineNumber = 1;54 int columnNumber = 0;53 // FIXME: Very strange: we initialize zero-based number with '1'. 54 TextPosition0 position(WTF::ZeroBasedNumber::fromZeroBasedInt(1), WTF::ZeroBasedNumber::base()); 55 55 String sourceURL; 56 56 … … 65 65 } 66 66 67 lineNumber = scriptController->eventHandlerLineNumber(); 68 columnNumber = scriptController->eventHandlerColumnNumber(); 67 position = scriptController->eventHandlerPosition(); 69 68 sourceURL = node->document()->url().string(); 70 69 } 71 70 72 return V8LazyEventListener::create(attr->localName().string(), node->isSVGElement(), attr->value(), sourceURL, lineNumber, columnNumber, WorldContextHandle(UseMainWorld));71 return V8LazyEventListener::create(attr->localName().string(), node->isSVGElement(), attr->value(), sourceURL, position, WorldContextHandle(UseMainWorld)); 73 72 } 74 73 … … 82 81 return 0; 83 82 84 int lineNumber = 1;85 int columnNumber = 0;86 String sourceURL;87 88 83 ScriptController* scriptController = frame->script(); 89 84 if (!scriptController->canExecuteScripts(AboutToExecuteScript)) … … 95 90 } 96 91 97 lineNumber = scriptController->eventHandlerLineNumber(); 98 columnNumber = scriptController->eventHandlerColumnNumber(); 99 sourceURL = frame->document()->url().string(); 100 return V8LazyEventListener::create(attr->localName().string(), frame->document()->isSVGDocument(), attr->value(), sourceURL, lineNumber, columnNumber, WorldContextHandle(UseMainWorld)); 92 TextPosition0 position = scriptController->eventHandlerPosition(); 93 String sourceURL = frame->document()->url().string(); 94 return V8LazyEventListener::create(attr->localName().string(), frame->document()->isSVGDocument(), attr->value(), sourceURL, position, WorldContextHandle(UseMainWorld)); 101 95 } 102 96 -
trunk/WebCore/bindings/v8/ScriptSourceCode.h
r63275 r70165 36 36 #include "KURL.h" 37 37 #include "PlatformString.h" 38 #include <wtf/text/TextPosition.h> 38 39 39 40 namespace WebCore { … … 41 42 class ScriptSourceCode { 42 43 public: 43 ScriptSourceCode(const String& source, const KURL& url = KURL(), int startLine = 1)44 ScriptSourceCode(const String& source, const KURL& url = KURL(), const TextPosition1& startPosition = TextPosition1::minimumPosition()) 44 45 : m_source(source) 45 46 , m_cachedScript(0) 46 47 , m_url(url) 47 , m_start Line(startLine)48 , m_startPosition(startPosition) 48 49 { 49 50 } … … 55 56 , m_cachedScript(cs) 56 57 , m_url(ParsedURLString, cs->url()) 57 , m_start Line(1)58 , m_startPosition(TextPosition1::minimumPosition()) 58 59 { 59 60 } … … 64 65 CachedScript* cachedScript() const { return m_cachedScript.get(); } 65 66 const KURL& url() const { return m_url; } 66 int startLine() const { return m_startLine; } 67 int startLine() const { return m_startPosition.m_line.oneBasedInt(); } 68 const TextPosition1& startPosition() const { return m_startPosition; } 67 69 68 70 private: … … 70 72 CachedResourceHandle<CachedScript> m_cachedScript; 71 73 KURL m_url; 72 int m_startLine;74 TextPosition1 m_startPosition; 73 75 }; 74 76 -
trunk/WebCore/bindings/v8/V8LazyEventListener.cpp
r53155 r70165 42 42 namespace WebCore { 43 43 44 V8LazyEventListener::V8LazyEventListener(const String& functionName, bool isSVGEvent, const String& code, const String sourceURL, int lineNumber, int columnNumber, const WorldContextHandle& worldContext)44 V8LazyEventListener::V8LazyEventListener(const String& functionName, bool isSVGEvent, const String& code, const String sourceURL, const TextPosition0& position, const WorldContextHandle& worldContext) 45 45 : V8AbstractEventListener(true, worldContext) 46 46 , m_functionName(functionName) … … 48 48 , m_code(code) 49 49 , m_sourceURL(sourceURL) 50 , m_lineNumber(lineNumber) 51 , m_columnNumber(columnNumber) 50 , m_position(position) 52 51 { 53 52 } … … 115 114 code.append( "\n}).call(this, evt);}}}})"); 116 115 v8::Handle<v8::String> codeExternalString = v8ExternalString(code); 117 v8::Handle<v8::Script> script = V8Proxy::compileScript(codeExternalString, m_sourceURL, m_ lineNumber);116 v8::Handle<v8::Script> script = V8Proxy::compileScript(codeExternalString, m_sourceURL, m_position); 118 117 if (!script.IsEmpty()) { 119 118 v8::Local<v8::Value> value = proxy->runScript(script, false); -
trunk/WebCore/bindings/v8/V8LazyEventListener.h
r55326 r70165 35 35 #include "V8AbstractEventListener.h" 36 36 #include <v8.h> 37 #include <wtf/text/TextPosition.h> 37 38 #include <wtf/PassRefPtr.h> 38 39 … … 46 47 class V8LazyEventListener : public V8AbstractEventListener { 47 48 public: 48 static PassRefPtr<V8LazyEventListener> create(const String& functionName, bool isSVGEvent, const String& code, const String& sourceURL, int lineNumber, int columnNumber, const WorldContextHandle& worldContext)49 static PassRefPtr<V8LazyEventListener> create(const String& functionName, bool isSVGEvent, const String& code, const String& sourceURL, const TextPosition0& position, const WorldContextHandle& worldContext) 49 50 { 50 return adoptRef(new V8LazyEventListener(functionName, isSVGEvent, code, sourceURL, lineNumber, columnNumber, worldContext));51 return adoptRef(new V8LazyEventListener(functionName, isSVGEvent, code, sourceURL, position, worldContext)); 51 52 } 52 53 … … 57 58 58 59 private: 59 V8LazyEventListener(const String& functionName, bool isSVGEvent, const String& code, const String sourceURL, int lineNumber, int columnNumber, const WorldContextHandle& worldContext);60 V8LazyEventListener(const String& functionName, bool isSVGEvent, const String& code, const String sourceURL, const TextPosition0& position, const WorldContextHandle& worldContext); 60 61 61 62 virtual v8::Local<v8::Value> callListenerFunction(ScriptExecutionContext*, v8::Handle<v8::Value> jsEvent, Event*); … … 71 72 String m_code; 72 73 String m_sourceURL; 73 int m_lineNumber; 74 int m_columnNumber; 74 TextPosition0 m_position; 75 75 }; 76 76 -
trunk/WebCore/bindings/v8/V8Proxy.cpp
r69798 r70165 236 236 } 237 237 238 v8::Handle<v8::Script> V8Proxy::compileScript(v8::Handle<v8::String> code, const String& fileName, int baseLine, v8::ScriptData* scriptData)238 v8::Handle<v8::Script> V8Proxy::compileScript(v8::Handle<v8::String> code, const String& fileName, const TextPosition0& scriptStartPosition, v8::ScriptData* scriptData) 239 239 { 240 240 const uint16_t* fileNameString = fromWebCoreString(fileName); 241 241 v8::Handle<v8::String> name = v8::String::New(fileNameString, fileName.length()); 242 v8::Handle<v8::Integer> line = v8::Integer::New(baseLine); 243 v8::ScriptOrigin origin(name, line); 242 v8::Handle<v8::Integer> line = v8::Integer::New(scriptStartPosition.m_line.zeroBasedInt()); 243 v8::Handle<v8::Integer> column = v8::Integer::New(scriptStartPosition.m_column.zeroBasedInt()); 244 v8::ScriptOrigin origin(name, line, column); 244 245 v8::Handle<v8::Script> script = v8::Script::Compile(code, &origin, scriptData); 245 246 return script; … … 394 395 // NOTE: For compatibility with WebCore, ScriptSourceCode's line starts at 395 396 // 1, whereas v8 starts at 0. 396 v8::Handle<v8::Script> script = compileScript(code, source.url(), source.startLine() - 1, scriptData.get());397 v8::Handle<v8::Script> script = compileScript(code, source.url(), WTF::toZeroBasedTextPosition(source.startPosition()), scriptData.get()); 397 398 #if PLATFORM(CHROMIUM) 398 399 PlatformBridge::traceEventEnd("v8.compile", node, ""); … … 426 427 // script passed to us as the argument instead of using an empty string 427 428 // and 0 baseLine. 428 script = compileScript(code, "", 0);429 script = compileScript(code, "", TextPosition0::minimumPosition()); 429 430 } 430 431 -
trunk/WebCore/bindings/v8/V8Proxy.h
r68666 r70165 280 280 static v8::Handle<v8::Value> checkNewLegal(const v8::Arguments&); 281 281 282 static v8::Handle<v8::Script> compileScript(v8::Handle<v8::String> code, const String& fileName, int baseLine, v8::ScriptData* = 0);282 static v8::Handle<v8::Script> compileScript(v8::Handle<v8::String> code, const String& fileName, const TextPosition0& scriptStartPosition, v8::ScriptData* = 0); 283 283 284 284 // If the exception code is different from zero, a DOM exception is -
trunk/WebCore/bindings/v8/WorkerContextExecutionProxy.cpp
r56580 r70165 185 185 } 186 186 187 ScriptValue WorkerContextExecutionProxy::evaluate(const String& script, const String& fileName, int baseLine, WorkerContextExecutionState* state)187 ScriptValue WorkerContextExecutionProxy::evaluate(const String& script, const String& fileName, const TextPosition0& scriptStartPosition, WorkerContextExecutionState* state) 188 188 { 189 189 v8::HandleScope hs; … … 197 197 198 198 v8::Local<v8::String> scriptString = v8ExternalString(script); 199 v8::Handle<v8::Script> compiledScript = V8Proxy::compileScript(scriptString, fileName, baseLine);199 v8::Handle<v8::Script> compiledScript = V8Proxy::compileScript(scriptString, fileName, scriptStartPosition); 200 200 v8::Local<v8::Value> result = runScript(compiledScript); 201 201 … … 228 228 if (m_recursion >= kMaxRecursionDepth) { 229 229 v8::Local<v8::String> code = v8ExternalString("throw RangeError('Recursion too deep')"); 230 script = V8Proxy::compileScript(code, "", 0);230 script = V8Proxy::compileScript(code, "", TextPosition0::minimumPosition()); 231 231 } 232 232 -
trunk/WebCore/bindings/v8/WorkerContextExecutionProxy.h
r57767 r70165 37 37 #include "ScriptValue.h" 38 38 #include <v8.h> 39 #include <wtf/text/TextPosition.h> 39 40 #include <wtf/OwnPtr.h> 40 41 #include <wtf/Vector.h> … … 67 68 68 69 // Evaluate a script file in the current execution environment. 69 ScriptValue evaluate(const String& script, const String& fileName, int baseLine, WorkerContextExecutionState*);70 ScriptValue evaluate(const String& script, const String& fileName, const TextPosition0& scriptStartPosition, WorkerContextExecutionState*); 70 71 71 72 // Returns a local handle of the context. -
trunk/WebCore/bindings/v8/WorkerScriptController.cpp
r57349 r70165 76 76 77 77 WorkerContextExecutionState state; 78 ScriptValue result = m_proxy->evaluate(sourceCode.source(), sourceCode.url().string(), sourceCode.startLine() - 1, &state);78 ScriptValue result = m_proxy->evaluate(sourceCode.source(), sourceCode.url().string(), WTF::toZeroBasedTextPosition(sourceCode.startPosition()), &state); 79 79 if (state.hadException) { 80 80 if (exception) -
trunk/WebCore/dom/PendingScript.cpp
r64857 r70165 41 41 { 42 42 setCachedScript(0); 43 m_starting LineNumber = 0;43 m_startingPosition = TextPosition1::belowRangePosition(); 44 44 m_watchingForLoad = false; 45 45 return m_element.release(); -
trunk/WebCore/dom/PendingScript.h
r65217 r70165 29 29 #include "CachedResourceClient.h" 30 30 #include "CachedResourceHandle.h" 31 #include <wtf/text/TextPosition.h> 31 32 #include <wtf/PassRefPtr.h> 32 33 … … 44 45 public: 45 46 PendingScript() 46 : m_starting LineNumber(0)47 : m_startingPosition(TextPosition1::belowRangePosition()) 47 48 , m_watchingForLoad(false) 48 49 { … … 51 52 PendingScript(const PendingScript& other) 52 53 : CachedResourceClient(other) 53 , m_starting LineNumber(other.m_startingLineNumber)54 , m_startingPosition(other.m_startingPosition) 54 55 , m_watchingForLoad(other.m_watchingForLoad) 55 56 , m_element(other.m_element) … … 65 66 return *this; 66 67 67 m_starting LineNumber = other.m_startingLineNumber;68 m_startingPosition = other.m_startingPosition; 68 69 m_watchingForLoad = other.m_watchingForLoad; 69 70 m_element = other.m_element; … … 75 76 // FIXME: No setter means this is never set to anything other than 0. 76 77 // This is either unnecessary or incorrect. 77 int startingLineNumber() const { return m_startingLineNumber; }78 TextPosition1 startingPosition() const { return m_startingPosition; } 78 79 79 80 bool watchingForLoad() const { return m_watchingForLoad; } … … 90 91 91 92 private: 92 int m_startingLineNumber; // Only used for inline script tags.93 TextPosition1 m_startingPosition; // Only used for inline script tags. 93 94 bool m_watchingForLoad; 94 95 RefPtr<Element> m_element; -
trunk/WebCore/dom/ScriptableDocumentParser.h
r66967 r70165 28 28 29 29 #include "DecodedDataDocumentParser.h" 30 #include <wtf/text/TextPosition.h> 30 31 31 32 namespace WebCore { 32 33 33 class SegmentedString;34 34 class XSSAuditor; 35 35 … … 48 48 // These are used to expose the current line/column to the scripting system. 49 49 virtual int lineNumber() const = 0; 50 virtual int columnNumber() const = 0;50 virtual TextPosition0 textPosition() const = 0; 51 51 52 52 XSSAuditor* xssAuditor() const { return m_xssAuditor; } -
trunk/WebCore/dom/XMLDocumentParser.h
r67807 r70165 103 103 virtual bool wellFormed() const { return !m_sawError; } 104 104 virtual int lineNumber() const; 105 virtual int columnNumber() const;105 TextPosition0 textPosition() const; 106 106 107 107 static bool supportsXMLVersion(const String&); … … 129 129 130 130 bool appendFragmentSource(const String&); 131 132 int columnNumber() const; 133 // The method is used in XMLDocumentParserLibxml2.cpp only, 134 // It is neither used nor implemented in XMLDocumentParserQt.cpp. 135 TextPosition1 textPositionOneBased() const; 131 136 132 137 #if USE(QXMLSTREAM) … … 209 214 CachedResourceHandle<CachedScript> m_pendingScript; 210 215 RefPtr<Element> m_scriptElement; 211 int m_scriptStartLine;216 TextPosition1 m_scriptStartPosition; 212 217 213 218 bool m_parsingFragment; -
trunk/WebCore/dom/XMLDocumentParserLibxml2.cpp
r69868 r70165 561 561 , m_lastErrorColumn(0) 562 562 , m_pendingScript(0) 563 , m_scriptStart Line(0)563 , m_scriptStartPosition(TextPosition1::belowRangePosition()) 564 564 , m_parsingFragment(false) 565 565 , m_scriptingPermission(FragmentScriptingAllowed) … … 588 588 , m_lastErrorColumn(0) 589 589 , m_pendingScript(0) 590 , m_scriptStart Line(0)590 , m_scriptStartPosition(TextPosition1::belowRangePosition()) 591 591 , m_parsingFragment(true) 592 592 , m_scriptingPermission(scriptingPermission) … … 820 820 ScriptElement* scriptElement = toScriptElement(newElement.get()); 821 821 if (scriptElement) 822 m_scriptStart Line = lineNumber();822 m_scriptStartPosition = textPositionOneBased(); 823 823 824 824 m_currentNode->deprecatedParserAddChild(newElement.get()); … … 911 911 m_scriptElement = 0; 912 912 } else 913 m_view->frame()->script()->executeScript(ScriptSourceCode(scriptElement->scriptContent(), document()->url(), m_scriptStart Line));913 m_view->frame()->script()->executeScript(ScriptSourceCode(scriptElement->scriptContent(), document()->url(), m_scriptStartPosition)); 914 914 915 915 // JavaScript may have detached the parser … … 1377 1377 int XMLDocumentParser::lineNumber() const 1378 1378 { 1379 // FIXME: The implementation probably returns 1-based int, but method should return 0-based. 1379 1380 return context() ? context()->input->line : 1; 1380 1381 } … … 1382 1383 int XMLDocumentParser::columnNumber() const 1383 1384 { 1385 // FIXME: The implementation probably returns 1-based int, but method should return 0-based. 1384 1386 return context() ? context()->input->col : 1; 1387 } 1388 1389 TextPosition0 XMLDocumentParser::textPosition() const 1390 { 1391 xmlParserCtxtPtr context = this->context(); 1392 if (!context) 1393 return TextPosition0::minimumPosition(); 1394 // FIXME: The context probably contains 1-based numbers, but we treat them as 0-based, 1395 // to be consistent with fixme's in lineNumber() and columnNumber 1396 // methods. 1397 return TextPosition0(WTF::ZeroBasedNumber::fromZeroBasedInt(context->input->line), 1398 WTF::ZeroBasedNumber::fromZeroBasedInt(context->input->col)); 1399 } 1400 1401 // This method has a correct implementation, in contrast to textPosition() method. 1402 // It should replace textPosition(). 1403 TextPosition1 XMLDocumentParser::textPositionOneBased() const 1404 { 1405 xmlParserCtxtPtr context = this->context(); 1406 if (!context) 1407 return TextPosition1::minimumPosition(); 1408 return TextPosition1(WTF::OneBasedNumber::fromOneBasedInt(context->input->line), 1409 WTF::OneBasedNumber::fromOneBasedInt(context->input->col)); 1385 1410 } 1386 1411 -
trunk/WebCore/dom/XMLDocumentParserQt.cpp
r69026 r70165 106 106 , m_lastErrorColumn(0) 107 107 , m_pendingScript(0) 108 , m_scriptStart Line(0)108 , m_scriptStartPosition(TextPosition1::belowRangePosition()) 109 109 , m_parsingFragment(false) 110 110 , m_scriptingPermission(FragmentScriptingAllowed) … … 133 133 , m_lastErrorColumn(0) 134 134 , m_pendingScript(0) 135 , m_scriptStart Line(0)135 , m_scriptStartPosition(TextPosition1::belowRangePosition()) 136 136 , m_parsingFragment(true) 137 137 , m_scriptingPermission(permission) … … 235 235 } 236 236 237 TextPosition0 XMLDocumentParser::textPosition() const 238 { 239 return TextPosition0(WTF::ZeroBasedNumber::fromZeroBasedInt(lineNumber()), WTF::ZeroBasedNumber::fromZeroBasedInt(columnNumber())); 240 } 241 237 242 void XMLDocumentParser::stopParsing() 238 243 { … … 519 524 ScriptElement* scriptElement = toScriptElement(newElement.get()); 520 525 if (scriptElement) 521 m_scriptStart Line = lineNumber();526 m_scriptStartPosition = WTF::toOneBasedTextPosition(textPosition()); 522 527 523 528 m_currentNode->deprecatedParserAddChild(newElement.get()); … … 596 601 m_scriptElement = 0; 597 602 } else 598 m_view->frame()->script()->executeScript(ScriptSourceCode(scriptElement->scriptContent(), document()->url(), m_scriptStart Line));603 m_view->frame()->script()->executeScript(ScriptSourceCode(scriptElement->scriptContent(), document()->url(), m_scriptStartPosition)); 599 604 } 600 605 m_requestingScript = false; … … 717 722 } 718 723 } 719 -
trunk/WebCore/html/parser/HTMLDocumentParser.cpp
r69406 r70165 192 192 ASSERT(m_treeBuilder->isPaused()); 193 193 194 int scriptStartLine = 0;195 RefPtr<Element> scriptElement = m_treeBuilder->takeScriptToProcess(scriptStart Line);194 TextPosition1 scriptStartPosition = TextPosition1::belowRangePosition(); 195 RefPtr<Element> scriptElement = m_treeBuilder->takeScriptToProcess(scriptStartPosition); 196 196 // We will not have a scriptRunner when parsing a DocumentFragment. 197 197 if (!m_scriptRunner) 198 198 return true; 199 return m_scriptRunner->execute(scriptElement.release(), scriptStart Line);199 return m_scriptRunner->execute(scriptElement.release(), scriptStartPosition); 200 200 } 201 201 … … 397 397 } 398 398 399 int HTMLDocumentParser::columnNumber() const 400 { 401 return m_tokenizer->columnNumber(); 399 TextPosition0 HTMLDocumentParser::textPosition() const 400 { 401 int lineZeroBased = m_tokenizer->lineNumber(); 402 int columnOneBased = m_tokenizer->columnNumber(); 403 404 return TextPosition0(WTF::ZeroBasedNumber::fromZeroBasedInt(lineZeroBased), 405 WTF::OneBasedNumber::fromOneBasedInt(columnOneBased).convertToZeroBased()); 402 406 } 403 407 -
trunk/WebCore/html/parser/HTMLDocumentParser.h
r69283 r70165 93 93 virtual void executeScriptsWaitingForStylesheets(); 94 94 virtual int lineNumber() const; 95 virtual int columnNumber() const;95 virtual TextPosition0 textPosition() const; 96 96 97 97 // HTMLScriptRunnerHost -
trunk/WebCore/html/parser/HTMLScriptRunner.cpp
r67245 r70165 99 99 } 100 100 errorOccurred = false; 101 return ScriptSourceCode(script.element()->textContent(), documentURLForScriptExecution(m_document), script.starting LineNumber());101 return ScriptSourceCode(script.element()->textContent(), documentURLForScriptExecution(m_document), script.startingPosition()); 102 102 } 103 103 … … 171 171 // This function should match 10.2.5.11 "An end tag whose tag name is 'script'" 172 172 // Script handling lives outside the tree builder to keep the each class simple. 173 bool HTMLScriptRunner::execute(PassRefPtr<Element> scriptElement, int startLine)173 bool HTMLScriptRunner::execute(PassRefPtr<Element> scriptElement, const TextPosition1& scriptStartPosition) 174 174 { 175 175 ASSERT(scriptElement); … … 177 177 178 178 // Try to execute the script given to us. 179 runScript(scriptElement.get(), s tartLine);179 runScript(scriptElement.get(), scriptStartPosition); 180 180 181 181 if (haveParsingBlockingScript()) { … … 289 289 // This method is meant to match the HTML5 definition of "running a script" 290 290 // http://www.whatwg.org/specs/web-apps/current-work/multipage/scripting-1.html#running-a-script 291 void HTMLScriptRunner::runScript(Element* script, int startingLineNumber)291 void HTMLScriptRunner::runScript(Element* script, const TextPosition1& scriptStartPosition) 292 292 { 293 293 ASSERT(m_document); … … 316 316 // ASSERT(document()->haveStylesheetsLoaded()); 317 317 ASSERT(isExecutingScript()); 318 ScriptSourceCode sourceCode(script->textContent(), documentURLForScriptExecution(m_document), s tartingLineNumber);318 ScriptSourceCode sourceCode(script->textContent(), documentURLForScriptExecution(m_document), scriptStartPosition); 319 319 executeScript(sourceCode); 320 320 } -
trunk/WebCore/html/parser/HTMLScriptRunner.h
r67245 r70165 29 29 #include "PendingScript.h" 30 30 #include <wtf/Deque.h> 31 #include <wtf/text/TextPosition.h> 31 32 #include <wtf/Noncopyable.h> 32 33 #include <wtf/PassRefPtr.h> … … 53 54 54 55 // Processes the passed in script and any pending scripts if possible. 55 bool execute(PassRefPtr<Element> scriptToProcess, int scriptStartLine);56 bool execute(PassRefPtr<Element> scriptToProcess, const TextPosition1& scriptStartPosition); 56 57 57 58 bool executeScriptsWaitingForLoad(CachedResource*); … … 77 78 bool requestPendingScript(PendingScript&, Element*) const; 78 79 79 void runScript(Element*, int startingLineNumber);80 void runScript(Element*, const TextPosition1& scriptStartPosition); 80 81 81 82 // Helpers for dealing with HTMLScriptRunnerHost -
trunk/WebCore/html/parser/HTMLTreeBuilder.cpp
r70094 r70165 56 56 57 57 static const int uninitializedLineNumberValue = -1; 58 59 static TextPosition1 uninitializedPositionValue1() 60 { 61 return TextPosition1(WTF::OneBasedNumber::fromOneBasedInt(-1), WTF::OneBasedNumber::base()); 62 } 58 63 59 64 namespace { … … 334 339 , m_secondaryInsertionMode(InitialMode) 335 340 , m_tokenizer(tokenizer) 336 , m_scriptToProcessStart Line(uninitializedLineNumberValue)337 , m_lastScriptElementStart Line(uninitializedLineNumberValue)341 , m_scriptToProcessStartPosition(uninitializedPositionValue1()) 342 , m_lastScriptElementStartPosition(TextPosition0::belowRangePosition()) 338 343 , m_usePreHTML5ParserQuirks(usePreHTML5ParserQuirks) 339 344 { … … 353 358 , m_secondaryInsertionMode(InitialMode) 354 359 , m_tokenizer(tokenizer) 355 , m_scriptToProcessStart Line(uninitializedLineNumberValue)356 , m_lastScriptElementStart Line(uninitializedLineNumberValue)360 , m_scriptToProcessStartPosition(uninitializedPositionValue1()) 361 , m_lastScriptElementStartPosition(TextPosition0::belowRangePosition()) 357 362 , m_usePreHTML5ParserQuirks(usePreHTML5ParserQuirks) 358 363 { … … 416 421 } 417 422 418 PassRefPtr<Element> HTMLTreeBuilder::takeScriptToProcess( int& scriptStartLine)423 PassRefPtr<Element> HTMLTreeBuilder::takeScriptToProcess(TextPosition1& scriptStartPosition) 419 424 { 420 425 // Unpause ourselves, callers may pause us again when processing the script. … … 423 428 // before running scripts. 424 429 m_isPaused = false; 425 scriptStart Line = m_scriptToProcessStartLine;426 m_scriptToProcessStart Line = uninitializedLineNumberValue;430 scriptStartPosition = m_scriptToProcessStartPosition; 431 m_scriptToProcessStartPosition = uninitializedPositionValue1(); 427 432 return m_scriptToProcess.release(); 428 433 } … … 2202 2207 ASSERT(m_tree.currentElement()->hasTagName(scriptTag)); 2203 2208 m_scriptToProcess = m_tree.currentElement(); 2204 m_scriptToProcessStart Line = m_lastScriptElementStartLine + 1;2209 m_scriptToProcessStartPosition = WTF::toOneBasedTextPosition(m_lastScriptElementStartPosition); 2205 2210 m_tree.openElements()->pop(); 2206 2211 if (isParsingFragment() && m_fragmentContext.scriptingPermission() == FragmentScriptingNotAllowed) … … 2751 2756 m_tokenizer->setState(HTMLTokenizer::ScriptDataState); 2752 2757 m_originalInsertionMode = m_insertionMode; 2753 m_lastScriptElementStartLine = m_tokenizer->lineNumber(); 2758 2759 TextPosition0 position = TextPosition0(WTF::ZeroBasedNumber::fromZeroBasedInt(m_tokenizer->lineNumber()), WTF::ZeroBasedNumber::base()); 2760 m_lastScriptElementStartPosition = position; 2761 2754 2762 setInsertionMode(TextMode); 2755 2763 } -
trunk/WebCore/html/parser/HTMLTreeBuilder.h
r68115 r70165 33 33 #include "HTMLFormattingElementList.h" 34 34 #include "HTMLTokenizer.h" 35 #include <wtf/text/TextPosition.h> 35 36 #include <wtf/Noncopyable.h> 36 37 #include <wtf/OwnPtr.h> … … 72 73 73 74 // Must be called when parser is paused before calling the parser again. 74 PassRefPtr<Element> takeScriptToProcess( int& scriptStartLine);75 PassRefPtr<Element> takeScriptToProcess(TextPosition1& scriptStartPosition); 75 76 76 77 // Done, close any open tags, etc. … … 247 248 248 249 RefPtr<Element> m_scriptToProcess; // <script> tag which needs processing before resuming the parser. 249 int m_scriptToProcessStartLine; // Starting line number of the script tag needing processing.250 TextPosition1 m_scriptToProcessStartPosition; // Starting line number of the script tag needing processing. 250 251 251 252 // FIXME: We probably want to remove this member. Originally, it was 252 253 // created to service the legacy tree builder, but it seems to be used for 253 254 // some other things now. 254 int m_lastScriptElementStartLine; 255 255 TextPosition0 m_lastScriptElementStartPosition; 256 256 bool m_usePreHTML5ParserQuirks; 257 257 }; -
trunk/WebKit/chromium/ChangeLog
r70153 r70165 1 2010-10-20 Peter Rybin <peter.rybin@gmail.com> 2 3 Reviewed by Adam Barth. 4 5 HTML parser should provide script column position within HTML document to JavaScript engine 6 https://bugs.webkit.org/show_bug.cgi?id=45271 7 8 Replaces script line number with TextPosition structure. 9 10 * src/WebFrameImpl.cpp: 11 (WebKit::WebFrameImpl::executeScript): 12 (WebKit::WebFrameImpl::executeScriptInIsolatedWorld): 13 (WebKit::WebFrameImpl::executeScriptAndReturnValue): 14 1 15 2010-10-20 John Abd-El-Malek <jam@chromium.org> 2 16 -
trunk/WebKit/chromium/src/WebFrameImpl.cpp
r70143 r70165 754 754 void WebFrameImpl::executeScript(const WebScriptSource& source) 755 755 { 756 TextPosition1 position(WTF::OneBasedNumber::fromOneBasedInt(source.startLine), WTF::OneBasedNumber::base()); 756 757 m_frame->script()->executeScript( 757 ScriptSourceCode(source.code, source.url, source.startLine));758 ScriptSourceCode(source.code, source.url, position)); 758 759 } 759 760 … … 765 766 766 767 for (unsigned i = 0; i < numSources; ++i) { 768 TextPosition1 position(WTF::OneBasedNumber::fromOneBasedInt(sourcesIn[i].startLine), WTF::OneBasedNumber::base()); 767 769 sources.append(ScriptSourceCode( 768 sourcesIn[i].code, sourcesIn[i].url, sourcesIn[i].startLine));770 sourcesIn[i].code, sourcesIn[i].url, position)); 769 771 } 770 772 … … 818 820 const WebScriptSource& source) 819 821 { 822 TextPosition1 position(WTF::OneBasedNumber::fromOneBasedInt(source.startLine), WTF::OneBasedNumber::base()); 820 823 return m_frame->script()->executeScript( 821 ScriptSourceCode(source.code, source.url, source.startLine)).v8Value();824 ScriptSourceCode(source.code, source.url, position)).v8Value(); 822 825 } 823 826
Note: See TracChangeset
for help on using the changeset viewer.