diff options
-rw-r--r-- | ios/chrome/browser/tab_parenting_global_observer.cc | 24 | ||||
-rw-r--r-- | ios/chrome/browser/tab_parenting_global_observer.h | 49 | ||||
-rw-r--r-- | ios/chrome/ios_chrome.gyp | 2 |
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', |