| Index: chrome/browser/extensions/extension_view.cc
|
| diff --git a/chrome/browser/extensions/extension_view.cc b/chrome/browser/extensions/extension_view.cc
|
| index b55c3aad0a43eca3f84887ab5947b5f06acbee63..a26194ca25eec873a315cfe0ae231cd7dac118be 100755
|
| --- a/chrome/browser/extensions/extension_view.cc
|
| +++ b/chrome/browser/extensions/extension_view.cc
|
| @@ -34,21 +34,38 @@ ExtensionView::ExtensionView(Extension* extension,
|
| Browser* browser)
|
| : HWNDHtmlView(url, this, false, instance),
|
| extension_(extension),
|
| - browser_(browser) {
|
| - SetVisible(false);
|
| + browser_(browser),
|
| + did_stop_loading_(false),
|
| + pending_preferred_width_(0) {
|
| +}
|
| +
|
| +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.
|
| + if (did_stop_loading_ && !render_view_host()->view()->background().empty()) {
|
| + SetVisible(true);
|
| + DidContentsPreferredWidthChange(pending_preferred_width_);
|
| + }
|
| +}
|
| +
|
| +void ExtensionView::SetBackground(const SkBitmap& background) {
|
| + HWNDHtmlView::SetBackground(background);
|
| + ShowIfCompletelyLoaded();
|
| }
|
|
|
| void ExtensionView::DidStopLoading(RenderViewHost* render_view_host,
|
| int32 page_id) {
|
| render_view_host->WasResized();
|
| - SetVisible(true);
|
| + did_stop_loading_ = true;
|
| + ShowIfCompletelyLoaded();
|
| }
|
|
|
| void ExtensionView::DidContentsPreferredWidthChange(const int pref_width) {
|
| - if (pref_width > 0) {
|
| - // SchedulePaint first because new_width may be smaller and we want
|
| - // the Parent to paint the vacated space.
|
| - SchedulePaint();
|
| + // Don't actually do anything with this information until we have been shown.
|
| + // Size changes will not be honored by lower layers while we are hidden.
|
| + if (!IsVisible()) {
|
| + pending_preferred_width_ = pref_width;
|
| + } else if (pref_width > 0) {
|
| set_preferred_size(gfx::Size(pref_width, height()));
|
| SizeToPreferredSize();
|
|
|
| @@ -61,12 +78,12 @@ void ExtensionView::DidContentsPreferredWidthChange(const int pref_width) {
|
| }
|
|
|
| SchedulePaint();
|
| - render_view_host()->WasResized();
|
| }
|
| }
|
|
|
| void ExtensionView::CreatingRenderer() {
|
| render_view_host()->AllowExtensionBindings();
|
| + SetVisible(false);
|
| }
|
|
|
| void ExtensionView::RenderViewCreated(RenderViewHost* rvh) {
|
|
|