blob: 0f58860979cdf8e6328adf2b9a279d49a888fb46 [file] [log] [blame]
// Copyright 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/test/base/find_result_waiter.h"
#include "base/run_loop.h"
#include "components/find_in_page/find_tab_helper.h"
#include "content/public/test/test_utils.h"
namespace ui_test_utils {
FindResultWaiter::FindResultWaiter(content::WebContents* parent_tab) {
find_in_page::FindTabHelper* find_tab_helper =
find_in_page::FindTabHelper::FromWebContents(parent_tab);
current_find_request_id_ = find_tab_helper->current_find_request_id();
observer_.Add(find_tab_helper);
}
FindResultWaiter::~FindResultWaiter() = default;
void FindResultWaiter::Wait() {
if (seen_)
return;
run_loop_ = std::make_unique<base::RunLoop>();
run_loop_->Run();
}
void FindResultWaiter::OnFindResultAvailable(
content::WebContents* web_contents) {
const find_in_page::FindNotificationDetails& find_details =
find_in_page::FindTabHelper::FromWebContents(web_contents)->find_result();
if (find_details.request_id() != current_find_request_id_)
return;
// We get multiple responses and one of those will contain the ordinal.
// This message comes to us before the final update is sent.
if (find_details.active_match_ordinal() > -1) {
active_match_ordinal_ = find_details.active_match_ordinal();
selection_rect_ = find_details.selection_rect();
}
if (find_details.final_update()) {
number_of_matches_ = find_details.number_of_matches();
seen_ = true;
if (run_loop_ && run_loop_->running())
run_loop_->Quit();
} else {
DVLOG(1) << "Ignoring, since we only care about the final message";
}
}
} // namespace ui_test_utils