| Index: chrome/browser/views/frame/opaque_browser_frame_view.cc | 
| =================================================================== | 
| --- chrome/browser/views/frame/opaque_browser_frame_view.cc	(revision 10646) | 
| +++ chrome/browser/views/frame/opaque_browser_frame_view.cc	(working copy) | 
| @@ -2,8 +2,9 @@ | 
| // Use of this source code is governed by a BSD-style license that can be | 
| // found in the LICENSE file. | 
|  | 
| -#include "chrome/browser/views/frame/opaque_non_client_view.h" | 
| +#include "chrome/browser/views/frame/opaque_browser_frame_view.h" | 
|  | 
| +#include "chrome/browser/views/frame/browser_frame.h" | 
| #include "chrome/browser/views/frame/browser_view.h" | 
| #include "chrome/browser/views/tabs/tab_strip.h" | 
| #include "chrome/common/gfx/chrome_font.h" | 
| @@ -251,12 +252,12 @@ | 
| SkBitmap* OTRActiveWindowResources::standard_frame_bitmaps_[]; | 
| SkBitmap* OTRInactiveWindowResources::standard_frame_bitmaps_[]; | 
|  | 
| -views::WindowResources* OpaqueNonClientView::active_resources_ = NULL; | 
| -views::WindowResources* OpaqueNonClientView::inactive_resources_ = NULL; | 
| -views::WindowResources* OpaqueNonClientView::active_otr_resources_ = NULL; | 
| -views::WindowResources* OpaqueNonClientView::inactive_otr_resources_ = NULL; | 
| -SkBitmap* OpaqueNonClientView::distributor_logo_ = NULL; | 
| -ChromeFont OpaqueNonClientView::title_font_; | 
| +views::WindowResources* OpaqueBrowserFrameView::active_resources_ = NULL; | 
| +views::WindowResources* OpaqueBrowserFrameView::inactive_resources_ = NULL; | 
| +views::WindowResources* OpaqueBrowserFrameView::active_otr_resources_ = NULL; | 
| +views::WindowResources* OpaqueBrowserFrameView::inactive_otr_resources_ = NULL; | 
| +SkBitmap* OpaqueBrowserFrameView::distributor_logo_ = NULL; | 
| +ChromeFont OpaqueBrowserFrameView::title_font_; | 
|  | 
| namespace { | 
| // The frame border is only visible in restored mode and is hardcoded to 4 px on | 
| @@ -325,11 +326,11 @@ | 
| } | 
|  | 
| /////////////////////////////////////////////////////////////////////////////// | 
| -// OpaqueNonClientView, public: | 
| +// OpaqueBrowserFrameView, public: | 
|  | 
| -OpaqueNonClientView::OpaqueNonClientView(OpaqueFrame* frame, | 
| -                                         BrowserView* browser_view) | 
| -    : NonClientView(), | 
| +OpaqueBrowserFrameView::OpaqueBrowserFrameView(BrowserFrame* frame, | 
| +                                               BrowserView* browser_view) | 
| +    : BrowserNonClientFrameView(), | 
| minimize_button_(new views::Button), | 
| maximize_button_(new views::Button), | 
| restore_button_(new views::Button), | 
| @@ -420,20 +421,14 @@ | 
| InitAppWindowResources(); | 
| } | 
|  | 
| -OpaqueNonClientView::~OpaqueNonClientView() { | 
| +OpaqueBrowserFrameView::~OpaqueBrowserFrameView() { | 
| } | 
|  | 
| -gfx::Rect OpaqueNonClientView::GetWindowBoundsForClientBounds( | 
| -    const gfx::Rect& client_bounds) { | 
| -  int top_height = NonClientTopBorderHeight(); | 
| -  int border_thickness = NonClientBorderThickness(); | 
| -  return gfx::Rect(std::max(0, client_bounds.x() - border_thickness), | 
| -                   std::max(0, client_bounds.y() - top_height), | 
| -                   client_bounds.width() + (2 * border_thickness), | 
| -                   client_bounds.height() + top_height + border_thickness); | 
| -} | 
| +/////////////////////////////////////////////////////////////////////////////// | 
| +// OpaqueBrowserFrameView, BrowserNonClientFrameView implementation: | 
|  | 
| -gfx::Rect OpaqueNonClientView::GetBoundsForTabStrip(TabStrip* tabstrip) { | 
| +gfx::Rect OpaqueBrowserFrameView::GetBoundsForTabStrip( | 
| +    TabStrip* tabstrip) const { | 
| int tabstrip_x = browser_view_->ShouldShowOffTheRecordAvatar() ? | 
| (otr_avatar_bounds_.right() + kOTRSideSpacing) : | 
| NonClientBorderThickness(); | 
| @@ -444,32 +439,29 @@ | 
| std::max(0, tabstrip_width), tabstrip->GetPreferredHeight()); | 
| } | 
|  | 
| -void OpaqueNonClientView::UpdateWindowIcon() { | 
| +void OpaqueBrowserFrameView::UpdateThrobber(bool running) { | 
| if (window_icon_) | 
| window_icon_->Update(); | 
| } | 
|  | 
| /////////////////////////////////////////////////////////////////////////////// | 
| -// OpaqueNonClientView, views::NonClientView implementation: | 
| +// OpaqueBrowserFrameView, views::NonClientFrameView implementation: | 
|  | 
| -gfx::Rect OpaqueNonClientView::CalculateClientAreaBounds(int width, | 
| -                                                         int height) const { | 
| -  int top_height = NonClientTopBorderHeight(); | 
| -  int border_thickness = NonClientBorderThickness(); | 
| -  return gfx::Rect(border_thickness, top_height, | 
| -                   std::max(0, width - (2 * border_thickness)), | 
| -                   std::max(0, height - top_height - border_thickness)); | 
| +gfx::Rect OpaqueBrowserFrameView::GetBoundsForClientView() const { | 
| +  return client_view_bounds_; | 
| } | 
|  | 
| -gfx::Size OpaqueNonClientView::CalculateWindowSizeForClientSize( | 
| -    int width, | 
| -    int height) const { | 
| +gfx::Rect OpaqueBrowserFrameView::GetWindowBoundsForClientBounds( | 
| +    const gfx::Rect& client_bounds) const { | 
| +  int top_height = NonClientTopBorderHeight(); | 
| int border_thickness = NonClientBorderThickness(); | 
| -  return gfx::Size(width + (2 * border_thickness), | 
| -                   height + NonClientTopBorderHeight() + border_thickness); | 
| +  return gfx::Rect(std::max(0, client_bounds.x() - border_thickness), | 
| +                   std::max(0, client_bounds.y() - top_height), | 
| +                   client_bounds.width() + (2 * border_thickness), | 
| +                   client_bounds.height() + top_height + border_thickness); | 
| } | 
|  | 
| -gfx::Point OpaqueNonClientView::GetSystemMenuPoint() const { | 
| +gfx::Point OpaqueBrowserFrameView::GetSystemMenuPoint() const { | 
| gfx::Point system_menu_point(FrameBorderThickness(), | 
| NonClientTopBorderHeight() + browser_view_->GetTabStripHeight() - | 
| kClientEdgeThickness); | 
| @@ -477,7 +469,7 @@ | 
| return system_menu_point; | 
| } | 
|  | 
| -int OpaqueNonClientView::NonClientHitTest(const gfx::Point& point) { | 
| +int OpaqueBrowserFrameView::NonClientHitTest(const gfx::Point& point) { | 
| if (!bounds().Contains(point)) | 
| return HTNOWHERE; | 
|  | 
| @@ -508,8 +500,8 @@ | 
| return (window_component == HTNOWHERE) ? HTCAPTION : window_component; | 
| } | 
|  | 
| -void OpaqueNonClientView::GetWindowMask(const gfx::Size& size, | 
| -                                        gfx::Path* window_mask) { | 
| +void OpaqueBrowserFrameView::GetWindowMask(const gfx::Size& size, | 
| +                                           gfx::Path* window_mask) { | 
| DCHECK(window_mask); | 
|  | 
| if (browser_view_->IsFullscreen()) | 
| @@ -534,11 +526,11 @@ | 
| window_mask->close(); | 
| } | 
|  | 
| -void OpaqueNonClientView::EnableClose(bool enable) { | 
| +void OpaqueBrowserFrameView::EnableClose(bool enable) { | 
| close_button_->SetEnabled(enable); | 
| } | 
|  | 
| -void OpaqueNonClientView::ResetWindowControls() { | 
| +void OpaqueBrowserFrameView::ResetWindowControls() { | 
| restore_button_->SetState(views::Button::BS_NORMAL); | 
| minimize_button_->SetState(views::Button::BS_NORMAL); | 
| maximize_button_->SetState(views::Button::BS_NORMAL); | 
| @@ -546,9 +538,9 @@ | 
| } | 
|  | 
| /////////////////////////////////////////////////////////////////////////////// | 
| -// OpaqueNonClientView, views::View overrides: | 
| +// OpaqueBrowserFrameView, views::View overrides: | 
|  | 
| -void OpaqueNonClientView::Paint(ChromeCanvas* canvas) { | 
| +void OpaqueBrowserFrameView::Paint(ChromeCanvas* canvas) { | 
| if (browser_view_->IsFullscreen()) | 
| return;  // Nothing is visible, so don't bother to paint. | 
|  | 
| @@ -564,7 +556,7 @@ | 
| PaintRestoredClientEdge(canvas); | 
| } | 
|  | 
| -void OpaqueNonClientView::Layout() { | 
| +void OpaqueBrowserFrameView::Layout() { | 
| LayoutWindowControls(); | 
| LayoutDistributorLogo(); | 
| LayoutTitleBar(); | 
| @@ -572,8 +564,8 @@ | 
| LayoutClientView(); | 
| } | 
|  | 
| -views::View* OpaqueNonClientView::GetViewForPoint(const gfx::Point& point, | 
| -                                                  bool can_create_floating) { | 
| +views::View* OpaqueBrowserFrameView::GetViewForPoint(const gfx::Point& point, | 
| +                                                     bool can_create_floating) { | 
| // We override this function because the ClientView can overlap the non - | 
| // client view, making it impossible to click on the window controls. We need | 
| // to ensure the window controls are checked _first_. | 
| @@ -589,14 +581,10 @@ | 
| return View::GetViewForPoint(point, can_create_floating); | 
| } | 
|  | 
| -void OpaqueNonClientView::ViewHierarchyChanged(bool is_add, | 
| -                                               views::View* parent, | 
| -                                               views::View* child) { | 
| +void OpaqueBrowserFrameView::ViewHierarchyChanged(bool is_add, | 
| +                                                  views::View* parent, | 
| +                                                  views::View* child) { | 
| if (is_add && child == this) { | 
| -    DCHECK(GetWidget()); | 
| -    DCHECK(frame_->client_view()->GetParent() != this); | 
| -    AddChildView(frame_->client_view()); | 
| - | 
| // The Accessibility glue looks for the product name on these two views to | 
| // determine if this is in fact a Chrome window. | 
| GetRootView()->SetAccessibleName(l10n_util::GetString(IDS_PRODUCT_NAME)); | 
| @@ -604,7 +592,7 @@ | 
| } | 
| } | 
|  | 
| -bool OpaqueNonClientView::GetAccessibleRole(VARIANT* role) { | 
| +bool OpaqueBrowserFrameView::GetAccessibleRole(VARIANT* role) { | 
| DCHECK(role); | 
| // We aren't actually the client area of the window, but we act like it as | 
| // far as MSAA and the UI tests are concerned. | 
| @@ -613,7 +601,7 @@ | 
| return true; | 
| } | 
|  | 
| -bool OpaqueNonClientView::GetAccessibleName(std::wstring* name) { | 
| +bool OpaqueBrowserFrameView::GetAccessibleName(std::wstring* name) { | 
| if (!accessible_name_.empty()) { | 
| *name = accessible_name_; | 
| return true; | 
| @@ -621,14 +609,14 @@ | 
| return false; | 
| } | 
|  | 
| -void OpaqueNonClientView::SetAccessibleName(const std::wstring& name) { | 
| +void OpaqueBrowserFrameView::SetAccessibleName(const std::wstring& name) { | 
| accessible_name_ = name; | 
| } | 
|  | 
| /////////////////////////////////////////////////////////////////////////////// | 
| -// OpaqueNonClientView, views::BaseButton::ButtonListener implementation: | 
| +// OpaqueBrowserFrameView, views::BaseButton::ButtonListener implementation: | 
|  | 
| -void OpaqueNonClientView::ButtonPressed(views::BaseButton* sender) { | 
| +void OpaqueBrowserFrameView::ButtonPressed(views::BaseButton* sender) { | 
| if (sender == minimize_button_) | 
| frame_->ExecuteSystemMenuCommand(SC_MINIMIZE); | 
| else if (sender == maximize_button_) | 
| @@ -640,9 +628,9 @@ | 
| } | 
|  | 
| /////////////////////////////////////////////////////////////////////////////// | 
| -// OpaqueNonClientView, TabIconView::TabContentsProvider implementation: | 
| +// OpaqueBrowserFrameView, TabIconView::TabContentsProvider implementation: | 
|  | 
| -bool OpaqueNonClientView::ShouldTabIconViewAnimate() const { | 
| +bool OpaqueBrowserFrameView::ShouldTabIconViewAnimate() const { | 
| // This function is queried during the creation of the window as the | 
| // TabIconView we host is initialized, so we need to NULL check the selected | 
| // TabContents because in this condition there is not yet a selected tab. | 
| @@ -650,31 +638,31 @@ | 
| return current_tab ? current_tab->is_loading() : false; | 
| } | 
|  | 
| -SkBitmap OpaqueNonClientView::GetFavIconForTabIconView() { | 
| +SkBitmap OpaqueBrowserFrameView::GetFavIconForTabIconView() { | 
| return frame_->window_delegate()->GetWindowIcon(); | 
| } | 
|  | 
| /////////////////////////////////////////////////////////////////////////////// | 
| -// OpaqueNonClientView, private: | 
| +// OpaqueBrowserFrameView, private: | 
|  | 
| -int OpaqueNonClientView::FrameBorderThickness() const { | 
| +int OpaqueBrowserFrameView::FrameBorderThickness() const { | 
| if (browser_view_->IsFullscreen()) | 
| return 0; | 
| return frame_->IsMaximized() ? | 
| GetSystemMetrics(SM_CXSIZEFRAME) : kFrameBorderThickness; | 
| } | 
|  | 
| -int OpaqueNonClientView::TopResizeHeight() const { | 
| +int OpaqueBrowserFrameView::TopResizeHeight() const { | 
| return FrameBorderThickness() - kTopResizeAdjust; | 
| } | 
|  | 
| -int OpaqueNonClientView::NonClientBorderThickness() const { | 
| +int OpaqueBrowserFrameView::NonClientBorderThickness() const { | 
| // When we fill the screen, we don't show a client edge. | 
| return FrameBorderThickness() + | 
| (browser_view_->CanCurrentlyResize() ? kClientEdgeThickness : 0); | 
| } | 
|  | 
| -int OpaqueNonClientView::NonClientTopBorderHeight() const { | 
| +int OpaqueBrowserFrameView::NonClientTopBorderHeight() const { | 
| if (frame_->window_delegate()->ShouldShowWindowTitle()) { | 
| int title_top_spacing, title_thickness; | 
| return TitleCoordinates(&title_top_spacing, &title_thickness); | 
| @@ -684,7 +672,7 @@ | 
| kNonClientRestoredExtraThickness : 0); | 
| } | 
|  | 
| -int OpaqueNonClientView::UnavailablePixelsAtBottomOfNonClientHeight() const { | 
| +int OpaqueBrowserFrameView::UnavailablePixelsAtBottomOfNonClientHeight() const { | 
| // Tricky: When a toolbar is edging the titlebar, it not only draws its own | 
| // shadow and client edge, but an extra, light "shadow" pixel as well, which | 
| // is treated as available space.  Thus the nonclient area actually _fails_ to | 
| @@ -696,8 +684,8 @@ | 
| (frame_->IsMaximized() ? 0 : kClientEdgeThickness); | 
| } | 
|  | 
| -int OpaqueNonClientView::TitleCoordinates(int* title_top_spacing, | 
| -                                          int* title_thickness) const { | 
| +int OpaqueBrowserFrameView::TitleCoordinates(int* title_top_spacing, | 
| +                                             int* title_thickness) const { | 
| int frame_thickness = FrameBorderThickness(); | 
| int min_titlebar_height = kTitlebarMinimumHeight + frame_thickness; | 
| *title_top_spacing = frame_thickness + kTitleTopSpacing; | 
| @@ -723,7 +711,7 @@ | 
| UnavailablePixelsAtBottomOfNonClientHeight(); | 
| } | 
|  | 
| -void OpaqueNonClientView::PaintRestoredFrameBorder(ChromeCanvas* canvas) { | 
| +void OpaqueBrowserFrameView::PaintRestoredFrameBorder(ChromeCanvas* canvas) { | 
| SkBitmap* top_left_corner = resources()->GetPartBitmap(FRAME_TOP_LEFT_CORNER); | 
| SkBitmap* top_right_corner = | 
| resources()->GetPartBitmap(FRAME_TOP_RIGHT_CORNER); | 
| @@ -771,7 +759,7 @@ | 
| height() - top_left_corner->height() - bottom_left_corner->height()); | 
| } | 
|  | 
| -void OpaqueNonClientView::PaintMaximizedFrameBorder(ChromeCanvas* canvas) { | 
| +void OpaqueBrowserFrameView::PaintMaximizedFrameBorder(ChromeCanvas* canvas) { | 
| SkBitmap* top_edge = resources()->GetPartBitmap(FRAME_TOP_EDGE); | 
| canvas->TileImageInt(*top_edge, 0, FrameBorderThickness(), width(), | 
| top_edge->height()); | 
| @@ -788,7 +776,7 @@ | 
| } | 
| } | 
|  | 
| -void OpaqueNonClientView::PaintDistributorLogo(ChromeCanvas* canvas) { | 
| +void OpaqueBrowserFrameView::PaintDistributorLogo(ChromeCanvas* canvas) { | 
| // The distributor logo is only painted when the frame is not maximized and | 
| // when we actually have a logo. | 
| if (!frame_->IsMaximized() && distributor_logo_) { | 
| @@ -797,7 +785,7 @@ | 
| } | 
| } | 
|  | 
| -void OpaqueNonClientView::PaintTitleBar(ChromeCanvas* canvas) { | 
| +void OpaqueBrowserFrameView::PaintTitleBar(ChromeCanvas* canvas) { | 
| // The window icon is painted by the TabIconView. | 
| views::WindowDelegate* d = frame_->window_delegate(); | 
| if (d->ShouldShowWindowTitle()) { | 
| @@ -813,7 +801,7 @@ | 
| } | 
| } | 
|  | 
| -void OpaqueNonClientView::PaintToolbarBackground(ChromeCanvas* canvas) { | 
| +void OpaqueBrowserFrameView::PaintToolbarBackground(ChromeCanvas* canvas) { | 
| if (!browser_view_->IsToolbarVisible()) | 
| return; | 
|  | 
| @@ -847,7 +835,7 @@ | 
| toolbar_bounds.right(), toolbar_bounds.y()); | 
| } | 
|  | 
| -void OpaqueNonClientView::PaintOTRAvatar(ChromeCanvas* canvas) { | 
| +void OpaqueBrowserFrameView::PaintOTRAvatar(ChromeCanvas* canvas) { | 
| if (!browser_view_->ShouldShowOffTheRecordAvatar()) | 
| return; | 
|  | 
| @@ -859,7 +847,7 @@ | 
| otr_avatar_bounds_.width(), otr_avatar_bounds_.height(), false); | 
| } | 
|  | 
| -void OpaqueNonClientView::PaintRestoredClientEdge(ChromeCanvas* canvas) { | 
| +void OpaqueBrowserFrameView::PaintRestoredClientEdge(ChromeCanvas* canvas) { | 
| int client_area_top = frame_->client_view()->y(); | 
|  | 
| gfx::Rect client_area_bounds = CalculateClientAreaBounds(width(), height()); | 
| @@ -915,7 +903,7 @@ | 
| client_area_top, left->width(), client_area_height); | 
| } | 
|  | 
| -void OpaqueNonClientView::LayoutWindowControls() { | 
| +void OpaqueBrowserFrameView::LayoutWindowControls() { | 
| close_button_->SetImageAlignment(views::Button::ALIGN_LEFT, | 
| views::Button::ALIGN_BOTTOM); | 
| // Maximized buttons start at window top so that even if their images aren't | 
| @@ -964,7 +952,7 @@ | 
| minimize_button_size.height() + top_extra_height); | 
| } | 
|  | 
| -void OpaqueNonClientView::LayoutDistributorLogo() { | 
| +void OpaqueBrowserFrameView::LayoutDistributorLogo() { | 
| // Always lay out the logo, even when it's not present, so we can lay out the | 
| // window title based on its position. | 
| if (distributor_logo_) { | 
| @@ -976,7 +964,7 @@ | 
| } | 
| } | 
|  | 
| -void OpaqueNonClientView::LayoutTitleBar() { | 
| +void OpaqueBrowserFrameView::LayoutTitleBar() { | 
| // Always lay out the icon, even when it's not present, so we can lay out the | 
| // window title based on its position. | 
| int frame_thickness = FrameBorderThickness(); | 
| @@ -1022,7 +1010,7 @@ | 
| } | 
| } | 
|  | 
| -void OpaqueNonClientView::LayoutOTRAvatar() { | 
| +void OpaqueBrowserFrameView::LayoutOTRAvatar() { | 
| SkBitmap otr_avatar_icon = browser_view_->GetOTRAvatarIcon(); | 
| int top_height = NonClientTopBorderHeight(); | 
| int tabstrip_height, otr_height; | 
| @@ -1039,13 +1027,21 @@ | 
| otr_avatar_icon.width(), otr_height); | 
| } | 
|  | 
| -void OpaqueNonClientView::LayoutClientView() { | 
| -  frame_->client_view()->SetBounds(CalculateClientAreaBounds(width(), | 
| -                                                             height())); | 
| +void OpaqueBrowserFrameView::LayoutClientView() { | 
| +  client_view_bounds_ = CalculateClientAreaBounds(width(), height()); | 
| } | 
|  | 
| +gfx::Rect OpaqueBrowserFrameView::CalculateClientAreaBounds(int width, | 
| +                                                            int height) const { | 
| +  int top_height = NonClientTopBorderHeight(); | 
| +  int border_thickness = NonClientBorderThickness(); | 
| +  return gfx::Rect(border_thickness, top_height, | 
| +                   std::max(0, width - (2 * border_thickness)), | 
| +                   std::max(0, height - top_height - border_thickness)); | 
| +} | 
| + | 
| // static | 
| -void OpaqueNonClientView::InitClass() { | 
| +void OpaqueBrowserFrameView::InitClass() { | 
| static bool initialized = false; | 
| if (!initialized) { | 
| active_resources_ = new ActiveWindowResources; | 
| @@ -1061,7 +1057,7 @@ | 
| } | 
|  | 
| // static | 
| -void OpaqueNonClientView::InitAppWindowResources() { | 
| +void OpaqueBrowserFrameView::InitAppWindowResources() { | 
| static bool initialized = false; | 
| if (!initialized) { | 
| title_font_ = win_util::GetWindowTitleFont(); | 
|  | 
| Property changes on: chrome\browser\views\frame\opaque_browser_frame_view.cc | 
| ___________________________________________________________________ | 
| Added: svn:mergeinfo | 
| Merged /branches/chrome_webkit_merge_branch/chrome/browser/views/frame/opaque_non_client_view.cc:r69-2775 | 
|  | 
|  |