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

Unified Diff: components/arc/ime/arc_ime_service_unittest.cc

Issue 2570623005: ARC IME: Fix crash on shutdown due to wrong focus management. (Closed)
Patch Set: Add a TODO comment on confusing usage of GetInputMethod Created 4 years 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 | « components/arc/ime/arc_ime_service.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: components/arc/ime/arc_ime_service_unittest.cc
diff --git a/components/arc/ime/arc_ime_service_unittest.cc b/components/arc/ime/arc_ime_service_unittest.cc
index d5aac38091d94fc474bd17851207e3b1dff242e8..658dab17c414b31a41e9e3687b9c6152ff89ba37 100644
--- a/components/arc/ime/arc_ime_service_unittest.cc
+++ b/components/arc/ime/arc_ime_service_unittest.cc
@@ -138,6 +138,9 @@ class ArcImeServiceTest : public testing::Test {
std::unique_ptr<ArcImeService> instance_;
FakeArcImeBridge* fake_arc_ime_bridge_; // Owned by |instance_|
+ FakeArcWindowDetector* fake_window_detector_; // Owned by |instance_|
+ std::unique_ptr<aura::Window> arc_win_;
+
private:
void SetUp() override {
arc_bridge_service_ = base::MakeUnique<ArcBridgeService>();
@@ -147,9 +150,16 @@ class ArcImeServiceTest : public testing::Test {
fake_input_method_ = base::MakeUnique<FakeInputMethod>();
instance_->SetInputMethodForTesting(fake_input_method_.get());
+
+ fake_window_detector_ = new FakeArcWindowDetector();
+ instance_->SetArcWindowDetectorForTesting(
+ base::WrapUnique(fake_window_detector_));
+ arc_win_ = fake_window_detector_->CreateFakeArcTopLevelWindow();
}
void TearDown() override {
+ arc_win_.reset();
+ fake_window_detector_ = nullptr;
fake_arc_ime_bridge_ = nullptr;
instance_.reset();
arc_bridge_service_.reset();
@@ -157,6 +167,8 @@ class ArcImeServiceTest : public testing::Test {
};
TEST_F(ArcImeServiceTest, HasCompositionText) {
+ instance_->OnWindowFocused(arc_win_.get(), nullptr);
+
ui::CompositionText composition;
composition.text = base::UTF8ToUTF16("nonempty text");
@@ -184,7 +196,8 @@ TEST_F(ArcImeServiceTest, HasCompositionText) {
}
TEST_F(ArcImeServiceTest, ShowImeIfNeeded) {
- fake_input_method_->SetFocusedTextInputClient(instance_.get());
+ instance_->OnWindowFocused(arc_win_.get(), nullptr);
+
instance_->OnTextInputTypeChanged(ui::TEXT_INPUT_TYPE_NONE);
ASSERT_EQ(0, fake_input_method_->count_show_ime_if_needed());
@@ -197,14 +210,15 @@ TEST_F(ArcImeServiceTest, ShowImeIfNeeded) {
}
TEST_F(ArcImeServiceTest, CancelComposition) {
+ instance_->OnWindowFocused(arc_win_.get(), nullptr);
+
// The bridge should forward the cancel event to the input method.
- fake_input_method_->SetFocusedTextInputClient(instance_.get());
instance_->OnCancelComposition();
EXPECT_EQ(1, fake_input_method_->count_cancel_composition());
}
TEST_F(ArcImeServiceTest, InsertChar) {
- fake_input_method_->SetFocusedTextInputClient(instance_.get());
+ instance_->OnWindowFocused(arc_win_.get(), nullptr);
// When text input type is NONE, the event is not forwarded.
instance_->OnTextInputTypeChanged(ui::TEXT_INPUT_TYPE_NONE);
@@ -218,22 +232,18 @@ TEST_F(ArcImeServiceTest, InsertChar) {
}
TEST_F(ArcImeServiceTest, WindowFocusTracking) {
- auto window_detector = base::MakeUnique<FakeArcWindowDetector>();
- std::unique_ptr<aura::Window> arc_win1 =
- window_detector->CreateFakeArcTopLevelWindow();
std::unique_ptr<aura::Window> arc_win2 =
- window_detector->CreateFakeArcTopLevelWindow();
+ fake_window_detector_->CreateFakeArcTopLevelWindow();
std::unique_ptr<aura::Window> nonarc_win =
- window_detector->CreateFakeNonArcTopLevelWindow();
- instance_->SetArcWindowDetectorForTesting(std::move(window_detector));
+ fake_window_detector_->CreateFakeNonArcTopLevelWindow();
// ARC window is focused. ArcImeService is set as the text input client.
- instance_->OnWindowFocused(arc_win1.get(), nullptr);
+ instance_->OnWindowFocused(arc_win_.get(), nullptr);
EXPECT_EQ(instance_.get(), fake_input_method_->GetTextInputClient());
EXPECT_EQ(1, fake_input_method_->count_set_focused_text_input_client());
// Focus is moving between ARC windows. No state change should happen.
- instance_->OnWindowFocused(arc_win2.get(), arc_win1.get());
+ instance_->OnWindowFocused(arc_win2.get(), arc_win_.get());
EXPECT_EQ(instance_.get(), fake_input_method_->GetTextInputClient());
EXPECT_EQ(1, fake_input_method_->count_set_focused_text_input_client());
@@ -243,12 +253,12 @@ TEST_F(ArcImeServiceTest, WindowFocusTracking) {
EXPECT_EQ(1, fake_input_method_->count_set_focused_text_input_client());
// Focus came back to an ARC window. ArcImeService is re-attached.
- instance_->OnWindowFocused(arc_win1.get(), nonarc_win.get());
+ instance_->OnWindowFocused(arc_win_.get(), nonarc_win.get());
EXPECT_EQ(instance_.get(), fake_input_method_->GetTextInputClient());
EXPECT_EQ(2, fake_input_method_->count_set_focused_text_input_client());
// Focus is moving out.
- instance_->OnWindowFocused(nullptr, arc_win1.get());
+ instance_->OnWindowFocused(nullptr, arc_win_.get());
EXPECT_EQ(nullptr, fake_input_method_->GetTextInputClient());
EXPECT_EQ(2, fake_input_method_->count_set_focused_text_input_client());
}
« no previous file with comments | « components/arc/ime/arc_ime_service.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698