Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(327)

Side by Side Diff: Source/bindings/core/v8/V8LazyEventListener.cpp

Issue 761143003: DevTools: remove ScriptPreprocessor (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Rebase Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2006, 2007, 2008, 2009 Google Inc. All rights reserved. 2 * Copyright (C) 2006, 2007, 2008, 2009 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 28 matching lines...) Expand all
39 #include "bindings/core/v8/V8HTMLFormElement.h" 39 #include "bindings/core/v8/V8HTMLFormElement.h"
40 #include "bindings/core/v8/V8HiddenValue.h" 40 #include "bindings/core/v8/V8HiddenValue.h"
41 #include "bindings/core/v8/V8Node.h" 41 #include "bindings/core/v8/V8Node.h"
42 #include "bindings/core/v8/V8ScriptRunner.h" 42 #include "bindings/core/v8/V8ScriptRunner.h"
43 #include "core/dom/Document.h" 43 #include "core/dom/Document.h"
44 #include "core/dom/Node.h" 44 #include "core/dom/Node.h"
45 #include "core/frame/LocalFrame.h" 45 #include "core/frame/LocalFrame.h"
46 #include "core/frame/csp/ContentSecurityPolicy.h" 46 #include "core/frame/csp/ContentSecurityPolicy.h"
47 #include "core/html/HTMLElement.h" 47 #include "core/html/HTMLElement.h"
48 #include "core/html/HTMLFormElement.h" 48 #include "core/html/HTMLFormElement.h"
49 #include "core/inspector/InspectorInstrumentation.h"
50 49
51 #include "wtf/StdLibExtras.h" 50 #include "wtf/StdLibExtras.h"
52 51
53 namespace blink { 52 namespace blink {
54 53
55 V8LazyEventListener::V8LazyEventListener(const AtomicString& functionName, const AtomicString& eventParameterName, const String& code, const String sourceURL, c onst TextPosition& position, Node* node, v8::Isolate* isolate) 54 V8LazyEventListener::V8LazyEventListener(const AtomicString& functionName, const AtomicString& eventParameterName, const String& code, const String sourceURL, c onst TextPosition& position, Node* node, v8::Isolate* isolate)
56 : V8AbstractEventListener(true, DOMWrapperWorld::mainWorld(), isolate) 55 : V8AbstractEventListener(true, DOMWrapperWorld::mainWorld(), isolate)
57 , m_functionName(functionName) 56 , m_functionName(functionName)
58 , m_eventParameterName(eventParameterName) 57 , m_eventParameterName(eventParameterName)
59 , m_code(code) 58 , m_code(code)
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
125 124
126 if (!toDocument(executionContext)->allowInlineEventHandlers(m_node, this, m_ sourceURL, m_position.m_line)) { 125 if (!toDocument(executionContext)->allowInlineEventHandlers(m_node, this, m_ sourceURL, m_position.m_line)) {
127 clearListenerObject(); 126 clearListenerObject();
128 return; 127 return;
129 } 128 }
130 129
131 if (hasExistingListenerObject()) 130 if (hasExistingListenerObject())
132 return; 131 return;
133 132
134 ScriptState::Scope scope(scriptState); 133 ScriptState::Scope scope(scriptState);
135 String listenerSource = InspectorInstrumentation::preprocessEventListener(t oDocument(executionContext)->frame(), m_code, m_sourceURL, m_functionName);
136 134
137 // FIXME: Remove the following 'with' hack. 135 // FIXME: Remove the following 'with' hack.
138 // 136 //
139 // Nodes other than the document object, when executing inline event 137 // Nodes other than the document object, when executing inline event
140 // handlers push document, form owner, and the target node on the scope chai n. 138 // handlers push document, form owner, and the target node on the scope chai n.
141 // We do this by using 'with' statement. 139 // We do this by using 'with' statement.
142 // See chrome/fast/forms/form-action.html 140 // See chrome/fast/forms/form-action.html
143 // chrome/fast/forms/selected-index-value.html 141 // chrome/fast/forms/selected-index-value.html
144 // base/fast/overflow/onscroll-layer-self-destruct.html 142 // base/fast/overflow/onscroll-layer-self-destruct.html
145 // 143 //
146 // Don't use new lines so that lines in the modified handler 144 // Don't use new lines so that lines in the modified handler
147 // have the same numbers as in the original code. 145 // have the same numbers as in the original code.
148 // FIXME: V8 does not allow us to programmatically create object environment s so 146 // FIXME: V8 does not allow us to programmatically create object environment s so
149 // we have to do this hack! What if m_code escapes to run arbitrary s cript? 147 // we have to do this hack! What if m_code escapes to run arbitrary s cript?
150 // 148 //
151 // Call with 4 arguments instead of 3, pass additional null as the last para meter. 149 // Call with 4 arguments instead of 3, pass additional null as the last para meter.
152 // By calling the function with 4 arguments, we create a setter on arguments object 150 // By calling the function with 4 arguments, we create a setter on arguments object
153 // which would shadow property "3" on the prototype. 151 // which would shadow property "3" on the prototype.
154 String code = "(function() {" 152 String code = "(function() {"
155 "with (this[2]) {" 153 "with (this[2]) {"
156 "with (this[1]) {" 154 "with (this[1]) {"
157 "with (this[0]) {" 155 "with (this[0]) {"
158 "return function(" + m_eventParameterName + ") {" + 156 "return function(" + m_eventParameterName + ") {" +
159 listenerSource + "\n" // Insert '\n' otherwise //-style comments could break the handler. 157 m_code + "\n" // Insert '\n' otherwise //-style comments could b reak the handler.
160 "};" 158 "};"
161 "}}}})"; 159 "}}}})";
162 160
163 v8::Handle<v8::String> codeExternalString = v8String(isolate(), code); 161 v8::Handle<v8::String> codeExternalString = v8String(isolate(), code);
164 162
165 v8::Local<v8::Value> result = V8ScriptRunner::compileAndRunInternalScript(co deExternalString, isolate(), m_sourceURL, m_position); 163 v8::Local<v8::Value> result = V8ScriptRunner::compileAndRunInternalScript(co deExternalString, isolate(), m_sourceURL, m_position);
166 if (result.IsEmpty()) 164 if (result.IsEmpty())
167 return; 165 return;
168 166
169 // Call the outer function to get the inner function. 167 // Call the outer function to get the inner function.
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
220 // // Since we only parse once, there's no need to keep data used for parsin g around anymore. 218 // // Since we only parse once, there's no need to keep data used for parsin g around anymore.
221 // m_functionName = String(); 219 // m_functionName = String();
222 // m_code = String(); 220 // m_code = String();
223 // m_eventParameterName = String(); 221 // m_eventParameterName = String();
224 // m_sourceURL = String(); 222 // m_sourceURL = String();
225 223
226 setListenerObject(wrappedFunction); 224 setListenerObject(wrappedFunction);
227 } 225 }
228 226
229 } // namespace blink 227 } // namespace blink
OLDNEW
« no previous file with comments | « Source/bindings/core/v8/ScriptPreprocessor.cpp ('k') | Source/bindings/core/v8/V8ScriptRunner.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698