summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ios/chrome/browser/tab_parenting_global_observer.cc24
-rw-r--r--ios/chrome/browser/tab_parenting_global_observer.h49
-rw-r--r--ios/chrome/ios_chrome.gyp2
3 files changed, 75 insertions, 0 deletions
diff --git a/ios/chrome/browser/tab_parenting_global_observer.cc b/ios/chrome/browser/tab_parenting_global_observer.cc
new file mode 100644
index 0000000..1ed07d1
--- /dev/null
+++ b/ios/chrome/browser/tab_parenting_global_observer.cc
@@ -0,0 +1,24 @@
+// Copyright 2015 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 "ios/chrome/browser/tab_parenting_global_observer.h"
+
+#include "base/memory/singleton.h"
+
+TabParentingGlobalObserver* TabParentingGlobalObserver::GetInstance() {
+ return base::Singleton<TabParentingGlobalObserver>::get();
+}
+
+scoped_ptr<base::CallbackList<void(web::WebState*)>::Subscription>
+TabParentingGlobalObserver::RegisterCallback(const OnTabParentedCallback& cb) {
+ return on_tab_parented_callback_list_.Add(cb);
+}
+
+void TabParentingGlobalObserver::OnTabParented(web::WebState* web_state) {
+ on_tab_parented_callback_list_.Notify(web_state);
+}
+
+TabParentingGlobalObserver::TabParentingGlobalObserver() {}
+
+TabParentingGlobalObserver::~TabParentingGlobalObserver() {}
diff --git a/ios/chrome/browser/tab_parenting_global_observer.h b/ios/chrome/browser/tab_parenting_global_observer.h
new file mode 100644
index 0000000..61f64ac
--- /dev/null
+++ b/ios/chrome/browser/tab_parenting_global_observer.h
@@ -0,0 +1,49 @@
+// Copyright 2015 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 IOS_CHROME_BROWSER_TAB_PARENTING_GLOBAL_OBSERVER_H_
+#define IOS_CHROME_BROWSER_TAB_PARENTING_GLOBAL_OBSERVER_H_
+
+#include "base/callback_list.h"
+#include "base/macros.h"
+#include "base/memory/scoped_ptr.h"
+
+namespace base {
+template <typename T>
+struct DefaultSingletonTraits;
+} // namespace base
+
+namespace web {
+class WebState;
+}
+
+// Allows clients to observe every tab (i.e., WebState) that is parented.
+// NOTE: Should be used only to correspond to //chrome flows that listen for
+// the TAB_PARENTED notification from all sources.
+class TabParentingGlobalObserver {
+ public:
+ typedef base::Callback<void(web::WebState*)> OnTabParentedCallback;
+
+ // Returns the instance of TabParentingGlobalObserver.
+ static TabParentingGlobalObserver* GetInstance();
+
+ // Registers |cb| to be invoked when a tab is parented.
+ scoped_ptr<base::CallbackList<void(web::WebState*)>::Subscription>
+ RegisterCallback(const OnTabParentedCallback& cb);
+
+ // Called to notify all registered callbacks that |web_state| was parented.
+ void OnTabParented(web::WebState* web_state);
+
+ private:
+ friend struct base::DefaultSingletonTraits<TabParentingGlobalObserver>;
+
+ TabParentingGlobalObserver();
+ ~TabParentingGlobalObserver();
+
+ base::CallbackList<void(web::WebState*)> on_tab_parented_callback_list_;
+
+ DISALLOW_COPY_AND_ASSIGN(TabParentingGlobalObserver);
+};
+
+#endif // IOS_CHROME_BROWSER_TAB_PARENTING_GLOBAL_OBSERVER_H_
diff --git a/ios/chrome/ios_chrome.gyp b/ios/chrome/ios_chrome.gyp
index 2eeb37e..9a15612 100644
--- a/ios/chrome/ios_chrome.gyp
+++ b/ios/chrome/ios_chrome.gyp
@@ -401,6 +401,8 @@
'browser/sync/sync_setup_service.h',
'browser/sync/sync_setup_service_factory.cc',
'browser/sync/sync_setup_service_factory.h',
+ 'browser/tab_parenting_global_observer.cc',
+ 'browser/tab_parenting_global_observer.h',
'browser/translate/after_translate_infobar_controller.h',
'browser/translate/after_translate_infobar_controller.mm',
'browser/translate/before_translate_infobar_controller.h',