summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoraa@chromium.org <aa@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-01-31 00:58:14 +0000
committeraa@chromium.org <aa@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-01-31 00:58:14 +0000
commitd8a179c1d098dbc3e65f612fbeb4cdee89b37b91 (patch)
tree34070e1feddf56e0823c3325687e2663a2923dbe
parent3d1b7c7ba93735d06d39e439fa84585029a8d2a0 (diff)
downloadchromium_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.cc8
-rw-r--r--chrome/renderer/render_view.cc9
-rw-r--r--chrome/renderer/render_view.h9
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_;