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(); |
81 } | 82 } |
82 | 83 |
83 void executeScriptInIsolatedWorld(const String& script) const | 84 void executeScriptInIsolatedWorld(const String& script) const |
84 { | 85 { |
85 Vector<ScriptSourceCode> sources; | 86 Vector<ScriptSourceCode> sources; |
86 sources.append(ScriptSourceCode(script)); | 87 sources.append(ScriptSourceCode(script)); |
87 Vector<v8::Local<v8::Value> > results; | 88 Vector<v8::Local<v8::Value> > results; |
88 m_scriptController->executeScriptInIsolatedWorld(isolatedWorldId, source
s, extensionGroup, 0); | 89 m_scriptController->executeScriptInIsolatedWorld(isolatedWorldId, source
s, extensionGroup, 0); |
| 90 runPendingTasks(); |
89 } | 91 } |
90 | 92 |
91 bool verifyActivities(const String& activities) | 93 bool verifyActivities(const String& activities) |
92 { | 94 { |
93 Vector<String> activityVector; | 95 Vector<String> activityVector; |
94 activities.split(";", activityVector); | 96 activities.split("\n", activityVector); |
95 return m_activityLogger->verifyActivities(activityVector); | 97 return m_activityLogger->verifyActivities(activityVector); |
96 } | 98 } |
97 | 99 |
98 private: | 100 private: |
99 static const int isolatedWorldId = 1; | 101 static const int isolatedWorldId = 1; |
100 static const int extensionGroup = 0; | 102 static const int extensionGroup = 0; |
101 | 103 |
102 WebViewHelper m_webViewHelper; | 104 WebViewHelper m_webViewHelper; |
103 ScriptController* m_scriptController; | 105 ScriptController* m_scriptController; |
104 // TestActivityLogger is owned by a static table within V8DOMActivityLogger | 106 // TestActivityLogger is owned by a static table within V8DOMActivityLogger |
105 // and should be alive as long as not overwritten. | 107 // and should be alive as long as not overwritten. |
106 TestActivityLogger* m_activityLogger; | 108 TestActivityLogger* m_activityLogger; |
107 }; | 109 }; |
108 | 110 |
109 TEST_F(ActivityLoggerTest, EventHandler) | 111 TEST_F(ActivityLoggerTest, EventHandler) |
110 { | 112 { |
111 v8::HandleScope scope(v8::Isolate::GetCurrent()); | 113 v8::HandleScope scope(v8::Isolate::GetCurrent()); |
112 const char* code = | 114 const char* code = |
113 "document.body.innerHTML = '<a onclick=\\\'do()\\\'>test</a>';" | 115 "document.body.innerHTML = '<a onclick=\\\'do()\\\'>test</a>';" |
114 "document.body.onchange = function(){};" | 116 "document.body.onchange = function(){};" |
115 "document.body.setAttribute('onfocus', 'fnc()');" | 117 "document.body.setAttribute('onfocus', 'fnc()');" |
116 "document.body.addEventListener('onload', function(){});"; | 118 "document.body.addEventListener('onload', function(){});"; |
117 const char* expectedActivities = | 119 const char* expectedActivities = |
118 "Element.innerHTML | <a onclick='do()'>test</a>;" | 120 "blinkAddEventListener | A | click\n" |
119 "blinkAddEventListener | A | click;" | 121 "blinkAddElement | a | \n" |
120 "blinkAddEventListener | BODY | change;" | 122 "blinkAddEventListener | BODY | change\n" |
121 "blinkAddEventListener | LocalDOMWindow | focus;" | 123 "blinkAddEventListener | LocalDOMWindow | focus\n" |
122 "blinkAddEventListener | BODY | onload"; | 124 "blinkAddEventListener | BODY | onload"; |
123 executeScriptInMainWorld(code); | 125 executeScriptInMainWorld(code); |
124 ASSERT_TRUE(verifyActivities("")); | 126 ASSERT_TRUE(verifyActivities("")); |
125 executeScriptInIsolatedWorld(code); | 127 executeScriptInIsolatedWorld(code); |
126 ASSERT_TRUE(verifyActivities(expectedActivities)); | 128 ASSERT_TRUE(verifyActivities(expectedActivities)); |
127 } | 129 } |
128 | 130 |
| 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 |
129 } // namespace | 311 } // namespace |
OLD | NEW |