Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(79)

Unified Diff: ios/chrome/browser/tabs/tab_model.mm

Issue 2769193002: [ios] Expose TabModel underlying WebStateList. (Closed)
Patch Set: Rebase on origin/master. Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ios/chrome/browser/tabs/tab_model.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ios/chrome/browser/tabs/tab_model.mm
diff --git a/ios/chrome/browser/tabs/tab_model.mm b/ios/chrome/browser/tabs/tab_model.mm
index 0f7a935377393285ea2013e64244b5d4740a73db..2d692200cabeb2039826e71ca16febf1072f2d12 100644
--- a/ios/chrome/browser/tabs/tab_model.mm
+++ b/ios/chrome/browser/tabs/tab_model.mm
@@ -163,9 +163,9 @@ Tab* GetOpenerForTab(id<NSFastEnumeration> tabs, Tab* tab) {
// WebState owns the associated Tab.
base::scoped_nsobject<NSMutableSet<Tab*>> _tabRetainer;
- // WebStateListObserver bridges to react to modifications of the model (may
- // send notification, translate and forward events, update metrics, ...).
- std::vector<std::unique_ptr<WebStateListObserver>> _observerBridges;
+ // WebStateListObservers reacting to modifications of the model (may send
+ // notification, translate and forward events, update metrics, ...).
+ std::vector<std::unique_ptr<WebStateListObserver>> _webStateListObservers;
// The delegate for sync.
std::unique_ptr<TabModelSyncedWindowDelegate> _syncedWindowDelegate;
@@ -237,10 +237,10 @@ Tab* GetOpenerForTab(id<NSFastEnumeration> tabs, Tab* tab) {
// Clear weak pointer to WebStateListMetricsObserver before destroying it.
_webStateListMetricsObserver = nullptr;
- // Unregister all listeners before closing all the tabs.
- for (const auto& observerBridge : _observerBridges)
- _webStateList->RemoveObserver(observerBridge.get());
- _observerBridges.clear();
+ // Unregister all observers before closing all the tabs.
+ for (const auto& webStateListObserver : _webStateListObservers)
+ _webStateList->RemoveObserver(webStateListObserver.get());
+ _webStateListObservers.clear();
// Make sure the tabs do clean after themselves. It is important for
// removeObserver: to be called first otherwise a lot of unecessary work will
@@ -286,6 +286,10 @@ Tab* GetOpenerForTab(id<NSFastEnumeration> tabs, Tab* tab) {
return static_cast<NSUInteger>(_webStateList->count());
}
+- (WebStateList*)webStateList {
+ return _webStateList.get();
+}
+
- (instancetype)initWithSessionWindow:(SessionWindowIOS*)window
sessionService:(SessionServiceIOS*)service
browserState:(ios::ChromeBrowserState*)browserState {
@@ -319,28 +323,31 @@ Tab* GetOpenerForTab(id<NSFastEnumeration> tabs, Tab* tab) {
DCHECK(service);
_sessionService.reset([service retain]);
- _observerBridges.push_back(
+ _webStateListObservers.push_back(
base::MakeUnique<SnapshotCacheWebStateListObserver>(
[SnapshotCache sharedInstance]));
if (_tabUsageRecorder) {
- _observerBridges.push_back(
+ _webStateListObservers.push_back(
base::MakeUnique<TabUsageRecorderWebStateListObserver>(
_tabUsageRecorder.get()));
}
- _observerBridges.push_back(base::MakeUnique<TabParentingObserver>());
- _observerBridges.push_back(base::MakeUnique<WebStateListObserverBridge>(
- [[TabModelSelectedTabObserver alloc] initWithTabModel:self]));
- _observerBridges.push_back(base::MakeUnique<WebStateListObserverBridge>(
- [[TabModelObserversBridge alloc] initWithTabModel:self
- tabModelObservers:_observers.get()]));
+ _webStateListObservers.push_back(base::MakeUnique<TabParentingObserver>());
+ _webStateListObservers.push_back(
+ base::MakeUnique<WebStateListObserverBridge>(
+ [[TabModelSelectedTabObserver alloc] initWithTabModel:self]));
+ _webStateListObservers.push_back(
+ base::MakeUnique<WebStateListObserverBridge>(
+ [[TabModelObserversBridge alloc]
+ initWithTabModel:self
+ tabModelObservers:_observers.get()]));
auto webStateListMetricsObserver =
base::MakeUnique<WebStateListMetricsObserver>();
_webStateListMetricsObserver = webStateListMetricsObserver.get();
- _observerBridges.push_back(std::move(webStateListMetricsObserver));
+ _webStateListObservers.push_back(std::move(webStateListMetricsObserver));
- for (const auto& observerBridge : _observerBridges)
- _webStateList->AddObserver(observerBridge.get());
+ for (const auto& webStateListObserver : _webStateListObservers)
+ _webStateList->AddObserver(webStateListObserver.get());
if (window) {
DCHECK([_observers empty]);
« no previous file with comments | « ios/chrome/browser/tabs/tab_model.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698