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

Unified Diff: chrome/browser/ui/views/tab_contents/tab_contents_view_views.cc

Issue 8477042: Move Sad Tab implementation out of the TabContentsViews. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: changes for jochen and jam Created 9 years, 1 month 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
Index: chrome/browser/ui/views/tab_contents/tab_contents_view_views.cc
diff --git a/chrome/browser/ui/views/tab_contents/tab_contents_view_views.cc b/chrome/browser/ui/views/tab_contents/tab_contents_view_views.cc
index 08d083e7c3d3388e105696bac12e8ea40c1859c8..8ec32344409bcba7683f45ea444146e0b77521ca 100644
--- a/chrome/browser/ui/views/tab_contents/tab_contents_view_views.cc
+++ b/chrome/browser/ui/views/tab_contents/tab_contents_view_views.cc
@@ -7,11 +7,9 @@
#include <vector>
#include "base/time.h"
-#include "chrome/browser/browser_shutdown.h"
#include "chrome/browser/ui/constrained_window.h"
#include "chrome/browser/ui/constrained_window_tab_helper.h"
#include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h"
-#include "chrome/browser/ui/views/sad_tab_view.h"
#include "chrome/browser/ui/views/tab_contents/native_tab_contents_view.h"
#include "chrome/browser/ui/views/tab_contents/render_view_context_menu_views.h"
#include "content/browser/renderer_host/render_process_host.h"
@@ -39,9 +37,9 @@ using WebKit::WebInputEvent;
TabContentsViewViews::TabContentsViewViews(TabContents* tab_contents)
: tab_contents_(tab_contents),
native_tab_contents_view_(NULL),
- sad_tab_widget_(NULL),
close_tab_after_drag_ends_(false),
- focus_manager_(NULL) {
+ focus_manager_(NULL),
+ overlaid_view_(NULL) {
last_focused_view_storage_id_ =
views::ViewStorage::GetInstance()->CreateStorageID();
}
@@ -89,12 +87,6 @@ RenderWidgetHostView* TabContentsViewViews::CreateViewForWidget(
return render_widget_host->view();
}
- // If we were showing sad tab, remove it now.
- if (sad_tab_widget_) {
- sad_tab_widget_->Close();
- sad_tab_widget_ = NULL;
- }
-
return native_tab_contents_view_->CreateRenderWidgetHostView(
render_widget_host);
}
@@ -130,26 +122,6 @@ void TabContentsViewViews::SetPageTitle(const string16& title) {
void TabContentsViewViews::OnTabCrashed(base::TerminationStatus status,
int /* error_code */) {
- // Only show the sad tab if we're not in browser shutdown, so that TabContents
- // objects that are not in a browser (e.g., HTML dialogs) and thus are
- // visible do not flash a sad tab page.
- if (browser_shutdown::GetShutdownType() != browser_shutdown::NOT_VALID)
- return;
-
- // Note that it's possible to get this message after the window was destroyed.
- if (GetNativeView()) {
- SadTabView::Kind kind =
- status == base::TERMINATION_STATUS_PROCESS_WAS_KILLED ?
- SadTabView::KILLED : SadTabView::CRASHED;
- views::Widget::InitParams sad_tab_widget_params(
- views::Widget::InitParams::TYPE_CONTROL);
- sad_tab_widget_params.parent_widget = this;
- sad_tab_widget_params.bounds =
- gfx::Rect(GetClientAreaScreenBounds().size());
- sad_tab_widget_ = new views::Widget;
- sad_tab_widget_->Init(sad_tab_widget_params);
- sad_tab_widget_->SetContentsView(new SadTabView(tab_contents_, kind));
- }
}
void TabContentsViewViews::SizeContents(const gfx::Size& size) {
@@ -173,8 +145,8 @@ void TabContentsViewViews::Focus() {
return;
}
- if (tab_contents_->is_crashed() && sad_tab_widget_ != NULL) {
- sad_tab_widget_->GetContentsView()->RequestFocus();
+ if (overlaid_view_) {
+ overlaid_view_->GetContentsView()->RequestFocus();
return;
}
@@ -285,6 +257,19 @@ void TabContentsViewViews::GetViewBounds(gfx::Rect* out) const {
*out = GetWindowScreenBounds();
}
+void TabContentsViewViews::InstallOverlayView(gfx::NativeView view) {
+ DCHECK(!overlaid_view_);
+ views::Widget::ReparentNativeView(view, GetNativeView());
+ overlaid_view_ = views::Widget::GetWidgetForNativeView(view);
+ overlaid_view_->SetBounds(gfx::Rect(GetClientAreaScreenBounds().size()));
+}
+
+void TabContentsViewViews::RemoveOverlayView() {
+ DCHECK(overlaid_view_);
+ overlaid_view_->Close();
+ overlaid_view_ = NULL;
+}
+
void TabContentsViewViews::UpdateDragCursor(WebDragOperation operation) {
native_tab_contents_view_->SetDragCursor(operation);
}
@@ -385,7 +370,7 @@ TabContents* TabContentsViewViews::GetTabContents() {
}
bool TabContentsViewViews::IsShowingSadTab() const {
- return tab_contents_->is_crashed() && sad_tab_widget_;
+ return tab_contents_->is_crashed() && overlaid_view_;
}
void TabContentsViewViews::OnNativeTabContentsViewShown() {
@@ -472,7 +457,7 @@ void TabContentsViewViews::OnNativeWidgetVisibilityChanged(bool visible) {
void TabContentsViewViews::OnNativeWidgetSizeChanged(
const gfx::Size& new_size) {
- if (sad_tab_widget_)
- sad_tab_widget_->SetBounds(gfx::Rect(new_size));
+ if (overlaid_view_)
+ overlaid_view_->SetBounds(gfx::Rect(new_size));
views::Widget::OnNativeWidgetSizeChanged(new_size);
}

Powered by Google App Engine
This is Rietveld 408576698