| Index: chrome/browser/ui/views/extensions/extension_installed_bubble.cc
|
| diff --git a/chrome/browser/ui/views/extensions/extension_installed_bubble.cc b/chrome/browser/ui/views/extensions/extension_installed_bubble.cc
|
| index 4f4925d2e5c9bf3190802a7efe5fb5b62c577d05..f1e1eed6c9d41ed782f061acc93d8473d633447f 100644
|
| --- a/chrome/browser/ui/views/extensions/extension_installed_bubble.cc
|
| +++ b/chrome/browser/ui/views/extensions/extension_installed_bubble.cc
|
| @@ -99,6 +99,16 @@ class InstalledBubbleContent : public views::View,
|
| AddChildView(info_);
|
| }
|
|
|
| + if (type_ == ExtensionInstalledBubble::OMNIBOX_KEYWORD) {
|
| + info_ = new views::Label(l10n_util::GetStringF(
|
| + IDS_EXTENSION_INSTALLED_OMNIBOX_KEYWORD_INFO,
|
| + UTF8ToUTF16(extension->omnibox_keyword())));
|
| + info_->SetFont(font);
|
| + info_->SetMultiLine(true);
|
| + info_->SetHorizontalAlignment(views::Label::ALIGN_LEFT);
|
| + AddChildView(info_);
|
| + }
|
| +
|
| manage_ = new views::Label(
|
| l10n_util::GetString(IDS_EXTENSION_INSTALLED_MANAGE_INFO));
|
| manage_->SetFont(font);
|
| @@ -141,7 +151,8 @@ class InstalledBubbleContent : public views::View,
|
| int height = kVertOuterMargin;
|
| height += heading_->GetHeightForWidth(kRightColumnWidth);
|
| height += kVertInnerMargin;
|
| - if (type_ == ExtensionInstalledBubble::PAGE_ACTION) {
|
| + if (type_ == ExtensionInstalledBubble::PAGE_ACTION ||
|
| + type_ == ExtensionInstalledBubble::OMNIBOX_KEYWORD) {
|
| height += info_->GetHeightForWidth(kRightColumnWidth);
|
| height += kVertInnerMargin;
|
| }
|
| @@ -166,7 +177,8 @@ class InstalledBubbleContent : public views::View,
|
| y += heading_->height();
|
| y += kVertInnerMargin;
|
|
|
| - if (type_ == ExtensionInstalledBubble::PAGE_ACTION) {
|
| + if (type_ == ExtensionInstalledBubble::PAGE_ACTION ||
|
| + type_ == ExtensionInstalledBubble::OMNIBOX_KEYWORD) {
|
| info_->SizeToFit(kRightColumnWidth);
|
| info_->SetX(x);
|
| info_->SetY(y);
|
| @@ -218,7 +230,9 @@ ExtensionInstalledBubble::ExtensionInstalledBubble(const Extension* extension,
|
| animation_wait_retries_(0) {
|
| AddRef(); // Balanced in InfoBubbleClosing.
|
|
|
| - if (extension_->browser_action()) {
|
| + if (!extension_->omnibox_keyword().empty()) {
|
| + type_ = OMNIBOX_KEYWORD;
|
| + } else if (extension_->browser_action()) {
|
| type_ = BROWSER_ACTION;
|
| } else if (extension->page_action() &&
|
| !extension->page_action()->default_icon_path().empty()) {
|
| @@ -292,6 +306,10 @@ void ExtensionInstalledBubble::ShowInternal() {
|
| reference_view = location_bar_view->GetPageActionView(
|
| extension_->page_action());
|
| DCHECK(reference_view);
|
| + } else if (type_ == OMNIBOX_KEYWORD) {
|
| + LocationBarView* location_bar_view = browser_view->GetLocationBarView();
|
| + reference_view = location_bar_view;
|
| + DCHECK(reference_view);
|
| }
|
|
|
| // Default case.
|
| @@ -301,14 +319,21 @@ void ExtensionInstalledBubble::ShowInternal() {
|
| gfx::Point origin;
|
| views::View::ConvertPointToScreen(reference_view, &origin);
|
| gfx::Rect bounds = reference_view->bounds();
|
| - bounds.set_x(origin.x());
|
| - bounds.set_y(origin.y());
|
| + bounds.set_origin(origin);
|
| + BubbleBorder::ArrowLocation arrow_location = BubbleBorder::TOP_RIGHT;
|
| +
|
| + // For omnibox keyword bubbles, move the arrow to point to the left edge
|
| + // of the omnibox, just to the right of the icon.
|
| + if (type_ == OMNIBOX_KEYWORD) {
|
| + bounds.set_origin(
|
| + browser_view->GetLocationBarView()->GetLocationEntryOrigin());
|
| + bounds.set_width(0);
|
| + arrow_location = BubbleBorder::TOP_LEFT;
|
| + }
|
|
|
| - bubble_content_ = new InstalledBubbleContent(extension_, type_,
|
| - &icon_);
|
| + bubble_content_ = new InstalledBubbleContent(extension_, type_, &icon_);
|
| InfoBubble* info_bubble =
|
| - InfoBubble::Show(browser_view->GetWidget(), bounds,
|
| - BubbleBorder::TOP_RIGHT,
|
| + InfoBubble::Show(browser_view->GetWidget(), bounds, arrow_location,
|
| bubble_content_, this);
|
| bubble_content_->set_info_bubble(info_bubble);
|
| }
|
|
|