- a/LayoutTests/ChangeLog +17 lines
Lines 1-3 a/LayoutTests/ChangeLog_sec1
1
2010-11-02  Simon Fraser  <simon.fraser@apple.com>
2
3
        Reviewed by NOBODY (OOPS!).
4
5
        Iframes nested inside a compositing layer don't repaint correctly
6
        https://bugs.webkit.org/show_bug.cgi?id=48880
7
        <rdar://problem/8194698>
8
        
9
        Test scrolling in a iframe in an iframe in a compositing layer.
10
11
        * compositing/iframes/nested-iframe-scrolling-expected.checksum: Added.
12
        * compositing/iframes/nested-iframe-scrolling-expected.png: Added.
13
        * compositing/iframes/nested-iframe-scrolling-expected.txt: Added.
14
        * compositing/iframes/nested-iframe-scrolling.html: Added.
15
        * compositing/iframes/resources/nested-subframe.html: Added.
16
        * compositing/iframes/resources/subsubframe.html: Added.
17
1
2010-11-02  Adam Roben  <aroben@apple.com>
18
2010-11-02  Adam Roben  <aroben@apple.com>
2
19
3
        Update Windows results after r71043
20
        Update Windows results after r71043
- a/LayoutTests/compositing/iframes/nested-iframe-scrolling-expected.checksum +1 lines
Line 0 a/LayoutTests/compositing/iframes/nested-iframe-scrolling-expected.checksum_sec1
1
29a083f0933edd034a6320405824cd68
- a/LayoutTests/compositing/iframes/nested-iframe-scrolling-expected.txt +23 lines
Line 0 a/LayoutTests/compositing/iframes/nested-iframe-scrolling-expected.txt_sec1
1
layer at (0,0) size 800x600
2
  RenderView at (0,0) size 800x600
3
layer at (0,0) size 800x600
4
  RenderBlock {HTML} at (0,0) size 800x600
5
    RenderBody {BODY} at (0,0) size 800x600
6
      RenderText {#text} at (0,0) size 0x0
7
layer at (0,0) size 100x100
8
  RenderBlock (positioned) {DIV} at (0,0) size 100x100 [bgcolor=#FF0000]
9
layer at (0,0) size 320x200
10
  RenderPartObject {IFRAME} at (0,0) size 320x200
11
    layer at (0,0) size 320x200
12
      RenderView at (0,0) size 320x200
13
    layer at (0,0) size 320x200
14
      RenderBlock {HTML} at (0,0) size 320x200
15
        RenderBody {BODY} at (0,0) size 320x200
16
          RenderPartObject {IFRAME} at (0,0) size 300x150
17
            layer at (0,0) size 300x1100
18
              RenderView at (0,0) size 300x150
19
            layer at (0,0) size 300x1100
20
              RenderBlock {HTML} at (0,0) size 300x1100
21
                RenderBody {BODY} at (0,100) size 300x1000
22
                  RenderBlock {DIV} at (0,0) size 100x100 [bgcolor=#008000]
23
          RenderText {#text} at (0,0) size 0x0
- a/LayoutTests/compositing/iframes/nested-iframe-scrolling.html +51 lines
Line 0 a/LayoutTests/compositing/iframes/nested-iframe-scrolling.html_sec1
1
<html>
2
<head>
3
  <style type="text/css">
4
    body {
5
        margin: 0;
6
    }
7
    iframe {
8
        width: 320px;
9
        height: 200px;
10
        -webkit-transform: translateZ(0);
11
        border: none;
12
    }
13
    
14
    #indicator {
15
        position: absolute;
16
        top: 0px;
17
        left: 0px;
18
        height: 100px;
19
        width: 100px;
20
        background-color: red;
21
    }
22
  </style>
23
  <script type="text/javascript" charset="utf-8">
24
    
25
    if (window.layoutTestController)
26
        layoutTestController.waitUntilDone();
27
28
    function runTest()
29
    {
30
        var frameDocument = document.getElementById('frame').contentWindow.document;
31
        var subframeWindow = frameDocument.getElementById('subframe').contentWindow;
32
        subframeWindow.scrollTo(0, 100);
33
34
        if (window.layoutTestController)
35
            layoutTestController.notifyDone();
36
    }
37
    
38
    window.addEventListener('load', function() {
39
        setTimeout(runTest, 10);
40
    }, false);
41
    
42
  </script>
43
</head>
44
<body>
45
46
<!-- In pixel results, you should see a single green square with no red. -->
47
<div id="indicator"></div>
48
<iframe id="frame" src="resources/nested-subframe.html"></iframe>
49
50
</body>
51
</html>
- a/LayoutTests/compositing/iframes/resources/nested-subframe.html +17 lines
Line 0 a/LayoutTests/compositing/iframes/resources/nested-subframe.html_sec1
1
<html>
2
<head>
3
  <style type="text/css">
4
    body {
5
        margin: 0;
6
    }
7
    iframe {
8
      border: none;
9
    }
10
  </style>
11
</head>
12
<body>
13
14
<iframe id="subframe" src="subsubframe.html" scrolling="no"></iframe>
15
16
</body>
17
</html>
- a/LayoutTests/compositing/iframes/resources/subsubframe.html +25 lines
Line 0 a/LayoutTests/compositing/iframes/resources/subsubframe.html_sec1
1
<!DOCTYPE html>
2
3
<html>
4
<head>
5
  <style type="text/css" media="screen">
6
    body {
7
      height: 1000px;
8
      margin: 0;
9
    }
10
    
11
    .box {
12
        height: 100px;
13
        width: 100px;
14
        margin: 100px 0;
15
        background-color: green;
16
    }
17
  </style>
18
</head>
19
<body>
20
21
    <div class="box">
22
    </div>
23
    
24
</body>
25
</html>
- a/WebCore/ChangeLog +19 lines
Lines 2-7 a/WebCore/ChangeLog_sec1
2
2
3
        Reviewed by NOBODY (OOPS!).
3
        Reviewed by NOBODY (OOPS!).
4
4
5
        Iframes nested inside a compositing layer don't repaint correctly
6
        https://bugs.webkit.org/show_bug.cgi?id=48880
7
        <rdar://problem/8194698>
8
        
9
        The isEnclosedInCompositingLayer() is used to modify the behavior of
10
        -[WebClipView visibleRect:] in WebKit, so that scrolling-related repaints
11
        are correct in composited iframes. Previously it only asked whether the
12
        frame's renderer was in a compositing layer, but we actually need to
13
        consult all ancestors.
14
        
15
        Test: compositing/iframes/nested-iframe-scrolling.html
16
17
        * page/FrameView.cpp:
18
        (WebCore::FrameView::isEnclosedInCompositingLayer):
19
20
2010-11-02  Simon Fraser  <simon.fraser@apple.com>
21
22
        Reviewed by NOBODY (OOPS!).
23
5
        Overlapped nested iframes show smearing when scrolled
24
        Overlapped nested iframes show smearing when scrolled
6
        https://bugs.webkit.org/show_bug.cgi?id=48873
25
        https://bugs.webkit.org/show_bug.cgi?id=48873
7
26
- a/WebCore/page/FrameView.cpp -3 / +8 lines
Lines 573-582 bool FrameView::isEnclosedInCompositingLayer() const a/WebCore/page/FrameView.cpp_sec1
573
{
573
{
574
#if USE(ACCELERATED_COMPOSITING)
574
#if USE(ACCELERATED_COMPOSITING)
575
    RenderObject* frameOwnerRenderer = m_frame->ownerRenderer();
575
    RenderObject* frameOwnerRenderer = m_frame->ownerRenderer();
576
    return frameOwnerRenderer && frameOwnerRenderer->containerForRepaint();
576
    if (frameOwnerRenderer && frameOwnerRenderer->containerForRepaint())
577
#else
577
        return true;
578
    return false;
578
579
    if (Frame* parentFrame = m_frame->tree()->parent()) {
580
        if (FrameView* parentView = parentFrame->view())
581
            return parentView->isEnclosedInCompositingLayer();
582
    }
579
#endif
583
#endif
584
    return false;
580
}
585
}
581
586
582
bool FrameView::syncCompositingStateRecursive()
587
bool FrameView::syncCompositingStateRecursive()

Return to Bug 48880