Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(601)

Side by Side Diff: LayoutTests/fast/dom/Attr/script-tests/access-after-element-destruction.js

Issue 317203005: Oilpan: Temporary fix for leaks through mapping from element to attribute node list. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Maintain Attr value when Element is deent dies. Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | Source/core/dom/Attr.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 description("Tests that accessing Attr after its Element has been destroyed work s without crashing."); 1 description("Tests that accessing Attr after its Element has been destroyed work s without crashing.");
2 2
3 function gc() 3 jsTestIsAsync = true;
4 {
5 if (window.GCController)
6 return GCController.collect();
7
8 // Trigger garbage collection indirectly.
9 for (var i = 0; i < 100000; i++)
10 new String(i);
11 }
12 4
13 var element = document.createElement("p"); 5 var element = document.createElement("p");
14 element.setAttribute("a", "b"); 6 element.setAttribute("a", "b");
15 var attributes = element.attributes; 7 var attributes = element.attributes;
16 element = null; 8 element = null;
9 var attr = null;
17 10
18 gc(); 11 asyncGC(function() {
12 shouldBe("attributes.length", "1");
13 shouldBe("attributes[0]", "attributes.item(0)");
14 shouldBe("attributes.getNamedItem('a')", "attributes.item(0)");
19 15
20 shouldBe("attributes.length", "1"); 16 shouldBe("attributes.item(0).name", "'a'");
21 shouldBe("attributes[0]", "attributes.item(0)"); 17 shouldBe("attributes.item(0).value", "'b'");
22 shouldBe("attributes.getNamedItem('a')", "attributes.item(0)");
23 18
24 shouldBe("attributes.item(0).name", "'a'"); 19 attributes.item(0).value = 'c';
25 shouldBe("attributes.item(0).value", "'b'");
26 20
27 attributes.item(0).value = 'c'; 21 shouldBe("attributes.item(0).value", "'c'");
28 22
29 shouldBe("attributes.item(0).value", "'c'"); 23 attributes.removeNamedItem('a');
30 24
31 attributes.removeNamedItem('a'); 25 shouldBe("attributes.length", "0");
32 26
33 shouldBe("attributes.length", "0"); 27 element = document.createElement("p");
28 element.setAttribute("a", "b");
29 attr = element.attributes.item(0);
30 element = null;
34 31
35 element = document.createElement("p"); 32 asyncGC(function() {
36 element.setAttribute("a", "b");
37 var attr = element.attributes.item(0);
38 element = null;
39 33
40 gc(); 34 shouldBe("attr.name", "'a'");
35 shouldBe("attr.value", "'b'");
41 36
42 shouldBe("attr.name", "'a'"); 37 attr.value = 'c';
43 shouldBe("attr.value", "'b'");
44 38
45 attr.value = 'c'; 39 shouldBe("attr.value", "'c'");
46 40
47 shouldBe("attr.value", "'c'"); 41 finishJSTest();
42 });
43 });
OLDNEW
« no previous file with comments | « no previous file | Source/core/dom/Attr.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698