Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(57)

Side by Side Diff: chrome/browser/ui/views/infobars/extension_infobar.cc

Issue 7635019: Set Extension Infobars to have a fixed height determined by the developer (clamped to sane min an... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 9 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/ui/views/infobars/extension_infobar.h" 5 #include "chrome/browser/ui/views/infobars/extension_infobar.h"
6 6
7 #include "chrome/browser/extensions/extension_context_menu_model.h" 7 #include "chrome/browser/extensions/extension_context_menu_model.h"
8 #include "chrome/browser/extensions/extension_host.h" 8 #include "chrome/browser/extensions/extension_host.h"
9 #include "chrome/browser/extensions/extension_infobar_delegate.h" 9 #include "chrome/browser/extensions/extension_infobar_delegate.h"
10 #include "chrome/browser/platform_util.h" 10 #include "chrome/browser/platform_util.h"
(...skipping 24 matching lines...) Expand all
35 } // namespace 35 } // namespace
36 36
37 ExtensionInfoBar::ExtensionInfoBar(TabContentsWrapper* owner, 37 ExtensionInfoBar::ExtensionInfoBar(TabContentsWrapper* owner,
38 ExtensionInfoBarDelegate* delegate) 38 ExtensionInfoBarDelegate* delegate)
39 : InfoBarView(owner, delegate), 39 : InfoBarView(owner, delegate),
40 delegate_(delegate), 40 delegate_(delegate),
41 menu_(NULL), 41 menu_(NULL),
42 ALLOW_THIS_IN_INITIALIZER_LIST(tracker_(this)) { 42 ALLOW_THIS_IN_INITIALIZER_LIST(tracker_(this)) {
43 delegate->set_observer(this); 43 delegate->set_observer(this);
44 44
45 ExtensionView* extension_view = delegate->extension_host()->view(); 45 int height = delegate->height();
46 int height = extension_view->GetPreferredSize().height();
47 SetBarTargetHeight((height > 0) ? (height + kSeparatorLineHeight) : 0); 46 SetBarTargetHeight((height > 0) ? (height + kSeparatorLineHeight) : 0);
48
49 // Get notified of resize events for the ExtensionView.
50 extension_view->SetContainer(this);
51 } 47 }
52 48
53 ExtensionInfoBar::~ExtensionInfoBar() { 49 ExtensionInfoBar::~ExtensionInfoBar() {
54 if (GetDelegate()) { 50 if (GetDelegate())
55 GetDelegate()->extension_host()->view()->SetContainer(NULL);
56 GetDelegate()->set_observer(NULL); 51 GetDelegate()->set_observer(NULL);
57 }
58 } 52 }
59 53
60 void ExtensionInfoBar::Layout() { 54 void ExtensionInfoBar::Layout() {
61 InfoBarView::Layout(); 55 InfoBarView::Layout();
62 56
63 gfx::Size menu_size = menu_->GetPreferredSize(); 57 gfx::Size menu_size = menu_->GetPreferredSize();
64 menu_->SetBounds(StartX(), OffsetY(menu_size), menu_size.width(), 58 menu_->SetBounds(StartX(), OffsetY(menu_size), menu_size.width(),
65 menu_size.height()); 59 menu_size.height());
66 60
67 GetDelegate()->extension_host()->view()->SetBounds( 61 GetDelegate()->extension_host()->view()->SetBounds(
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
102 gfx::Size(image_size, image_size), ImageLoadingTracker::DONT_CACHE); 96 gfx::Size(image_size, image_size), ImageLoadingTracker::DONT_CACHE);
103 } else { 97 } else {
104 OnImageLoaded(NULL, icon_resource, 0); 98 OnImageLoaded(NULL, icon_resource, 0);
105 } 99 }
106 } 100 }
107 101
108 int ExtensionInfoBar::ContentMinimumWidth() const { 102 int ExtensionInfoBar::ContentMinimumWidth() const {
109 return menu_->GetPreferredSize().width() + kMenuHorizontalMargin; 103 return menu_->GetPreferredSize().width() + kMenuHorizontalMargin;
110 } 104 }
111 105
112 void ExtensionInfoBar::OnExtensionMouseMove(ExtensionView* view) {
113 }
114
115 void ExtensionInfoBar::OnExtensionMouseLeave(ExtensionView* view) {
116 }
117
118 void ExtensionInfoBar::OnExtensionPreferredSizeChanged(ExtensionView* view) {
119 ExtensionInfoBarDelegate* delegate = GetDelegate();
120 DCHECK_EQ(delegate->extension_host()->view(), view);
121
122 // When the infobar is closed, it animates to 0 vertical height. We'll
123 // continue to get size changed notifications from the ExtensionView, but we
124 // need to ignore them otherwise we'll try to re-animate open (and leak the
125 // infobar view).
126 if (delegate->closing())
127 return;
128
129 view->SetVisible(true);
130
131 if (height() == 0)
132 animation()->Reset(0.0);
133
134 // Clamp height to a min and a max size of between 1 and 2 InfoBars.
135 SetBarTargetHeight(std::min(2 * kDefaultBarTargetHeight,
136 std::max(kDefaultBarTargetHeight, view->GetPreferredSize().height())));
137
138 animation()->Show();
139 }
140
141 void ExtensionInfoBar::OnImageLoaded(SkBitmap* image, 106 void ExtensionInfoBar::OnImageLoaded(SkBitmap* image,
142 const ExtensionResource& resource, 107 const ExtensionResource& resource,
143 int index) { 108 int index) {
144 if (!GetDelegate()) 109 if (!GetDelegate())
145 return; // The delegate can go away while we asynchronously load images. 110 return; // The delegate can go away while we asynchronously load images.
146 111
147 SkBitmap* icon = image; 112 SkBitmap* icon = image;
148 // Fall back on the default extension icon on failure. 113 // Fall back on the default extension icon on failure.
149 ResourceBundle& rb = ResourceBundle::GetSharedInstance(); 114 ResourceBundle& rb = ResourceBundle::GetSharedInstance();
150 if (!image || image->empty()) 115 if (!image || image->empty())
(...skipping 11 matching lines...) Expand all
162 image_size, image_size, false); 127 image_size, image_size, false);
163 canvas->DrawBitmapInt(*drop_image, image_size + kDropArrowLeftMargin, 128 canvas->DrawBitmapInt(*drop_image, image_size + kDropArrowLeftMargin,
164 image_size / 2); 129 image_size / 2);
165 menu_->SetIcon(canvas->ExtractBitmap()); 130 menu_->SetIcon(canvas->ExtractBitmap());
166 menu_->SetVisible(true); 131 menu_->SetVisible(true);
167 132
168 Layout(); 133 Layout();
169 } 134 }
170 135
171 void ExtensionInfoBar::OnDelegateDeleted() { 136 void ExtensionInfoBar::OnDelegateDeleted() {
172 GetDelegate()->extension_host()->view()->SetContainer(NULL);
173 delegate_ = NULL; 137 delegate_ = NULL;
174 } 138 }
175 139
176 void ExtensionInfoBar::RunMenu(View* source, const gfx::Point& pt) { 140 void ExtensionInfoBar::RunMenu(View* source, const gfx::Point& pt) {
177 const Extension* extension = GetDelegate()->extension_host()->extension(); 141 const Extension* extension = GetDelegate()->extension_host()->extension();
178 if (!extension->ShowConfigureContextMenus()) 142 if (!extension->ShowConfigureContextMenus())
179 return; 143 return;
180 144
181 Browser* browser = BrowserView::GetBrowserViewForNativeWindow( 145 Browser* browser = BrowserView::GetBrowserViewForNativeWindow(
182 platform_util::GetTopLevel(source->GetWidget()->GetNativeView()))-> 146 platform_util::GetTopLevel(source->GetWidget()->GetNativeView()))->
183 browser(); 147 browser();
184 scoped_refptr<ExtensionContextMenuModel> options_menu_contents = 148 scoped_refptr<ExtensionContextMenuModel> options_menu_contents =
185 new ExtensionContextMenuModel(extension, browser, NULL); 149 new ExtensionContextMenuModel(extension, browser, NULL);
186 views::MenuModelAdapter options_menu_delegate(options_menu_contents.get()); 150 views::MenuModelAdapter options_menu_delegate(options_menu_contents.get());
187 views::MenuItemView options_menu(&options_menu_delegate); 151 views::MenuItemView options_menu(&options_menu_delegate);
188 options_menu_delegate.BuildMenu(&options_menu); 152 options_menu_delegate.BuildMenu(&options_menu);
189 153
190 gfx::Point screen_point; 154 gfx::Point screen_point;
191 views::View::ConvertPointToScreen(menu_, &screen_point); 155 views::View::ConvertPointToScreen(menu_, &screen_point);
192 options_menu.RunMenuAt(GetWidget(), menu_, 156 options_menu.RunMenuAt(GetWidget(), menu_,
193 gfx::Rect(screen_point, menu_->size()), views::MenuItemView::TOPLEFT, 157 gfx::Rect(screen_point, menu_->size()), views::MenuItemView::TOPLEFT,
194 true); 158 true);
195 } 159 }
196 160
197 ExtensionInfoBarDelegate* ExtensionInfoBar::GetDelegate() { 161 ExtensionInfoBarDelegate* ExtensionInfoBar::GetDelegate() {
198 return delegate_ ? delegate_->AsExtensionInfoBarDelegate() : NULL; 162 return delegate_ ? delegate_->AsExtensionInfoBarDelegate() : NULL;
199 } 163 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698