Commit 71abbc33 authored by Mark Cogan's avatar Mark Cogan Committed by Commit Bot

[iOS] Refactor TabModelSyncedWindowDelegate into a BrowserAgent

Bug: 1050134
Change-Id: Ic84167df95cb1b4e0c3bf86cda3677bc18f27283
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2074885
Commit-Queue: Mark Cogan <marq@chromium.org>
Reviewed-by: default avatarMohammad Refaat <mrefaat@chromium.org>
Cr-Commit-Position: refs/heads/master@{#745133}
parent f7bddeee
...@@ -12,6 +12,7 @@ ...@@ -12,6 +12,7 @@
#import "ios/chrome/browser/metrics/tab_usage_recorder_browser_agent.h" #import "ios/chrome/browser/metrics/tab_usage_recorder_browser_agent.h"
#import "ios/chrome/browser/sessions/session_restoration_browser_agent.h" #import "ios/chrome/browser/sessions/session_restoration_browser_agent.h"
#import "ios/chrome/browser/sessions/session_service_ios.h" #import "ios/chrome/browser/sessions/session_service_ios.h"
#include "ios/chrome/browser/tabs/synced_window_delegate_browser_agent.h"
#import "ios/chrome/browser/web_state_list/tab_insertion_browser_agent.h" #import "ios/chrome/browser/web_state_list/tab_insertion_browser_agent.h"
#include "ios/public/provider/chrome/browser/chrome_browser_provider.h" #include "ios/public/provider/chrome/browser/chrome_browser_provider.h"
...@@ -25,6 +26,7 @@ void AttachBrowserAgents(Browser* browser) { ...@@ -25,6 +26,7 @@ void AttachBrowserAgents(Browser* browser) {
} }
TabInsertionBrowserAgent::CreateForBrowser(browser); TabInsertionBrowserAgent::CreateForBrowser(browser);
AttachInfobarOverlayBrowserAgent(browser); AttachInfobarOverlayBrowserAgent(browser);
SyncedWindowDelegateBrowserAgent::CreateForBrowser(browser);
SessionRestorationBrowserAgent::CreateForBrowser( SessionRestorationBrowserAgent::CreateForBrowser(
browser, [SessionServiceIOS sharedService]); browser, [SessionServiceIOS sharedService]);
......
...@@ -13,9 +13,9 @@ ...@@ -13,9 +13,9 @@
#include "ios/chrome/browser/chrome_url_constants.h" #include "ios/chrome/browser/chrome_url_constants.h"
#include "ios/chrome/browser/sessions/tab_restore_service_delegate_impl_ios.h" #include "ios/chrome/browser/sessions/tab_restore_service_delegate_impl_ios.h"
#include "ios/chrome/browser/sessions/tab_restore_service_delegate_impl_ios_factory.h" #include "ios/chrome/browser/sessions/tab_restore_service_delegate_impl_ios_factory.h"
#include "ios/chrome/browser/tabs/synced_window_delegate_browser_agent.h"
#import "ios/chrome/browser/tabs/tab_model.h" #import "ios/chrome/browser/tabs/tab_model.h"
#import "ios/chrome/browser/tabs/tab_model_list.h" #import "ios/chrome/browser/tabs/tab_model_list.h"
#include "ios/chrome/browser/tabs/tab_model_synced_window_delegate.h"
#import "ios/chrome/browser/web_state_list/web_state_list.h" #import "ios/chrome/browser/web_state_list/web_state_list.h"
#include "ios/public/provider/chrome/browser/chrome_browser_provider.h" #include "ios/public/provider/chrome/browser/chrome_browser_provider.h"
#include "url/gurl.h" #include "url/gurl.h"
......
...@@ -25,7 +25,7 @@ ...@@ -25,7 +25,7 @@
#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/model_type_store_service_factory.h" #include "ios/chrome/browser/sync/model_type_store_service_factory.h"
#import "ios/chrome/browser/sync/sessions/ios_chrome_local_session_event_router.h" #import "ios/chrome/browser/sync/sessions/ios_chrome_local_session_event_router.h"
#include "ios/chrome/browser/tabs/tab_model_synced_window_delegate_getter.h" #include "ios/chrome/browser/tabs/ios_synced_window_delegate_getter.h"
#include "ios/chrome/common/channel_info.h" #include "ios/chrome/common/channel_info.h"
#include "ios/web/public/thread/web_thread.h" #include "ios/web/public/thread/web_thread.h"
#include "url/gurl.h" #include "url/gurl.h"
...@@ -56,7 +56,7 @@ class SyncSessionsClientImpl : public sync_sessions::SyncSessionsClient { ...@@ -56,7 +56,7 @@ class SyncSessionsClientImpl : public sync_sessions::SyncSessionsClient {
explicit SyncSessionsClientImpl(ChromeBrowserState* browser_state) explicit SyncSessionsClientImpl(ChromeBrowserState* browser_state)
: browser_state_(browser_state), : browser_state_(browser_state),
window_delegates_getter_( window_delegates_getter_(
std::make_unique<TabModelSyncedWindowDelegatesGetter>()), std::make_unique<IOSSyncedWindowDelegatesGetter>()),
local_session_event_router_( local_session_event_router_(
std::make_unique<IOSChromeLocalSessionEventRouter>( std::make_unique<IOSChromeLocalSessionEventRouter>(
browser_state_, browser_state_,
......
...@@ -4,12 +4,12 @@ ...@@ -4,12 +4,12 @@
source_set("tabs") { source_set("tabs") {
sources = [ sources = [
"ios_synced_window_delegate_getter.h",
"synced_window_delegate_browser_agent.h",
"tab_helper_util.h", "tab_helper_util.h",
"tab_model.h", "tab_model.h",
"tab_model_list.h", "tab_model_list.h",
"tab_model_list_observer.h", "tab_model_list_observer.h",
"tab_model_synced_window_delegate.h",
"tab_model_synced_window_delegate_getter.h",
"tab_parenting_global_observer.cc", "tab_parenting_global_observer.cc",
"tab_parenting_global_observer.h", "tab_parenting_global_observer.h",
"tab_title_util.h", "tab_title_util.h",
...@@ -18,6 +18,7 @@ source_set("tabs") { ...@@ -18,6 +18,7 @@ source_set("tabs") {
deps = [ deps = [
"//components/sessions", "//components/sessions",
"//components/sync_sessions", "//components/sync_sessions",
"//ios/chrome/browser/main:public",
"//ios/chrome/browser/sessions:serialisation", "//ios/chrome/browser/sessions:serialisation",
"//ios/chrome/browser/sessions:session_service", "//ios/chrome/browser/sessions:session_service",
"//ios/chrome/browser/web_state_list", "//ios/chrome/browser/web_state_list",
...@@ -31,11 +32,11 @@ source_set("tabs_internal") { ...@@ -31,11 +32,11 @@ source_set("tabs_internal") {
sources = [ sources = [
"closing_web_state_observer.h", "closing_web_state_observer.h",
"closing_web_state_observer.mm", "closing_web_state_observer.mm",
"ios_synced_window_delegate_getter.mm",
"synced_window_delegate_browser_agent.mm",
"tab_helper_util.mm", "tab_helper_util.mm",
"tab_model.mm", "tab_model.mm",
"tab_model_list.mm", "tab_model_list.mm",
"tab_model_synced_window_delegate.mm",
"tab_model_synced_window_delegate_getter.mm",
"tab_parenting_observer.h", "tab_parenting_observer.h",
"tab_parenting_observer.mm", "tab_parenting_observer.mm",
"tab_title_util.h", "tab_title_util.h",
......
...@@ -2,12 +2,9 @@ ...@@ -2,12 +2,9 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
#ifndef IOS_CHROME_BROWSER_TABS_TAB_MODEL_SYNCED_WINDOW_DELEGATE_GETTER_H_ #ifndef IOS_CHROME_BROWSER_TABS_IOS_SYNCED_WINDOW_DELEGATE_GETTER_H_
#define IOS_CHROME_BROWSER_TABS_TAB_MODEL_SYNCED_WINDOW_DELEGATE_GETTER_H_ #define IOS_CHROME_BROWSER_TABS_IOS_SYNCED_WINDOW_DELEGATE_GETTER_H_
#include <set>
#include "base/macros.h"
#include "components/sessions/core/session_id.h" #include "components/sessions/core/session_id.h"
#include "components/sync_sessions/synced_window_delegates_getter.h" #include "components/sync_sessions/synced_window_delegates_getter.h"
...@@ -15,19 +12,21 @@ namespace browser_sync { ...@@ -15,19 +12,21 @@ namespace browser_sync {
class SyncedWindowDelegate; class SyncedWindowDelegate;
} }
class TabModelSyncedWindowDelegatesGetter class IOSSyncedWindowDelegatesGetter
: public sync_sessions::SyncedWindowDelegatesGetter { : public sync_sessions::SyncedWindowDelegatesGetter {
public: public:
TabModelSyncedWindowDelegatesGetter(); IOSSyncedWindowDelegatesGetter();
~TabModelSyncedWindowDelegatesGetter() override; // Not copyable or moveable
IOSSyncedWindowDelegatesGetter(const IOSSyncedWindowDelegatesGetter&) =
delete;
IOSSyncedWindowDelegatesGetter& operator=(
const IOSSyncedWindowDelegatesGetter&) = delete;
~IOSSyncedWindowDelegatesGetter() override;
// sync_sessions::SyncedWindowDelegatesGetter: // sync_sessions::SyncedWindowDelegatesGetter:
SyncedWindowDelegateMap GetSyncedWindowDelegates() override; SyncedWindowDelegateMap GetSyncedWindowDelegates() override;
const sync_sessions::SyncedWindowDelegate* FindById( const sync_sessions::SyncedWindowDelegate* FindById(
SessionID session_id) override; SessionID session_id) override;
private:
DISALLOW_COPY_AND_ASSIGN(TabModelSyncedWindowDelegatesGetter);
}; };
#endif // IOS_CHROME_BROWSER_TABS_TAB_MODEL_SYNCED_WINDOW_DELEGATE_GETTER_H_ #endif // IOS_CHROME_BROWSER_TABS_IOS_SYNCED_WINDOW_DELEGATE_GETTER_H_
...@@ -2,27 +2,29 @@ ...@@ -2,27 +2,29 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
#include "ios/chrome/browser/tabs/tab_model_synced_window_delegate_getter.h" #include "ios/chrome/browser/tabs/ios_synced_window_delegate_getter.h"
#include <vector>
#include "base/logging.h" #include "base/logging.h"
#include "ios/chrome/browser/application_context.h" #include "ios/chrome/browser/application_context.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/browser_state/chrome_browser_state_manager.h" #include "ios/chrome/browser/browser_state/chrome_browser_state_manager.h"
#import "ios/chrome/browser/tabs/tab_model.h" #include "ios/chrome/browser/main/browser_list.h"
#import "ios/chrome/browser/tabs/tab_model_list.h" #include "ios/chrome/browser/main/browser_list_factory.h"
#import "ios/chrome/browser/tabs/tab_model_synced_window_delegate.h" #import "ios/chrome/browser/tabs/synced_window_delegate_browser_agent.h"
#import "ios/chrome/browser/web_state_list/web_state_list.h" #import "ios/chrome/browser/web_state_list/web_state_list.h"
#if !defined(__has_feature) || !__has_feature(objc_arc) #if !defined(__has_feature) || !__has_feature(objc_arc)
#error "This file requires ARC support." #error "This file requires ARC support."
#endif #endif
TabModelSyncedWindowDelegatesGetter::TabModelSyncedWindowDelegatesGetter() {} IOSSyncedWindowDelegatesGetter::IOSSyncedWindowDelegatesGetter() {}
TabModelSyncedWindowDelegatesGetter::~TabModelSyncedWindowDelegatesGetter() {} IOSSyncedWindowDelegatesGetter::~IOSSyncedWindowDelegatesGetter() {}
TabModelSyncedWindowDelegatesGetter::SyncedWindowDelegateMap IOSSyncedWindowDelegatesGetter::SyncedWindowDelegateMap
TabModelSyncedWindowDelegatesGetter::GetSyncedWindowDelegates() { IOSSyncedWindowDelegatesGetter::GetSyncedWindowDelegates() {
SyncedWindowDelegateMap synced_window_delegates; SyncedWindowDelegateMap synced_window_delegates;
std::vector<ChromeBrowserState*> browser_states = std::vector<ChromeBrowserState*> browser_states =
...@@ -32,12 +34,12 @@ TabModelSyncedWindowDelegatesGetter::GetSyncedWindowDelegates() { ...@@ -32,12 +34,12 @@ TabModelSyncedWindowDelegatesGetter::GetSyncedWindowDelegates() {
for (auto* browser_state : browser_states) { for (auto* browser_state : browser_states) {
DCHECK(!browser_state->IsOffTheRecord()); DCHECK(!browser_state->IsOffTheRecord());
NSArray<TabModel*>* tabModels = BrowserList* browsers =
TabModelList::GetTabModelsForChromeBrowserState(browser_state); BrowserListFactory::GetForBrowserState(browser_state);
for (TabModel* tabModel in tabModels) { for (Browser* browser : browsers->AllRegularBrowsers()) {
if (tabModel.webStateList->GetActiveWebState()) { if (browser->GetWebStateList()->GetActiveWebState()) {
sync_sessions::SyncedWindowDelegate* synced_window_delegate = sync_sessions::SyncedWindowDelegate* synced_window_delegate =
tabModel.syncedWindowDelegate; SyncedWindowDelegateBrowserAgent::FromBrowser(browser);
synced_window_delegates[synced_window_delegate->GetSessionId()] = synced_window_delegates[synced_window_delegate->GetSessionId()] =
synced_window_delegate; synced_window_delegate;
} }
...@@ -48,7 +50,7 @@ TabModelSyncedWindowDelegatesGetter::GetSyncedWindowDelegates() { ...@@ -48,7 +50,7 @@ TabModelSyncedWindowDelegatesGetter::GetSyncedWindowDelegates() {
} }
const sync_sessions::SyncedWindowDelegate* const sync_sessions::SyncedWindowDelegate*
TabModelSyncedWindowDelegatesGetter::FindById(SessionID session_id) { IOSSyncedWindowDelegatesGetter::FindById(SessionID session_id) {
for (const auto& iter : GetSyncedWindowDelegates()) { for (const auto& iter : GetSyncedWindowDelegates()) {
if (session_id == iter.second->GetSessionId()) if (session_id == iter.second->GetSessionId())
return iter.second; return iter.second;
......
...@@ -2,12 +2,13 @@ ...@@ -2,12 +2,13 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
#ifndef IOS_CHROME_BROWSER_TABS_TAB_MODEL_SYNCED_WINDOW_DELEGATE_H_ #ifndef IOS_CHROME_BROWSER_TABS_SYNCED_WINDOW_DELEGATE_BROWSER_AGENT_H_
#define IOS_CHROME_BROWSER_TABS_TAB_MODEL_SYNCED_WINDOW_DELEGATE_H_ #define IOS_CHROME_BROWSER_TABS_SYNCED_WINDOW_DELEGATE_BROWSER_AGENT_H_
#include "base/macros.h"
#include "components/sessions/core/session_id.h" #include "components/sessions/core/session_id.h"
#include "components/sync_sessions/synced_window_delegate.h" #include "components/sync_sessions/synced_window_delegate.h"
#include "ios/chrome/browser/main/browser_observer.h"
#include "ios/chrome/browser/main/browser_user_data.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"
class WebStateList; class WebStateList;
...@@ -18,12 +19,18 @@ class SyncedTabDelegate; ...@@ -18,12 +19,18 @@ class SyncedTabDelegate;
// A TabModelSyncedWindowDelegate is the iOS-based implementation of // A TabModelSyncedWindowDelegate is the iOS-based implementation of
// SyncedWindowDelegate. // SyncedWindowDelegate.
class TabModelSyncedWindowDelegate : public sync_sessions::SyncedWindowDelegate, class SyncedWindowDelegateBrowserAgent
public WebStateListObserver { : public sync_sessions::SyncedWindowDelegate,
BrowserObserver,
public BrowserUserData<SyncedWindowDelegateBrowserAgent>,
public WebStateListObserver {
public: public:
// This constructor does not add the constructed object as an observere of // Not copyable or moveable
// |web_state_list|; calling code is expected to do that. SyncedWindowDelegateBrowserAgent(const SyncedWindowDelegateBrowserAgent&) =
explicit TabModelSyncedWindowDelegate(WebStateList* web_state_list); delete;
SyncedWindowDelegateBrowserAgent& operator=(
const SyncedWindowDelegateBrowserAgent&) = delete;
~SyncedWindowDelegateBrowserAgent() override;
// Return the tab id for the tab at |index|. // Return the tab id for the tab at |index|.
SessionID GetTabIdAt(int index) const override; SessionID GetTabIdAt(int index) const override;
...@@ -51,13 +58,18 @@ class TabModelSyncedWindowDelegate : public sync_sessions::SyncedWindowDelegate, ...@@ -51,13 +58,18 @@ class TabModelSyncedWindowDelegate : public sync_sessions::SyncedWindowDelegate,
int index) override; int index) override;
private: private:
explicit SyncedWindowDelegateBrowserAgent(Browser* browser);
friend class BrowserUserData<SyncedWindowDelegateBrowserAgent>;
BROWSER_USER_DATA_KEY_DECL();
// BrowserObserver
void BrowserDestroyed(Browser* browser) override;
// Sets the window id of |web_state| to |session_id_|. // Sets the window id of |web_state| to |session_id_|.
void SetWindowIdForWebState(web::WebState* web_state); void SetWindowIdForWebState(web::WebState* web_state);
WebStateList* web_state_list_; WebStateList* web_state_list_;
SessionID session_id_; SessionID session_id_;
DISALLOW_COPY_AND_ASSIGN(TabModelSyncedWindowDelegate);
}; };
#endif // IOS_CHROME_BROWSER_TABS_TAB_MODEL_SYNCED_WINDOW_DELEGATE_H_ #endif // IOS_CHROME_BROWSER_TABS_SYNCED_WINDOW_DELEGATE_BROWSER_AGENT_H_
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
#include "ios/chrome/browser/tabs/tab_model_synced_window_delegate.h" #include "ios/chrome/browser/tabs/synced_window_delegate_browser_agent.h"
#include "base/logging.h" #include "base/logging.h"
#include "ios/chrome/browser/browser_state/chrome_browser_state.h" #include "ios/chrome/browser/browser_state/chrome_browser_state.h"
...@@ -15,19 +15,26 @@ ...@@ -15,19 +15,26 @@
#error "This file requires ARC support." #error "This file requires ARC support."
#endif #endif
TabModelSyncedWindowDelegate::TabModelSyncedWindowDelegate( BROWSER_USER_DATA_KEY_IMPL(SyncedWindowDelegateBrowserAgent)
WebStateList* web_state_list)
: web_state_list_(web_state_list), session_id_(SessionID::NewUnique()) { SyncedWindowDelegateBrowserAgent::SyncedWindowDelegateBrowserAgent(
Browser* browser)
: web_state_list_(browser->GetWebStateList()),
session_id_(SessionID::NewUnique()) {
browser->AddObserver(this);
for (int index = 0; index < web_state_list_->count(); ++index) { for (int index = 0; index < web_state_list_->count(); ++index) {
SetWindowIdForWebState(web_state_list_->GetWebStateAt(index)); SetWindowIdForWebState(web_state_list_->GetWebStateAt(index));
} }
web_state_list_->AddObserver(this);
} }
SessionID TabModelSyncedWindowDelegate::GetTabIdAt(int index) const { SyncedWindowDelegateBrowserAgent::~SyncedWindowDelegateBrowserAgent() {}
SessionID SyncedWindowDelegateBrowserAgent::GetTabIdAt(int index) const {
return GetTabAt(index)->GetSessionId(); return GetTabAt(index)->GetSessionId();
} }
bool TabModelSyncedWindowDelegate::IsSessionRestoreInProgress() const { bool SyncedWindowDelegateBrowserAgent::IsSessionRestoreInProgress() const {
// On iOS, the WebStateList restoration is done in a batch operation on the // On iOS, the WebStateList restoration is done in a batch operation on the
// main thread. // main thread.
// * as this is in a batch operation, no event is forwarded to the sync engine // * as this is in a batch operation, no event is forwarded to the sync engine
...@@ -39,47 +46,47 @@ bool TabModelSyncedWindowDelegate::IsSessionRestoreInProgress() const { ...@@ -39,47 +46,47 @@ bool TabModelSyncedWindowDelegate::IsSessionRestoreInProgress() const {
return false; return false;
} }
bool TabModelSyncedWindowDelegate::ShouldSync() const { bool SyncedWindowDelegateBrowserAgent::ShouldSync() const {
return true; return true;
} }
bool TabModelSyncedWindowDelegate::HasWindow() const { bool SyncedWindowDelegateBrowserAgent::HasWindow() const {
return true; return true;
} }
SessionID TabModelSyncedWindowDelegate::GetSessionId() const { SessionID SyncedWindowDelegateBrowserAgent::GetSessionId() const {
return session_id_; return session_id_;
} }
int TabModelSyncedWindowDelegate::GetTabCount() const { int SyncedWindowDelegateBrowserAgent::GetTabCount() const {
return web_state_list_->count(); return web_state_list_->count();
} }
int TabModelSyncedWindowDelegate::GetActiveIndex() const { int SyncedWindowDelegateBrowserAgent::GetActiveIndex() const {
DCHECK_NE(web_state_list_->active_index(), WebStateList::kInvalidIndex); DCHECK_NE(web_state_list_->active_index(), WebStateList::kInvalidIndex);
return web_state_list_->active_index(); return web_state_list_->active_index();
} }
bool TabModelSyncedWindowDelegate::IsTypeNormal() const { bool SyncedWindowDelegateBrowserAgent::IsTypeNormal() const {
return true; return true;
} }
bool TabModelSyncedWindowDelegate::IsTypePopup() const { bool SyncedWindowDelegateBrowserAgent::IsTypePopup() const {
return false; return false;
} }
bool TabModelSyncedWindowDelegate::IsTabPinned( bool SyncedWindowDelegateBrowserAgent::IsTabPinned(
const sync_sessions::SyncedTabDelegate* tab) const { const sync_sessions::SyncedTabDelegate* tab) const {
return false; return false;
} }
sync_sessions::SyncedTabDelegate* TabModelSyncedWindowDelegate::GetTabAt( sync_sessions::SyncedTabDelegate* SyncedWindowDelegateBrowserAgent::GetTabAt(
int index) const { int index) const {
return IOSChromeSyncedTabDelegate::FromWebState( return IOSChromeSyncedTabDelegate::FromWebState(
web_state_list_->GetWebStateAt(index)); web_state_list_->GetWebStateAt(index));
} }
void TabModelSyncedWindowDelegate::WebStateInsertedAt( void SyncedWindowDelegateBrowserAgent::WebStateInsertedAt(
WebStateList* web_state_list, WebStateList* web_state_list,
web::WebState* web_state, web::WebState* web_state,
int index, int index,
...@@ -88,7 +95,7 @@ void TabModelSyncedWindowDelegate::WebStateInsertedAt( ...@@ -88,7 +95,7 @@ void TabModelSyncedWindowDelegate::WebStateInsertedAt(
SetWindowIdForWebState(web_state); SetWindowIdForWebState(web_state);
} }
void TabModelSyncedWindowDelegate::WebStateReplacedAt( void SyncedWindowDelegateBrowserAgent::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,
...@@ -97,7 +104,12 @@ void TabModelSyncedWindowDelegate::WebStateReplacedAt( ...@@ -97,7 +104,12 @@ void TabModelSyncedWindowDelegate::WebStateReplacedAt(
SetWindowIdForWebState(new_web_state); SetWindowIdForWebState(new_web_state);
} }
void TabModelSyncedWindowDelegate::SetWindowIdForWebState( void SyncedWindowDelegateBrowserAgent::SetWindowIdForWebState(
web::WebState* web_state) { web::WebState* web_state) {
IOSChromeSessionTabHelper::FromWebState(web_state)->SetWindowID(session_id_); IOSChromeSessionTabHelper::FromWebState(web_state)->SetWindowID(session_id_);
} }
void SyncedWindowDelegateBrowserAgent::BrowserDestroyed(Browser* browser) {
web_state_list_->RemoveObserver(this);
browser->RemoveObserver(this);
}
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
#import <UIKit/UIKit.h> #import <UIKit/UIKit.h>
class ChromeBrowserState; class ChromeBrowserState;
class TabModelSyncedWindowDelegate; class SyncedWindowDelegateBrowserAgent;
class WebStateList; class WebStateList;
class Browser; class Browser;
...@@ -22,7 +22,7 @@ class Browser; ...@@ -22,7 +22,7 @@ class Browser;
// The delegate for sync. // The delegate for sync.
@property(nonatomic, readonly) @property(nonatomic, readonly)
TabModelSyncedWindowDelegate* syncedWindowDelegate; SyncedWindowDelegateBrowserAgent* syncedWindowDelegate;
// BrowserState associated with this TabModel. // BrowserState associated with this TabModel.
@property(nonatomic, readonly) ChromeBrowserState* browserState; @property(nonatomic, readonly) ChromeBrowserState* browserState;
......
...@@ -38,8 +38,8 @@ ...@@ -38,8 +38,8 @@
#import "ios/chrome/browser/snapshots/snapshot_cache.h" #import "ios/chrome/browser/snapshots/snapshot_cache.h"
#import "ios/chrome/browser/snapshots/snapshot_cache_factory.h" #import "ios/chrome/browser/snapshots/snapshot_cache_factory.h"
#import "ios/chrome/browser/tabs/closing_web_state_observer.h" #import "ios/chrome/browser/tabs/closing_web_state_observer.h"
#import "ios/chrome/browser/tabs/synced_window_delegate_browser_agent.h"
#import "ios/chrome/browser/tabs/tab_model_list.h" #import "ios/chrome/browser/tabs/tab_model_list.h"
#import "ios/chrome/browser/tabs/tab_model_synced_window_delegate.h"
#import "ios/chrome/browser/tabs/tab_parenting_observer.h" #import "ios/chrome/browser/tabs/tab_parenting_observer.h"
#import "ios/chrome/browser/web/tab_id_tab_helper.h" #import "ios/chrome/browser/web/tab_id_tab_helper.h"
#import "ios/chrome/browser/web_state_list/web_state_list.h" #import "ios/chrome/browser/web_state_list/web_state_list.h"
...@@ -218,10 +218,6 @@ void RecordMainFrameNavigationMetric(web::WebState* web_state) { ...@@ -218,10 +218,6 @@ void RecordMainFrameNavigationMetric(web::WebState* web_state) {
// WebStateListObserverBridges. // WebStateListObserverBridges.
NSArray<id<WebStateListObserving>>* _retainedWebStateListObservers; NSArray<id<WebStateListObserving>>* _retainedWebStateListObservers;
// The delegate for sync (the actual object will be owned by the observers
// vector, above).
TabModelSyncedWindowDelegate* _syncedWindowDelegate;
// Counters for metrics. // Counters for metrics.
WebStateListMetricsObserver* _webStateListMetricsObserver; WebStateListMetricsObserver* _webStateListMetricsObserver;
...@@ -284,17 +280,9 @@ void RecordMainFrameNavigationMetric(web::WebState* web_state) { ...@@ -284,17 +280,9 @@ void RecordMainFrameNavigationMetric(web::WebState* web_state) {
_sessionRestorationBrowserAgent = _sessionRestorationBrowserAgent =
SessionRestorationBrowserAgent::FromBrowser(browser); SessionRestorationBrowserAgent::FromBrowser(browser);
_tabUsageRecorder = TabUsageRecorderBrowserAgent::FromBrowser(browser); _tabUsageRecorder = TabUsageRecorderBrowserAgent::FromBrowser(browser);
// Tab sync handles incognito browser states by filtering on profile, so _syncedWindowDelegate =
// it's important to the backend code to always have a sync window delegate. SyncedWindowDelegateBrowserAgent::FromBrowser(browser);
std::unique_ptr<TabModelSyncedWindowDelegate> syncedWindowDelegate =
std::make_unique<TabModelSyncedWindowDelegate>(_webStateList);
// Keep a weak ref to the the window delegate, which is then moved into
// the web state list observers list.
_syncedWindowDelegate = syncedWindowDelegate.get();
_webStateListObservers.push_back(std::move(syncedWindowDelegate));
NSMutableArray<id<WebStateListObserving>>* retainedWebStateListObservers = NSMutableArray<id<WebStateListObserving>>* retainedWebStateListObservers =
[[NSMutableArray alloc] init]; [[NSMutableArray alloc] init];
......
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