diff options
Diffstat (limited to 'chrome/browser')
-rwxr-xr-x | chrome/browser/extensions/extension_view.cc | 34 | ||||
-rwxr-xr-x | chrome/browser/extensions/extension_view.h | 3 | ||||
-rw-r--r-- | chrome/browser/renderer_host/render_view_host.cc | 6 | ||||
-rw-r--r-- | chrome/browser/renderer_host/render_view_host.h | 1 | ||||
-rw-r--r-- | chrome/browser/renderer_host/render_view_host_delegate.h | 3 |
5 files changed, 45 insertions, 2 deletions
diff --git a/chrome/browser/extensions/extension_view.cc b/chrome/browser/extensions/extension_view.cc index a9b3ed0..11c33cf 100755 --- a/chrome/browser/extensions/extension_view.cc +++ b/chrome/browser/extensions/extension_view.cc @@ -19,8 +19,38 @@ ExtensionView::ExtensionView(Extension* extension, : HWNDHtmlView(url, this, false), extension_(extension), profile_(profile) { - // TODO(mpcomplete): query this from the renderer somehow? - set_preferred_size(gfx::Size(100, 100)); + // Set the width initially to 0, so that the WebCore::Document can + // correctly compute the minPrefWidth which is returned in + // DidContentsChangeSize() + set_preferred_size(gfx::Size(0, 100)); + SetVisible(false); +} + +void ExtensionView::DidStopLoading(RenderViewHost* render_view_host, + int32 page_id) { + SetVisible(true); + render_view_host->WasResized(); +} + +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(); + set_preferred_size(gfx::Size(pref_width, 100)); + SizeToPreferredSize(); + + // TODO(rafaelw): This assumes that the extension view is a child of an + // ExtensionToolstrip, which is a child of the BookmarkBarView. There should + // be a way to do this where the ExtensionView doesn't have to know it's + // containment hierarchy. + if (GetParent() != NULL && GetParent()->GetParent() != NULL) { + GetParent()->GetParent()->Layout(); + } + + SchedulePaint(); + render_view_host()->WasResized(); + } } void ExtensionView::CreatingRenderer() { diff --git a/chrome/browser/extensions/extension_view.h b/chrome/browser/extensions/extension_view.h index e82c918..960a294 100755 --- a/chrome/browser/extensions/extension_view.h +++ b/chrome/browser/extensions/extension_view.h @@ -33,6 +33,9 @@ class ExtensionView : public HWNDHtmlView, // RenderViewHostDelegate virtual Profile* GetProfile() const { return profile_; } virtual void RenderViewCreated(RenderViewHost* render_view_host); + virtual void DidContentsPreferredWidthChange(const int pref_width); + virtual void DidStopLoading(RenderViewHost* render_view_host, + int32 page_id); virtual WebPreferences GetWebkitPrefs(); virtual void RunJavaScriptMessage( const std::wstring& message, diff --git a/chrome/browser/renderer_host/render_view_host.cc b/chrome/browser/renderer_host/render_view_host.cc index 76bc612..271df03 100644 --- a/chrome/browser/renderer_host/render_view_host.cc +++ b/chrome/browser/renderer_host/render_view_host.cc @@ -712,6 +712,8 @@ void RenderViewHost::OnMessageReceived(const IPC::Message& msg) { IPC_MESSAGE_HANDLER(ViewHostMsg_DidDownloadImage, OnMsgDidDownloadImage) IPC_MESSAGE_HANDLER(ViewHostMsg_ContextMenu, OnMsgContextMenu) IPC_MESSAGE_HANDLER(ViewHostMsg_OpenURL, OnMsgOpenURL) + IPC_MESSAGE_HANDLER(ViewHostMsg_DidContentsPreferredWidthChange, + OnMsgDidContentsPreferredWidthChange) IPC_MESSAGE_HANDLER(ViewHostMsg_DomOperationResponse, OnMsgDomOperationResponse) IPC_MESSAGE_HANDLER(ViewHostMsg_DOMUISend, @@ -1053,6 +1055,10 @@ void RenderViewHost::OnMsgOpenURL(const GURL& url, delegate_->RequestOpenURL(validated_url, referrer, disposition); } +void RenderViewHost::OnMsgDidContentsPreferredWidthChange(const int pref_width) { + delegate_->DidContentsPreferredWidthChange(pref_width); +} + void RenderViewHost::OnMsgDomOperationResponse( const std::string& json_string, int automation_id) { delegate_->DomOperationResponse(json_string, automation_id); diff --git a/chrome/browser/renderer_host/render_view_host.h b/chrome/browser/renderer_host/render_view_host.h index f7a63a5..68fe3c2 100644 --- a/chrome/browser/renderer_host/render_view_host.h +++ b/chrome/browser/renderer_host/render_view_host.h @@ -493,6 +493,7 @@ class RenderViewHost : public RenderWidgetHost { void OnMsgContextMenu(const ContextMenuParams& params); void OnMsgOpenURL(const GURL& url, const GURL& referrer, WindowOpenDisposition disposition); + void OnMsgDidContentsPreferredWidthChange(const int pref_width); void OnMsgDomOperationResponse(const std::string& json_string, int automation_id); void OnMsgDOMUISend(const std::string& message, diff --git a/chrome/browser/renderer_host/render_view_host_delegate.h b/chrome/browser/renderer_host/render_view_host_delegate.h index fc7c8c4..63c01e6 100644 --- a/chrome/browser/renderer_host/render_view_host_delegate.h +++ b/chrome/browser/renderer_host/render_view_host_delegate.h @@ -245,6 +245,9 @@ class RenderViewHostDelegate { bool errored, const SkBitmap& image) { } + // The content's intrinsic width (prefWidth) changed. + virtual void DidContentsPreferredWidthChange(const int pref_width) { } + // The page wants to open a URL with the specified disposition. virtual void RequestOpenURL(const GURL& url, const GURL& referrer, |