OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "config.h" | 5 #include "config.h" |
6 | 6 |
7 #include "FrameTestHelpers.h" | 7 #include "FrameTestHelpers.h" |
8 #include "bindings/v8/ScriptController.h" | 8 #include "bindings/v8/ScriptController.h" |
9 #include "bindings/v8/V8DOMActivityLogger.h" | 9 #include "bindings/v8/V8DOMActivityLogger.h" |
10 #include "web/WebLocalFrameImpl.h" | 10 #include "web/WebLocalFrameImpl.h" |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
71 { | 71 { |
72 m_activityLogger = new TestActivityLogger(); | 72 m_activityLogger = new TestActivityLogger(); |
73 V8DOMActivityLogger::setActivityLogger(isolatedWorldId, String(), adoptP
tr(m_activityLogger)); | 73 V8DOMActivityLogger::setActivityLogger(isolatedWorldId, String(), adoptP
tr(m_activityLogger)); |
74 m_webViewHelper.initialize(true); | 74 m_webViewHelper.initialize(true); |
75 m_scriptController = &m_webViewHelper.webViewImpl()->mainFrameImpl()->fr
ame()->script(); | 75 m_scriptController = &m_webViewHelper.webViewImpl()->mainFrameImpl()->fr
ame()->script(); |
76 } | 76 } |
77 | 77 |
78 void executeScriptInMainWorld(const String& script) const | 78 void executeScriptInMainWorld(const String& script) const |
79 { | 79 { |
80 m_scriptController->executeScriptInMainWorld(script); | 80 m_scriptController->executeScriptInMainWorld(script); |
81 runPendingTasks(); | |
82 } | 81 } |
83 | 82 |
84 void executeScriptInIsolatedWorld(const String& script) const | 83 void executeScriptInIsolatedWorld(const String& script) const |
85 { | 84 { |
86 Vector<ScriptSourceCode> sources; | 85 Vector<ScriptSourceCode> sources; |
87 sources.append(ScriptSourceCode(script)); | 86 sources.append(ScriptSourceCode(script)); |
88 Vector<v8::Local<v8::Value> > results; | 87 Vector<v8::Local<v8::Value> > results; |
89 m_scriptController->executeScriptInIsolatedWorld(isolatedWorldId, source
s, extensionGroup, 0); | 88 m_scriptController->executeScriptInIsolatedWorld(isolatedWorldId, source
s, extensionGroup, 0); |
90 runPendingTasks(); | |
91 } | 89 } |
92 | 90 |
93 bool verifyActivities(const String& activities) | 91 bool verifyActivities(const String& activities) |
94 { | 92 { |
95 Vector<String> activityVector; | 93 Vector<String> activityVector; |
96 activities.split("\n", activityVector); | 94 activities.split(";", activityVector); |
97 return m_activityLogger->verifyActivities(activityVector); | 95 return m_activityLogger->verifyActivities(activityVector); |
98 } | 96 } |
99 | 97 |
100 private: | 98 private: |
101 static const int isolatedWorldId = 1; | 99 static const int isolatedWorldId = 1; |
102 static const int extensionGroup = 0; | 100 static const int extensionGroup = 0; |
103 | 101 |
104 WebViewHelper m_webViewHelper; | 102 WebViewHelper m_webViewHelper; |
105 ScriptController* m_scriptController; | 103 ScriptController* m_scriptController; |
106 // TestActivityLogger is owned by a static table within V8DOMActivityLogger | 104 // TestActivityLogger is owned by a static table within V8DOMActivityLogger |
107 // and should be alive as long as not overwritten. | 105 // and should be alive as long as not overwritten. |
108 TestActivityLogger* m_activityLogger; | 106 TestActivityLogger* m_activityLogger; |
109 }; | 107 }; |
110 | 108 |
111 TEST_F(ActivityLoggerTest, EventHandler) | 109 TEST_F(ActivityLoggerTest, EventHandler) |
112 { | 110 { |
113 v8::HandleScope scope(v8::Isolate::GetCurrent()); | 111 v8::HandleScope scope(v8::Isolate::GetCurrent()); |
114 const char* code = | 112 const char* code = |
115 "document.body.innerHTML = '<a onclick=\\\'do()\\\'>test</a>';" | 113 "document.body.innerHTML = '<a onclick=\\\'do()\\\'>test</a>';" |
116 "document.body.onchange = function(){};" | 114 "document.body.onchange = function(){};" |
117 "document.body.setAttribute('onfocus', 'fnc()');" | 115 "document.body.setAttribute('onfocus', 'fnc()');" |
118 "document.body.addEventListener('onload', function(){});"; | 116 "document.body.addEventListener('onload', function(){});"; |
119 const char* expectedActivities = | 117 const char* expectedActivities = |
120 "blinkAddEventListener | A | click\n" | 118 "Element.innerHTML | <a onclick='do()'>test</a>;" |
121 "blinkAddElement | a | \n" | 119 "blinkAddEventListener | A | click;" |
122 "blinkAddEventListener | BODY | change\n" | 120 "blinkAddEventListener | BODY | change;" |
123 "blinkAddEventListener | LocalDOMWindow | focus\n" | 121 "blinkAddEventListener | LocalDOMWindow | focus;" |
124 "blinkAddEventListener | BODY | onload"; | 122 "blinkAddEventListener | BODY | onload"; |
125 executeScriptInMainWorld(code); | 123 executeScriptInMainWorld(code); |
126 ASSERT_TRUE(verifyActivities("")); | 124 ASSERT_TRUE(verifyActivities("")); |
127 executeScriptInIsolatedWorld(code); | 125 executeScriptInIsolatedWorld(code); |
128 ASSERT_TRUE(verifyActivities(expectedActivities)); | 126 ASSERT_TRUE(verifyActivities(expectedActivities)); |
129 } | 127 } |
130 | 128 |
131 TEST_F(ActivityLoggerTest, ScriptElement) | |
132 { | |
133 v8::HandleScope scope(v8::Isolate::GetCurrent()); | |
134 const char* code = | |
135 "document.body.innerHTML = '<script src=\\\'data:text/html;charset=utf-8
,\\\'></script>';" | |
136 "document.body.innerHTML = '<script>console.log(\\\'test\\\')</script>';
" | |
137 "var script = document.createElement('script');" | |
138 "document.body.appendChild(script);" | |
139 "script = document.createElement('script');" | |
140 "script.src = 'data:text/html;charset=utf-8,';" | |
141 "document.body.appendChild(script);" | |
142 "document.write('<body><script src=\\\'data:text/html;charset=utf-8,\\\'
></script></body>');"; | |
143 const char* expectedActivities = | |
144 "blinkAddElement | script | data:text/html;charset=utf-8,\n" | |
145 "blinkAddElement | script | \n" | |
146 "blinkAddElement | script | \n" | |
147 "HTMLScriptElement.src | data:text/html;charset=utf-8,\n" | |
148 "blinkAddElement | script | data:text/html;charset=utf-8,\n" | |
149 "blinkAddElement | script | data:text/html;charset=utf-8,"; | |
150 executeScriptInMainWorld(code); | |
151 ASSERT_TRUE(verifyActivities("")); | |
152 executeScriptInIsolatedWorld(code); | |
153 ASSERT_TRUE(verifyActivities(expectedActivities)); | |
154 } | |
155 | |
156 TEST_F(ActivityLoggerTest, IFrameElement) | |
157 { | |
158 v8::HandleScope scope(v8::Isolate::GetCurrent()); | |
159 const char* code = | |
160 "document.body.innerHTML = '<iframe src=\\\'data:text/html;charset=utf-8
,\\\'></iframe>';" | |
161 "document.body.innerHTML = '<iframe></iframe>';" | |
162 "var iframe = document.createElement('iframe');" | |
163 "document.body.appendChild(iframe);" | |
164 "iframe = document.createElement('iframe');" | |
165 "iframe.src = 'data:text/html;charset=utf-8,';" | |
166 "document.body.appendChild(iframe);" | |
167 "document.write('<body><iframe src=\\\'data:text/html;charset=utf-8,\\\'
></iframe></body>');"; | |
168 const char* expectedActivities = | |
169 "blinkAddElement | iframe | data:text/html;charset=utf-8,\n" | |
170 "blinkAddElement | iframe | \n" | |
171 "blinkAddElement | iframe | \n" | |
172 "HTMLIFrameElement.src | | data:text/html;charset=utf-8,\n" | |
173 "blinkAddElement | iframe | data:text/html;charset=utf-8,\n" | |
174 "blinkAddElement | iframe | data:text/html;charset=utf-8,"; | |
175 executeScriptInMainWorld(code); | |
176 ASSERT_TRUE(verifyActivities("")); | |
177 executeScriptInIsolatedWorld(code); | |
178 ASSERT_TRUE(verifyActivities(expectedActivities)); | |
179 } | |
180 | |
181 TEST_F(ActivityLoggerTest, AnchorElement) | |
182 { | |
183 v8::HandleScope scope(v8::Isolate::GetCurrent()); | |
184 const char* code = | |
185 "document.body.innerHTML = '<a href=\\\'data:text/css;charset=utf-8,\\\'
></a>';" | |
186 "document.body.innerHTML = '<a></a>';" | |
187 "var a = document.createElement('a');" | |
188 "document.body.appendChild(a);" | |
189 "a = document.createElement('a');" | |
190 "a.href = 'data:text/css;charset=utf-8,';" | |
191 "document.body.appendChild(a);" | |
192 "document.write('<body><a href=\\\'data:text/css;charset=utf-8,\\\'></a>
</body>');"; | |
193 const char* expectedActivities = | |
194 "blinkAddElement | a | data:text/css;charset=utf-8,\n" | |
195 "blinkAddElement | a | \n" | |
196 "blinkAddElement | a | \n" | |
197 "HTMLAnchorElement.href | | data:text/css;charset=utf-8,\n" | |
198 "blinkAddElement | a | data:text/css;charset=utf-8,\n" | |
199 "blinkAddElement | a | data:text/css;charset=utf-8,"; | |
200 executeScriptInMainWorld(code); | |
201 ASSERT_TRUE(verifyActivities("")); | |
202 executeScriptInIsolatedWorld(code); | |
203 ASSERT_TRUE(verifyActivities(expectedActivities)); | |
204 } | |
205 | |
206 TEST_F(ActivityLoggerTest, LinkElement) | |
207 { | |
208 v8::HandleScope scope(v8::Isolate::GetCurrent()); | |
209 const char* code = | |
210 "document.body.innerHTML = '<link rel=\\\'stylesheet\\\' href=\\\'data:t
ext/css;charset=utf-8,\\\'></link>';" | |
211 "document.body.innerHTML = '<link></link>';" | |
212 "var link = document.createElement('link');" | |
213 "document.body.appendChild(link);" | |
214 "link = document.createElement('link');" | |
215 "link.rel = 'stylesheet';" | |
216 "link.href = 'data:text/css;charset=utf-8,';" | |
217 "document.body.appendChild(link);" | |
218 "document.write('<body><link rel=\\\'stylesheet\\\' href=\\\'data:text/c
ss;charset=utf-8,\\\'></link></body>');"; | |
219 const char* expectedActivities = | |
220 "blinkAddElement | link | stylesheet | data:text/css;charset=utf-8,\n" | |
221 "blinkAddElement | link | | \n" | |
222 "blinkAddElement | link | | \n" | |
223 "HTMLLinkElement.href | data:text/css;charset=utf-8,\n" | |
224 "blinkAddElement | link | stylesheet | data:text/css;charset=utf-8,\n" | |
225 "blinkAddElement | link | stylesheet | data:text/css;charset=utf-8,"; | |
226 executeScriptInMainWorld(code); | |
227 ASSERT_TRUE(verifyActivities("")); | |
228 executeScriptInIsolatedWorld(code); | |
229 ASSERT_TRUE(verifyActivities(expectedActivities)); | |
230 } | |
231 | |
232 TEST_F(ActivityLoggerTest, InputElement) | |
233 { | |
234 v8::HandleScope scope(v8::Isolate::GetCurrent()); | |
235 const char* code = | |
236 "document.body.innerHTML = '<input type=\\\'submit\\\' formaction=\\\'da
ta:text/html;charset=utf-8,\\\'></input>';" | |
237 "document.body.innerHTML = '<input></input>';" | |
238 "var input = document.createElement('input');" | |
239 "document.body.appendChild(input);" | |
240 "input = document.createElement('input');" | |
241 "input.type = 'submit';" | |
242 "input.formAction = 'data:text/html;charset=utf-8,';" | |
243 "document.body.appendChild(input);" | |
244 "document.write('<body><input type=\\\'submit\\\' formaction=\\\'data:te
xt/html;charset=utf-8,\\\'></input></body>');"; | |
245 const char* expectedActivities = | |
246 "blinkAddElement | input | submit | data:text/html;charset=utf-8,\n" | |
247 "blinkAddElement | input | | \n" | |
248 "blinkAddElement | input | | \n" | |
249 "HTMLInputElement.formAction | data:text/html;charset=utf-8,\n" | |
250 "blinkAddElement | input | submit | data:text/html;charset=utf-8,\n" | |
251 "blinkAddElement | input | submit | data:text/html;charset=utf-8,"; | |
252 executeScriptInMainWorld(code); | |
253 ASSERT_TRUE(verifyActivities("")); | |
254 executeScriptInIsolatedWorld(code); | |
255 ASSERT_TRUE(verifyActivities(expectedActivities)); | |
256 } | |
257 | |
258 TEST_F(ActivityLoggerTest, ButtonElement) | |
259 { | |
260 v8::HandleScope scope(v8::Isolate::GetCurrent()); | |
261 const char* code = | |
262 "document.body.innerHTML = '<button type=\\\'submit\\\' formmethod=\\\'p
ost\\\' formaction=\\\'data:text/html;charset=utf-8,\\\'></input>';" | |
263 "document.body.innerHTML = '<button></button>';" | |
264 "var button = document.createElement('button');" | |
265 "document.body.appendChild(button);" | |
266 "button = document.createElement('button');" | |
267 "button.type = 'submit';" | |
268 "button.formMethod = 'post';" | |
269 "button.formAction = 'data:text/html;charset=utf-8,';" | |
270 "document.body.appendChild(button);" | |
271 "document.write('<body><button type=\\\'submit\\\' formmethod=\\\'post\\
\' formaction=\\\'data:text/html;charset=utf-8,\\\'></button></body>');"; | |
272 const char* expectedActivities = | |
273 "blinkAddElement | button | submit | post | data:text/html;charset=utf-8
,\n" | |
274 "blinkAddElement | button | | | \n" | |
275 "blinkAddElement | button | | | \n" | |
276 "HTMLButtonElement.formAction | data:text/html;charset=utf-8,\n" | |
277 "blinkAddElement | button | submit | post | data:text/html;charset=utf-8
,\n" | |
278 "blinkAddElement | button | submit | post | data:text/html;charset=utf-8
,"; | |
279 executeScriptInMainWorld(code); | |
280 ASSERT_TRUE(verifyActivities("")); | |
281 executeScriptInIsolatedWorld(code); | |
282 ASSERT_TRUE(verifyActivities(expectedActivities)); | |
283 } | |
284 | |
285 TEST_F(ActivityLoggerTest, FormElement) | |
286 { | |
287 v8::HandleScope scope(v8::Isolate::GetCurrent()); | |
288 const char* code = | |
289 "document.body.innerHTML = '<form method=\\\'post\\\' action=\\\'data:te
xt/html;charset=utf-8,\\\'></form>';" | |
290 "document.body.innerHTML = '<form></form>';" | |
291 "var form = document.createElement('form');" | |
292 "document.body.appendChild(form);" | |
293 "form = document.createElement('form');" | |
294 "form.method = 'post';" | |
295 "form.action = 'data:text/html;charset=utf-8,';" | |
296 "document.body.appendChild(form);" | |
297 "document.write('<body><form method=\\\'post\\\' action=\\\'data:text/ht
ml;charset=utf-8,\\\'></form></body>');"; | |
298 const char* expectedActivities = | |
299 "blinkAddElement | form | post | data:text/html;charset=utf-8,\n" | |
300 "blinkAddElement | form | | \n" | |
301 "blinkAddElement | form | | \n" | |
302 "HTMLFormElement.action | data:text/html;charset=utf-8,\n" | |
303 "blinkAddElement | form | post | data:text/html;charset=utf-8,\n" | |
304 "blinkAddElement | form | post | data:text/html;charset=utf-8,"; | |
305 executeScriptInMainWorld(code); | |
306 ASSERT_TRUE(verifyActivities("")); | |
307 executeScriptInIsolatedWorld(code); | |
308 ASSERT_TRUE(verifyActivities(expectedActivities)); | |
309 } | |
310 | |
311 } // namespace | 129 } // namespace |
OLD | NEW |