• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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_COCOA_THEME_INSTALL_BUBBLE_VIEW_H_
6 #define CHROME_BROWSER_UI_COCOA_THEME_INSTALL_BUBBLE_VIEW_H_
7 #pragma once
8 
9 #include "content/common/notification_observer.h"
10 #include "content/common/notification_registrar.h"
11 
12 @class NSWindow;
13 @class ThemeInstallBubbleViewCocoa;
14 
15 // ThemeInstallBubbleView is a view that provides a "Loading..." bubble in the
16 // center of a browser window for use when an extension or theme is loaded.
17 // (The Browser class only calls it to install itself into the currently active
18 // browser window.)  If an extension is being applied, the bubble goes away
19 // immediately.  If a theme is being applied, it disappears when the theme has
20 // been loaded.  The purpose of this bubble is to warn the user that the browser
21 // may be unresponsive while the theme is being installed.
22 //
23 // Edge case: note that if one installs a theme in one window and then switches
24 // rapidly to another window to install a theme there as well (in the short time
25 // between install begin and theme caching seizing the UI thread), the loading
26 // bubble will only appear over the first window, as there is only ever one
27 // instance of the bubble.
28 class ThemeInstallBubbleView : public NotificationObserver {
29  public:
30   ~ThemeInstallBubbleView();
31 
32   // NotificationObserver
33   virtual void Observe(NotificationType type,
34                        const NotificationSource& source,
35                        const NotificationDetails& details);
36 
37   // Show the loading bubble.
38   static void Show(NSWindow* window);
39 
40  private:
41   explicit ThemeInstallBubbleView(NSWindow* window);
42 
43   // The one copy of the loading bubble.
44   static ThemeInstallBubbleView* view_;
45 
46   // A scoped container for notification registries.
47   NotificationRegistrar registrar_;
48 
49   // Shut down the popup and remove our notifications.
50   void Close();
51 
52   // The actual Cocoa view implementing the bubble.
53   ThemeInstallBubbleViewCocoa* cocoa_view_;
54 
55   // Multiple loads can be started at once.  Only show one bubble, and keep
56   // track of number of loads happening.  Close bubble when num_loads < 1.
57   int num_loads_extant_;
58 
59   DISALLOW_COPY_AND_ASSIGN(ThemeInstallBubbleView);
60 };
61 
62 #endif  // CHROME_BROWSER_UI_COCOA_THEME_INSTALL_BUBBLE_VIEW_H_
63