summaryrefslogtreecommitdiffstats
path: root/chrome/browser/views/frame/browser_bubble_host.cc
diff options
context:
space:
mode:
authortwiz@chromium.org <twiz@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-02-16 02:24:18 +0000
committertwiz@chromium.org <twiz@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-02-16 02:24:18 +0000
commit2b19e2feeac2a01b2068595bd2913a194a6527e5 (patch)
treefff83de7ba198462e1d00b96911685418dd130bd /chrome/browser/views/frame/browser_bubble_host.cc
parent00a3768102287ae6f8ff5e28347a920759d3374d (diff)
downloadchromium_src-2b19e2feeac2a01b2068595bd2913a194a6527e5.zip
chromium_src-2b19e2feeac2a01b2068595bd2913a194a6527e5.tar.gz
chromium_src-2b19e2feeac2a01b2068595bd2913a194a6527e5.tar.bz2
Clone of issue 600130. (http://codereview.chromium.org/600130)
BUG=None TEST=None Review URL: http://codereview.chromium.org/593111 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@39077 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/views/frame/browser_bubble_host.cc')
-rw-r--r--chrome/browser/views/frame/browser_bubble_host.cc43
1 files changed, 43 insertions, 0 deletions
diff --git a/chrome/browser/views/frame/browser_bubble_host.cc b/chrome/browser/views/frame/browser_bubble_host.cc
new file mode 100644
index 0000000..60809bf
--- /dev/null
+++ b/chrome/browser/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();
+ }
+}
+