diff options
author | aa@chromium.org <aa@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-06-19 19:03:41 +0000 |
---|---|---|
committer | aa@chromium.org <aa@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-06-19 19:03:41 +0000 |
commit | ae46154fa91241b8614f04f80c581f9e23dacd5a (patch) | |
tree | 0e2c938ac2d18afa3b082634dedcb4d6959b164d /chrome/browser/extensions | |
parent | 7b1c8eb944311485a65949641d3f2b2d15b09635 (diff) | |
download | chromium_src-ae46154fa91241b8614f04f80c581f9e23dacd5a.zip chromium_src-ae46154fa91241b8614f04f80c581f9e23dacd5a.tar.gz chromium_src-ae46154fa91241b8614f04f80c581f9e23dacd5a.tar.bz2 |
TBR: Fix Toolstrips sometimes show scrollbars as rendering
See: http://codereview.chromium.org/126098
Patch from Jerry Tang <tangjie@google.com>.
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@18837 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/extensions')
-rw-r--r-- | chrome/browser/extensions/extension_host.cc | 7 | ||||
-rw-r--r-- | chrome/browser/extensions/extension_host.h | 1 | ||||
-rw-r--r-- | chrome/browser/extensions/extension_shelf.cc | 10 | ||||
-rw-r--r-- | chrome/browser/extensions/extension_view.cc | 14 | ||||
-rw-r--r-- | chrome/browser/extensions/extension_view.h | 8 |
5 files changed, 29 insertions, 11 deletions
diff --git a/chrome/browser/extensions/extension_host.cc b/chrome/browser/extensions/extension_host.cc index b993f73..cf84ea2 100644 --- a/chrome/browser/extensions/extension_host.cc +++ b/chrome/browser/extensions/extension_host.cc @@ -178,12 +178,13 @@ void ExtensionHost::DidStopLoading(RenderViewHost* render_view_host) { IDR_EXTENSIONS_TOOLSTRIP_CSS)); render_view_host->InsertCSSInWebFrame(L"", toolstrip_css.as_string()); - render_view_host->WasResized(); did_stop_loading_ = true; +} -#if defined(OS_WIN) +void ExtensionHost::DidInsertCSS() { +#if defined(TOOLKIT_VIEWS) if (view_.get()) - view_->ShowIfCompletelyLoaded(); + view_->SetDidInsertCSS(true); #endif } diff --git a/chrome/browser/extensions/extension_host.h b/chrome/browser/extensions/extension_host.h index f54f4fc..72cde94 100644 --- a/chrome/browser/extensions/extension_host.h +++ b/chrome/browser/extensions/extension_host.h @@ -76,6 +76,7 @@ class ExtensionHost : public RenderViewHostDelegate, virtual RenderViewHostDelegate::View* GetViewDelegate() const; virtual ExtensionFunctionDispatcher* CreateExtensionFunctionDispatcher( RenderViewHost *render_view_host, const std::string& extension_id); + virtual void DidInsertCSS(); // RenderViewHostDelegate::View virtual void CreateNewWindow(int route_id, diff --git a/chrome/browser/extensions/extension_shelf.cc b/chrome/browser/extensions/extension_shelf.cc index 72b168f..2c1924b 100644 --- a/chrome/browser/extensions/extension_shelf.cc +++ b/chrome/browser/extensions/extension_shelf.cc @@ -302,12 +302,12 @@ void ExtensionShelf::Layout() { for (int i = 0; i < count; ++i) { x += kToolstripPadding; // left padding ExtensionHost* toolstrip = model_->ToolstripAt(i); - views::View* child = toolstrip->view(); - gfx::Size pref = child->GetPreferredSize(); + ExtensionView* extension_view = toolstrip->view(); + gfx::Size pref = extension_view->GetPreferredSize(); int next_x = x + pref.width() + kToolstripPadding; // right padding - child->SetVisible(next_x < max_x); - child->SetBounds(x, y, pref.width(), content_height); - child->Layout(); + extension_view->set_is_clipped(next_x >= max_x); + extension_view->SetBounds(x, y, pref.width(), content_height); + extension_view->Layout(); x = next_x + kToolstripDividerWidth; } if (handle_.get()) diff --git a/chrome/browser/extensions/extension_view.cc b/chrome/browser/extensions/extension_view.cc index 7a8be62..ce0a125 100644 --- a/chrome/browser/extensions/extension_view.cc +++ b/chrome/browser/extensions/extension_view.cc @@ -14,7 +14,8 @@ ExtensionView::ExtensionView(ExtensionHost* host, Browser* browser) : host_(host), browser_(browser), - initialized_(false), pending_preferred_width_(0), container_(NULL) { + initialized_(false), pending_preferred_width_(0), container_(NULL), + did_insert_css_(false), is_clipped_(false) { host_->set_view(this); } @@ -30,6 +31,11 @@ RenderViewHost* ExtensionView::render_view_host() const { return host_->render_view_host(); } +void ExtensionView::SetDidInsertCSS(bool did_insert) { + did_insert_css_ = did_insert; + ShowIfCompletelyLoaded(); +} + void ExtensionView::SetVisible(bool is_visible) { if (is_visible != IsVisible()) { NativeViewHost::SetVisible(is_visible); @@ -87,9 +93,11 @@ void ExtensionView::CreateWidgetHostView() { } void ExtensionView::ShowIfCompletelyLoaded() { - // We wait to show the ExtensionView until it has loaded and our parent has - // given us a background. These can happen in different orders. + // We wait to show the ExtensionView until it has loaded, our parent has + // given us a background and css has been inserted into page. These can happen + // in different orders. if (!IsVisible() && host_->did_stop_loading() && render_view_host()->view() && + !is_clipped_ && did_insert_css_ && !render_view_host()->view()->background().empty()) { SetVisible(true); DidContentsPreferredWidthChange(pending_preferred_width_); diff --git a/chrome/browser/extensions/extension_view.h b/chrome/browser/extensions/extension_view.h index 1904db2..22ca804 100644 --- a/chrome/browser/extensions/extension_view.h +++ b/chrome/browser/extensions/extension_view.h @@ -37,6 +37,8 @@ class ExtensionView : public views::NativeViewHost { Browser* browser() const { return browser_; } Extension* extension() const; RenderViewHost* render_view_host() const; + void SetDidInsertCSS(bool did_insert); + void set_is_clipped(bool is_clipped) { is_clipped_ = is_clipped; } // Notification from ExtensionHost. void DidContentsPreferredWidthChange(const int pref_width); @@ -95,6 +97,12 @@ class ExtensionView : public views::NativeViewHost { // Note: the view does not own its container. ExtensionContainer* container_; + // Whether the RenderView has inserted extension css into toolstrip page. + bool did_insert_css_; + + // Whether this extension view is clipped. + bool is_clipped_; + DISALLOW_COPY_AND_ASSIGN(ExtensionView); }; |