diff options
Diffstat (limited to 'chrome/browser/cocoa/theme_install_bubble_view.h')
-rw-r--r-- | chrome/browser/cocoa/theme_install_bubble_view.h | 56 |
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); +}; |