Commit da71c749 authored by Olivier Robin's avatar Olivier Robin Committed by Commit Bot

Add not restored tabs to recently closed.

With slim navigation, the tab cannot be restored anymore.
Directly add the tab to recently closed without creating a WebState (as
the WebState is not used anyway).

Bug: 1022298
Change-Id: I4979564e938fd49fb8b622c38561675ccf27a8c8
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1903354
Commit-Queue: Olivier Robin <olivierrobin@chromium.org>
Reviewed-by: default avatarScott Violet <sky@chromium.org>
Reviewed-by: default avatarOlivier Robin <olivierrobin@chromium.org>
Reviewed-by: default avatarJustin Cohen <justincohen@chromium.org>
Reviewed-by: default avatarGauthier Ambard <gambard@chromium.org>
Cr-Commit-Position: refs/heads/master@{#713829}
parent 2edfecad
...@@ -48,6 +48,8 @@ if (!is_ios) { ...@@ -48,6 +48,8 @@ if (!is_ios) {
sources = [ sources = [
"ios/ios_live_tab.h", "ios/ios_live_tab.h",
"ios/ios_live_tab.mm", "ios/ios_live_tab.mm",
"ios/ios_restore_live_tab.h",
"ios/ios_restore_live_tab.mm",
"ios/ios_serialized_navigation_builder.h", "ios/ios_serialized_navigation_builder.h",
"ios/ios_serialized_navigation_builder.mm", "ios/ios_serialized_navigation_builder.mm",
"ios/ios_serialized_navigation_driver.cc", "ios/ios_serialized_navigation_driver.cc",
...@@ -62,6 +64,7 @@ if (!is_ios) { ...@@ -62,6 +64,7 @@ if (!is_ios) {
deps = [ deps = [
"//base", "//base",
"//ios/web/common", "//ios/web/common",
"//ios/web/public/session",
] ]
} }
} }
......
// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef COMPONENTS_SESSIONS_IOS_IOS_RESTORE_LIVE_TAB_H_
#define COMPONENTS_SESSIONS_IOS_IOS_RESTORE_LIVE_TAB_H_
#include "base/macros.h"
#include "base/supports_user_data.h"
#include "components/sessions/core/live_tab.h"
@class CRWSessionStorage;
namespace sessions {
// An implementation of LiveTab that is backed by web::CRWSessionStorage for use
// when restoring tabs from a crashed session.
class SESSIONS_EXPORT RestoreIOSLiveTab : public LiveTab {
public:
explicit RestoreIOSLiveTab(CRWSessionStorage* session);
~RestoreIOSLiveTab() override;
RestoreIOSLiveTab(const RestoreIOSLiveTab&) = delete;
RestoreIOSLiveTab& operator=(const RestoreIOSLiveTab&) = delete;
// LiveTab:
bool IsInitialBlankNavigation() override;
int GetCurrentEntryIndex() override;
int GetPendingEntryIndex() override;
sessions::SerializedNavigationEntry GetEntryAtIndex(int index) override;
sessions::SerializedNavigationEntry GetPendingEntry() override;
int GetEntryCount() override;
const std::string& GetUserAgentOverride() override;
private:
CRWSessionStorage* session_;
// Needed to return an empty string in GetUserAgentOverride().
const std::string user_agent_override_;
};
} // namespace sessions
#endif // COMPONENTS_SESSIONS_IOS_IOS_RESTORE_LIVE_TAB_H_
// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "components/sessions/ios/ios_restore_live_tab.h"
#include "components/sessions/ios/ios_serialized_navigation_builder.h"
#include "ios/web/public/session/crw_navigation_item_storage.h"
#include "ios/web/public/session/crw_session_storage.h"
namespace sessions {
RestoreIOSLiveTab::RestoreIOSLiveTab(CRWSessionStorage* session)
: session_(session) {}
RestoreIOSLiveTab::~RestoreIOSLiveTab() {}
bool RestoreIOSLiveTab::IsInitialBlankNavigation() {
return false;
}
int RestoreIOSLiveTab::GetCurrentEntryIndex() {
return session_.lastCommittedItemIndex;
}
int RestoreIOSLiveTab::GetPendingEntryIndex() {
return -1;
}
sessions::SerializedNavigationEntry RestoreIOSLiveTab::GetEntryAtIndex(
int index) {
NSArray* item_storages = session_.itemStorages;
CRWNavigationItemStorage* item = item_storages[index];
return sessions::IOSSerializedNavigationBuilder::FromNavigationStorageItem(
index, item);
}
sessions::SerializedNavigationEntry RestoreIOSLiveTab::GetPendingEntry() {
return sessions::SerializedNavigationEntry();
}
int RestoreIOSLiveTab::GetEntryCount() {
return session_.itemStorages.count;
}
const std::string& RestoreIOSLiveTab::GetUserAgentOverride() {
// Dynamic user agent overrides are not supported on iOS.
return user_agent_override_;
}
} // namespace sessions
...@@ -12,6 +12,8 @@ namespace web { ...@@ -12,6 +12,8 @@ namespace web {
class NavigationItem; class NavigationItem;
} }
@class CRWNavigationItemStorage;
namespace sessions { namespace sessions {
class SerializedNavigationEntry; class SerializedNavigationEntry;
...@@ -24,6 +26,12 @@ class IOSSerializedNavigationBuilder { ...@@ -24,6 +26,12 @@ class IOSSerializedNavigationBuilder {
static SerializedNavigationEntry FromNavigationItem( static SerializedNavigationEntry FromNavigationItem(
int index, const web::NavigationItem& item); int index, const web::NavigationItem& item);
// Construct a SerializedNavigationEntry for a particular index from the given
// CRWNavigationItemStorage.
static SerializedNavigationEntry FromNavigationStorageItem(
int index,
CRWNavigationItemStorage* item);
// Convert the given SerializedNavigationEntry into a NavigationItem. The // Convert the given SerializedNavigationEntry into a NavigationItem. The
// NavigationItem will have a transition type of // NavigationItem will have a transition type of
// PAGE_TRANSITION_RELOAD and a new unique ID. // PAGE_TRANSITION_RELOAD and a new unique ID.
......
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
#include "ios/web/public/favicon/favicon_status.h" #include "ios/web/public/favicon/favicon_status.h"
#include "ios/web/public/navigation/navigation_item.h" #include "ios/web/public/navigation/navigation_item.h"
#include "ios/web/public/navigation/referrer.h" #include "ios/web/public/navigation/referrer.h"
#include "ios/web/public/session/crw_navigation_item_storage.h"
namespace sessions { namespace sessions {
...@@ -30,6 +31,26 @@ IOSSerializedNavigationBuilder::FromNavigationItem( ...@@ -30,6 +31,26 @@ IOSSerializedNavigationBuilder::FromNavigationItem(
return navigation; return navigation;
} }
SerializedNavigationEntry
IOSSerializedNavigationBuilder::FromNavigationStorageItem(
int index,
CRWNavigationItemStorage* item) {
// Create a NavigationItem to reserve a UniqueID.
auto navigation_item = web::NavigationItem::Create();
SerializedNavigationEntry navigation;
navigation.index_ = index;
navigation.unique_id_ = navigation_item->GetUniqueID();
navigation.referrer_url_ = item.referrer.url;
navigation.referrer_policy_ = item.referrer.policy;
navigation.virtual_url_ = item.virtualURL;
navigation.title_ = item.title;
// Use reload transition type to avoid incorrect increase for typed count.
navigation.transition_type_ = ui::PAGE_TRANSITION_RELOAD;
navigation.timestamp_ = item.timestamp;
return navigation;
}
// static // static
std::unique_ptr<web::NavigationItem> std::unique_ptr<web::NavigationItem>
IOSSerializedNavigationBuilder::ToNavigationItem( IOSSerializedNavigationBuilder::ToNavigationItem(
......
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
#include "components/infobars/core/infobar.h" #include "components/infobars/core/infobar.h"
#include "components/infobars/core/infobar_manager.h" #include "components/infobars/core/infobar_manager.h"
#include "components/sessions/core/tab_restore_service.h" #include "components/sessions/core/tab_restore_service.h"
#include "components/sessions/ios/ios_live_tab.h" #include "components/sessions/ios/ios_restore_live_tab.h"
#include "components/strings/grit/components_chromium_strings.h" #include "components/strings/grit/components_chromium_strings.h"
#include "components/strings/grit/components_google_chrome_strings.h" #include "components/strings/grit/components_google_chrome_strings.h"
#include "components/strings/grit/components_strings.h" #include "components/strings/grit/components_strings.h"
...@@ -326,12 +326,10 @@ int SessionCrashedInfoBarDelegate::GetIconId() const { ...@@ -326,12 +326,10 @@ int SessionCrashedInfoBarDelegate::GetIconId() const {
web::WebState::CreateParams params(_browserState); web::WebState::CreateParams params(_browserState);
for (CRWSessionStorage* session in sessions) { for (CRWSessionStorage* session in sessions) {
std::unique_ptr<web::WebState> webState = auto live_tab = std::make_unique<sessions::RestoreIOSLiveTab>(session);
web::WebState::CreateWithStorageSession(params, session);
// Add all tabs at the 0 position as the position is relative to an old // Add all tabs at the 0 position as the position is relative to an old
// tabModel. // tabModel.
tabRestoreService->CreateHistoricalTab( tabRestoreService->CreateHistoricalTab(live_tab.get(), 0);
sessions::IOSLiveTab::GetForWebState(webState.get()), 0);
} }
return; return;
} }
......
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