Bug 48809

Summary: Update correct content state during back/forward navigations
Product: WebKit Reporter: Charles Reis <creis>
Component: WebKit APIAssignee: Nobody <webkit-unassigned>
Status: RESOLVED FIXED    
Severity: Normal CC: brettw, buildbot, commit-queue, fishd, levin, mihai, webkit-ews
Priority: P2    
Version: 528+ (Nightly build)   
Hardware: All   
OS: All   
URL: N/A
Bug Depends on: 49761    
Bug Blocks:    
Attachments:
Description Flags
Patch
none
Patch
none
Patch
none
Patch
none
Patch
none
Patch
none
Patch
none
Patch
none
Patch
none
Patch none

Description Charles Reis 2010-11-01 17:14:17 PDT
As part of http://code.google.com/p/chromium/issues/detail?id=58082, we discovered that Chromium's RenderView is sending UpdateState messages to the browser process using the page ID of the last committed history item but the state from the previous history item.  These are not necessarily the same history item, if multiple navigations have been attempted but have not committed.  For example, visiting multiple pages and then holding down the "back" keyboard shortcut can lead to corrupted UpdateState messages that have the original page's page ID but an intermediate page's state.

The UpdateState message should instead be sent with the state of the last committed history item, but the Chromium WebKit API does not currently expose this.  I propose adding WebFrame::lastCommittedHistoryItem() method, which will obtain the desired history item from BackForwardListClientImpl.  WebFrameImpl will have to notify BackForwardListClientImpl when history items commit, so that BackForwardListClientImpl can keep track of the correct item.

I have a draft changelist that shows that this fixes one of the key issues in Chromium bug 58082.
Comment 1 Charles Reis 2010-11-01 17:18:52 PDT
Created attachment 72605 [details]
Patch
Comment 2 Darin Fisher (:fishd, Google) 2010-11-04 14:03:17 PDT
Comment on attachment 72605 [details]
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=72605&action=review

> WebKit/chromium/src/WebFrameImpl.cpp:1006
> +    return WebHistoryItem(viewImpl()->lastCommittedHistoryItem());

I think you can implement this using m_frame->loader()->history()->currentItem()
as that provides you with the last-committed history item for this frame.

This would allow you to eliminate a lot of code in this patch.

Come to think of it, I suspect that WebFrameImpl::currentHistoryItem is
incorrectly implemented.  It is incorrectly accessing the currentItem of
the BackForwardList, which corresponds to the HistoryItem of the top-most
frame.  If a user of the WebKit API wants the HistoryItem of the top-most
frame, then they should just use WebFrame::top()->currentHistoryItem().

In other words, currentHistoryItem is supposed to mean the same thing as
lastCommittedHistoryItem.
Comment 3 Darin Fisher (:fishd, Google) 2010-11-04 14:06:16 PDT
Same goes for previousHistoryItem.  It should be returning the HistoryItem associated with the Frame, not the top-most Frame.
Comment 4 Charles Reis 2010-11-04 15:43:32 PDT
Comment on attachment 72605 [details]
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=72605&action=review

>> WebKit/chromium/src/WebFrameImpl.cpp:1006
>> +    return WebHistoryItem(viewImpl()->lastCommittedHistoryItem());
> 
> I think you can implement this using m_frame->loader()->history()->currentItem()
> as that provides you with the last-committed history item for this frame.
> 
> This would allow you to eliminate a lot of code in this patch.
> 
> Come to think of it, I suspect that WebFrameImpl::currentHistoryItem is
> incorrectly implemented.  It is incorrectly accessing the currentItem of
> the BackForwardList, which corresponds to the HistoryItem of the top-most
> frame.  If a user of the WebKit API wants the HistoryItem of the top-most
> frame, then they should just use WebFrame::top()->currentHistoryItem().
> 
> In other words, currentHistoryItem is supposed to mean the same thing as
> lastCommittedHistoryItem.

My test in http://codereview.chromium.org/4444001/show is showing that won't work.  m_frame->loader()->history()->currentItem() is returning the item for the navigation that's currently in progress, not the last committed item.  As a result, all the UpdateState messages are sending state from the page that's about to commit, rather than the one that's about to be replaced.

Is there another way to get at the history item for the last committed navigation?
Comment 5 Darin Fisher (:fishd, Google) 2010-11-04 16:09:00 PDT
(In reply to comment #4)
> My test in http://codereview.chromium.org/4444001/show is showing that won't work.  m_frame->loader()->history()->currentItem() is returning the item for the navigation that's currently in progress, not the last committed item.  As a result, all the UpdateState messages are sending state from the page that's about to commit, rather than the one that's about to be replaced.
> 
> Is there another way to get at the history item for the last committed navigation?

In that case, wouldn't the previousHistoryItem provide you with what you need?  The previousHistoryItem is the HistoryItem that was previously current.  So, if the currentHistoryItem is the new item, then the previousHistoryItem should be the one you need, no?
Comment 6 Charles Reis 2010-11-04 16:16:46 PDT
(In reply to comment #5)
> (In reply to comment #4)
> > My test in http://codereview.chromium.org/4444001/show is showing that won't work.  m_frame->loader()->history()->currentItem() is returning the item for the navigation that's currently in progress, not the last committed item.  As a result, all the UpdateState messages are sending state from the page that's about to commit, rather than the one that's about to be replaced.
> > 
> > Is there another way to get at the history item for the last committed navigation?
> 
> In that case, wouldn't the previousHistoryItem provide you with what you need?  The previousHistoryItem is the HistoryItem that was previously current.  So, if the currentHistoryItem is the new item, then the previousHistoryItem should be the one you need, no?

Here's the scenario:
 - Visit pages A, B, C
 - Quickly press back twice (to B and then to A), before B has a chance to commit.

At this point in time, A is the current item, B is the previous item, and C is the last committed item.  I need a way to get to C.  Note that there may be an arbitrary number of pages like B (between previous and last committed), if you hold down the back button and race past several entries.

The original bug is that we were using the previous item, which was giving us B, but the last committed page ID (corresponding to C).
Comment 7 Darin Fisher (:fishd, Google) 2010-11-04 16:42:01 PDT
> Here's the scenario:
>  - Visit pages A, B, C
>  - Quickly press back twice (to B and then to A), before B has a chance to commit.
> 
> At this point in time, A is the current item, B is the previous item, and C is the last committed item.  I need a way to get to C.  Note that there may be an arbitrary number of pages like B (between previous and last committed), if you hold down the back button and race past several entries.
> 
> The original bug is that we were using the previous item, which was giving us B, but the last committed page ID (corresponding to C).

Oh, I see.  Perhaps we should not be setting the previous HistoryItem until we successfully commit.  I think it may confuse other things if previousHistoryItem is not reliably the last committed HistoryItem.

The HistoryController appears to have the concept of a provisional HistoryItem that is only set once we commit.  See HistoryController::updateForCommit.

Perhaps you should try fixing WebFrameImpl::previousHistoryItem to use HistoryController::previousItem() instead of BackForwardList::previousItem()?

Likewise, perhaps we should defer the updating of BackForwardList::{current,previous}Item until we commit.  See HistoryController::goToItem, where it assigns those directly.
Comment 8 Charles Reis 2010-11-04 17:49:02 PDT
Created attachment 73018 [details]
Patch
Comment 9 Charles Reis 2010-11-04 17:50:49 PDT
(In reply to comment #7)
> Oh, I see.  Perhaps we should not be setting the previous HistoryItem until we successfully commit.  I think it may confuse other things if previousHistoryItem is not reliably the last committed HistoryItem.
> 
> The HistoryController appears to have the concept of a provisional HistoryItem that is only set once we commit.  See HistoryController::updateForCommit.
> 
> Perhaps you should try fixing WebFrameImpl::previousHistoryItem to use HistoryController::previousItem() instead of BackForwardList::previousItem()?

Ah.  This does fix the bug, and it looks like it's the right move for the other callers as well (e.g., the equivalent callers in test_shell and DRT).

Note that this requires adding a previousItem() getter to HistoryController, since it only has a private field for it and doesn't currently expose it.

> Likewise, perhaps we should defer the updating of BackForwardList::{current,previous}Item until we commit.  See HistoryController::goToItem, where it assigns those directly.

That seems like a much bigger change, especially since the comment in HistoryController::goToItem says it eagerly updates the BF cursor on purpose.  Do we need to tackle that one here?

I've uploaded a new patch.  The webkit-patch script generated the ChangeLog, but I'm wondering if I'm doing that wrong-- I thought this would have required modifications to two separate ChangeLog files.
Comment 10 Darin Fisher (:fishd, Google) 2010-11-05 08:41:06 PDT
Comment on attachment 73018 [details]
Patch

This change LGTM, but yeah... you need an entry in WebCore/ChangeLog.
Comment 11 Darin Fisher (:fishd, Google) 2010-11-05 08:41:47 PDT
(In reply to comment #9)
> Ah.  This does fix the bug, and it looks like it's the right move for the other callers as well (e.g., the equivalent callers in test_shell and DRT).

Excellent!


> > Likewise, perhaps we should defer the updating of BackForwardList::{current,previous}Item until we commit.  See HistoryController::goToItem, where it assigns those directly.
> 
> That seems like a much bigger change, especially since the comment in HistoryController::goToItem says it eagerly updates the BF cursor on purpose.  Do we need to tackle that one here?

Agreed.  It is better tackled elsewhere.
Comment 12 Charles Reis 2010-11-05 10:21:43 PDT
Created attachment 73077 [details]
Patch
Comment 13 WebKit Commit Bot 2010-11-05 11:24:45 PDT
Comment on attachment 73077 [details]
Patch

Clearing flags on attachment: 73077

Committed r71437: <http://trac.webkit.org/changeset/71437>
Comment 14 WebKit Commit Bot 2010-11-05 11:24:51 PDT
All reviewed patches have been landed.  Closing bug.
Comment 15 Charles Reis 2010-11-08 09:59:40 PST
After this landed and got picked up by Chrome, Chrome's SessionHistoryTest.FragmentBackForward started failing.  That test:
 - Visits fragment.html#a, fragment.html#b, fragment.html#c
 - Goes back several times, expecting to see them in reverse order

Instead, it sees #b (correct), then #c (incorrect), and keeps alternating between them.  I can verify this behavior manually in Chrome, but not in test_shell.  I'll have to take a closer look to see how this change caused that.
Comment 16 Darin Fisher (:fishd, Google) 2010-11-08 10:31:00 PST
(In reply to comment #15)
> After this landed and got picked up by Chrome, Chrome's SessionHistoryTest.FragmentBackForward started failing.  That test:
>  - Visits fragment.html#a, fragment.html#b, fragment.html#c
>  - Goes back several times, expecting to see them in reverse order
> 
> Instead, it sees #b (correct), then #c (incorrect), and keeps alternating between them.  I can verify this behavior manually in Chrome, but not in test_shell.  I'll have to take a closer look to see how this change caused that.

Ugh.  It is not uncommon for code in Chromium (e.g., navigation_controller.cc) to be working against you in cases like this because it was trying to compensate for some bug in WebKit (such as the one you fixed here).
Comment 17 Charles Reis 2010-11-08 17:10:09 PST
(In reply to comment #16)
> Ugh.  It is not uncommon for code in Chromium (e.g., navigation_controller.cc) to be working against you in cases like this because it was trying to compensate for some bug in WebKit (such as the one you fixed here).

Interesting-- this didn't turn out the way I expected.  The problem is that HistoryController's m_previousItem is null after the load commits, rather than being the last committed history item.  It gets set to null in HistoryController::updateForFrameLoadCompleted.  (As a result, WebFrameImpl::previousHistoryItem returns null when Chrome tries to send UpdateState messages, which leads to the bug I mentioned.  Details: http://code.google.com/p/chromium/issues/detail?id=62156)

I'm wary about changing the behavior of HistoryController itself, but that does seem like odd behavior.  Darin, do you understand what's going on there?  Is it better to change to having a new WebFrameImpl::lastCommittedHistoryItem() method (as in the earlier patch here), or to try to avoid setting m_previousItem to null?

Either way, this has led to buggy navigation behavior in Chrome, so we may want to revert this patch.
Comment 18 Charles Reis 2010-11-08 17:32:37 PST
(In reply to comment #17)
> Interesting-- this didn't turn out the way I expected.  The problem is that HistoryController's m_previousItem is null after the load commits, rather than being the last committed history item.  It gets set to null in HistoryController::updateForFrameLoadCompleted.  (As a result, WebFrameImpl::previousHistoryItem returns null when Chrome tries to send UpdateState messages, which leads to the bug I mentioned.  Details: http://code.google.com/p/chromium/issues/detail?id=62156)

A small clarification: m_previousItem always gets set to null, but it's at different times depending on whether it's a fragment navigation or not (which is why the Chrome bug only happens when navigating to a URL fragment).  For normal navigations, updateForFrameLoadCompleted gets called after we send the UpdateState message.  For fragment navigations, it gets called twice before we send the UpdateState message (preventing the message from getting sent).
Comment 19 Darin Fisher (:fishd, Google) 2010-11-09 08:51:55 PST
(In reply to comment #18)
> (In reply to comment #17)
> > Interesting-- this didn't turn out the way I expected.  The problem is that HistoryController's m_previousItem is null after the load commits, rather than being the last committed history item.  It gets set to null in HistoryController::updateForFrameLoadCompleted.  (As a result, WebFrameImpl::previousHistoryItem returns null when Chrome tries to send UpdateState messages, which leads to the bug I mentioned.  Details: http://code.google.com/p/chromium/issues/detail?id=62156)
> 
> A small clarification: m_previousItem always gets set to null, but it's at different times depending on whether it's a fragment navigation or not (which is why the Chrome bug only happens when navigating to a URL fragment).  For normal navigations, updateForFrameLoadCompleted gets called after we send the UpdateState message.  For fragment navigations, it gets called twice before we send the UpdateState message (preventing the message from getting sent).

I can't think of any good reason for nulling out m_previousItem.  Does anything actually break (layout test wise) if you make HistoryController::updateForFrameLoadCompleted() do nothing?  The comment in that function seems out-of-date.  It seems like the kind of thing that m_provisionalItem resolves.
Comment 20 Charles Reis 2010-11-09 12:17:39 PST
(In reply to comment #19)

> I can't think of any good reason for nulling out m_previousItem.  Does anything actually break (layout test wise) if you make HistoryController::updateForFrameLoadCompleted() do nothing?  The comment in that function seems out-of-date.  It seems like the kind of thing that m_provisionalItem resolves.

Yep, that breaks forward fragment navigations (in both Chrome and test_shell).  Plus it introduces a crash in certain cases because of an ASSERT(!m_previousItem) in HistoryController::recursiveGoToItem on line 567.  Disabling the assert still leaves the problem with forward navigations.

It's too bad these files aren't better commented, because it's not clear what values m_previousItem is expected to have at various points in time.  There seem to be a lot of assumptions that it is null between navigations rather than pointing to the last committed item, though.
Comment 21 Darin Fisher (:fishd, Google) 2010-11-10 13:37:58 PST
So, if we are going to have a m_lastCommittedItem anywhere, I think it should probably be maintained on HistoryController.  I suspect m_previousItem should be that, but it sounds like we'd need to untangle some things first.
Comment 22 Charles Reis 2010-11-11 13:23:54 PST
I dug a little deeper and found the root cause of why previousItem wasn't working for fragments.  As I mentioned in comment 18, HistoryController::updateForFrameLoadCompleted() is getting called before the content state is updated, which means m_previousItem is null when we need it.

It turns out this is because FrameLoader::loadInSameDocument() is simply calling dispatchDidNavigateWithinPage() after calling checkComplete() and checkLoadComplete().  By moving the dispatchDidNavigateWithinPage() call earlier, we still have m_previousItem when the content state is updated.  This fixes the issue with fragment navigations entirely.

I've double checked that the behavior of Chromium's FrameLoaderClientImpl::dispatchDidNavigateWithinPage() is the same whether we call it before or after checkComplete().  I'm running the layout tests now to be sure.  Patch on the way-- it's nice and simple, since we don't need to keep track of lastCommittedItem separately anymore.
Comment 23 Charles Reis 2010-11-11 13:26:37 PST
Created attachment 73647 [details]
Patch
Comment 24 Charles Reis 2010-11-11 14:29:18 PST
Comment on attachment 73647 [details]
Patch

This has two failing layout tests:
fast/history/same-document-iframes-changing-pushstate.html
fast/loader/stateobjects/document-destroyed-navigate-back.html

I'll look into it and update accordingly.
Comment 25 Charles Reis 2010-11-11 19:05:55 PST
Found the problem with the pushstate tests.  They revealed that we were not sending a content state update for same-page back/forward navigations before (because m_previousItem was 0).  After my change, we were sending updates, but with the wrong value for m_previousItem.

The problem was that HistoryController::m_previousItem was not being updated for back/forward navigations-- it's perfectly safe to send a content state update, as long as it's the correct one.

The new patch I'm uploading ensures m_previousItem is correct in this case by updating it in HistoryController::setCurrentItem.  The layout tests I mention in comment 24 cover the change, but I'm running the rest of the tests to double check.
Comment 26 Charles Reis 2010-11-11 19:06:23 PST
Created attachment 73692 [details]
Patch
Comment 27 Charles Reis 2010-11-12 10:37:36 PST
There's a lot of noise on the Chromium try servers (i.e., layout tests that fail with or without my change), but the results look good to me-- I haven't seen any failures relevant to the patch.  I'd say it's ready for review.
Comment 28 Mihai Parparita 2010-11-12 15:51:14 PST
Comment on attachment 73692 [details]
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=73692&action=review

> WebCore/ChangeLog:8
> +        https://bugs.webkit.org/show_bug.cgi?id=48809

BTW, the usual ChangeLog format (if you use webkit-patch upload) is:

[bug title]
[bug link]

[longer description]

(this assumes you're going to retitle the bug, since you're not actually adding lastCommittedHistoryItem() anymore)
Comment 29 Charles Reis 2010-11-12 18:04:00 PST
(In reply to comment #28)
> BTW, the usual ChangeLog format (if you use webkit-patch upload) is:
> 
> [bug title]
> [bug link]
> 
> [longer description]
> 
> (this assumes you're going to retitle the bug, since you're not actually adding lastCommittedHistoryItem() anymore)

Sure-- update on the way.
Comment 30 Charles Reis 2010-11-12 18:15:05 PST
Created attachment 73802 [details]
Patch
Comment 31 Darin Fisher (:fishd, Google) 2010-11-15 14:20:54 PST
Comment on attachment 73802 [details]
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=73802&action=review

> WebCore/loader/FrameLoader.cpp:1164
> +    m_client->dispatchDidNavigateWithinPage();

Moving this here seems wrong to me.  This notification is meant to be
generated after the within-page navigation completes.  I'm concerned
that checkCompleted and checkLoadCompleted change our state in ways
that should be observable from dispatchDidNavigateWithinPage.  For
example, it looks like checkCompleted may generate a readystatechange
event on the document.

It still seems to me that the right solution is to not clear m_previousItem.
Given your change to setCurrentItem, does the forward navigation issue go
away by any chance?  Can you try to unravel what is going on there?

I can point to places in HistoryController that assume m_previousItem will
be valid.  See HistoryController::createItemTree.
Comment 32 Charles Reis 2010-11-15 16:00:35 PST
(In reply to comment #31)
> (From update of attachment 73802 [details])
> View in context: https://bugs.webkit.org/attachment.cgi?id=73802&action=review
> 
> > WebCore/loader/FrameLoader.cpp:1164
> > +    m_client->dispatchDidNavigateWithinPage();
> 
> Moving this here seems wrong to me.  This notification is meant to be
> generated after the within-page navigation completes.  I'm concerned
> that checkCompleted and checkLoadCompleted change our state in ways
> that should be observable from dispatchDidNavigateWithinPage.  For
> example, it looks like checkCompleted may generate a readystatechange
> event on the document.
> 
> It still seems to me that the right solution is to not clear m_previousItem.
> Given your change to setCurrentItem, does the forward navigation issue go
> away by any chance?  Can you try to unravel what is going on there?
> 
> I can point to places in HistoryController that assume m_previousItem will
> be valid.  See HistoryController::createItemTree.

Yes, with my change to setCurrentItem, it still works in most cases if we revert the FrameLoader change and don't clear m_previousItem in updateForFrameLoadCompleted.  There's a few layout tests that crash or fail now (e.g., due to the ASSERT in recursiveGoToItem), but I'll take a closer look at the assumptions to see if I can fix them.

For reference, I'm seeing fast/history/history-back-within-subframe-hash.html crash and fast/history/saves-state-after-fragment-nav.html fail.
Comment 33 Darin Fisher (:fishd, Google) 2010-11-15 16:13:14 PST
> Yes, with my change to setCurrentItem, it still works in most cases if we revert the FrameLoader change and don't clear m_previousItem in updateForFrameLoadCompleted.  There's a few layout tests that crash or fail now (e.g., due to the ASSERT in recursiveGoToItem), but I'll take a closer look at the assumptions to see if I can fix them.

Cool!


> For reference, I'm seeing fast/history/history-back-within-subframe-hash.html crash and fast/history/saves-state-after-fragment-nav.html fail.

OK.

My thinking here is that if we keep pulling on this thread that we'll find that things can be simpler, which would be good.
Comment 34 Charles Reis 2010-11-16 19:48:23 PST
(In reply to comment #33)
> My thinking here is that if we keep pulling on this thread that we'll find that things can be simpler, which would be good.

The main difficulty is the way that saveDocumentState saves the state of different items (previous or current) at different points in time.  That function assumes that "m_previousItem == 0" implies that the load has completed, in which case it should use current rather than previous.

I've teased apart the state of whether the load has completed from the value of previousItem, by adding a m_frameLoadCompleted field.  This has the advantage of matching the previous WebCore behavior, while keeping a valid item in m_previousItem so that Chromium's UpdateSessionHistory call works.

It might be possible to simplify things further, but I'd need help understanding more of the assumptions around frame loading.  Since Chromium is currently broken on fragment back/forward navigations, it might be nice to get a simple fix like this in place before taking time to refactor further.

Thoughts?
Comment 35 Charles Reis 2010-11-16 19:48:51 PST
Created attachment 74079 [details]
Patch
Comment 36 Early Warning System Bot 2010-11-16 20:03:47 PST
Attachment 74079 [details] did not build on qt:
Build output: http://queues.webkit.org/results/6227003
Comment 37 Charles Reis 2010-11-16 21:28:13 PST
Created attachment 74082 [details]
Patch
Comment 38 Build Bot 2010-11-16 21:50:34 PST
Attachment 74079 [details] did not build on win:
Build output: http://queues.webkit.org/results/6221005
Comment 39 Darin Fisher (:fishd, Google) 2010-11-17 00:07:18 PST
Comment on attachment 74082 [details]
Patch

R=me

I like the explicit member variable.  This seems like an improvement over inferring
"frame load complete" from m_previousItem being null.
Comment 40 WebKit Commit Bot 2010-11-18 09:35:33 PST
Comment on attachment 74082 [details]
Patch

Clearing flags on attachment: 74082

Committed r72299: <http://trac.webkit.org/changeset/72299>
Comment 41 WebKit Commit Bot 2010-11-18 09:35:40 PST
All reviewed patches have been landed.  Closing bug.
Comment 42 David Levin 2010-11-18 14:07:18 PST
Rolled out in http://trac.webkit.org/changeset/72334

Broke chromium ui test SessionHistoryTest.FrameBackForward.
Comment 43 Charles Reis 2010-11-19 15:27:32 PST
(In reply to comment #42)
> Rolled out in http://trac.webkit.org/changeset/72334
> 
> Broke chromium ui test SessionHistoryTest.FrameBackForward.

Good news-- that test caught a real issue with the patch, and it uncovered a previously existing bug that we can now fix.  (We weren't saving form state for subframes when you navigate back and forward.)

Turns out there was one other place in HistoryController where we were changing m_currentItem but not m_previousItem (in recursiveGoToItem).  Before my patch, that caused us to skip the content state update in that case, which meant we didn't save form state if the form was in a subframe and you navigated back/forward.

After my earlier patch landed, we were updating the wrong history item, which was caught by Chrome's UI test.  I've now fixed recursiveGoToItem so that it updates m_previousItem, and I've added a layout test for it in the latest patch.
Comment 44 Charles Reis 2010-11-19 15:28:08 PST
Created attachment 74433 [details]
Patch
Comment 45 WebKit Commit Bot 2010-11-20 00:45:30 PST
Comment on attachment 74433 [details]
Patch

Rejecting patch 74433 from commit-queue.

Failed to run "['./WebKitTools/Scripts/webkit-patch', '--status-host=queues.webkit.org', '--bot-id=eseidel-cq-sl', 'build-and-test', '--no-clean', '--no-update', '--test', '--non-interactive']" exit_code: 2
Last 500 characters of output:
...............
fast/frames ...................................................................................................................
fast/frames/flattening ...........
fast/gradients ...........
fast/harness ......
fast/history ...................
fast/history/saves-state-after-frame-nav.html -> failed

Exiting early after 1 failures. 8610 tests run.
439.55s total testing time

8609 test cases (99%) succeeded
1 test case (<1%) had incorrect layout
4 test cases (<1%) had stderr output

Full output: http://queues.webkit.org/results/6246062
Comment 46 Charles Reis 2010-11-20 13:53:00 PST
(In reply to comment #45)
> (From update of attachment 74433 [details])
> Rejecting patch 74433 from commit-queue.
> 
> Failed to run "['./WebKitTools/Scripts/webkit-patch', '--status-host=queues.webkit.org', '--bot-id=eseidel-cq-sl', 'build-and-test', '--no-clean', '--no-update', '--test', '--non-interactive']" exit_code: 2
> Last 500 characters of output:
> ...............
> fast/frames ...................................................................................................................
> fast/frames/flattening ...........
> fast/gradients ...........
> fast/harness ......
> fast/history ...................
> fast/history/saves-state-after-frame-nav.html -> failed
> 
> Exiting early after 1 failures. 8610 tests run.
> 439.55s total testing time
> 
> 8609 test cases (99%) succeeded
> 1 test case (<1%) had incorrect layout
> 4 test cases (<1%) had stderr output
> 
> Full output: http://queues.webkit.org/results/6246062

Turns out this just needed another newline at the end of the expected.txt file.  The Chromium try servers didn't catch that.
Comment 47 Charles Reis 2010-11-20 13:56:59 PST
Created attachment 74487 [details]
Patch
Comment 48 WebKit Commit Bot 2010-11-22 14:28:10 PST
The commit-queue encountered the following flaky tests while processing attachment 74487 [details]:

fast/dom/prototype-inheritance.html
compositing/iframes/overlapped-nested-iframes.html

Please file bugs against the tests.  These tests were authored by eric@webkit.org, hamaji@chromium.org, and simon.fraser@apple.com.  The commit-queue is continuing to process your patch.
Comment 49 WebKit Commit Bot 2010-11-22 15:01:38 PST
Comment on attachment 74487 [details]
Patch

Clearing flags on attachment: 74487

Committed r72566: <http://trac.webkit.org/changeset/72566>
Comment 50 WebKit Commit Bot 2010-11-22 15:01:46 PST
All reviewed patches have been landed.  Closing bug.