diff options
author | aa@chromium.org <aa@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-01-31 00:58:14 +0000 |
---|---|---|
committer | aa@chromium.org <aa@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-01-31 00:58:14 +0000 |
commit | d8a179c1d098dbc3e65f612fbeb4cdee89b37b91 (patch) | |
tree | 34070e1feddf56e0823c3325687e2663a2923dbe | |
parent | 3d1b7c7ba93735d06d39e439fa84585029a8d2a0 (diff) | |
download | chromium_src-d8a179c1d098dbc3e65f612fbeb4cdee89b37b91.zip chromium_src-d8a179c1d098dbc3e65f612fbeb4cdee89b37b91.tar.gz chromium_src-d8a179c1d098dbc3e65f612fbeb4cdee89b37b91.tar.bz2 |
The upstream change to make popup shrinking work properly is a big project, so I'm doing a quick hack here so that we don't ship more builds with it broken.
BUG=30291
TEST=Install news sample extension. Expand a section, then contract it. Popup should contract too.
Review URL: http://codereview.chromium.org/556058
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@37654 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | chrome/browser/extensions/extension_host.cc | 8 | ||||
-rw-r--r-- | chrome/renderer/render_view.cc | 9 | ||||
-rw-r--r-- | chrome/renderer/render_view.h | 9 |
3 files changed, 24 insertions, 2 deletions
diff --git a/chrome/browser/extensions/extension_host.cc b/chrome/browser/extensions/extension_host.cc index ef06bef..ec519ff 100644 --- a/chrome/browser/extensions/extension_host.cc +++ b/chrome/browser/extensions/extension_host.cc @@ -647,8 +647,12 @@ void ExtensionHost::RenderViewCreated(RenderViewHost* render_view_host) { extension_function_dispatcher_.reset( new ExtensionFunctionDispatcher(render_view_host, this, url_)); - render_view_host->Send(new ViewMsg_EnablePreferredSizeChangedMode( - render_view_host->routing_id())); + if (extension_host_type_ == ViewType::EXTENSION_TOOLSTRIP || + extension_host_type_ == ViewType::EXTENSION_MOLE || + extension_host_type_ == ViewType::EXTENSION_POPUP) { + render_view_host->Send(new ViewMsg_EnablePreferredSizeChangedMode( + render_view_host->routing_id())); + } } int ExtensionHost::GetBrowserWindowID() const { diff --git a/chrome/renderer/render_view.cc b/chrome/renderer/render_view.cc index ad16f25..d4c1c36 100644 --- a/chrome/renderer/render_view.cc +++ b/chrome/renderer/render_view.cc @@ -2709,6 +2709,10 @@ void RenderView::didCreateIsolatedScriptContext(WebFrame* frame) { } void RenderView::didChangeContentsSize(WebFrame* frame, const WebSize& size) { + CheckPreferredSize(); +} + +void RenderView::CheckPreferredSize() { // We don't always want to send the change messages over IPC, only if we've // be put in that mode by getting a |ViewMsg_EnablePreferredSizeChangedMode| // message. @@ -3422,6 +3426,11 @@ void RenderView::OnEnableViewSourceMode() { void RenderView::OnEnablePreferredSizeChangedMode() { send_preferred_size_changes_ = true; + if (CommandLine::ForCurrentProcess()->GetSwitchValueASCII( + switches::kProcessType) == switches::kExtensionProcess) { + preferred_size_change_timer_.Start(TimeDelta::FromMilliseconds(10), this, + &RenderView::CheckPreferredSize); + } } void RenderView::OnSetRendererPrefs(const RendererPreferences& renderer_prefs) { diff --git a/chrome/renderer/render_view.h b/chrome/renderer/render_view.h index 6d50216..a96ee39 100644 --- a/chrome/renderer/render_view.h +++ b/chrome/renderer/render_view.h @@ -746,6 +746,10 @@ class RenderView : public RenderWidget, void DidDownloadImage(webkit_glue::ImageResourceFetcher* fetcher, const SkBitmap& image); + // Check whether the preferred size has changed. This is called periodically + // by preferred_size_change_timer_. + void CheckPreferredSize(); + enum ErrorPageType { DNS_ERROR, HTTP_404, @@ -980,6 +984,11 @@ class RenderView : public RenderWidget, // If true, we send IPC messages when |preferred_size_| changes. bool send_preferred_size_changes_; + // Nasty hack. WebKit does not send us events when the preferred size changes, + // so we must poll it. See also: + // https://bugs.webkit.org/show_bug.cgi?id=32807. + base::RepeatingTimer<RenderView> preferred_size_change_timer_; + // The text selection the last time DidChangeSelection got called. std::string last_selection_; |