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
3 // found in the LICENSE file.
7 #include "FrameTestHelpers.h"
8 #include "bindings/core/v8/ScriptController.h"
9 #include "bindings/core/v8/V8DOMActivityLogger.h"
10 #include "web/WebLocalFrameImpl.h"
11 #include "wtf/Forward.h"
12 #include "wtf/text/Base64.h"
13 #include <gtest/gtest.h>
16 using blink::ScriptController;
17 using blink::ScriptSourceCode;
18 using blink::V8DOMActivityLogger;
19 using blink::toCoreStringWithUndefinedOrNullCheck;
20 using blink::FrameTestHelpers::WebViewHelper;
21 using blink::FrameTestHelpers::pumpPendingRequestsDoNotUse;
25 class TestActivityLogger : public V8DOMActivityLogger {
27 virtual ~TestActivityLogger() { }
29 void logGetter(const String& apiName) OVERRIDE
31 m_loggedActivities.append(apiName);
34 void logSetter(const String& apiName, const v8::Handle<v8::Value>& newValue) OVERRIDE
36 m_loggedActivities.append(apiName + " | " + toCoreStringWithUndefinedOrNullCheck(newValue));
39 void logSetter(const String& apiName, const v8::Handle<v8::Value>& newValue, const v8::Handle<v8::Value>& oldValue) OVERRIDE
41 m_loggedActivities.append(apiName + " | " + toCoreStringWithUndefinedOrNullCheck(oldValue) + " | " + toCoreStringWithUndefinedOrNullCheck(newValue));
44 void logMethod(const String& apiName, int argc, const v8::Handle<v8::Value>* argv) OVERRIDE
46 String activityString = apiName;
47 for (int i = 0; i < argc; i++)
48 activityString = activityString + " | " + toCoreStringWithUndefinedOrNullCheck(argv[i]);
49 m_loggedActivities.append(activityString);
52 void logEvent(const String& eventName, int argc, const String* argv) OVERRIDE
54 String activityString = eventName;
55 for (int i = 0; i < argc; i++) {
56 activityString = activityString + " | " + argv[i];
58 m_loggedActivities.append(activityString);
61 void clear() { m_loggedActivities.clear(); }
62 bool verifyActivities(const Vector<String>& activities) const { return m_loggedActivities == activities; }
65 Vector<String> m_loggedActivities;
68 class ActivityLoggerTest : public testing::Test {
72 m_activityLogger = new TestActivityLogger();
73 V8DOMActivityLogger::setActivityLogger(isolatedWorldId, String(), adoptPtr(m_activityLogger));
74 m_webViewHelper.initialize(true);
75 m_scriptController = &m_webViewHelper.webViewImpl()->mainFrameImpl()->frame()->script();
78 void executeScriptInMainWorld(const String& script) const
80 v8::HandleScope scope(v8::Isolate::GetCurrent());
81 m_scriptController->executeScriptInMainWorld(script);
82 pumpPendingRequestsDoNotUse(m_webViewHelper.webViewImpl()->mainFrame());
85 void executeScriptInIsolatedWorld(const String& script) const
87 v8::HandleScope scope(v8::Isolate::GetCurrent());
88 Vector<ScriptSourceCode> sources;
89 sources.append(ScriptSourceCode(script));
90 Vector<v8::Local<v8::Value> > results;
91 m_scriptController->executeScriptInIsolatedWorld(isolatedWorldId, sources, extensionGroup, 0);
92 pumpPendingRequestsDoNotUse(m_webViewHelper.webViewImpl()->mainFrame());
95 bool verifyActivities(const String& activities)
97 Vector<String> activityVector;
98 activities.split("\n", activityVector);
99 return m_activityLogger->verifyActivities(activityVector);
103 static const int isolatedWorldId = 1;
104 static const int extensionGroup = 0;
106 WebViewHelper m_webViewHelper;
107 ScriptController* m_scriptController;
108 // TestActivityLogger is owned by a static table within V8DOMActivityLogger
109 // and should be alive as long as not overwritten.
110 TestActivityLogger* m_activityLogger;
113 TEST_F(ActivityLoggerTest, EventHandler)
116 "document.body.innerHTML = '<a onclick=\\\'do()\\\'>test</a>';"
117 "document.body.onchange = function(){};"
118 "document.body.setAttribute('onfocus', 'fnc()');"
119 "document.body.addEventListener('onload', function(){});";
120 const char* expectedActivities =
121 "blinkAddEventListener | A | click\n"
122 "blinkAddElement | a | \n"
123 "blinkAddEventListener | BODY | change\n"
124 "blinkAddEventListener | LocalDOMWindow | focus\n"
125 "blinkAddEventListener | BODY | onload";
126 executeScriptInMainWorld(code);
127 ASSERT_TRUE(verifyActivities(""));
128 executeScriptInIsolatedWorld(code);
129 ASSERT_TRUE(verifyActivities(expectedActivities));
132 TEST_F(ActivityLoggerTest, ScriptElement)
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 "blinkAddElement | script | data:text/html;charset=utf-8,\n"
148 "blinkRequestResource | Script | data:text/html;charset=utf-8,\n"
149 "blinkAddElement | script | data:text/html;charset=utf-8,\n"
150 "blinkRequestResource | Script | data:text/html;charset=utf-8,";
151 executeScriptInMainWorld(code);
152 ASSERT_TRUE(verifyActivities(""));
153 executeScriptInIsolatedWorld(code);
154 ASSERT_TRUE(verifyActivities(expectedActivities));
157 TEST_F(ActivityLoggerTest, IFrameElement)
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 "blinkRequestResource | Main resource | data:text/html;charset=utf-8,\n"
171 "blinkAddElement | iframe | \n"
172 "blinkAddElement | iframe | \n"
173 "blinkAddElement | iframe | data:text/html;charset=utf-8,\n"
174 "blinkRequestResource | Main resource | data:text/html;charset=utf-8,\n"
175 "blinkAddElement | iframe | data:text/html;charset=utf-8,\n"
176 "blinkRequestResource | Main resource | data:text/html;charset=utf-8,";
177 executeScriptInMainWorld(code);
178 ASSERT_TRUE(verifyActivities(""));
179 executeScriptInIsolatedWorld(code);
180 ASSERT_TRUE(verifyActivities(expectedActivities));
183 TEST_F(ActivityLoggerTest, AnchorElement)
186 "document.body.innerHTML = '<a href=\\\'data:text/css;charset=utf-8,\\\'></a>';"
187 "document.body.innerHTML = '<a></a>';"
188 "var a = document.createElement('a');"
189 "document.body.appendChild(a);"
190 "a = document.createElement('a');"
191 "a.href = 'data:text/css;charset=utf-8,';"
192 "document.body.appendChild(a);"
193 "document.write('<body><a href=\\\'data:text/css;charset=utf-8,\\\'></a></body>');";
194 const char* expectedActivities =
195 "blinkAddElement | a | data:text/css;charset=utf-8,\n"
196 "blinkAddElement | a | \n"
197 "blinkAddElement | a | \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));
206 TEST_F(ActivityLoggerTest, LinkElement)
209 "document.body.innerHTML = '<link rel=\\\'stylesheet\\\' href=\\\'data:text/css;charset=utf-8,\\\'></link>';"
210 "document.body.innerHTML = '<link></link>';"
211 "var link = document.createElement('link');"
212 "document.body.appendChild(link);"
213 "link = document.createElement('link');"
214 "link.rel = 'stylesheet';"
215 "link.href = 'data:text/css;charset=utf-8,';"
216 "document.body.appendChild(link);"
217 "document.write('<body><link rel=\\\'stylesheet\\\' href=\\\'data:text/css;charset=utf-8,\\\'></link></body>');";
218 const char* expectedActivities =
219 "blinkAddElement | link | stylesheet | data:text/css;charset=utf-8,\n"
220 "blinkRequestResource | CSS stylesheet | data:text/css;charset=utf-8,\n"
221 "blinkAddElement | link | | \n"
222 "blinkAddElement | link | | \n"
223 "blinkAddElement | link | stylesheet | data:text/css;charset=utf-8,\n"
224 "blinkRequestResource | CSS stylesheet | data:text/css;charset=utf-8,\n"
225 "blinkAddElement | link | stylesheet | data:text/css;charset=utf-8,\n"
226 "blinkRequestResource | CSS stylesheet | data:text/css;charset=utf-8,";
227 executeScriptInMainWorld(code);
228 ASSERT_TRUE(verifyActivities(""));
229 executeScriptInIsolatedWorld(code);
230 ASSERT_TRUE(verifyActivities(expectedActivities));
233 TEST_F(ActivityLoggerTest, InputElement)
236 "document.body.innerHTML = '<input type=\\\'submit\\\' formaction=\\\'data: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:text/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 "blinkAddElement | input | submit | data:text/html;charset=utf-8,\n"
250 "blinkAddElement | input | submit | data:text/html;charset=utf-8,";
251 executeScriptInMainWorld(code);
252 ASSERT_TRUE(verifyActivities(""));
253 executeScriptInIsolatedWorld(code);
254 ASSERT_TRUE(verifyActivities(expectedActivities));
257 TEST_F(ActivityLoggerTest, ButtonElement)
260 "document.body.innerHTML = '<button type=\\\'submit\\\' formmethod=\\\'post\\\' formaction=\\\'data:text/html;charset=utf-8,\\\'></input>';"
261 "document.body.innerHTML = '<button></button>';"
262 "var button = document.createElement('button');"
263 "document.body.appendChild(button);"
264 "button = document.createElement('button');"
265 "button.type = 'submit';"
266 "button.formMethod = 'post';"
267 "button.formAction = 'data:text/html;charset=utf-8,';"
268 "document.body.appendChild(button);"
269 "document.write('<body><button type=\\\'submit\\\' formmethod=\\\'post\\\' formaction=\\\'data:text/html;charset=utf-8,\\\'></button></body>');";
270 const char* expectedActivities =
271 "blinkAddElement | button | submit | post | data:text/html;charset=utf-8,\n"
272 "blinkAddElement | button | | | \n"
273 "blinkAddElement | button | | | \n"
274 "blinkAddElement | button | submit | post | data:text/html;charset=utf-8,\n"
275 "blinkAddElement | button | submit | post | data:text/html;charset=utf-8,";
276 executeScriptInMainWorld(code);
277 ASSERT_TRUE(verifyActivities(""));
278 executeScriptInIsolatedWorld(code);
279 ASSERT_TRUE(verifyActivities(expectedActivities));
282 TEST_F(ActivityLoggerTest, FormElement)
285 "document.body.innerHTML = '<form method=\\\'post\\\' action=\\\'data:text/html;charset=utf-8,\\\'></form>';"
286 "document.body.innerHTML = '<form></form>';"
287 "var form = document.createElement('form');"
288 "document.body.appendChild(form);"
289 "form = document.createElement('form');"
290 "form.method = 'post';"
291 "form.action = 'data:text/html;charset=utf-8,';"
292 "document.body.appendChild(form);"
293 "document.write('<body><form method=\\\'post\\\' action=\\\'data:text/html;charset=utf-8,\\\'></form></body>');";
294 const char* expectedActivities =
295 "blinkAddElement | form | post | data:text/html;charset=utf-8,\n"
296 "blinkAddElement | form | | \n"
297 "blinkAddElement | form | | \n"
298 "blinkAddElement | form | post | data:text/html;charset=utf-8,\n"
299 "blinkAddElement | form | post | data:text/html;charset=utf-8,";
300 executeScriptInMainWorld(code);
301 ASSERT_TRUE(verifyActivities(""));
302 executeScriptInIsolatedWorld(code);
303 ASSERT_TRUE(verifyActivities(expectedActivities));
306 TEST_F(ActivityLoggerTest, IFrameSrcAttribute)
309 "document.body.innerHTML = '<iframe src=\\\'data:text/html;charset=utf-8,A\\\'></iframe>';"
310 "var iframe = document.getElementsByTagName('iframe')[0];"
311 "iframe.src = 'data:text/html;charset=utf-8,B';"
312 "iframe.setAttribute('src', 'data:text/html;charset=utf-8,C');"
313 "iframe.setAttributeNS('', 'src', 'data:text/html;charset=utf-8,D');"
314 "var attr = document.createAttribute('src');"
315 "attr.value = 'data:text/html;charset=utf-8,E';"
316 "iframe.setAttributeNode(attr);";
317 const char* expectedActivities =
318 "blinkAddElement | iframe | data:text/html;charset=utf-8,A\n"
319 "blinkRequestResource | Main resource | data:text/html;charset=utf-8,A\n"
320 "blinkSetAttribute | iframe | src | data:text/html;charset=utf-8,A | data:text/html;charset=utf-8,B\n"
321 "blinkSetAttribute | iframe | src | data:text/html;charset=utf-8,B | data:text/html;charset=utf-8,C\n"
322 "blinkSetAttribute | iframe | src | data:text/html;charset=utf-8,C | data:text/html;charset=utf-8,D\n"
323 "blinkSetAttribute | iframe | src | data:text/html;charset=utf-8,D | data:text/html;charset=utf-8,E";
324 executeScriptInMainWorld(code);
325 ASSERT_TRUE(verifyActivities(""));
326 executeScriptInIsolatedWorld(code);
327 ASSERT_TRUE(verifyActivities(expectedActivities));
330 TEST_F(ActivityLoggerTest, AnchorHrefAttribute)
333 "document.body.innerHTML = '<a href=\\\'data:text/html;charset=utf-8,A\\\'></a>';"
334 "var a = document.getElementsByTagName('a')[0];"
335 "a.href = 'data:text/html;charset=utf-8,B';"
336 "a.setAttribute('href', 'data:text/html;charset=utf-8,C');"
337 "a.setAttributeNS('', 'href', 'data:text/html;charset=utf-8,D');"
338 "var attr = document.createAttribute('href');"
339 "attr.value = 'data:text/html;charset=utf-8,E';"
340 "a.setAttributeNode(attr);";
341 const char* expectedActivities =
342 "blinkAddElement | a | data:text/html;charset=utf-8,A\n"
343 "blinkSetAttribute | a | href | data:text/html;charset=utf-8,A | data:text/html;charset=utf-8,B\n"
344 "blinkSetAttribute | a | href | data:text/html;charset=utf-8,B | data:text/html;charset=utf-8,C\n"
345 "blinkSetAttribute | a | href | data:text/html;charset=utf-8,C | data:text/html;charset=utf-8,D\n"
346 "blinkSetAttribute | a | href | data:text/html;charset=utf-8,D | data:text/html;charset=utf-8,E";
347 executeScriptInMainWorld(code);
348 ASSERT_TRUE(verifyActivities(""));
349 executeScriptInIsolatedWorld(code);
350 ASSERT_TRUE(verifyActivities(expectedActivities));
353 TEST_F(ActivityLoggerTest, LinkHrefAttribute)
356 "document.body.innerHTML = '<link rel=\\\'stylesheet\\\' href=\\\'data:text/css;charset=utf-8,A\\\'></link>';"
357 "var link = document.getElementsByTagName('link')[0];"
358 "link.href = 'data:text/css;charset=utf-8,B';"
359 "link.setAttribute('href', 'data:text/css;charset=utf-8,C');"
360 "link.setAttributeNS('', 'href', 'data:text/css;charset=utf-8,D');"
361 "var attr = document.createAttribute('href');"
362 "attr.value = 'data:text/css;charset=utf-8,E';"
363 "link.setAttributeNode(attr);";
364 const char* expectedActivities =
365 "blinkAddElement | link | stylesheet | data:text/css;charset=utf-8,A\n"
366 "blinkRequestResource | CSS stylesheet | data:text/css;charset=utf-8,A\n"
367 "blinkSetAttribute | link | href | data:text/css;charset=utf-8,A | data:text/css;charset=utf-8,B\n"
368 "blinkRequestResource | CSS stylesheet | data:text/css;charset=utf-8,B\n"
369 "blinkSetAttribute | link | href | data:text/css;charset=utf-8,B | data:text/css;charset=utf-8,C\n"
370 "blinkRequestResource | CSS stylesheet | data:text/css;charset=utf-8,C\n"
371 "blinkSetAttribute | link | href | data:text/css;charset=utf-8,C | data:text/css;charset=utf-8,D\n"
372 "blinkRequestResource | CSS stylesheet | data:text/css;charset=utf-8,D\n"
373 "blinkSetAttribute | link | href | data:text/css;charset=utf-8,D | data:text/css;charset=utf-8,E\n"
374 "blinkRequestResource | CSS stylesheet | data:text/css;charset=utf-8,E";
375 executeScriptInMainWorld(code);
376 ASSERT_TRUE(verifyActivities(""));
377 executeScriptInIsolatedWorld(code);
378 ASSERT_TRUE(verifyActivities(expectedActivities));
381 TEST_F(ActivityLoggerTest, InputFormActionAttribute)
384 "document.body.innerHTML = '<input type=\\\'button\\\' formaction=\\\'data:text/html;charset=utf-8,A\\\'></input>';"
385 "var input = document.getElementsByTagName('input')[0];"
386 "input.formAction = 'data:text/html;charset=utf-8,B';"
387 "input.setAttribute('formaction', 'data:text/html;charset=utf-8,C');"
388 "input.setAttributeNS('', 'formaction', 'data:text/html;charset=utf-8,D');"
389 "var attr = document.createAttribute('formaction');"
390 "attr.value = 'data:text/html;charset=utf-8,E';"
391 "input.setAttributeNode(attr);";
392 const char* expectedActivities =
393 "blinkAddElement | input | button | data:text/html;charset=utf-8,A\n"
394 "blinkSetAttribute | input | formaction | data:text/html;charset=utf-8,A | data:text/html;charset=utf-8,B\n"
395 "blinkSetAttribute | input | formaction | data:text/html;charset=utf-8,B | data:text/html;charset=utf-8,C\n"
396 "blinkSetAttribute | input | formaction | data:text/html;charset=utf-8,C | data:text/html;charset=utf-8,D\n"
397 "blinkSetAttribute | input | formaction | data:text/html;charset=utf-8,D | data:text/html;charset=utf-8,E";
398 executeScriptInMainWorld(code);
399 ASSERT_TRUE(verifyActivities(""));
400 executeScriptInIsolatedWorld(code);
401 ASSERT_TRUE(verifyActivities(expectedActivities));
404 TEST_F(ActivityLoggerTest, ButtonFormActionAttribute)
407 "document.body.innerHTML = '<button type=\\\'submit\\\' formmethod=\\\'post\\\' formaction=\\\'data:text/html;charset=utf-8,A\\\'></input>';"
408 "var button = document.getElementsByTagName('button')[0];"
409 "button.formAction = 'data:text/html;charset=utf-8,B';"
410 "button.setAttribute('formaction', 'data:text/html;charset=utf-8,C');"
411 "button.setAttributeNS('', 'formaction', 'data:text/html;charset=utf-8,D');"
412 "var attr = document.createAttribute('formaction');"
413 "attr.value = 'data:text/html;charset=utf-8,E';"
414 "button.setAttributeNode(attr);";
415 const char* expectedActivities =
416 "blinkAddElement | button | submit | post | data:text/html;charset=utf-8,A\n"
417 "blinkSetAttribute | button | formaction | data:text/html;charset=utf-8,A | data:text/html;charset=utf-8,B\n"
418 "blinkSetAttribute | button | formaction | data:text/html;charset=utf-8,B | data:text/html;charset=utf-8,C\n"
419 "blinkSetAttribute | button | formaction | data:text/html;charset=utf-8,C | data:text/html;charset=utf-8,D\n"
420 "blinkSetAttribute | button | formaction | data:text/html;charset=utf-8,D | data:text/html;charset=utf-8,E";
421 executeScriptInMainWorld(code);
422 ASSERT_TRUE(verifyActivities(""));
423 executeScriptInIsolatedWorld(code);
424 ASSERT_TRUE(verifyActivities(expectedActivities));
427 TEST_F(ActivityLoggerTest, FormActionAttribute)
430 "document.body.innerHTML = '<form action=\\\'data:text/html;charset=utf-8,A\\\'></form>';"
431 "var form = document.getElementsByTagName('form')[0];"
432 "form.action = 'data:text/html;charset=utf-8,B';"
433 "form.setAttribute('action', 'data:text/html;charset=utf-8,C');"
434 "form.setAttributeNS('', 'action', 'data:text/html;charset=utf-8,D');"
435 "var attr = document.createAttribute('action');"
436 "attr.value = 'data:text/html;charset=utf-8,E';"
437 "form.setAttributeNode(attr);";
438 const char* expectedActivities =
439 "blinkAddElement | form | | data:text/html;charset=utf-8,A\n"
440 "blinkSetAttribute | form | action | data:text/html;charset=utf-8,A | data:text/html;charset=utf-8,B\n"
441 "blinkSetAttribute | form | action | data:text/html;charset=utf-8,B | data:text/html;charset=utf-8,C\n"
442 "blinkSetAttribute | form | action | data:text/html;charset=utf-8,C | data:text/html;charset=utf-8,D\n"
443 "blinkSetAttribute | form | action | data:text/html;charset=utf-8,D | data:text/html;charset=utf-8,E";
444 executeScriptInMainWorld(code);
445 ASSERT_TRUE(verifyActivities(""));
446 executeScriptInIsolatedWorld(code);
447 ASSERT_TRUE(verifyActivities(expectedActivities));
450 TEST_F(ActivityLoggerTest, LocalDOMWindowAttribute)
453 "location.href = 'data:text/html;charset=utf-8,A';"
454 "location.assign('data:text/html;charset=utf-8,B');"
455 "location.replace('data:text/html;charset=utf-8,C');"
456 "location.protocol = 'protocol';"
457 "location.pathname = 'pathname';"
458 "location.search = 'search';"
459 "location.hash = 'hash';"
460 "location.href = 'about:blank';";
461 const char* expectedActivities =
462 "blinkSetAttribute | LocalDOMWindow | url | about:blank | data:text/html;charset=utf-8,A\n"
463 "blinkSetAttribute | LocalDOMWindow | url | about:blank | data:text/html;charset=utf-8,B\n"
464 "blinkSetAttribute | LocalDOMWindow | url | about:blank | data:text/html;charset=utf-8,C\n"
465 "blinkSetAttribute | LocalDOMWindow | url | about:blank | protocol:blank\n"
466 "blinkSetAttribute | LocalDOMWindow | url | about:blank | about:pathname\n"
467 "blinkSetAttribute | LocalDOMWindow | url | about:blank | about:blank?search\n"
468 "blinkSetAttribute | LocalDOMWindow | url | about:blank | about:blank#hash\n"
469 "blinkSetAttribute | LocalDOMWindow | url | about:blank#hash | about:blank\n";
470 executeScriptInMainWorld(code);
471 ASSERT_TRUE(verifyActivities(""));
472 executeScriptInIsolatedWorld(code);
473 ASSERT_TRUE(verifyActivities(expectedActivities));
476 TEST_F(ActivityLoggerTest, RequestResource)
479 "document.write('<iframe src=\\\'data:text/html;charset=utf-8,A\\\'></iframe>');"
480 "document.write('<img src=\\\'data:text/html;charset=utf-8,B\\\'></img>');"
481 "document.write('<link rel=\\\'stylesheet\\\' href=\\\'data:text/html;charset=utf-8,C\\\'></link>');"
482 "document.write('<script src=\\\'data:text/html;charset=utf-8,D\\\'></script>');"
483 "var xhr = new XMLHttpRequest(); xhr.open('GET', 'data:text/html;charset=utf-8,E'); xhr.send();";
484 const char* expectedActivities =
485 "blinkAddElement | iframe | data:text/html;charset=utf-8,A\n"
486 "blinkRequestResource | Main resource | data:text/html;charset=utf-8,A\n"
487 "blinkRequestResource | Image | data:text/html;charset=utf-8,B\n"
488 "blinkAddElement | link | stylesheet | data:text/html;charset=utf-8,C\n"
489 "blinkRequestResource | CSS stylesheet | data:text/html;charset=utf-8,C\n"
490 "blinkAddElement | script | data:text/html;charset=utf-8,D\n"
491 "blinkRequestResource | Script | data:text/html;charset=utf-8,D\n"
492 "blinkRequestResource | XMLHttpRequest | data:text/html;charset=utf-8,E";
493 executeScriptInMainWorld(code);
494 ASSERT_TRUE(verifyActivities(""));
495 executeScriptInIsolatedWorld(code);
496 ASSERT_TRUE(verifyActivities(expectedActivities));