summaryrefslogtreecommitdiffstats
path: root/chrome/browser/ui/views/frame/browser_bubble_host.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/ui/views/frame/browser_bubble_host.cc')
-rw-r--r--chrome/browser/ui/views/frame/browser_bubble_host.cc43
1 files changed, 43 insertions, 0 deletions
diff --git a/chrome/browser/ui/views/frame/browser_bubble_host.cc b/chrome/browser/ui/views/frame/browser_bubble_host.cc
new file mode 100644
index 0000000..60809bf
--- /dev/null
+++ b/chrome/browser/ui/views/frame/browser_bubble_host.cc
@@ -0,0 +1,43 @@
+// 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/browser/views/frame/browser_bubble_host.h"
+
+#include "base/logging.h"
+#include "chrome/browser/views/browser_bubble.h"
+
+void BrowserBubbleHost::WindowMoved() {
+ // Do safe iteration in case the bubble winds up closing as a result of this
+ // message.
+ for (BubbleSet::iterator i = browser_bubbles_.begin();
+ i != browser_bubbles_.end();) {
+ BubbleSet::iterator bubble = i++;
+ (*bubble)->BrowserWindowMoved();
+ }
+}
+
+void BrowserBubbleHost::AttachBrowserBubble(BrowserBubble* bubble) {
+ DCHECK(browser_bubbles_.find(bubble) == browser_bubbles_.end()) <<
+ "Attempt to register the same BrowserBubble multiple times.";
+ browser_bubbles_.insert(bubble);
+}
+
+void BrowserBubbleHost::DetachBrowserBubble(BrowserBubble* bubble) {
+ BubbleSet::iterator it = browser_bubbles_.find(bubble);
+ DCHECK(it != browser_bubbles_.end()) <<
+ "Attempt to detach an unrecognized BrowserBubble.";
+ if (it != browser_bubbles_.end())
+ browser_bubbles_.erase(it);
+}
+
+void BrowserBubbleHost::Close() {
+ // BrowserWindowClosing will usually cause the bubble to remove itself from
+ // the set, so we need to iterate in a way that's safe against deletion.
+ for (BubbleSet::iterator i = browser_bubbles_.begin();
+ i != browser_bubbles_.end();) {
+ BubbleSet::iterator bubble = i++;
+ (*bubble)->BrowserWindowClosing();
+ }
+}
+