From aedd85af7d7d0c90ed343ece4c66660db00841ec Mon Sep 17 00:00:00 2001 From: "finnur@google.com" Date: Thu, 4 Dec 2008 19:32:49 +0000 Subject: Fix issue 5079: Incorrect "Active match ordinal" count during Find-in-page I introduced a regression in my reimplemenation of Find-in-page. The active match ordinal in Find-in-page (also known as "the 7" in "7 of 9") would be just a little off on pages with frames. Problem A: When you search for something in gmail, for example, the ordinal could start off slightly negative or be 0. I wasn't checking the last_match_count_ of a frame for negative numbers before adding it to the total (it starts off as -1 and remains that way if the frame is not deemed to be worthy of being scoped, i.e. if it is hidden). Problem B: On pages with multiple matches spread across multiple frames the ordinal would not be subtracted correctly after pressing F3 and Shift-F3 to go back to the frame you were on. We shouldn't be increasing/decreasing the active_match_index for a given frame when FindNext/FindPrevious causes us to jump between frames. We should instead reset it. I added two tests to catch this in the future. They test ordinal values as you use Find in page (including combinations of frames/no-frames & FindNext/FindPrevious). Oh, and I also removed some traces that were supposed to expose why a test was flaky, but it turns out to have been something unrelated to the test. Review URL: http://codereview.chromium.org/13130 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@6369 0039d316-1c4b-4281-b951-d872f2087c98 --- chrome/test/automation/tab_proxy.cc | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) (limited to 'chrome/test/automation/tab_proxy.cc') diff --git a/chrome/test/automation/tab_proxy.cc b/chrome/test/automation/tab_proxy.cc index 7668c19..0b87689 100644 --- a/chrome/test/automation/tab_proxy.cc +++ b/chrome/test/automation/tab_proxy.cc @@ -121,7 +121,8 @@ bool TabProxy::GetFindWindowLocation(int* x, int* y) { int TabProxy::FindInPage(const std::wstring& search_string, FindInPageDirection forward, FindInPageCase match_case, - bool find_next) { + bool find_next, + int* active_ordinal) { if (!is_valid()) return -1; @@ -136,14 +137,18 @@ int TabProxy::FindInPage(const std::wstring& search_string, bool succeeded = sender_->SendAndWaitForResponse( new AutomationMsg_FindRequest(0, handle_, request), &response, - AutomationMsg_FindInPageResponse::ID); + AutomationMsg_FindInPageResponse2::ID); if (!succeeded) return -1; void* iter = NULL; + int ordinal; int matches_found; - AutomationMsg_FindInPageResponse::Read(response, &matches_found); - + response->ReadInt(&iter, &ordinal); + response->ReadInt(&iter, &matches_found); + if (active_ordinal) + *active_ordinal = ordinal; + delete response; return matches_found; } -- cgit v1.1