| 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 |