Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(64)

Unified Diff: content/browser/find_request_manager_browsertest.cc

Issue 2223063005: Some changes to the testing infrastructure in find_request_manager_browsertest.cc. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Addressed comments. Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/browser/find_request_manager_browsertest.cc
diff --git a/content/browser/find_request_manager_browsertest.cc b/content/browser/find_request_manager_browsertest.cc
index cefb4fe9a57086984bcbf0872f38c898b325424f..b30df8a740d2d65b8bd4c6eeffc2057d4ef33d65 100644
--- a/content/browser/find_request_manager_browsertest.cc
+++ b/content/browser/find_request_manager_browsertest.cc
@@ -34,39 +34,52 @@ struct FindResults {
class TestWebContentsDelegate : public WebContentsDelegate {
public:
TestWebContentsDelegate()
- : last_finished_request_id_(kInvalidId),
- waiting_request_id_(kInvalidId) {}
+ : last_request_id_(kInvalidId),
+ last_finished_request_id_(kInvalidId),
+ next_reply_received_(false),
+ waiting_for_(NOTHING) {}
~TestWebContentsDelegate() override {}
- // Waits for the final reply to the find request with ID |request_id|.
- void WaitForFinalReply(int request_id) {
- if (last_finished_request_id_ >= request_id)
- return;
-
- waiting_request_id_ = request_id;
- find_message_loop_runner_ = new content::MessageLoopRunner;
- find_message_loop_runner_->Run();
- }
-
// Returns the current find results.
FindResults GetFindResults() {
return current_results_;
}
-#if defined(OS_ANDROID)
+ // Waits for all pending replies to be received.
+ void WaitForFinalReply() {
+ if (last_finished_request_id_ >= last_request_id_)
+ return;
+
+ WaitFor(FINAL_REPLY);
+ }
+
// Waits for the next find reply. This is useful for waiting for a single
- // match to be activated, which results in a single find reply (without a
- // unique request ID).
+ // match to be activated, or for a new frame to be searched.
void WaitForNextReply() {
- waiting_request_id_ = 0;
- find_message_loop_runner_ = new content::MessageLoopRunner;
- find_message_loop_runner_->Run();
+ if (next_reply_received_)
+ return;
+
+ WaitFor(NEXT_REPLY);
}
+ // Indicates that the next find reply from this point will be the one to wait
+ // for when WaitForNextReply() is called. It may be the case that the reply
+ // comes before the call to WaitForNextReply(), in which case it will return
+ // immediately.
+ void MarkNextReply() {
+ next_reply_received_ = false;
+ }
+
+ // Called when a new find request is issued, so the delegate knows the last
+ // request ID.
+ void UpdateLastRequest(int request_id) {
+ last_request_id_ = request_id;
+ }
+
+#if defined(OS_ANDROID)
// Waits for all of the find match rects to be received.
void WaitForMatchRects() {
- match_rects_message_loop_runner_ = new content::MessageLoopRunner;
- match_rects_message_loop_runner_->Run();
+ WaitFor(MATCH_RECTS);
}
const std::vector<gfx::RectF>& find_match_rects() const {
@@ -79,6 +92,15 @@ class TestWebContentsDelegate : public WebContentsDelegate {
#endif
private:
+ enum WaitingFor {
+ NOTHING,
+ FINAL_REPLY,
+ NEXT_REPLY,
+#if defined(OS_ANDROID)
+ MATCH_RECTS
+#endif
+ };
+
// WebContentsDelegate override.
void FindReply(WebContents* web_contents,
int request_id,
@@ -94,17 +116,47 @@ class TestWebContentsDelegate : public WebContentsDelegate {
if (active_match_ordinal != -1)
current_results_.active_match_ordinal = active_match_ordinal;
- if (final_update)
+ if (!final_update)
+ return;
+
+ if (request_id > last_finished_request_id_)
last_finished_request_id_ = request_id;
+ next_reply_received_ = true;
- // If we are waiting for a final reply and this is it, stop waiting.
- if (find_message_loop_runner_.get() &&
- last_finished_request_id_ >= waiting_request_id_) {
- find_message_loop_runner_->Quit();
+ // If we are waiting for this find reply, stop waiting.
+ if (waiting_for_ == NEXT_REPLY ||
+ (waiting_for_ == FINAL_REPLY &&
+ last_finished_request_id_ >= last_request_id_)) {
+ StopWaiting();
}
}
+ // Uses |message_loop_runner_| to wait for various things.
+ void WaitFor(WaitingFor wait_for) {
+ ASSERT_EQ(NOTHING, waiting_for_);
+ ASSERT_NE(NOTHING, wait_for);
+
+ // Wait for |wait_for|.
+ waiting_for_ = wait_for;
+ message_loop_runner_ = new content::MessageLoopRunner;
+ message_loop_runner_->Run();
+
+ // Done waiting.
+ waiting_for_ = NOTHING;
+ message_loop_runner_ = nullptr;
+ }
+
+ // Stop waiting for |waiting_for_|.
+ void StopWaiting() {
+ if (!message_loop_runner_.get())
+ return;
+
+ ASSERT_NE(NOTHING, waiting_for_);
+ message_loop_runner_->Quit();
+ }
+
#if defined(OS_ANDROID)
+ // WebContentsDelegate override.
void FindMatchRectsReply(WebContents* web_contents,
int version,
const std::vector<gfx::RectF>& rects,
@@ -114,8 +166,8 @@ class TestWebContentsDelegate : public WebContentsDelegate {
active_match_rect_ = active_rect;
// If we are waiting for match rects, stop waiting.
- if (match_rects_message_loop_runner_.get())
- match_rects_message_loop_runner_->Quit();
+ if (waiting_for_ == MATCH_RECTS)
+ StopWaiting();
}
std::vector<gfx::RectF> find_match_rects_;
@@ -126,15 +178,19 @@ class TestWebContentsDelegate : public WebContentsDelegate {
// The latest known results from the current find request.
FindResults current_results_;
+ // The ID of the last find request issued.
+ int last_request_id_;
+
// The ID of the last find request to finish (all replies received).
int last_finished_request_id_;
- // If waiting using |find_message_loop_runner_|, this is the ID of the find
- // request being waited for.
- int waiting_request_id_;
+ // Indicates whether the next reply after MarkNextReply() has been received.
+ bool next_reply_received_;
- scoped_refptr<content::MessageLoopRunner> find_message_loop_runner_;
- scoped_refptr<content::MessageLoopRunner> match_rects_message_loop_runner_;
+ // Indicates what |message_loop_runner_| is waiting for, if anything.
+ WaitingFor waiting_for_;
+
+ scoped_refptr<content::MessageLoopRunner> message_loop_runner_;
DISALLOW_COPY_AND_ASSIGN(TestWebContentsDelegate);
};
@@ -206,15 +262,12 @@ class FindRequestManagerTest : public ContentBrowserTest,
void Find(const std::string& search_text,
const blink::WebFindOptions& options) {
- contents()->Find(++last_request_id_,
+ delegate()->UpdateLastRequest(++last_request_id_);
+ contents()->Find(last_request_id_,
base::UTF8ToUTF16(search_text),
options);
}
- void WaitForFinalReply() const {
- delegate()->WaitForFinalReply(last_request_id_);
- }
-
WebContents* contents() const {
return shell()->web_contents();
}
@@ -292,7 +345,7 @@ IN_PROC_BROWSER_TEST_P(FindRequestManagerTest, MAYBE(Basic)) {
blink::WebFindOptions options;
Find("result", options);
- WaitForFinalReply();
+ delegate()->WaitForFinalReply();
FindResults results = delegate()->GetFindResults();
EXPECT_EQ(last_request_id(), results.request_id);
@@ -302,7 +355,7 @@ IN_PROC_BROWSER_TEST_P(FindRequestManagerTest, MAYBE(Basic)) {
options.findNext = true;
for (int i = 2; i <= 10; ++i) {
Find("result", options);
- WaitForFinalReply();
+ delegate()->WaitForFinalReply();
results = delegate()->GetFindResults();
EXPECT_EQ(last_request_id(), results.request_id);
@@ -313,7 +366,7 @@ IN_PROC_BROWSER_TEST_P(FindRequestManagerTest, MAYBE(Basic)) {
options.forward = false;
for (int i = 9; i >= 5; --i) {
Find("result", options);
- WaitForFinalReply();
+ delegate()->WaitForFinalReply();
results = delegate()->GetFindResults();
EXPECT_EQ(last_request_id(), results.request_id);
@@ -336,7 +389,7 @@ IN_PROC_BROWSER_TEST_P(FindRequestManagerTest, MAYBE(CharacterByCharacter)) {
Find("resu", default_options);
Find("resul", default_options);
Find("result", default_options);
- WaitForFinalReply();
+ delegate()->WaitForFinalReply();
FindResults results = delegate()->GetFindResults();
EXPECT_EQ(last_request_id(), results.request_id);
@@ -356,7 +409,7 @@ IN_PROC_BROWSER_TEST_P(FindRequestManagerTest, MAYBE(RapidFire)) {
options.findNext = true;
for (int i = 2; i <= 1000; ++i)
Find("result", options);
- WaitForFinalReply();
+ delegate()->WaitForFinalReply();
FindResults results = delegate()->GetFindResults();
EXPECT_EQ(last_request_id(), results.request_id);
@@ -378,7 +431,7 @@ IN_PROC_BROWSER_TEST_P(FindRequestManagerTest, MAYBE(RemoveFrame)) {
Find("result", options);
Find("result", options);
Find("result", options);
- WaitForFinalReply();
+ delegate()->WaitForFinalReply();
FindResults results = delegate()->GetFindResults();
EXPECT_EQ(last_request_id(), results.request_id);
@@ -394,7 +447,6 @@ IN_PROC_BROWSER_TEST_P(FindRequestManagerTest, MAYBE(RemoveFrame)) {
// The number of matches and active match ordinal should update automatically
// to exclude the matches from the removed frame.
results = delegate()->GetFindResults();
- EXPECT_EQ(last_request_id(), results.request_id);
EXPECT_EQ(12, results.number_of_matches);
EXPECT_EQ(8, results.active_match_ordinal);
@@ -408,7 +460,7 @@ IN_PROC_BROWSER_TEST_F(FindRequestManagerTest, MAYBE(HiddenFrame)) {
blink::WebFindOptions default_options;
Find("hello", default_options);
- WaitForFinalReply();
+ delegate()->WaitForFinalReply();
FindResults results = delegate()->GetFindResults();
EXPECT_EQ(last_request_id(), results.request_id);
@@ -423,7 +475,7 @@ IN_PROC_BROWSER_TEST_F(FindRequestManagerTest, MAYBE(FindMatchRects)) {
blink::WebFindOptions default_options;
Find("result", default_options);
- WaitForFinalReply();
+ delegate()->WaitForFinalReply();
EXPECT_EQ(19, delegate()->GetFindResults().number_of_matches);
// Request the find match rects.
@@ -505,7 +557,7 @@ IN_PROC_BROWSER_TEST_F(FindRequestManagerTest,
blink::WebFindOptions default_options;
Find("result", default_options);
- WaitForFinalReply();
+ delegate()->WaitForFinalReply();
EXPECT_EQ(19, delegate()->GetFindResults().number_of_matches);
// Get the find match rects.
@@ -519,6 +571,7 @@ IN_PROC_BROWSER_TEST_F(FindRequestManagerTest,
int order[19] =
{11, 13, 2, 0, 16, 5, 7, 10, 6, 1, 15, 14, 9, 17, 18, 3, 8, 12, 4};
for (int i = 0; i < 19; ++i) {
+ delegate()->MarkNextReply();
contents()->ActivateNearestFindResult(
rects[order[i]].CenterPoint().x(), rects[order[i]].CenterPoint().y());
delegate()->WaitForNextReply();
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698