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

Side by Side Diff: chrome/browser/ui/views/extensions/extension_installed_bubble.cc

Issue 4724005: Add a help bubble pointing to the omnibox when installing an extension with (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: xib Created 10 years, 1 month 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) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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/views/extensions/extension_installed_bubble.h" 5 #include "chrome/browser/views/extensions/extension_installed_bubble.h"
6 6
7 #include "app/l10n_util.h" 7 #include "app/l10n_util.h"
8 #include "app/resource_bundle.h" 8 #include "app/resource_bundle.h"
9 #include "base/message_loop.h" 9 #include "base/message_loop.h"
10 #include "base/utf_string_conversions.h" 10 #include "base/utf_string_conversions.h"
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
92 92
93 if (type_ == ExtensionInstalledBubble::PAGE_ACTION) { 93 if (type_ == ExtensionInstalledBubble::PAGE_ACTION) {
94 info_ = new views::Label(l10n_util::GetString( 94 info_ = new views::Label(l10n_util::GetString(
95 IDS_EXTENSION_INSTALLED_PAGE_ACTION_INFO)); 95 IDS_EXTENSION_INSTALLED_PAGE_ACTION_INFO));
96 info_->SetFont(font); 96 info_->SetFont(font);
97 info_->SetMultiLine(true); 97 info_->SetMultiLine(true);
98 info_->SetHorizontalAlignment(views::Label::ALIGN_LEFT); 98 info_->SetHorizontalAlignment(views::Label::ALIGN_LEFT);
99 AddChildView(info_); 99 AddChildView(info_);
100 } 100 }
101 101
102 if (type_ == ExtensionInstalledBubble::OMNIBOX_KEYWORD) {
103 info_ = new views::Label(l10n_util::GetStringF(
104 IDS_EXTENSION_INSTALLED_OMNIBOX_KEYWORD_INFO,
105 UTF8ToUTF16(extension->omnibox_keyword())));
106 info_->SetFont(font);
107 info_->SetMultiLine(true);
108 info_->SetHorizontalAlignment(views::Label::ALIGN_LEFT);
109 AddChildView(info_);
110 }
111
102 manage_ = new views::Label( 112 manage_ = new views::Label(
103 l10n_util::GetString(IDS_EXTENSION_INSTALLED_MANAGE_INFO)); 113 l10n_util::GetString(IDS_EXTENSION_INSTALLED_MANAGE_INFO));
104 manage_->SetFont(font); 114 manage_->SetFont(font);
105 manage_->SetMultiLine(true); 115 manage_->SetMultiLine(true);
106 manage_->SetHorizontalAlignment(views::Label::ALIGN_LEFT); 116 manage_->SetHorizontalAlignment(views::Label::ALIGN_LEFT);
107 AddChildView(manage_); 117 AddChildView(manage_);
108 118
109 close_button_ = new views::ImageButton(this); 119 close_button_ = new views::ImageButton(this);
110 close_button_->SetImage(views::CustomButton::BS_NORMAL, 120 close_button_->SetImage(views::CustomButton::BS_NORMAL,
111 rb.GetBitmapNamed(IDR_CLOSE_BAR)); 121 rb.GetBitmapNamed(IDR_CLOSE_BAR));
(...skipping 22 matching lines...) Expand all
134 int width = kHorizOuterMargin; 144 int width = kHorizOuterMargin;
135 width += kIconSize; 145 width += kIconSize;
136 width += kPanelHorizMargin; 146 width += kPanelHorizMargin;
137 width += kRightColumnWidth; 147 width += kRightColumnWidth;
138 width += 2*kPanelHorizMargin; 148 width += 2*kPanelHorizMargin;
139 width += kHorizOuterMargin; 149 width += kHorizOuterMargin;
140 150
141 int height = kVertOuterMargin; 151 int height = kVertOuterMargin;
142 height += heading_->GetHeightForWidth(kRightColumnWidth); 152 height += heading_->GetHeightForWidth(kRightColumnWidth);
143 height += kVertInnerMargin; 153 height += kVertInnerMargin;
144 if (type_ == ExtensionInstalledBubble::PAGE_ACTION) { 154 if (type_ == ExtensionInstalledBubble::PAGE_ACTION ||
155 type_ == ExtensionInstalledBubble::OMNIBOX_KEYWORD) {
145 height += info_->GetHeightForWidth(kRightColumnWidth); 156 height += info_->GetHeightForWidth(kRightColumnWidth);
146 height += kVertInnerMargin; 157 height += kVertInnerMargin;
147 } 158 }
148 height += manage_->GetHeightForWidth(kRightColumnWidth); 159 height += manage_->GetHeightForWidth(kRightColumnWidth);
149 height += kVertOuterMargin; 160 height += kVertOuterMargin;
150 161
151 return gfx::Size(width, std::max(height, kIconSize + 2 * kVertOuterMargin)); 162 return gfx::Size(width, std::max(height, kIconSize + 2 * kVertOuterMargin));
152 } 163 }
153 164
154 virtual void Layout() { 165 virtual void Layout() {
155 int x = kHorizOuterMargin; 166 int x = kHorizOuterMargin;
156 int y = kVertOuterMargin; 167 int y = kVertOuterMargin;
157 168
158 icon_->SetBounds(x, y, kIconSize, kIconSize); 169 icon_->SetBounds(x, y, kIconSize, kIconSize);
159 x += kIconSize; 170 x += kIconSize;
160 x += kPanelHorizMargin; 171 x += kPanelHorizMargin;
161 172
162 y += kRightcolumnVerticalShift; 173 y += kRightcolumnVerticalShift;
163 heading_->SizeToFit(kRightColumnWidth); 174 heading_->SizeToFit(kRightColumnWidth);
164 heading_->SetX(x); 175 heading_->SetX(x);
165 heading_->SetY(y); 176 heading_->SetY(y);
166 y += heading_->height(); 177 y += heading_->height();
167 y += kVertInnerMargin; 178 y += kVertInnerMargin;
168 179
169 if (type_ == ExtensionInstalledBubble::PAGE_ACTION) { 180 if (type_ == ExtensionInstalledBubble::PAGE_ACTION ||
181 type_ == ExtensionInstalledBubble::OMNIBOX_KEYWORD) {
170 info_->SizeToFit(kRightColumnWidth); 182 info_->SizeToFit(kRightColumnWidth);
171 info_->SetX(x); 183 info_->SetX(x);
172 info_->SetY(y); 184 info_->SetY(y);
173 y += info_->height(); 185 y += info_->height();
174 y += kVertInnerMargin; 186 y += kVertInnerMargin;
175 } 187 }
176 188
177 manage_->SizeToFit(kRightColumnWidth); 189 manage_->SizeToFit(kRightColumnWidth);
178 manage_->SetX(x); 190 manage_->SetX(x);
179 manage_->SetY(y); 191 manage_->SetY(y);
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
211 223
212 ExtensionInstalledBubble::ExtensionInstalledBubble(const Extension* extension, 224 ExtensionInstalledBubble::ExtensionInstalledBubble(const Extension* extension,
213 Browser *browser, 225 Browser *browser,
214 SkBitmap icon) 226 SkBitmap icon)
215 : extension_(extension), 227 : extension_(extension),
216 browser_(browser), 228 browser_(browser),
217 icon_(icon), 229 icon_(icon),
218 animation_wait_retries_(0) { 230 animation_wait_retries_(0) {
219 AddRef(); // Balanced in InfoBubbleClosing. 231 AddRef(); // Balanced in InfoBubbleClosing.
220 232
221 if (extension_->browser_action()) { 233 if (!extension_->omnibox_keyword().empty()) {
234 type_ = OMNIBOX_KEYWORD;
235 } else if (extension_->browser_action()) {
222 type_ = BROWSER_ACTION; 236 type_ = BROWSER_ACTION;
223 } else if (extension->page_action() && 237 } else if (extension->page_action() &&
224 !extension->page_action()->default_icon_path().empty()) { 238 !extension->page_action()->default_icon_path().empty()) {
225 type_ = PAGE_ACTION; 239 type_ = PAGE_ACTION;
226 } else { 240 } else {
227 type_ = GENERIC; 241 type_ = GENERIC;
228 } 242 }
229 243
230 // |extension| has been initialized but not loaded at this point. We need 244 // |extension| has been initialized but not loaded at this point. We need
231 // to wait on showing the Bubble until not only the EXTENSION_LOADED gets 245 // to wait on showing the Bubble until not only the EXTENSION_LOADED gets
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
285 if (!reference_view || !reference_view->IsVisible()) 299 if (!reference_view || !reference_view->IsVisible())
286 reference_view = NULL; // fall back to app menu below. 300 reference_view = NULL; // fall back to app menu below.
287 } 301 }
288 } else if (type_ == PAGE_ACTION) { 302 } else if (type_ == PAGE_ACTION) {
289 LocationBarView* location_bar_view = browser_view->GetLocationBarView(); 303 LocationBarView* location_bar_view = browser_view->GetLocationBarView();
290 location_bar_view->SetPreviewEnabledPageAction(extension_->page_action(), 304 location_bar_view->SetPreviewEnabledPageAction(extension_->page_action(),
291 true); // preview_enabled 305 true); // preview_enabled
292 reference_view = location_bar_view->GetPageActionView( 306 reference_view = location_bar_view->GetPageActionView(
293 extension_->page_action()); 307 extension_->page_action());
294 DCHECK(reference_view); 308 DCHECK(reference_view);
309 } else if (type_ == OMNIBOX_KEYWORD) {
310 LocationBarView* location_bar_view = browser_view->GetLocationBarView();
311 reference_view = location_bar_view;
312 DCHECK(reference_view);
295 } 313 }
296 314
297 // Default case. 315 // Default case.
298 if (reference_view == NULL) 316 if (reference_view == NULL)
299 reference_view = browser_view->GetToolbarView()->app_menu(); 317 reference_view = browser_view->GetToolbarView()->app_menu();
300 318
301 gfx::Point origin; 319 gfx::Point origin;
302 views::View::ConvertPointToScreen(reference_view, &origin); 320 views::View::ConvertPointToScreen(reference_view, &origin);
303 gfx::Rect bounds = reference_view->bounds(); 321 gfx::Rect bounds = reference_view->bounds();
304 bounds.set_x(origin.x()); 322 bounds.set_origin(origin);
305 bounds.set_y(origin.y()); 323 BubbleBorder::ArrowLocation arrow_location = BubbleBorder::TOP_RIGHT;
306 324
307 bubble_content_ = new InstalledBubbleContent(extension_, type_, 325 // For omnibox keyword bubbles, move the arrow to point to the left edge
308 &icon_); 326 // of the omnibox, just to the right of the icon.
327 if (type_ == OMNIBOX_KEYWORD) {
328 bounds.set_origin(
329 browser_view->GetLocationBarView()->GetLocationEntryOrigin());
330 bounds.set_width(0);
331 arrow_location = BubbleBorder::TOP_LEFT;
332 }
333
334 bubble_content_ = new InstalledBubbleContent(extension_, type_, &icon_);
309 InfoBubble* info_bubble = 335 InfoBubble* info_bubble =
310 InfoBubble::Show(browser_view->GetWidget(), bounds, 336 InfoBubble::Show(browser_view->GetWidget(), bounds, arrow_location,
311 BubbleBorder::TOP_RIGHT,
312 bubble_content_, this); 337 bubble_content_, this);
313 bubble_content_->set_info_bubble(info_bubble); 338 bubble_content_->set_info_bubble(info_bubble);
314 } 339 }
315 340
316 // InfoBubbleDelegate 341 // InfoBubbleDelegate
317 void ExtensionInstalledBubble::InfoBubbleClosing(InfoBubble* info_bubble, 342 void ExtensionInstalledBubble::InfoBubbleClosing(InfoBubble* info_bubble,
318 bool closed_by_escape) { 343 bool closed_by_escape) {
319 if (extension_ && type_ == PAGE_ACTION) { 344 if (extension_ && type_ == PAGE_ACTION) {
320 BrowserView* browser_view = BrowserView::GetBrowserViewForNativeWindow( 345 BrowserView* browser_view = BrowserView::GetBrowserViewForNativeWindow(
321 browser_->window()->GetNativeHandle()); 346 browser_->window()->GetNativeHandle());
322 browser_view->GetLocationBarView()->SetPreviewEnabledPageAction( 347 browser_view->GetLocationBarView()->SetPreviewEnabledPageAction(
323 extension_->page_action(), 348 extension_->page_action(),
324 false); // preview_enabled 349 false); // preview_enabled
325 } 350 }
326 351
327 Release(); // Balanced in ctor. 352 Release(); // Balanced in ctor.
328 } 353 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698