Commit 707b9422 authored by Mohammad Refaat's avatar Mohammad Refaat Committed by Commit Bot

Remove saveSessionImmediately method of SessionWindowRestoring protocol

Remove the usage of it in BVC and TabModel and replace with
SessionRestorationBrowserAgent directly.

Also remove isRestoring from TabModel and use the one from
SessionRestorationBrowserAgent directly when needed.

Update earlgrey test util to use SessionRestorationBrowserAgent instead
of tabModel for saving sessions.

Also remove the tests which uses the saveSessionImmediately method from
tabModel unittests as similar tests exist in SessionRestorationAgent
tests.

Bug: 1045226
Change-Id: Iafd7062ce505c466e7cf2a76e49ef3301dbcd6d1
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2018173
Commit-Queue: Mohammad Refaat <mrefaat@chromium.org>
Reviewed-by: default avatarMark Cogan <marq@chromium.org>
Cr-Commit-Position: refs/heads/master@{#735568}
parent 94a15132
......@@ -21,10 +21,6 @@
- (BOOL)restoreSessionWindow:(SessionWindowIOS*)window
forInitialRestore:(BOOL)initialRestore;
// Persists the current list of tabs to disk, either immediately or deferred
// based on the value of |immediately|.
- (void)saveSessionImmediately:(BOOL)immediately;
@end
#endif // IOS_CHROME_BROWSER_SESSIONS_SESSION_WINDOW_RESTORING_H_
......@@ -46,9 +46,6 @@ class Browser;
// The WebStateList owned by the TabModel.
@property(nonatomic, readonly) WebStateList* webStateList;
// YES if there is a session restoration in progress.
@property(nonatomic, readonly, getter=isRestoringSession) BOOL restoringSession;
// Initializes tabs from existing browser object. |-setCurrentTab| needs to be
// called in order to display the views associated with the tabs. Waits until
// the views are ready.
......
......@@ -417,12 +417,6 @@ void RecordMainFrameNavigationMetric(web::WebState* web_state) {
#pragma mark - SessionWindowRestoring(public)
- (void)saveSessionImmediately:(BOOL)immediately {
if (!_sessionRestorationBrowserAgent)
return;
_sessionRestorationBrowserAgent->SaveSession(immediately);
}
- (BOOL)isWebUsageEnabled {
DCHECK(_browserState);
return WebStateListWebUsageEnablerFactory::GetInstance()
......@@ -430,10 +424,6 @@ void RecordMainFrameNavigationMetric(web::WebState* web_state) {
->IsWebUsageEnabled();
}
- (BOOL)isRestoringSession {
return _sessionRestorationBrowserAgent->IsRestoringSession();
}
- (BOOL)restoreSessionWindow:(SessionWindowIOS*)window
forInitialRestore:(BOOL)initialRestore {
DCHECK(_browserState);
......@@ -471,7 +461,7 @@ void RecordMainFrameNavigationMetric(web::WebState* web_state) {
// Normally, the session is saved after some timer expires but since the app
// is about to enter the background send YES to save the session immediately.
[self saveSessionImmediately:YES];
_sessionRestorationBrowserAgent->SaveSession(/*immediately=*/true);
// Write out a grey version of the current website to disk.
if (self.webUsageEnabled && _webStateList->GetActiveWebState()) {
......
......@@ -394,74 +394,4 @@ TEST_F(TabModelTest, InsertWithSessionController) {
EXPECT_TRUE(current_web_state);
}
// Test that saving a non-empty session, then saving an empty session, then
// restoring, restores zero tabs, and not the non-empty session.
TEST_F(TabModelTest, RestorePersistedSessionAfterEmpty) {
agent_->InsertWebState(Params(GURL(kURL1)),
/*parent=*/nil,
/*opened_by_dom=*/false,
/*index=*/0,
/*in_background=*/false);
[session_service_ setPerformIO:YES];
[tab_model_ saveSessionImmediately:YES];
[session_service_ setPerformIO:NO];
// Session should be saved, now remove the tab.
[tab_model_ closeTabAtIndex:0];
[session_service_ setPerformIO:YES];
[tab_model_ saveSessionImmediately:YES];
[session_service_ setPerformIO:NO];
// Restore, expect that there are no sessions.
NSString* state_path = base::SysUTF8ToNSString(
chrome_browser_state_->GetStatePath().AsUTF8Unsafe());
SessionIOS* session = [session_service_ loadSessionFromDirectory:state_path];
ASSERT_EQ(1u, session.sessionWindows.count);
SessionWindowIOS* session_window = session.sessionWindows[0];
[tab_model_ restoreSessionWindow:session_window forInitialRestore:NO];
EXPECT_EQ(0, web_state_list_->count());
}
TEST_F(TabModelTest, DISABLED_PersistSelectionChange) {
agent_->InsertWebState(Params(GURL(kURL1)),
/*parent=*/nil,
/*opened_by_dom=*/false,
/*index=*/web_state_list_->count(),
/*in_background=*/false);
agent_->InsertWebState(Params(GURL(kURL1)),
/*parent=*/web_state_list_->GetWebStateAt(0),
/*opened_by_dom=*/false,
/*index=*/web_state_list_->count(),
/*in_background=*/false);
agent_->InsertWebState(Params(GURL(kURL1)),
/*parent=*/web_state_list_->GetWebStateAt(0),
/*opened_by_dom=*/false,
/*index=*/0,
/*in_background=*/false);
ASSERT_EQ(3, web_state_list_->count());
web_state_list_->ActivateWebStateAt(1);
// Force state to flush to disk on the main thread so it can be immediately
// tested below.
[session_service_ setPerformIO:YES];
[tab_model_ saveSessionImmediately:YES];
[session_service_ setPerformIO:NO];
NSString* state_path = base::SysUTF8ToNSString(
chrome_browser_state_->GetStatePath().AsUTF8Unsafe());
SessionIOS* session = [session_service_ loadSessionFromDirectory:state_path];
ASSERT_EQ(1u, session.sessionWindows.count);
SessionWindowIOS* session_window = session.sessionWindows[0];
// Create tab model from saved session.
SetTabModel(CreateTabModel(session_window));
ASSERT_EQ(3, web_state_list_->count());
EXPECT_EQ(web_state_list_->GetWebStateAt(1),
web_state_list_->GetActiveWebState());
}
} // anonymous namespace
......@@ -63,6 +63,7 @@ source_set("browser_view") {
"//ios/chrome/browser/search_engines",
"//ios/chrome/browser/send_tab_to_self",
"//ios/chrome/browser/sessions",
"//ios/chrome/browser/sessions:restoration_agent",
"//ios/chrome/browser/sessions:serialisation",
"//ios/chrome/browser/signin",
"//ios/chrome/browser/snapshots",
......@@ -213,6 +214,8 @@ source_set("unit_tests") {
"//ios/chrome/browser/main:test_support",
"//ios/chrome/browser/search_engines",
"//ios/chrome/browser/sessions",
"//ios/chrome/browser/sessions:restoration_agent",
"//ios/chrome/browser/sessions:test_support",
"//ios/chrome/browser/snapshots",
"//ios/chrome/browser/tabs",
"//ios/chrome/browser/ui:feature_flags",
......
......@@ -59,6 +59,7 @@
#include "ios/chrome/browser/search_engines/template_url_service_factory.h"
#import "ios/chrome/browser/send_tab_to_self/send_tab_to_self_util.h"
#include "ios/chrome/browser/sessions/ios_chrome_tab_restore_service_factory.h"
#import "ios/chrome/browser/sessions/session_restoration_browser_agent.h"
#import "ios/chrome/browser/signin/account_consistency_service_factory.h"
#include "ios/chrome/browser/signin/account_reconcilor_factory.h"
#import "ios/chrome/browser/snapshots/snapshot_tab_helper.h"
......@@ -3420,7 +3421,9 @@ NSString* const kBrowserViewControllerSnackbarCategory =
- (void)webState:(web::WebState*)webState
didFinishNavigation:(web::NavigationContext*)navigation {
[self.tabModel saveSessionImmediately:NO];
SessionRestorationBrowserAgent::FromBrowser(self.browser)
->SaveSession(
/*immediately=*/false);
}
- (void)webState:(web::WebState*)webState didLoadPageWithSuccess:(BOOL)success {
......@@ -4313,9 +4316,10 @@ NSString* const kBrowserViewControllerSnackbarCategory =
// Don't initiate Tab animation while session restoration is in progress
// (see crbug.com/763964).
if ([self.tabModel isRestoringSession])
if (SessionRestorationBrowserAgent::FromBrowser(self.browser)
->IsRestoringSession()) {
return;
}
// When adding new tabs, check what kind of reminder infobar should
// be added to the new tab. Try to add only one of them.
// This check is done when a new tab is added either through the Tools Menu
......
......@@ -19,6 +19,8 @@
#import "ios/chrome/browser/main/test_browser.h"
#include "ios/chrome/browser/search_engines/template_url_service_factory.h"
#include "ios/chrome/browser/sessions/ios_chrome_tab_restore_service_factory.h"
#import "ios/chrome/browser/sessions/session_restoration_browser_agent.h"
#import "ios/chrome/browser/sessions/test_session_service.h"
#import "ios/chrome/browser/tabs/tab_helper_util.h"
#import "ios/chrome/browser/tabs/tab_model.h"
#import "ios/chrome/browser/ui/browser_container/browser_container_view_controller.h"
......@@ -126,11 +128,13 @@ class BrowserViewControllerTest : public BlockCleanupTest {
forProtocol:@protocol(PageInfoCommands)];
id mockApplicationCommandHandler =
OCMProtocolMock(@protocol(ApplicationCommands));
[[tabModel stub] saveSessionImmediately:NO];
[[tabModel stub] closeAllTabs];
browser_ =
std::make_unique<TestBrowser>(chrome_browser_state_.get(), tabModel_);
SessionRestorationBrowserAgent::CreateForBrowser(
browser_.get(), [[TestSessionService alloc] init]);
// Create three web states.
for (int i = 0; i < 3; i++) {
......
......@@ -62,6 +62,7 @@ source_set("test_support") {
"//ios/chrome/browser/main",
"//ios/chrome/browser/metrics",
"//ios/chrome/browser/metrics:metrics_internal",
"//ios/chrome/browser/sessions:restoration_agent",
"//ios/chrome/browser/signin",
"//ios/chrome/browser/sync",
"//ios/chrome/browser/tabs",
......
......@@ -11,6 +11,7 @@
#include "ios/chrome/browser/chrome_url_constants.h"
#import "ios/chrome/browser/main/browser.h"
#import "ios/chrome/browser/metrics/tab_usage_recorder.h"
#import "ios/chrome/browser/sessions/session_restoration_browser_agent.h"
#include "ios/chrome/browser/system_flags.h"
#import "ios/chrome/browser/tabs/tab_model.h"
#import "ios/chrome/browser/tabs/tab_title_util.h"
......@@ -210,7 +211,9 @@ BOOL SimulateTabsBackgrounding() {
}
void SaveSessionImmediately() {
[GetCurrentTabModel() saveSessionImmediately:YES];
Browser* browser =
GetMainController().interfaceProvider.mainInterface.browser;
SessionRestorationBrowserAgent::FromBrowser(browser)->SaveSession(true);
}
void EvictOtherTabModelTabs() {
......
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