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

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

Issue 6024007: First cut at creating a refactored version of tab_contents_views. This is (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Updated the diff using -M1% -B1% to capture the refactoring better Created 9 years, 12 months 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_container_native.cc
diff --git a/chrome/browser/ui/views/tab_contents/tab_contents_container.cc b/chrome/browser/ui/views/tab_contents/tab_contents_container_native.cc
similarity index 42%
copy from chrome/browser/ui/views/tab_contents/tab_contents_container.cc
copy to chrome/browser/ui/views/tab_contents/tab_contents_container_native.cc
index 47ed229eb4bd11a8a17b01040e0e08aec0d04c33..b711c8453a3710723170ee5e31527888dfd4e2a6 100644
--- a/chrome/browser/ui/views/tab_contents/tab_contents_container.cc
+++ b/chrome/browser/ui/views/tab_contents/tab_contents_container_native.cc
@@ -13,12 +13,9 @@
#include "chrome/common/notification_details.h"
#include "chrome/common/notification_source.h"
-#if defined(TOUCH_UI)
-#include "chrome/browser/ui/views/tab_contents/native_tab_contents_container_gtk.h"
-#include "chrome/browser/ui/views/tab_contents/tab_contents_view_views.h"
-#include "views/border.h"
-#include "views/fill_layout.h"
-#endif
+// Some of this class is implemented in tab_contents_container.cc, where
+// the implementation doesn't vary between a pure views approach and a
+// native view host approach. See the header file for details.
////////////////////////////////////////////////////////////////////////////////
// TabContentsContainer, public:
@@ -30,156 +27,60 @@ TabContentsContainer::TabContentsContainer()
SetID(VIEW_ID_TAB_CONTAINER);
}
-TabContentsContainer::~TabContentsContainer() {
- if (tab_contents_)
- RemoveObservers();
-}
-
void TabContentsContainer::ChangeTabContents(TabContents* contents) {
if (tab_contents_) {
-#if !defined(TOUCH_UI)
native_container_->DetachContents(tab_contents_);
-#else
- views::View *v = static_cast<TabContentsViewViews*>(tab_contents_->view());
- RemoveChildView(v);
-#endif
tab_contents_->WasHidden();
RemoveObservers();
}
-#if !defined(TOUCH_UI)
TabContents* old_contents = tab_contents_;
-#endif
tab_contents_ = contents;
// When detaching the last tab of the browser ChangeTabContents is invoked
// with NULL. Don't attempt to do anything in that case.
if (tab_contents_) {
-#if defined(TOUCH_UI)
- views::View *v = static_cast<TabContentsViewViews*>(contents->view());
- // Guard against re-adding ourselves, which happens because the NULL
- // value is ignored by the pre-existing if() above.
- if (v->GetParent() != this) {
- AddChildView(v);
- SetLayoutManager(new views::FillLayout());
- Layout();
- }
-#else
RenderWidgetHostViewChanged(
old_contents ? old_contents->GetRenderWidgetHostView() : NULL,
tab_contents_->GetRenderWidgetHostView());
native_container_->AttachContents(tab_contents_);
-#endif
AddObservers();
}
}
void TabContentsContainer::TabContentsFocused(TabContents* tab_contents) {
- if (native_container_)
- native_container_->TabContentsFocused(tab_contents);
+ native_container_->TabContentsFocused(tab_contents);
}
void TabContentsContainer::SetFastResize(bool fast_resize) {
- if (native_container_)
- native_container_->SetFastResize(fast_resize);
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// TabContentsContainer, NotificationObserver implementation:
-
-void TabContentsContainer::Observe(NotificationType type,
- const NotificationSource& source,
- const NotificationDetails& details) {
- if (type == NotificationType::RENDER_VIEW_HOST_CHANGED) {
- RenderViewHostSwitchedDetails* switched_details =
- Details<RenderViewHostSwitchedDetails>(details).ptr();
- RenderViewHostChanged(switched_details->old_host,
- switched_details->new_host);
- } else if (type == NotificationType::TAB_CONTENTS_DESTROYED) {
- TabContentsDestroyed(Source<TabContents>(source).ptr());
- } else {
- NOTREACHED();
- }
+ native_container_->SetFastResize(fast_resize);
}
////////////////////////////////////////////////////////////////////////////////
// TabContentsContainer, View overrides:
void TabContentsContainer::Layout() {
-#if defined(TOUCH_UI)
- views::View::Layout();
-#else
- if (native_container_) {
sky 2011/01/05 16:43:03 You need this if.
- if (reserved_area_delegate_)
- reserved_area_delegate_->UpdateReservedContentsRect(this);
- native_container_->GetView()->SetBounds(0, 0, width(), height());
- native_container_->GetView()->Layout();
- }
-#endif
-}
-
-AccessibilityTypes::Role TabContentsContainer::GetAccessibleRole() {
- return AccessibilityTypes::ROLE_WINDOW;
+ if (reserved_area_delegate_)
+ reserved_area_delegate_->UpdateReservedContentsRect(this);
+ native_container_->GetView()->SetBounds(0, 0, width(), height());
+ native_container_->GetView()->Layout();
}
void TabContentsContainer::ViewHierarchyChanged(bool is_add,
views::View* parent,
views::View* child) {
-#if defined(TOUCH_UI)
- views::View::ViewHierarchyChanged(is_add, parent, child);
-#else
if (is_add && child == this) {
native_container_ = NativeTabContentsContainer::CreateNativeContainer(this);
AddChildView(native_container_->GetView());
}
-#endif
}
////////////////////////////////////////////////////////////////////////////////
// TabContentsContainer, private:
-void TabContentsContainer::AddObservers() {
- // TabContents can change their RenderViewHost and hence the HWND that is
- // shown and getting focused. We need to keep track of that so we install
- // the focus subclass on the shown HWND so we intercept focus change events.
- registrar_.Add(this,
- NotificationType::RENDER_VIEW_HOST_CHANGED,
- Source<NavigationController>(&tab_contents_->controller()));
-
- registrar_.Add(this,
- NotificationType::TAB_CONTENTS_DESTROYED,
- Source<TabContents>(tab_contents_));
-}
-
-void TabContentsContainer::RemoveObservers() {
- registrar_.RemoveAll();
-}
-
void TabContentsContainer::RenderViewHostChanged(RenderViewHost* old_host,
RenderViewHost* new_host) {
-#if defined(TOUCH_UI)
- NOTIMPLEMENTED(); // TODO(anicolao)
-#else
if (new_host) {
RenderWidgetHostViewChanged(
old_host ? old_host->view() : NULL, new_host->view());
}
native_container_->RenderViewHostChanged(old_host, new_host);
-#endif
-}
-
-void TabContentsContainer::TabContentsDestroyed(TabContents* contents) {
- // Sometimes, a TabContents is destroyed before we know about it. This allows
- // us to clean up our state in case this happens.
- DCHECK(contents == tab_contents_);
- ChangeTabContents(NULL);
-}
-
-void TabContentsContainer::RenderWidgetHostViewChanged(
- RenderWidgetHostView* old_view, RenderWidgetHostView* new_view) {
- // Carry over the reserved rect, if possible.
- if (old_view && new_view) {
- new_view->set_reserved_contents_rect(old_view->reserved_contents_rect());
- } else {
- if (reserved_area_delegate_)
- reserved_area_delegate_->UpdateReservedContentsRect(this);
- }
}

Powered by Google App Engine
This is Rietveld 408576698