Home | History | Annotate | Download | only in extensions
      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
      3 // found in the LICENSE file.
      4 
      5 #import <Cocoa/Cocoa.h>
      6 
      7 #include "base/i18n/rtl.h"
      8 #include "chrome/browser/tab_contents/confirm_infobar_delegate.h"
      9 #include "chrome/browser/tab_contents/simple_alert_infobar_delegate.h"
     10 #include "chrome/browser/ui/browser.h"
     11 #include "chrome/browser/ui/browser_dialogs.h"
     12 #include "chrome/browser/ui/browser_list.h"
     13 #include "chrome/browser/ui/browser_window.h"
     14 #import "chrome/browser/ui/cocoa/extensions/extension_installed_bubble_controller.h"
     15 #include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h"
     16 #include "chrome/common/extensions/extension.h"
     17 #include "chrome/common/extensions/extension_action.h"
     18 #include "grit/generated_resources.h"
     19 #include "ui/base/l10n/l10n_util.h"
     20 
     21 // When an extension is installed on Mac with neither browser action nor
     22 // page action icons, show an infobar instead of a popup bubble.
     23 static void ShowGenericExtensionInstalledInfoBar(
     24     const Extension* new_extension,
     25     SkBitmap icon,
     26     Profile* profile) {
     27   Browser* browser = BrowserList::GetLastActiveWithProfile(profile);
     28   if (!browser)
     29     return;
     30 
     31   TabContents* tab_contents = browser->GetSelectedTabContents();
     32   if (!tab_contents)
     33     return;
     34 
     35   string16 extension_name = UTF8ToUTF16(new_extension->name());
     36   base::i18n::AdjustStringForLocaleDirection(&extension_name);
     37   string16 msg =
     38       l10n_util::GetStringFUTF16(IDS_EXTENSION_INSTALLED_HEADING,
     39                                  extension_name) +
     40       UTF8ToUTF16(" ") +
     41       l10n_util::GetStringUTF16(IDS_EXTENSION_INSTALLED_MANAGE_INFO_MAC);
     42   InfoBarDelegate* delegate = new SimpleAlertInfoBarDelegate(tab_contents,
     43       new SkBitmap(icon), msg, true);
     44   tab_contents->AddInfoBar(delegate);
     45 }
     46 
     47 namespace browser {
     48 
     49 void ShowExtensionInstalledBubble(
     50     const Extension* extension,
     51     Browser* browser,
     52     const SkBitmap& icon,
     53     Profile* profile) {
     54   if ((extension->browser_action()) || !extension->omnibox_keyword().empty() ||
     55       (extension->page_action() &&
     56       !extension->page_action()->default_icon_path().empty())) {
     57     // The controller is deallocated when the window is closed, so no need to
     58     // worry about it here.
     59     [[ExtensionInstalledBubbleController alloc]
     60         initWithParentWindow:browser->window()->GetNativeHandle()
     61                    extension:extension
     62                      browser:browser
     63                         icon:icon];
     64   } else {
     65     // If the extension is of type GENERIC, meaning it doesn't have a UI
     66     // surface to display for this window, launch infobar instead of popup
     67     // bubble, because we have no guaranteed wrench menu button to point to.
     68     ShowGenericExtensionInstalledInfoBar(extension, icon, profile);
     69   }
     70 }
     71 
     72 } // namespace browser
     73