diff options
author | blundell <blundell@chromium.org> | 2015-10-15 08:29:30 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-10-15 15:30:24 +0000 |
commit | 339b3bc0e04ca77b45daaee30e23046a7b736d63 (patch) | |
tree | a7edb56f2576ac78c8843cedf7d7ebeda9f4eafe | |
parent | 999ca54e61026ee8e68bdc4f69cc0f47eb21cf38 (diff) | |
download | chromium_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.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', |