Commit 0618e01b authored by Elliot Glaysher's avatar Elliot Glaysher Committed by Commit Bot

Theoretical fix for chromeos crasher.

Observing the TabletModeClient shouldn't send an immediate notification about
the current value, as this leads to an order of operations problem in the
BrowserNonClientFrameViewAsh code which tries to access a Browser object while
it's under construction. Change the one place which actually needs the data
immediately.

Bug: 775117
Change-Id: I7bcb65a9b281545a621460675c36b57f1a0de8f5
Reviewed-on: https://chromium-review.googlesource.com/722040Reviewed-by: default avatarScott Violet <sky@chromium.org>
Reviewed-by: default avatarJames Cook <jamescook@chromium.org>
Commit-Queue: Elliot Glaysher <erg@chromium.org>
Cr-Commit-Position: refs/heads/master@{#509555}
parent 8828b31d
......@@ -53,7 +53,6 @@ TabletModeClient* TabletModeClient::Get() {
void TabletModeClient::AddObserver(TabletModeClientObserver* observer) {
observers_.AddObserver(observer);
observer->OnTabletModeToggled(tablet_mode_enabled_);
}
void TabletModeClient::RemoveObserver(TabletModeClientObserver* observer) {
......
......@@ -59,16 +59,16 @@ TEST_F(TabletModeClientTest, Observers) {
TestTabletModeClientObserver observer;
client.AddObserver(&observer);
// Observer is notified with state when added.
EXPECT_EQ(1, observer.toggle_count_);
// Observer is not notified with state when added.
EXPECT_EQ(0, observer.toggle_count_);
// Setting state notifies observer.
client.OnTabletModeToggled(true);
EXPECT_EQ(2, observer.toggle_count_);
EXPECT_EQ(1, observer.toggle_count_);
EXPECT_TRUE(observer.last_toggle_);
client.OnTabletModeToggled(false);
EXPECT_EQ(3, observer.toggle_count_);
EXPECT_EQ(2, observer.toggle_count_);
EXPECT_FALSE(observer.last_toggle_);
client.RemoveObserver(&observer);
......
......@@ -283,7 +283,10 @@ SigninScreenHandler::SigninScreenHandler(
base::Bind(&SigninScreenHandler::OnAllowedInputMethodsChanged,
base::Unretained(this)));
TabletModeClient::Get()->AddObserver(this);
TabletModeClient* tablet_mode_client = TabletModeClient::Get();
tablet_mode_client->AddObserver(this);
OnTabletModeToggled(tablet_mode_client->tablet_mode_enabled());
if (lock_screen_apps::StateController::IsEnabled())
lock_screen_apps_observer_.Add(lock_screen_apps::StateController::Get());
// TODO(wzang): Make this work under mash.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment