RESOLVED FIXED 85864
[Shadow] TITLE elements in Shadow DOM should not affect document.title attribute
https://bugs.webkit.org/show_bug.cgi?id=85864
Summary [Shadow] TITLE elements in Shadow DOM should not affect document.title attribute
Dominic Cooney
Reported 2012-05-07 23:22:47 PDT
This manifests as a test failure at <http://w3c-test.org/webapps/ShadowDOM/tests/submissions/Google/tests.html> "Upper-boundary encapsulation: nodes in a shadow DOM subtree are not accessible using the shadow host's document DOM tree accessors defined in HTML" … "assert_equals: title text in shadow DOM must not be exposed via document.title DOM accessor expected "" but got "what's up, doc?""
Attachments
Patch (4.54 KB, patch)
2012-05-22 04:10 PDT, Takashi Sakamoto
no flags
Patch (4.51 KB, patch)
2012-05-25 02:05 PDT, Takashi Sakamoto
no flags
Patch (4.40 KB, patch)
2012-05-25 02:19 PDT, Takashi Sakamoto
no flags
Patch (5.11 KB, patch)
2012-05-27 22:22 PDT, Takashi Sakamoto
no flags
Patch (7.19 KB, patch)
2012-06-07 06:15 PDT, Takashi Sakamoto
no flags
Patch (7.16 KB, patch)
2012-12-18 23:59 PST, Takashi Sakamoto
no flags
Takashi Sakamoto
Comment 1 2012-05-22 04:10:22 PDT
Shinya Kawanaka
Comment 2 2012-05-22 05:03:03 PDT
Comment on attachment 143268 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=143268&action=review > LayoutTests/fast/dom/shadow/title-element-in-shadow.html:7 > +{ You should use LayoutTests/fast/js/resources/js-test-pre.js and js-test-post.js Then you can remove shouldBe, log, and layoutTestController.dumpAsText() etc. from this test.
Hajime Morrita
Comment 3 2012-05-22 16:34:35 PDT
Comment on attachment 143268 [details] Patch Basically looks good. r- per Shinya's comment.
Takashi Sakamoto
Comment 4 2012-05-25 02:05:07 PDT
Shinya Kawanaka
Comment 5 2012-05-25 02:10:31 PDT
Comment on attachment 144011 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=144011&action=review > LayoutTests/fast/dom/shadow/title-element-in-shadow.html:22 > +log("PASS"); I don't think log("PASS") is necessary, since shouldBe() prints "PASS". You can also remove function log(...) { ... }.
Shinya Kawanaka
Comment 6 2012-05-25 02:12:17 PDT
Comment on attachment 144011 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=144011&action=review >> LayoutTests/fast/dom/shadow/title-element-in-shadow.html:22 >> +log("PASS"); > > I don't think log("PASS") is necessary, since shouldBe() prints "PASS". > You can also remove function log(...) { ... }. shouldBe should take strings. So you should call shouldBe("newDocument.title", '""');
Takashi Sakamoto
Comment 7 2012-05-25 02:19:37 PDT
Hajime Morrita
Comment 8 2012-05-27 17:19:01 PDT
Comment on attachment 144013 [details] Patch The test is really cryptic. It also can be more comprehensive. We can test against a document which has a title - to add newly created <title> to the shadow root - to remove it - to add subtree which contains <title> to the shadow root - to remove it - to add a subtree which has a shadow root, which has a <title> as a child (I guess this case doesn't work) - to remove it.
Takashi Sakamoto
Comment 9 2012-05-27 22:22:30 PDT
Hajime Morrita
Comment 10 2012-05-29 18:55:40 PDT
Comment on attachment 144267 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=144267&action=review > LayoutTests/fast/dom/shadow/title-element-in-shadow.html:30 > + Could you test something like: parent = document.createElemenet... child = document.creatElement... childShadow = new ShadowRoot(child); document.head.appendChild(parent); ? In this case, insertionPoint will be !isInShadowTree(), but the title is.
Ryosuke Niwa
Comment 11 2012-05-31 23:50:56 PDT
Comment on attachment 144267 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=144267&action=review Please fix the test before you land & address morrita's comment. > LayoutTests/fast/dom/shadow/title-element-in-shadow-expected.txt:4 > +PASS docForTest.title is "" > +PASS docForTest.title is "" > +PASS docForTest.title is "" > +PASS docForTest.title is "" This output is not helpful. > LayoutTests/fast/dom/shadow/title-element-in-shadow.html:13 > +<!-- add newly created title element to the shadow root. --> Could you at least put these descriptions in debug? > LayoutTests/fast/dom/shadow/title-element-in-shadow.html:18 > +var shadowRoot = new WebKitShadowRoot(docForTest.documentElement); > +var title = document.createElement('title'); > +title.innerHTML = 'shadow title'; > +shadowRoot.appendChild(title); > +shouldBe('docForTest.title', '""'); Or more preferably, add some helper functions so that you can do something along the line of: shouldBe("shadowRoot.appendChild(createTitleElement('shadow title'); shadowRoot.document.title", '""'); > LayoutTests/fast/dom/shadow/title-element-in-shadow.html:23 > +<!-- add subtree which contains title element to the shadow root. --> > +shadowRoot.innerHTML = '<HEAD><TITLE>shadow title</TITLE><HEAD>'; > +shouldBe('docForTest.title', '""'); > +shadowRoot.innerHTML = ''; Ditto. > LayoutTests/fast/dom/shadow/title-element-in-shadow.html:29 > +<!-- add a subtree which has a shadow root, which has a title element as a child. --> > +shadowRoot.innerHTML = '<BODY><DIV id="div1"></DIV></BODY>'; > +var shadowRootForDiv = new WebKitShadowRoot(shadowRoot.getElementById('div1')); > +shadowRootForDiv.innerHTML = '<TITLE>shadow title</TITLE>'; > +shouldBe('docForTest.title', '""'); Ditto.
Takashi Sakamoto
Comment 12 2012-06-07 06:15:00 PDT
Takashi Sakamoto
Comment 13 2012-06-07 06:17:20 PDT
(In reply to comment #10) > (From update of attachment 144267 [details]) > View in context: https://bugs.webkit.org/attachment.cgi?id=144267&action=review > > > LayoutTests/fast/dom/shadow/title-element-in-shadow.html:30 > > + > > Could you test something like: > parent = document.createElemenet... > child = document.creatElement... > childShadow = new ShadowRoot(child); > > document.head.appendChild(parent); ? I see. I think, my new patch has the same test as the above. > In this case, insertionPoint will be !isInShadowTree(), but the title is. I think, insertionPoint.isInShadowTree() in insertedInto is a mistake. I changed the condition to just isInShadowTree().
Takashi Sakamoto
Comment 14 2012-06-07 06:25:36 PDT
(In reply to comment #11) > (From update of attachment 144267 [details]) > View in context: https://bugs.webkit.org/attachment.cgi?id=144267&action=review > > Please fix the test before you land & address morrita's comment. > > > LayoutTests/fast/dom/shadow/title-element-in-shadow-expected.txt:4 > > +PASS docForTest.title is "" > > +PASS docForTest.title is "" > > +PASS docForTest.title is "" > > +PASS docForTest.title is "" > > This output is not helpful. > > > LayoutTests/fast/dom/shadow/title-element-in-shadow.html:13 > > +<!-- add newly created title element to the shadow root. --> > > Could you at least put these descriptions in debug? I see. I added debug messages to show what the test does. > > LayoutTests/fast/dom/shadow/title-element-in-shadow.html:18 > > +var shadowRoot = new WebKitShadowRoot(docForTest.documentElement); > > +var title = document.createElement('title'); > > +title.innerHTML = 'shadow title'; > > +shadowRoot.appendChild(title); > > +shouldBe('docForTest.title', '""'); > > Or more preferably, add some helper functions so that you can do something along the line of: > shouldBe("shadowRoot.appendChild(createTitleElement('shadow title'); shadowRoot.document.title", '""'); > > > LayoutTests/fast/dom/shadow/title-element-in-shadow.html:23 > > +<!-- add subtree which contains title element to the shadow root. --> > > +shadowRoot.innerHTML = '<HEAD><TITLE>shadow title</TITLE><HEAD>'; > > +shouldBe('docForTest.title', '""'); > > +shadowRoot.innerHTML = ''; > > Ditto. > > > LayoutTests/fast/dom/shadow/title-element-in-shadow.html:29 > > +<!-- add a subtree which has a shadow root, which has a title element as a child. --> > > +shadowRoot.innerHTML = '<BODY><DIV id="div1"></DIV></BODY>'; > > +var shadowRootForDiv = new WebKitShadowRoot(shadowRoot.getElementById('div1')); > > +shadowRootForDiv.innerHTML = '<TITLE>shadow title</TITLE>'; > > +shouldBe('docForTest.title', '""'); > > Ditto. Are the debug messages enough helpful to know what this test does? I think, shouldBe shows helper function names, however the names don't provide any more information comparing with the debug messages.
Shinya Kawanaka
Comment 15 2012-12-18 21:48:43 PST
I'm not sure why this is not committed yet.
Takashi Sakamoto
Comment 16 2012-12-18 23:59:22 PST
WebKit Review Bot
Comment 17 2012-12-19 00:55:17 PST
Comment on attachment 180105 [details] Patch Clearing flags on attachment: 180105 Committed r138130: <http://trac.webkit.org/changeset/138130>
WebKit Review Bot
Comment 18 2012-12-19 00:55:21 PST
All reviewed patches have been landed. Closing bug.
Note You need to log in before you can comment on or make changes to this bug.