summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorblundell <blundell@chromium.org>2015-10-15 08:29:30 -0700
committerCommit bot <commit-bot@chromium.org>2015-10-15 15:30:24 +0000
commit339b3bc0e04ca77b45daaee30e23046a7b736d63 (patch)
treea7edb56f2576ac78c8843cedf7d7ebeda9f4eafe
parent999ca54e61026ee8e68bdc4f69cc0f47eb21cf38 (diff)
downloadchromium_src-339b3bc0e04ca77b45daaee30e23046a7b736d63.zip
chromium_src-339b3bc0e04ca77b45daaee30e23046a7b736d63.tar.gz
chromium_src-339b3bc0e04ca77b45daaee30e23046a7b736d63.tar.bz2
[ios] Introduce TabParentingGlobalObserver
This CL introduces TabParentingGlobalObserver, which allows clients to observe every instance of a tab (i.e., web::WebState) being parented. Its purpose is to allow for replication of //chrome flows that observe the TAB_PARENTED notification from all sources. It should not be used for any other reason. BUG=512421 Review URL: https://codereview.chromium.org/1395273008 Cr-Commit-Position: refs/heads/master@{#354276}
-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',