Commit 56fe5595 authored by Mohammad Refaat's avatar Mohammad Refaat Committed by Commit Bot

Remove TabModelList from SessionEventRouter

Removes TabModelList from IOSChromeLocalSessionEventRouter. Instead
the observer uses an AllWebStateListObservationRegistrar and an inner
observer class to perform the same updates.

Bug: 1050147

Change-Id: Ic9d00b601135764b44e91c1b999fa5d2c8662755
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2249670
Commit-Queue: Mark Cogan <marq@chromium.org>
Reviewed-by: default avatarMark Cogan <marq@chromium.org>
Cr-Commit-Position: refs/heads/master@{#780272}
parent 44a03014
...@@ -17,6 +17,7 @@ source_set("sessions") { ...@@ -17,6 +17,7 @@ source_set("sessions") {
"//ios/chrome/browser", "//ios/chrome/browser",
"//ios/chrome/browser/browser_state", "//ios/chrome/browser/browser_state",
"//ios/chrome/browser/history", "//ios/chrome/browser/history",
"//ios/chrome/browser/main:public",
"//ios/chrome/browser/sync/glue", "//ios/chrome/browser/sync/glue",
"//ios/chrome/browser/tabs", "//ios/chrome/browser/tabs",
"//ios/chrome/browser/web_state_list", "//ios/chrome/browser/web_state_list",
......
...@@ -14,11 +14,11 @@ ...@@ -14,11 +14,11 @@
#include "base/macros.h" #include "base/macros.h"
#include "components/sync/model/syncable_service.h" #include "components/sync/model/syncable_service.h"
#include "components/sync_sessions/local_session_event_router.h" #include "components/sync_sessions/local_session_event_router.h"
#import "ios/chrome/browser/tabs/tab_model_list_observer.h"
#include "ios/chrome/browser/web_state_list/web_state_list_observer.h" #include "ios/chrome/browser/web_state_list/web_state_list_observer.h"
#include "ios/web/public/web_state_observer.h" #include "ios/web/public/web_state_observer.h"
class ChromeBrowserState; class ChromeBrowserState;
class AllWebStateListObservationRegistrar;
namespace sync_sessions { namespace sync_sessions {
class SyncSessionsClient; class SyncSessionsClient;
...@@ -27,10 +27,7 @@ class SyncSessionsClient; ...@@ -27,10 +27,7 @@ class SyncSessionsClient;
// A LocalEventRouter that drives session sync via observation of // A LocalEventRouter that drives session sync via observation of
// web::WebState-related events. // web::WebState-related events.
class IOSChromeLocalSessionEventRouter class IOSChromeLocalSessionEventRouter
: public sync_sessions::LocalSessionEventRouter, : public sync_sessions::LocalSessionEventRouter {
public web::WebStateObserver,
public WebStateListObserver,
public TabModelListObserver {
public: public:
IOSChromeLocalSessionEventRouter( IOSChromeLocalSessionEventRouter(
ChromeBrowserState* browser_state, ChromeBrowserState* browser_state,
...@@ -43,43 +40,54 @@ class IOSChromeLocalSessionEventRouter ...@@ -43,43 +40,54 @@ class IOSChromeLocalSessionEventRouter
sync_sessions::LocalSessionEventHandler* handler) override; sync_sessions::LocalSessionEventHandler* handler) override;
void Stop() override; void Stop() override;
// TabModelListObserver: private:
void TabModelRegisteredWithBrowserState( // Observer implementation for each browser state.
TabModel* tab_model, class Observer : public WebStateListObserver, public web::WebStateObserver {
ChromeBrowserState* browser_state) override; public:
void TabModelUnregisteredFromBrowserState( explicit Observer(IOSChromeLocalSessionEventRouter* session_router);
TabModel* tab_model, Observer(const Observer&) = delete;
ChromeBrowserState* browser_state) override; Observer& operator=(const Observer&) = delete;
~Observer() override;
// web::WebStateObserver:
void TitleWasSet(web::WebState* web_state) override;
void DidFinishNavigation(web::WebState* web_state,
web::NavigationContext* navigation_context) override;
void PageLoaded(
web::WebState* web_state,
web::PageLoadCompletionStatus load_completion_status) override;
void DidChangeBackForwardState(web::WebState* web_state) override;
void WebStateDestroyed(web::WebState* web_state) override;
// web::WebStateListObserver: private:
// WebStateListObserver:
void WebStateInsertedAt(WebStateList* web_state_list, void WebStateInsertedAt(WebStateList* web_state_list,
web::WebState* web_state, web::WebState* web_state,
int index, int index,
bool activating) override; bool activating) override;
void WebStateDetachedAt(WebStateList* web_state_list,
web::WebState* web_state,
int index) override;
void WebStateReplacedAt(WebStateList* web_state_list, void WebStateReplacedAt(WebStateList* web_state_list,
web::WebState* old_web_state, web::WebState* old_web_state,
web::WebState* new_web_state, web::WebState* new_web_state,
int index) override; int index) override;
void WebStateDetachedAt(WebStateList* web_state_list,
web::WebState* web_state,
int index) override;
void WillBeginBatchOperation(WebStateList* web_state_list) override; void WillBeginBatchOperation(WebStateList* web_state_list) override;
void BatchOperationEnded(WebStateList* web_state_list) override; void BatchOperationEnded(WebStateList* web_state_list) override;
private: // web::WebStateObserver:
// Methods to add and remove WebStateList observer. void TitleWasSet(web::WebState* web_state) override;
void StartObservingWebStateList(WebStateList* web_state_list); void DidFinishNavigation(
void StopObservingWebStateList(WebStateList* web_state_list); web::WebState* web_state,
web::NavigationContext* navigation_context) override;
void PageLoaded(
web::WebState* web_state,
web::PageLoadCompletionStatus load_completion_status) override;
void DidChangeBackForwardState(web::WebState* web_state) override;
void WebStateDestroyed(web::WebState* web_state) override;
IOSChromeLocalSessionEventRouter* router_;
};
// Observation registrars for each browser state; each one owns an instance
// of IOSChromeLocalSessionEventRouter::Observer.
std::set<std::unique_ptr<AllWebStateListObservationRegistrar>> registrars_;
// Called before the Batch operation starts for a web state list.
void OnSessionEventStarting();
// Called when Batch operation is completed for a web state list.
void OnSessionEventEnded();
// Called when a tab is parented. // Called when a tab is parented.
void OnTabParented(web::WebState* web_state); void OnTabParented(web::WebState* web_state);
...@@ -88,7 +96,6 @@ class IOSChromeLocalSessionEventRouter ...@@ -88,7 +96,6 @@ class IOSChromeLocalSessionEventRouter
void OnWebStateChange(web::WebState* web_state); void OnWebStateChange(web::WebState* web_state);
sync_sessions::LocalSessionEventHandler* handler_; sync_sessions::LocalSessionEventHandler* handler_;
ChromeBrowserState* const browser_state_;
sync_sessions::SyncSessionsClient* const sessions_client_; sync_sessions::SyncSessionsClient* const sessions_client_;
syncer::SyncableService::StartSyncFlare flare_; syncer::SyncableService::StartSyncFlare flare_;
......
...@@ -14,10 +14,9 @@ ...@@ -14,10 +14,9 @@
#include "components/sync_sessions/synced_tab_delegate.h" #include "components/sync_sessions/synced_tab_delegate.h"
#include "ios/chrome/browser/browser_state/chrome_browser_state.h" #include "ios/chrome/browser/browser_state/chrome_browser_state.h"
#include "ios/chrome/browser/history/history_service_factory.h" #include "ios/chrome/browser/history/history_service_factory.h"
#import "ios/chrome/browser/main/all_web_state_list_observation_registrar.h"
#include "ios/chrome/browser/sync/glue/sync_start_util.h" #include "ios/chrome/browser/sync/glue/sync_start_util.h"
#include "ios/chrome/browser/sync/ios_chrome_synced_tab_delegate.h" #include "ios/chrome/browser/sync/ios_chrome_synced_tab_delegate.h"
#import "ios/chrome/browser/tabs/tab_model.h"
#import "ios/chrome/browser/tabs/tab_model_list.h"
#include "ios/chrome/browser/tabs/tab_parenting_global_observer.h" #include "ios/chrome/browser/tabs/tab_parenting_global_observer.h"
#import "ios/chrome/browser/web_state_list/web_state_list.h" #import "ios/chrome/browser/web_state_list/web_state_list.h"
...@@ -41,7 +40,6 @@ IOSChromeLocalSessionEventRouter::IOSChromeLocalSessionEventRouter( ...@@ -41,7 +40,6 @@ IOSChromeLocalSessionEventRouter::IOSChromeLocalSessionEventRouter(
sync_sessions::SyncSessionsClient* sessions_client, sync_sessions::SyncSessionsClient* sessions_client,
const syncer::SyncableService::StartSyncFlare& flare) const syncer::SyncableService::StartSyncFlare& flare)
: handler_(NULL), : handler_(NULL),
browser_state_(browser_state),
sessions_client_(sessions_client), sessions_client_(sessions_client),
flare_(flare) { flare_(flare) {
tab_parented_subscription_ = tab_parented_subscription_ =
...@@ -49,35 +47,20 @@ IOSChromeLocalSessionEventRouter::IOSChromeLocalSessionEventRouter( ...@@ -49,35 +47,20 @@ IOSChromeLocalSessionEventRouter::IOSChromeLocalSessionEventRouter(
base::Bind(&IOSChromeLocalSessionEventRouter::OnTabParented, base::Bind(&IOSChromeLocalSessionEventRouter::OnTabParented,
base::Unretained(this))); base::Unretained(this)));
for (TabModel* tab_model in TabModelList::GetTabModelsForChromeBrowserState( registrars_.insert(std::make_unique<AllWebStateListObservationRegistrar>(
browser_state_)) { browser_state, std::make_unique<Observer>(this),
StartObservingWebStateList(tab_model.webStateList); AllWebStateListObservationRegistrar::Mode::REGULAR));
}
TabModelList::AddObserver(this);
} }
IOSChromeLocalSessionEventRouter::~IOSChromeLocalSessionEventRouter() { IOSChromeLocalSessionEventRouter::~IOSChromeLocalSessionEventRouter() {}
for (TabModel* tab_model in TabModelList::GetTabModelsForChromeBrowserState(
browser_state_)) {
StopObservingWebStateList(tab_model.webStateList);
}
TabModelList::RemoveObserver(this);
}
void IOSChromeLocalSessionEventRouter::TabModelRegisteredWithBrowserState( IOSChromeLocalSessionEventRouter::Observer::Observer(
TabModel* tab_model, IOSChromeLocalSessionEventRouter* session_router)
ChromeBrowserState* browser_state) { : router_(session_router) {}
StartObservingWebStateList(tab_model.webStateList);
}
void IOSChromeLocalSessionEventRouter::TabModelUnregisteredFromBrowserState( IOSChromeLocalSessionEventRouter::Observer::~Observer() {}
TabModel* tab_model,
ChromeBrowserState* browser_state) {
StopObservingWebStateList(tab_model.webStateList);
}
void IOSChromeLocalSessionEventRouter::WebStateInsertedAt( void IOSChromeLocalSessionEventRouter::Observer::WebStateInsertedAt(
WebStateList* web_state_list, WebStateList* web_state_list,
web::WebState* web_state, web::WebState* web_state,
int index, int index,
...@@ -85,81 +68,72 @@ void IOSChromeLocalSessionEventRouter::WebStateInsertedAt( ...@@ -85,81 +68,72 @@ void IOSChromeLocalSessionEventRouter::WebStateInsertedAt(
web_state->AddObserver(this); web_state->AddObserver(this);
} }
void IOSChromeLocalSessionEventRouter::WebStateReplacedAt( void IOSChromeLocalSessionEventRouter::Observer::WebStateReplacedAt(
WebStateList* web_state_list, WebStateList* web_state_list,
web::WebState* old_web_state, web::WebState* old_web_state,
web::WebState* new_web_state, web::WebState* new_web_state,
int index) { int index) {
OnWebStateChange(old_web_state); router_->OnWebStateChange(old_web_state);
old_web_state->RemoveObserver(this); old_web_state->RemoveObserver(this);
DCHECK(new_web_state); DCHECK(new_web_state);
new_web_state->AddObserver(this); new_web_state->AddObserver(this);
} }
void IOSChromeLocalSessionEventRouter::WebStateDetachedAt( void IOSChromeLocalSessionEventRouter::Observer::WebStateDetachedAt(
WebStateList* web_state_list, WebStateList* web_state_list,
web::WebState* web_state, web::WebState* web_state,
int index) { int index) {
OnWebStateChange(web_state); router_->OnWebStateChange(web_state);
web_state->RemoveObserver(this); web_state->RemoveObserver(this);
} }
void IOSChromeLocalSessionEventRouter::TitleWasSet(web::WebState* web_state) { void IOSChromeLocalSessionEventRouter::Observer::TitleWasSet(
OnWebStateChange(web_state); web::WebState* web_state) {
router_->OnWebStateChange(web_state);
} }
void IOSChromeLocalSessionEventRouter::DidFinishNavigation( void IOSChromeLocalSessionEventRouter::Observer::DidFinishNavigation(
web::WebState* web_state, web::WebState* web_state,
web::NavigationContext* navigation_context) { web::NavigationContext* navigation_context) {
OnWebStateChange(web_state); router_->OnWebStateChange(web_state);
} }
void IOSChromeLocalSessionEventRouter::PageLoaded( void IOSChromeLocalSessionEventRouter::Observer::PageLoaded(
web::WebState* web_state, web::WebState* web_state,
web::PageLoadCompletionStatus load_completion_status) { web::PageLoadCompletionStatus load_completion_status) {
OnWebStateChange(web_state); router_->OnWebStateChange(web_state);
} }
void IOSChromeLocalSessionEventRouter::DidChangeBackForwardState( void IOSChromeLocalSessionEventRouter::Observer::DidChangeBackForwardState(
web::WebState* web_state) { web::WebState* web_state) {
OnWebStateChange(web_state); router_->OnWebStateChange(web_state);
} }
void IOSChromeLocalSessionEventRouter::WebStateDestroyed( void IOSChromeLocalSessionEventRouter::Observer::WebStateDestroyed(
web::WebState* web_state) { web::WebState* web_state) {
OnWebStateChange(web_state); router_->OnWebStateChange(web_state);
web_state->RemoveObserver(this); web_state->RemoveObserver(this);
} }
void IOSChromeLocalSessionEventRouter::StartObservingWebStateList( void IOSChromeLocalSessionEventRouter::OnTabParented(web::WebState* web_state) {
WebStateList* web_state_list) { OnWebStateChange(web_state);
web_state_list->AddObserver(this);
for (int index = 0; index < web_state_list->count(); ++index) {
web::WebState* web_state = web_state_list->GetWebStateAt(index);
web_state->AddObserver(this);
}
} }
void IOSChromeLocalSessionEventRouter::StopObservingWebStateList( void IOSChromeLocalSessionEventRouter::Observer::WillBeginBatchOperation(
WebStateList* web_state_list) { WebStateList* web_state_list) {
for (int index = 0; index < web_state_list->count(); ++index) { router_->OnSessionEventStarting();
web::WebState* web_state = web_state_list->GetWebStateAt(index);
web_state->RemoveObserver(this);
}
web_state_list->RemoveObserver(this);
} }
void IOSChromeLocalSessionEventRouter::OnTabParented(web::WebState* web_state) { void IOSChromeLocalSessionEventRouter::Observer::BatchOperationEnded(
OnWebStateChange(web_state); WebStateList* web_state_list) {
router_->OnSessionEventEnded();
} }
void IOSChromeLocalSessionEventRouter::WillBeginBatchOperation( void IOSChromeLocalSessionEventRouter::OnSessionEventStarting() {
WebStateList* web_state_list) {
batch_in_progress_++; batch_in_progress_++;
} }
void IOSChromeLocalSessionEventRouter::BatchOperationEnded( void IOSChromeLocalSessionEventRouter::OnSessionEventEnded() {
WebStateList* web_state_list) {
DCHECK(batch_in_progress_ > 0); DCHECK(batch_in_progress_ > 0);
batch_in_progress_--; batch_in_progress_--;
if (batch_in_progress_) if (batch_in_progress_)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment