Temporarily re-enabling SizeAfterPrefChange test with traces (this time for Linux...
[chromium-blink-merge.git] / chrome / browser / ui / extensions / extension_installed_bubble.h
blob4982dd4623df6433ce689a0fb0e7744ddc00d1f5
1 // Copyright 2013 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.
5 #ifndef CHROME_BROWSER_UI_EXTENSIONS_EXTENSION_INSTALLED_BUBBLE_H_
6 #define CHROME_BROWSER_UI_EXTENSIONS_EXTENSION_INSTALLED_BUBBLE_H_
8 #include "base/memory/weak_ptr.h"
9 #include "base/scoped_observer.h"
10 #include "content/public/browser/notification_observer.h"
11 #include "content/public/browser/notification_registrar.h"
12 #include "extensions/browser/extension_registry_observer.h"
13 #include "third_party/skia/include/core/SkBitmap.h"
15 class Browser;
17 namespace extensions {
18 class Extension;
19 class ExtensionRegistry;
22 // Provides feedback to the user upon successful installation of an
23 // extension. Depending on the type of extension, the Bubble will
24 // point to:
25 // OMNIBOX_KEYWORD-> The omnibox.
26 // BROWSER_ACTION -> The browser action icon in the toolbar.
27 // PAGE_ACTION -> A preview of the page action icon in the location
28 // bar which is shown while the Bubble is shown.
29 // GENERIC -> The wrench menu. This case includes page actions that
30 // don't specify a default icon.
32 // ExtensionInstallBubble manages its own lifetime.
33 class ExtensionInstalledBubble : public content::NotificationObserver,
34 public extensions::ExtensionRegistryObserver {
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
44 // Implements the UI for showing the bubble. Owns us.
45 class Delegate {
46 public:
47 virtual ~Delegate() {}
49 // Attempts to show the bubble. Called from ShowInternal. Returns false
50 // if, because of animating (such as from adding a new browser action
51 // to the toolbar), the bubble could not be shown immediately.
52 virtual bool MaybeShowNow() = 0;
55 ExtensionInstalledBubble(Delegate* delegate,
56 const extensions::Extension* extension,
57 Browser *browser,
58 const SkBitmap& icon);
60 virtual ~ExtensionInstalledBubble();
62 const extensions::Extension* extension() const { return extension_; }
63 Browser* browser() { return browser_; }
64 const Browser* browser() const { return browser_; }
65 const SkBitmap& icon() const { return icon_; }
66 BubbleType type() const { return type_; }
68 // Stop listening to NOTIFICATION_BROWSER_CLOSING.
69 void IgnoreBrowserClosing();
71 private:
72 // Delegates showing the view to our |view_|. Called internally via PostTask.
73 void ShowInternal();
75 // content::NotificationObserver:
76 virtual void Observe(int type,
77 const content::NotificationSource& source,
78 const content::NotificationDetails& details) OVERRIDE;
80 // extensions::ExtensionRegistryObserver:
81 virtual void OnExtensionLoaded(
82 content::BrowserContext* browser_context,
83 const extensions::Extension* extension) OVERRIDE;
84 virtual void OnExtensionUnloaded(
85 content::BrowserContext* browser_context,
86 const extensions::Extension* extension,
87 extensions::UnloadedExtensionInfo::Reason reason) OVERRIDE;
89 // The view delegate that shows the bubble. Owns us.
90 Delegate* delegate_;
92 // |extension_| is NULL when we are deleted.
93 const extensions::Extension* extension_;
94 Browser* browser_;
95 const SkBitmap icon_;
96 BubbleType type_;
97 content::NotificationRegistrar registrar_;
99 // Listen to extension load, unloaded notifications.
100 ScopedObserver<extensions::ExtensionRegistry,
101 extensions::ExtensionRegistryObserver>
102 extension_registry_observer_;
104 // The number of times to retry showing the bubble if the browser action
105 // toolbar is animating.
106 int animation_wait_retries_;
108 base::WeakPtrFactory<ExtensionInstalledBubble> weak_factory_;
110 DISALLOW_COPY_AND_ASSIGN(ExtensionInstalledBubble);
113 #endif // CHROME_BROWSER_UI_EXTENSIONS_EXTENSION_INSTALLED_BUBBLE_H_