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#ifndef CHROME_BROWSER_UI_VIEWS_EXTENSIONS_EXTENSION_INSTALLED_BUBBLE_H_ 6#define CHROME_BROWSER_UI_VIEWS_EXTENSIONS_EXTENSION_INSTALLED_BUBBLE_H_ 7#pragma once 8 9#include "base/memory/ref_counted.h" 10#include "chrome/browser/ui/views/bubble/bubble.h" 11#include "content/common/notification_observer.h" 12#include "content/common/notification_registrar.h" 13#include "third_party/skia/include/core/SkBitmap.h" 14 15class Browser; 16class Extension; 17class InstalledBubbleContent; 18class SkBitmap; 19 20// Provides feedback to the user upon successful installation of an 21// extension. Depending on the type of extension, the Bubble will 22// point to: 23// OMNIBOX_KEYWORD-> The omnibox. 24// BROWSER_ACTION -> The browserAction icon in the toolbar. 25// PAGE_ACTION -> A preview of the pageAction icon in the location 26// bar which is shown while the Bubble is shown. 27// GENERIC -> The wrench menu. This case includes pageActions that 28// don't specify a default icon. 29// 30// ExtensionInstallBubble manages its own lifetime. 31class ExtensionInstalledBubble 32 : public BubbleDelegate, 33 public NotificationObserver, 34 public base::RefCountedThreadSafe<ExtensionInstalledBubble> { 35 public: 36 // The behavior and content of this Bubble comes in these varieties: 37 enum BubbleType { 38 OMNIBOX_KEYWORD, 39 BROWSER_ACTION, 40 PAGE_ACTION, 41 GENERIC 42 }; 43 44 // Creates the ExtensionInstalledBubble and schedules it to be shown once 45 // the extension has loaded. |extension| is the installed extension. |browser| 46 // is the browser window which will host the bubble. |icon| is the install 47 // icon of the extension. 48 static void Show( 49 const Extension* extension, Browser *browser, const SkBitmap& icon); 50 51 private: 52 friend class base::RefCountedThreadSafe<ExtensionInstalledBubble>; 53 54 // Private ctor. Registers a listener for EXTENSION_LOADED. 55 ExtensionInstalledBubble( 56 const Extension* extension, Browser *browser, const SkBitmap& icon); 57 58 virtual ~ExtensionInstalledBubble(); 59 60 // Shows the bubble. Called internally via PostTask. 61 void ShowInternal(); 62 63 // NotificationObserver 64 virtual void Observe(NotificationType type, 65 const NotificationSource& source, 66 const NotificationDetails& details); 67 68 // BubbleDelegate 69 virtual void BubbleClosing(Bubble* bubble, bool closed_by_escape); 70 virtual bool CloseOnEscape(); 71 virtual bool FadeInOnShow(); 72 73 const Extension* extension_; 74 Browser* browser_; 75 SkBitmap icon_; 76 NotificationRegistrar registrar_; 77 InstalledBubbleContent* bubble_content_; 78 BubbleType type_; 79 80 // How many times we've deferred due to animations being in progress. 81 int animation_wait_retries_; 82 83 DISALLOW_COPY_AND_ASSIGN(ExtensionInstalledBubble); 84}; 85 86#endif // CHROME_BROWSER_UI_VIEWS_EXTENSIONS_EXTENSION_INSTALLED_BUBBLE_H_ 87