<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>38921</bug_id>
          
          <creation_ts>2010-05-11 11:39:28 -0700</creation_ts>
          <short_desc>[Qt] emit initialLayoutCompleted signal from FrameLoaderClientQt::dispatchDidFirstVisuallyNonEmptyLayout</short_desc>
          <delta_ts>2011-05-05 18:04:07 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>CLOSED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Qt, QtTriaged</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>35784</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Antonio Gomes">tonikitoo</reporter>
          <assigned_to name="Antonio Gomes">tonikitoo</assigned_to>
          <cc>hausmann</cc>
    
    <cc>kenneth</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>224044</commentid>
    <comment_count>0</comment_count>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2010-05-11 11:39:28 -0700</bug_when>
    <thetext>In QWebFrame docs we have:

(..)
/*!
    \fn void QWebFrame::initialLayoutCompleted()

    This signal is emitted when the frame is laid out the first time.
    This is the first time you will see contents displayed on the frame.

    \note A frame can be laid out multiple times.
*/
(..)

However FrameLoaderClient::dispatchDidFirstLayout (who emits initialLayoutCompleted) can be called more than once and even when there is no content in fact &quot;drawn&quot;. One example of this is when ones changes the viewport size (QWebPage::setViewportSize) before any page load, as in following snippet:

void tst_QGraphicsWebView::crashOnViewlessWebPages()
{
  QGraphicsScene scene;
  QGraphicsView view(&amp;scene);

  QGraphicsWebView* webView = new QGraphicsWebView;
  WebPage* page = new WebPage;
  webView-&gt;setPage(page);
  page-&gt;webView = webView;
  scene.addItem(webView);

  connect(page-&gt;mainFrame(), SIGNAL(initialLayoutCompleted()), page, SLOT(aborting()));

  view.setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
  view.resize(600, 480);
  webView-&gt;resize(view.geometry().size());
  QCoreApplication::processEvents();
  view.show();

  page-&gt;mainFrame()-&gt;setHtml(QString(&quot;data:text/html,&lt;h1&gt;blah&quot;));
  (...)
}

&quot;initialLayoutCompleted&quot; signal is emitted (and WebPage::aborting slot is called) even before page-&gt;mainFrame()-&gt;setHtml is executed because there is a webView-&gt;resize (which triggers qwebpage::setViewportSize and FrameView::layout())

In r39385 FrameLoaderClient::dispatchDidFirstVisuallyNonEmptyLayout was introduced, and I think it is the best place to emit initialLayoutCompleted signal. Its documentation says: 

&quot;Add new FrameLoaderClient method to indicate the first visually non-empty layout based on an heuristic.  Right now that heuristic
is the first layout after an image, text or plugin has been added to the render tree, but I can imagine it becoming much smarter.&quot;

and it matches more to qwebframe docs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>224050</commentid>
    <comment_count>1</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-05-11 11:45:19 -0700</bug_when>
    <thetext>It is only called once, but once per page. &quot;about:blank&quot; also counts as a page.

That in mind, I still think it makes sense using the new dispatch method instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>224053</commentid>
    <comment_count>2</comment_count>
      <attachid>55728</attachid>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2010-05-11 11:48:42 -0700</bug_when>
    <thetext>Created attachment 55728
(committed in r59163, reviewed by kenneth) patch v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>224055</commentid>
    <comment_count>3</comment_count>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2010-05-11 11:50:37 -0700</bug_when>
    <thetext>(In reply to comment #1)
&gt; It is only called once, but once per page. &quot;about:blank&quot; also counts as a page.

To be precise, it is one per frame.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>224062</commentid>
    <comment_count>4</comment_count>
      <attachid>55728</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-05-11 11:53:21 -0700</bug_when>
    <thetext>Comment on attachment 55728
(committed in r59163, reviewed by kenneth) patch v1

LGTM</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>224078</commentid>
    <comment_count>5</comment_count>
      <attachid>55728</attachid>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2010-05-11 12:21:59 -0700</bug_when>
    <thetext>Comment on attachment 55728
(committed in r59163, reviewed by kenneth) patch v1

Clearing flags on attachment: 55728

Committed r59163: &lt;http://trac.webkit.org/changeset/59163&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>225702</commentid>
    <comment_count>6</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2010-05-14 01:19:19 -0700</bug_when>
    <thetext>Revision r59163 cherry-picked into qtwebkit-2.0 with commit 0a778f7ce0f8c905339b884030b48d93d5b90b7c</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>399255</commentid>
    <comment_count>7</comment_count>
      <attachid>55728</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-05-05 18:04:07 -0700</bug_when>
    <thetext>Comment on attachment 55728
(committed in r59163, reviewed by kenneth) patch v1

Attachment 92515 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/8592040</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>55728</attachid>
            <date>2010-05-11 11:48:42 -0700</date>
            <delta_ts>2011-05-05 18:04:07 -0700</delta_ts>
            <desc>(committed in r59163, reviewed by kenneth) patch v1</desc>
            <filename>0001-Qt-emit-initialLayoutCompleted-signal-from-FrameLoad.patch</filename>
            <type>text/plain</type>
            <size>3425</size>
            <attacher name="Antonio Gomes">tonikitoo</attacher>
            
              <data encoding="base64">RnJvbSBiNDcxNjE5NGU1MmI2YWYyMmEwNzI3N2Y3YWE4NjkwY2Q1MTk5Y2Y2IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBBbnRvbmlvIEdvbWVzIDx0b25pa2l0b29Ad2Via2l0Lm9yZz4K
RGF0ZTogVHVlLCAxMSBNYXkgMjAxMCAxNDo0NzoyMCAtMDQwMApTdWJqZWN0OiBbUEFUQ0hdIFtR
dF0gZW1pdCBpbml0aWFsTGF5b3V0Q29tcGxldGVkIHNpZ25hbCBmcm9tIEZyYW1lTG9hZGVyQ2xp
ZW50UXQ6OmRpc3BhdGNoRGlkRmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0CiBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzg5MjEKClJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgpQYXRjaCBieSBBbnRvbmlvIEdvbWVzIDx0b25pa2l0b29Ad2Via2l0Lm9yZz4KCkVt
aXQgaW5pdGlhbExheW91dENvbXBsZXRlZCBzaWduYWwgZnJvbSBGcmFtZUxvYWRlckNsaWVudFF0
OjpkaXNwYXRjaERpZEZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dAppbnN0ZWFkIG9mIEZyYW1l
TG9hZGVyQ2xpZW50UXQ6OmRpc3BhdGNoRGlkRmlyc3RMYXlvdXQgLCBiZWNhdXNlIHRoZSBmb3Jt
ZXIgZW5zdXJlcyB0aGF0IGEKdmlzdWFsIGNvbnRlbnQgbGF5ZWQgb3V0IG9uIHRoZSBmcmFtZS4K
Ckl0IG1hdGNoZXMgdG8gUVdlYkZyYW1lOjppbml0aWFsTGF5b3V0Q29tcGxldGVkIHNpZ25hbCBk
b2N1bWVudGF0aW9uIGF0OgoKIi4uLiBUaGlzIGlzIHRoZSBmaXJzdCB0aW1lIHlvdSB3aWxsIHNl
ZSBjb250ZW50cyBkaXNwbGF5ZWQgb24gdGhlIGZyYW1lIC4uLiIKCiogV2ViQ29yZVN1cHBvcnQv
RnJhbWVMb2FkZXJDbGllbnRRdC5jcHA6CihXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudFF0Ojpk
aXNwYXRjaERpZEZpcnN0TGF5b3V0KToKKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50UXQ6OmRp
c3BhdGNoRGlkRmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0KToKLS0tCiBXZWJLaXQvcXQvQ2hh
bmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDE5ICsrKysrKysrKysrKysr
KysrKysKIFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFF0LmNwcCB8
ICAgIDYgKysrLS0tCiAyIGZpbGVzIGNoYW5nZWQsIDIyIGluc2VydGlvbnMoKyksIDMgZGVsZXRp
b25zKC0pCgpkaWZmIC0tZ2l0IGEvV2ViS2l0L3F0L0NoYW5nZUxvZyBiL1dlYktpdC9xdC9DaGFu
Z2VMb2cKaW5kZXggZDI1OWYwMS4uZTBkNmI5ZCAxMDA2NDQKLS0tIGEvV2ViS2l0L3F0L0NoYW5n
ZUxvZworKysgYi9XZWJLaXQvcXQvQ2hhbmdlTG9nCkBAIC0xLDggKzEsMjcgQEAKKzIwMTAtMDUt
MTEgIEFudG9uaW8gR29tZXMgIDx0b25pa2l0b29Ad2Via2l0Lm9yZz4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbUXRdIGVtaXQgaW5pdGlhbExheW91
dENvbXBsZXRlZCBzaWduYWwgZnJvbSBGcmFtZUxvYWRlckNsaWVudFF0OjpkaXNwYXRjaERpZEZp
cnN0VmlzdWFsbHlOb25FbXB0eUxheW91dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9Mzg5MjEKKworICAgICAgICBFbWl0IGluaXRpYWxMYXlvdXRDb21w
bGV0ZWQgc2lnbmFsIGZyb20gRnJhbWVMb2FkZXJDbGllbnRRdDo6ZGlzcGF0Y2hEaWRGaXJzdFZp
c3VhbGx5Tm9uRW1wdHlMYXlvdXQKKyAgICAgICAgaW5zdGVhZCBvZiBGcmFtZUxvYWRlckNsaWVu
dFF0OjpkaXNwYXRjaERpZEZpcnN0TGF5b3V0ICwgYmVjYXVzZSB0aGUgZm9ybWVyIGVuc3VyZXMg
dGhhdCBhCisgICAgICAgIHZpc3VhbCBjb250ZW50IGxheWVkIG91dCBvbiB0aGUgZnJhbWUuCisK
KyAgICAgICAgSXQgbWF0Y2hlcyB0byBRV2ViRnJhbWU6OmluaXRpYWxMYXlvdXRDb21wbGV0ZWQg
c2lnbmFsIGRvY3VtZW50YXRpb24gYXQ6CisKKyAgICAgICAgIi4uLiBUaGlzIGlzIHRoZSBmaXJz
dCB0aW1lIHlvdSB3aWxsIHNlZSBjb250ZW50cyBkaXNwbGF5ZWQgb24gdGhlIGZyYW1lIC4uLiIK
KworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50UXQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRRdDo6ZGlzcGF0Y2hEaWRGaXJzdExheW91
dCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudFF0OjpkaXNwYXRjaERpZEZp
cnN0VmlzdWFsbHlOb25FbXB0eUxheW91dCk6CisKIDIwMTAtMDUtMTEgIEplc3VzIFNhbmNoZXot
UGFsZW5jaWEgIDxqZXN1c0B3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEtlbm5l
dGggUm9oZGUgQ2hyaXN0aWFuc2VuLgogCiAgICAgICAgIEFkZCBQYWdlQ2xpZW50UUdyYXBoaWNz
V2lkZ2V0IHNwZWNpZmljIGltcGxlbWVudGF0aW9uLgogICAgICAgICBRR3JhcGhpY3NXZWJWaWV3
UHJpdmF0ZSBkb2Vzbid0IGluaGVyaXQgUVdlYlBhZ2VDbGllbnQgYW55bW9yZQogICAgICAgICBh
bmQgdGhlIG5lZWRlZCBmdW5jdGlvbnMgd2VyZSBtb3ZlZCB0byB0aGlzIG5ldyBQYWdlQ2xpZW50
IGNsYXNzLAogICAgICAgICBpbmNsdWRpbmcgVGlsaW5nIGFuZCBBY2NlbGVyYXRlZCBDb21wb3Np
dGUgc3BlY2lmaWMgb25lcy4KZGlmZiAtLWdpdCBhL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9G
cmFtZUxvYWRlckNsaWVudFF0LmNwcCBiL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9GcmFtZUxv
YWRlckNsaWVudFF0LmNwcAppbmRleCBhMGIwNmZiLi4wNWUwNTRiIDEwMDY0NAotLS0gYS9XZWJL
aXQvcXQvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRRdC5jcHAKKysrIGIvV2ViS2l0
L3F0L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50UXQuY3BwCkBAIC00NDEsMjMgKzQ0
MSwyMyBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50UXQ6OmRpc3BhdGNoRGlkRmluaXNoTG9hZCgp
CiAgICAgaWYgKCFtX3dlYkZyYW1lKQogICAgICAgICByZXR1cm47CiAgICAgbV93ZWJGcmFtZS0+
cGFnZSgpLT5kLT51cGRhdGVOYXZpZ2F0aW9uQWN0aW9ucygpOwogfQogCiAKIHZvaWQgRnJhbWVM
b2FkZXJDbGllbnRRdDo6ZGlzcGF0Y2hEaWRGaXJzdExheW91dCgpCiB7Ci0gICAgaWYgKG1fd2Vi
RnJhbWUpCi0gICAgICAgIGVtaXQgbV93ZWJGcmFtZS0+aW5pdGlhbExheW91dENvbXBsZXRlZCgp
OworICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRRdDo6
ZGlzcGF0Y2hEaWRGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXQoKQogewotICAgIG5vdEltcGxl
bWVudGVkKCk7CisgICAgaWYgKG1fd2ViRnJhbWUpCisgICAgICAgIGVtaXQgbV93ZWJGcmFtZS0+
aW5pdGlhbExheW91dENvbXBsZXRlZCgpOwogfQogCiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50UXQ6
OmRpc3BhdGNoU2hvdygpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAogCi0tIAoxLjYu
My4zCgo=
</data>
<flag name="commit-queue"
          id="85498"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
      

    </bug>

</bugzilla>