Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / third_party / WebKit / Source / web / tests / ActivityLoggerTest.cpp
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.
4
5 #include "config.h"
6
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>
14 #include <v8.h>
15
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;
22
23 namespace {
24
25 class TestActivityLogger : public V8DOMActivityLogger {
26 public:
27     virtual ~TestActivityLogger() { }
28
29     void logGetter(const String& apiName) OVERRIDE
30     {
31         m_loggedActivities.append(apiName);
32     }
33
34     void logSetter(const String& apiName, const v8::Handle<v8::Value>& newValue) OVERRIDE
35     {
36         m_loggedActivities.append(apiName + " | " + toCoreStringWithUndefinedOrNullCheck(newValue));
37     }
38
39     void logSetter(const String& apiName, const v8::Handle<v8::Value>& newValue, const v8::Handle<v8::Value>& oldValue) OVERRIDE
40     {
41         m_loggedActivities.append(apiName + " | " + toCoreStringWithUndefinedOrNullCheck(oldValue) + " | " + toCoreStringWithUndefinedOrNullCheck(newValue));
42     }
43
44     void logMethod(const String& apiName, int argc, const v8::Handle<v8::Value>* argv) OVERRIDE
45     {
46         String activityString = apiName;
47         for (int i = 0; i  < argc; i++)
48             activityString = activityString + " | " + toCoreStringWithUndefinedOrNullCheck(argv[i]);
49         m_loggedActivities.append(activityString);
50     }
51
52     void logEvent(const String& eventName, int argc, const String* argv) OVERRIDE
53     {
54         String activityString = eventName;
55         for (int i = 0; i  < argc; i++) {
56             activityString = activityString + " | " + argv[i];
57         }
58         m_loggedActivities.append(activityString);
59     }
60
61     void clear() { m_loggedActivities.clear(); }
62     bool verifyActivities(const Vector<String>& activities) const { return m_loggedActivities == activities; }
63
64 private:
65     Vector<String> m_loggedActivities;
66 };
67
68 class ActivityLoggerTest : public testing::Test {
69 protected:
70     ActivityLoggerTest()
71     {
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();
76     }
77
78     void executeScriptInMainWorld(const String& script) const
79     {
80         v8::HandleScope scope(v8::Isolate::GetCurrent());
81         m_scriptController->executeScriptInMainWorld(script);
82         pumpPendingRequestsDoNotUse(m_webViewHelper.webViewImpl()->mainFrame());
83     }
84
85     void executeScriptInIsolatedWorld(const String& script) const
86     {
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());
93     }
94
95     bool verifyActivities(const String& activities)
96     {
97         Vector<String> activityVector;
98         activities.split("\n", activityVector);
99         return m_activityLogger->verifyActivities(activityVector);
100     }
101
102 private:
103     static const int isolatedWorldId = 1;
104     static const int extensionGroup = 0;
105
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;
111 };
112
113 TEST_F(ActivityLoggerTest, EventHandler)
114 {
115     const char* code =
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));
130 }
131
132 TEST_F(ActivityLoggerTest, ScriptElement)
133 {
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         "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));
155 }
156
157 TEST_F(ActivityLoggerTest, IFrameElement)
158 {
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         "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));
181 }
182
183 TEST_F(ActivityLoggerTest, AnchorElement)
184 {
185     const char* code =
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));
204 }
205
206 TEST_F(ActivityLoggerTest, LinkElement)
207 {
208     const char* code =
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));
231 }
232
233 TEST_F(ActivityLoggerTest, InputElement)
234 {
235     const char* code =
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));
255 }
256
257 TEST_F(ActivityLoggerTest, ButtonElement)
258 {
259     const char* code =
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));
280 }
281
282 TEST_F(ActivityLoggerTest, FormElement)
283 {
284     const char* code =
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));
304 }
305
306 TEST_F(ActivityLoggerTest, IFrameSrcAttribute)
307 {
308     const char* code =
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));
328 }
329
330 TEST_F(ActivityLoggerTest, AnchorHrefAttribute)
331 {
332     const char* code =
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));
351 }
352
353 TEST_F(ActivityLoggerTest, LinkHrefAttribute)
354 {
355     const char* code =
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));
379 }
380
381 TEST_F(ActivityLoggerTest, InputFormActionAttribute)
382 {
383     const char* code =
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));
402 }
403
404 TEST_F(ActivityLoggerTest, ButtonFormActionAttribute)
405 {
406     const char* code =
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));
425 }
426
427 TEST_F(ActivityLoggerTest, FormActionAttribute)
428 {
429     const char* code =
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));
448 }
449
450 TEST_F(ActivityLoggerTest, LocalDOMWindowAttribute)
451 {
452     const char* code =
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));
474 }
475
476 TEST_F(ActivityLoggerTest, RequestResource)
477 {
478     const char* code =
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));
497 }
498
499 } // namespace