Home | History | Annotate | Download | only in cocoa
      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