14a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
24a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch// Use of this source code is governed by a BSD-style license that can be
34a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch// found in the LICENSE file.
44a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
54a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#ifndef CHROME_BROWSER_UI_VIEWS_SAD_TAB_VIEW_H_
64a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#define CHROME_BROWSER_UI_VIEWS_SAD_TAB_VIEW_H_
74a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#pragma once
84a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
94a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#include "base/basictypes.h"
1072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "ui/gfx/font.h"
114a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#include "views/controls/link.h"
124a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#include "views/view.h"
134a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
144a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochclass SkBitmap;
154a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochclass TabContents;
164a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
174a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch///////////////////////////////////////////////////////////////////////////////
184a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch//
194a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch// SadTabView
204a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch//
214a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch//  A views::View subclass used to render the presentation of the crashed
224a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch//  "sad tab" in the browser window when a renderer is destroyed unnaturally.
234a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch//
244a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch///////////////////////////////////////////////////////////////////////////////
254a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochclass SadTabView : public views::View,
264a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch                   public views::LinkController {
274a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch public:
2872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  enum Kind {
2972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    CRASHED,  // The tab crashed.  Display the "Aw, Snap!" page.
3072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    KILLED    // The tab was killed.  Display the killed tab page.
3172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  };
3272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
3372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  explicit SadTabView(TabContents* tab_contents, Kind kind);
34dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  virtual ~SadTabView();
354a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
364a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // Overridden from views::View:
37dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  virtual void OnPaint(gfx::Canvas* canvas);
384a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  virtual void Layout();
394a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
404a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // Overridden from views::LinkController:
414a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  virtual void LinkActivated(views::Link* source, int event_flags);
424a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
434a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch private:
4472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  static void InitClass(Kind kind);
454a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
464a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // Assorted resources for display.
474a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  static SkBitmap* sad_tab_bitmap_;
484a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  static gfx::Font* title_font_;
494a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  static gfx::Font* message_font_;
504a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  static std::wstring title_;
514a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  static std::wstring message_;
524a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  static int title_width_;
534a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
544a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  TabContents* tab_contents_;
554a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  views::Link* learn_more_link_;
564a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
574a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // Regions within the display for different components, populated by
584a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // Layout().
594a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  gfx::Rect icon_bounds_;
604a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  gfx::Rect title_bounds_;
614a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  gfx::Rect message_bounds_;
624a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  gfx::Rect link_bounds_;
634a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
6472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  Kind kind_;
6572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
664a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  DISALLOW_COPY_AND_ASSIGN(SadTabView);
674a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch};
684a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
694a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#endif  // CHROME_BROWSER_UI_VIEWS_SAD_TAB_VIEW_H__
70