Sign out when render crashes on lock screen

BUG=225967
TEST=manual, lock screen, go to second terminal, kill render process for lock screen, login screen should be shown


Review URL: https://chromiumcodereview.appspot.com/13520006

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@192589 0039d316-1c4b-4281-b951-d872f2087c98
parent ed005f6f
......@@ -11,6 +11,7 @@
#include "base/metrics/histogram.h"
#include "base/utf_string_conversions.h"
#include "base/values.h"
#include "chrome/browser/browser_shutdown.h"
#include "chrome/browser/chromeos/accessibility/accessibility_util.h"
#include "chrome/browser/chromeos/login/helper.h"
#include "chrome/browser/chromeos/login/screen_locker.h"
......@@ -68,6 +69,9 @@ void WebUIScreenLocker::LockScreen(bool unlock_on_input) {
LoadURL(GURL(kLoginURL));
lock_window->Grab();
// Subscribe to crash events.
content::WebContentsObserver::Observe(GetWebContents());
// User list consisting of a single logged-in user.
UserList users(1, chromeos::UserManager::Get()->GetLoggedInUser());
login_display_.reset(new WebUILoginDisplay(this));
......@@ -303,4 +307,12 @@ void WebUIScreenLocker::SystemResumed(const base::TimeDelta& sleep_duration) {
base::Bind(&WebUIScreenLocker::FocusUserPod, weak_factory_.GetWeakPtr()));
}
void WebUIScreenLocker::RenderViewGone(base::TerminationStatus status) {
if (browser_shutdown::GetShutdownType() == browser_shutdown::NOT_VALID &&
status != base::TERMINATION_STATUS_NORMAL_TERMINATION) {
LOG(ERROR) << "Renderer crash on lock screen";
Signout();
}
}
} // namespace chromeos
......@@ -19,6 +19,7 @@
#include "chromeos/dbus/power_manager_client.h"
#include "content/public/browser/notification_observer.h"
#include "content/public/browser/notification_registrar.h"
#include "content/public/browser/web_contents_observer.h"
#include "ui/views/widget/widget.h"
#include "ui/views/widget/widget_observer.h"
......@@ -44,7 +45,8 @@ class WebUIScreenLocker : public WebUILoginView,
public LockWindow::Observer,
public ash::SessionStateObserver,
public views::WidgetObserver,
public PowerManagerClient::Observer {
public PowerManagerClient::Observer,
public content::WebContentsObserver {
public:
explicit WebUIScreenLocker(ScreenLocker* screen_locker);
......@@ -101,6 +103,9 @@ class WebUIScreenLocker : public WebUILoginView,
virtual void LidEventReceived(bool open,
const base::TimeTicks& time) OVERRIDE;
// Overridden from content::WebContentsObserver:
virtual void RenderViewGone(base::TerminationStatus status) OVERRIDE;
private:
friend class test::WebUIScreenLockerTester;
......
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