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") {
"//ios/chrome/browser",
"//ios/chrome/browser/browser_state",
"//ios/chrome/browser/history",
"//ios/chrome/browser/main:public",
"//ios/chrome/browser/sync/glue",
"//ios/chrome/browser/tabs",
"//ios/chrome/browser/web_state_list",
......
......@@ -14,11 +14,11 @@
#include "base/macros.h"
#include "components/sync/model/syncable_service.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/web/public/web_state_observer.h"
class ChromeBrowserState;
class AllWebStateListObservationRegistrar;
namespace sync_sessions {
class SyncSessionsClient;
......@@ -27,10 +27,7 @@ class SyncSessionsClient;
// A LocalEventRouter that drives session sync via observation of
// web::WebState-related events.
class IOSChromeLocalSessionEventRouter
: public sync_sessions::LocalSessionEventRouter,
public web::WebStateObserver,
public WebStateListObserver,
public TabModelListObserver {
: public sync_sessions::LocalSessionEventRouter {
public:
IOSChromeLocalSessionEventRouter(
ChromeBrowserState* browser_state,
......@@ -43,43 +40,54 @@ class IOSChromeLocalSessionEventRouter
sync_sessions::LocalSessionEventHandler* handler) override;
void Stop() override;
// TabModelListObserver:
void TabModelRegisteredWithBrowserState(
TabModel* tab_model,
ChromeBrowserState* browser_state) override;
void TabModelUnregisteredFromBrowserState(
TabModel* tab_model,
ChromeBrowserState* browser_state) 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;
private:
// Observer implementation for each browser state.
class Observer : public WebStateListObserver, public web::WebStateObserver {
public:
explicit Observer(IOSChromeLocalSessionEventRouter* session_router);
Observer(const Observer&) = delete;
Observer& operator=(const Observer&) = delete;
~Observer() override;
// web::WebStateListObserver:
private:
// WebStateListObserver:
void WebStateInsertedAt(WebStateList* web_state_list,
web::WebState* web_state,
int index,
bool activating) override;
void WebStateDetachedAt(WebStateList* web_state_list,
web::WebState* web_state,
int index) override;
void WebStateReplacedAt(WebStateList* web_state_list,
web::WebState* old_web_state,
web::WebState* new_web_state,
int index) override;
void WebStateDetachedAt(WebStateList* web_state_list,
web::WebState* web_state,
int index) override;
void WillBeginBatchOperation(WebStateList* web_state_list) override;
void BatchOperationEnded(WebStateList* web_state_list) override;
private:
// Methods to add and remove WebStateList observer.
void StartObservingWebStateList(WebStateList* web_state_list);
void StopObservingWebStateList(WebStateList* web_state_list);
// 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;
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.
void OnTabParented(web::WebState* web_state);
......@@ -88,7 +96,6 @@ class IOSChromeLocalSessionEventRouter
void OnWebStateChange(web::WebState* web_state);
sync_sessions::LocalSessionEventHandler* handler_;
ChromeBrowserState* const browser_state_;
sync_sessions::SyncSessionsClient* const sessions_client_;
syncer::SyncableService::StartSyncFlare flare_;
......
......@@ -14,10 +14,9 @@
#include "components/sync_sessions/synced_tab_delegate.h"
#include "ios/chrome/browser/browser_state/chrome_browser_state.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/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"
#import "ios/chrome/browser/web_state_list/web_state_list.h"
......@@ -41,7 +40,6 @@ IOSChromeLocalSessionEventRouter::IOSChromeLocalSessionEventRouter(
sync_sessions::SyncSessionsClient* sessions_client,
const syncer::SyncableService::StartSyncFlare& flare)
: handler_(NULL),
browser_state_(browser_state),
sessions_client_(sessions_client),
flare_(flare) {
tab_parented_subscription_ =
......@@ -49,35 +47,20 @@ IOSChromeLocalSessionEventRouter::IOSChromeLocalSessionEventRouter(
base::Bind(&IOSChromeLocalSessionEventRouter::OnTabParented,
base::Unretained(this)));
for (TabModel* tab_model in TabModelList::GetTabModelsForChromeBrowserState(
browser_state_)) {
StartObservingWebStateList(tab_model.webStateList);
}
TabModelList::AddObserver(this);
registrars_.insert(std::make_unique<AllWebStateListObservationRegistrar>(
browser_state, std::make_unique<Observer>(this),
AllWebStateListObservationRegistrar::Mode::REGULAR));
}
IOSChromeLocalSessionEventRouter::~IOSChromeLocalSessionEventRouter() {
for (TabModel* tab_model in TabModelList::GetTabModelsForChromeBrowserState(
browser_state_)) {
StopObservingWebStateList(tab_model.webStateList);
}
TabModelList::RemoveObserver(this);
}
IOSChromeLocalSessionEventRouter::~IOSChromeLocalSessionEventRouter() {}
void IOSChromeLocalSessionEventRouter::TabModelRegisteredWithBrowserState(
TabModel* tab_model,
ChromeBrowserState* browser_state) {
StartObservingWebStateList(tab_model.webStateList);
}
IOSChromeLocalSessionEventRouter::Observer::Observer(
IOSChromeLocalSessionEventRouter* session_router)
: router_(session_router) {}
void IOSChromeLocalSessionEventRouter::TabModelUnregisteredFromBrowserState(
TabModel* tab_model,
ChromeBrowserState* browser_state) {
StopObservingWebStateList(tab_model.webStateList);
}
IOSChromeLocalSessionEventRouter::Observer::~Observer() {}
void IOSChromeLocalSessionEventRouter::WebStateInsertedAt(
void IOSChromeLocalSessionEventRouter::Observer::WebStateInsertedAt(
WebStateList* web_state_list,
web::WebState* web_state,
int index,
......@@ -85,81 +68,72 @@ void IOSChromeLocalSessionEventRouter::WebStateInsertedAt(
web_state->AddObserver(this);
}
void IOSChromeLocalSessionEventRouter::WebStateReplacedAt(
void IOSChromeLocalSessionEventRouter::Observer::WebStateReplacedAt(
WebStateList* web_state_list,
web::WebState* old_web_state,
web::WebState* new_web_state,
int index) {
OnWebStateChange(old_web_state);
router_->OnWebStateChange(old_web_state);
old_web_state->RemoveObserver(this);
DCHECK(new_web_state);
new_web_state->AddObserver(this);
}
void IOSChromeLocalSessionEventRouter::WebStateDetachedAt(
void IOSChromeLocalSessionEventRouter::Observer::WebStateDetachedAt(
WebStateList* web_state_list,
web::WebState* web_state,
int index) {
OnWebStateChange(web_state);
router_->OnWebStateChange(web_state);
web_state->RemoveObserver(this);
}
void IOSChromeLocalSessionEventRouter::TitleWasSet(web::WebState* web_state) {
OnWebStateChange(web_state);
void IOSChromeLocalSessionEventRouter::Observer::TitleWasSet(
web::WebState* web_state) {
router_->OnWebStateChange(web_state);
}
void IOSChromeLocalSessionEventRouter::DidFinishNavigation(
void IOSChromeLocalSessionEventRouter::Observer::DidFinishNavigation(
web::WebState* web_state,
web::NavigationContext* navigation_context) {
OnWebStateChange(web_state);
router_->OnWebStateChange(web_state);
}
void IOSChromeLocalSessionEventRouter::PageLoaded(
void IOSChromeLocalSessionEventRouter::Observer::PageLoaded(
web::WebState* web_state,
web::PageLoadCompletionStatus load_completion_status) {
OnWebStateChange(web_state);
router_->OnWebStateChange(web_state);
}
void IOSChromeLocalSessionEventRouter::DidChangeBackForwardState(
void IOSChromeLocalSessionEventRouter::Observer::DidChangeBackForwardState(
web::WebState* web_state) {
OnWebStateChange(web_state);
router_->OnWebStateChange(web_state);
}
void IOSChromeLocalSessionEventRouter::WebStateDestroyed(
void IOSChromeLocalSessionEventRouter::Observer::WebStateDestroyed(
web::WebState* web_state) {
OnWebStateChange(web_state);
router_->OnWebStateChange(web_state);
web_state->RemoveObserver(this);
}
void IOSChromeLocalSessionEventRouter::StartObservingWebStateList(
WebStateList* web_state_list) {
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::OnTabParented(web::WebState* web_state) {
OnWebStateChange(web_state);
}
void IOSChromeLocalSessionEventRouter::StopObservingWebStateList(
void IOSChromeLocalSessionEventRouter::Observer::WillBeginBatchOperation(
WebStateList* web_state_list) {
for (int index = 0; index < web_state_list->count(); ++index) {
web::WebState* web_state = web_state_list->GetWebStateAt(index);
web_state->RemoveObserver(this);
}
web_state_list->RemoveObserver(this);
router_->OnSessionEventStarting();
}
void IOSChromeLocalSessionEventRouter::OnTabParented(web::WebState* web_state) {
OnWebStateChange(web_state);
void IOSChromeLocalSessionEventRouter::Observer::BatchOperationEnded(
WebStateList* web_state_list) {
router_->OnSessionEventEnded();
}
void IOSChromeLocalSessionEventRouter::WillBeginBatchOperation(
WebStateList* web_state_list) {
void IOSChromeLocalSessionEventRouter::OnSessionEventStarting() {
batch_in_progress_++;
}
void IOSChromeLocalSessionEventRouter::BatchOperationEnded(
WebStateList* web_state_list) {
void IOSChromeLocalSessionEventRouter::OnSessionEventEnded() {
DCHECK(batch_in_progress_ > 0);
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