summaryrefslogtreecommitdiffstats
path: root/chrome/browser/views/theme_install_bubble_view.h
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/views/theme_install_bubble_view.h')
-rw-r--r--chrome/browser/views/theme_install_bubble_view.h77
1 files changed, 77 insertions, 0 deletions
diff --git a/chrome/browser/views/theme_install_bubble_view.h b/chrome/browser/views/theme_install_bubble_view.h
new file mode 100644
index 0000000..baf80b3
--- /dev/null
+++ b/chrome/browser/views/theme_install_bubble_view.h
@@ -0,0 +1,77 @@
+// Copyright (c) 2009 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.
+
+#ifndef CHROME_BROWSER_VIEWS_THEME_INSTALL_BUBBLE_VIEW_H_
+#define CHROME_BROWSER_VIEWS_THEME_INSTALL_BUBBLE_VIEW_H_
+
+#include <string>
+
+#include "chrome/common/notification_registrar.h"
+#include "chrome/common/notification_service.h"
+#include "gfx/canvas.h"
+#include "views/controls/label.h"
+
+class TabContents;
+
+namespace views {
+class Widget;
+}
+
+// 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 views::Label {
+ public:
+ ~ThemeInstallBubbleView();
+
+ // NotificationObserver
+ virtual void Observe(NotificationType type,
+ const NotificationSource& source,
+ const NotificationDetails& details);
+
+ // Show the loading bubble.
+ static void Show(TabContents* tab_contents);
+
+ private:
+ explicit ThemeInstallBubbleView(TabContents* tab_contents);
+
+ // Put the popup in the correct place on the tab.
+ void Reposition();
+
+ // Inherited from views.
+ gfx::Size GetPreferredSize();
+
+ // Shut down the popup and remove our notifications.
+ void Close();
+
+ virtual void Paint(gfx::Canvas* canvas);
+
+ // The content area at the start of the animation.
+ gfx::Rect tab_contents_bounds_;
+
+ // Widget containing us.
+ views::Widget* popup_;
+
+ // Text to show warning that theme is being installed.
+ std::wstring text_;
+
+ // A scoped container for notification registries.
+ NotificationRegistrar registrar_;
+
+ DISALLOW_COPY_AND_ASSIGN(ThemeInstallBubbleView);
+};
+
+#endif // CHROME_BROWSER_VIEWS_THEME_INSTALL_BUBBLE_VIEW_H_
+