diff options
Diffstat (limited to 'ash/screensaver')
-rw-r--r-- | ash/screensaver/screensaver_view.cc | 22 | ||||
-rw-r--r-- | ash/screensaver/screensaver_view.h | 4 |
2 files changed, 22 insertions, 4 deletions
diff --git a/ash/screensaver/screensaver_view.cc b/ash/screensaver/screensaver_view.cc index f8a3bd3..39eb8fb 100644 --- a/ash/screensaver/screensaver_view.cc +++ b/ash/screensaver/screensaver_view.cc @@ -22,6 +22,10 @@ namespace { ash::internal::ScreensaverView* g_instance = NULL; +// Do not restart the screensaver again if it has +// terminated kMaxTerminations times already. +const int kMaxTerminations = 3; + } // namespace namespace ash { @@ -62,16 +66,26 @@ views::View* ScreensaverView::GetContentsView() { // ScreensaverView, content::WebContentsObserver implementation. void ScreensaverView::RenderViewGone( base::TerminationStatus status) { - LOG(ERROR) << "Screensaver terminated with status " << status - << ", reloading."; - // Reload the screensaver url into the webcontents. - LoadScreensaver(); + LOG(ERROR) << "Screensaver terminated with status " << status; + termination_count_++; + + if (termination_count_ < kMaxTerminations) { + LOG(ERROR) << termination_count_ + << " terminations is under the threshold of " + << kMaxTerminations + << "; reloading Screensaver."; + LoadScreensaver(); + } else { + LOG(ERROR) << "Exceeded termination threshold, closing Screensaver."; + ScreensaverView::CloseScreensaver(); + } } //////////////////////////////////////////////////////////////////////////////// // ScreensaverView private methods. ScreensaverView::ScreensaverView(const GURL& url) : url_(url), + termination_count_(0), screensaver_webview_(NULL), container_window_(NULL) { } diff --git a/ash/screensaver/screensaver_view.h b/ash/screensaver/screensaver_view.h index 541a254..6092e50 100644 --- a/ash/screensaver/screensaver_view.h +++ b/ash/screensaver/screensaver_view.h @@ -72,6 +72,10 @@ class ScreensaverView : public views::WidgetDelegateView, // URL to show in the screensaver. GURL url_; + // Number of times the screensaver has been terminated (usually this will be + // synonymous with the number of times it has crashed). + int termination_count_; + // Host for the extension that implements this dialog. views::WebView* screensaver_webview_; |