summaryrefslogtreecommitdiffstats
path: root/chrome/browser/extensions
diff options
context:
space:
mode:
authoraa@chromium.org <aa@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-06-19 19:03:41 +0000
committeraa@chromium.org <aa@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-06-19 19:03:41 +0000
commitae46154fa91241b8614f04f80c581f9e23dacd5a (patch)
tree0e2c938ac2d18afa3b082634dedcb4d6959b164d /chrome/browser/extensions
parent7b1c8eb944311485a65949641d3f2b2d15b09635 (diff)
downloadchromium_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.cc7
-rw-r--r--chrome/browser/extensions/extension_host.h1
-rw-r--r--chrome/browser/extensions/extension_shelf.cc10
-rw-r--r--chrome/browser/extensions/extension_view.cc14
-rw-r--r--chrome/browser/extensions/extension_view.h8
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);
};