summaryrefslogtreecommitdiffstats
path: root/chrome/browser/cocoa/theme_install_bubble_view.h
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/cocoa/theme_install_bubble_view.h')
-rw-r--r--chrome/browser/cocoa/theme_install_bubble_view.h56
1 files changed, 56 insertions, 0 deletions
diff --git a/chrome/browser/cocoa/theme_install_bubble_view.h b/chrome/browser/cocoa/theme_install_bubble_view.h
new file mode 100644
index 0000000..ea308ba
--- /dev/null
+++ b/chrome/browser/cocoa/theme_install_bubble_view.h
@@ -0,0 +1,56 @@
+// Copyright (c) 2010 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/common/notification_registrar.h"
+#include "chrome/common/notification_service.h"
+
+@class NSWindow;
+@class ThemeInstallBubbleViewCocoa;
+
+// ThemeInstallBubbleView is a view that provides a "Loading..." bubble in the
+// center of a browser window for use when an extension or theme is loaded.
+// (The Browser class only calls it to install itself into the currently active
+// browser window.) If an extension is being applied, the bubble goes away
+// immediately. If a theme is being applied, it disappears when the theme has
+// been loaded. The purpose of this bubble is to warn the user that the browser
+// may be unresponsive while the theme is being installed.
+//
+// Edge case: note that if one installs a theme in one window and then switches
+// rapidly to another window to install a theme there as well (in the short time
+// between install begin and theme caching seizing the UI thread), the loading
+// bubble will only appear over the first window, as there is only ever one
+// instance of the bubble.
+class ThemeInstallBubbleView : public NotificationObserver {
+ public:
+ ~ThemeInstallBubbleView();
+
+ // NotificationObserver
+ virtual void Observe(NotificationType type,
+ const NotificationSource& source,
+ const NotificationDetails& details);
+
+ // Show the loading bubble.
+ static void Show(NSWindow* window);
+
+ private:
+ explicit ThemeInstallBubbleView(NSWindow* window);
+
+ // The one copy of the loading bubble.
+ static ThemeInstallBubbleView* view_;
+
+ // A scoped container for notification registries.
+ NotificationRegistrar registrar_;
+
+ // Shut down the popup and remove our notifications.
+ void Close();
+
+ // The actual Cocoa view implementing the bubble.
+ ThemeInstallBubbleViewCocoa* cocoa_view_;
+
+ // Multiple loads can be started at once. Only show one bubble, and keep
+ // track of number of loads happening. Close bubble when num_loads < 1.
+ int num_loads_extant_;
+
+ DISALLOW_COPY_AND_ASSIGN(ThemeInstallBubbleView);
+};