Index: ios/web/navigation/navigation_manager_storage_builder.mm |
diff --git a/ios/web/navigation/navigation_manager_storage_builder.mm b/ios/web/navigation/navigation_manager_storage_builder.mm |
index 035f755b4cbd6b67ed68bb86a9899b2d02a3fcb2..33492bf63856e6165007ad6c477d7c0c04506e37 100644 |
--- a/ios/web/navigation/navigation_manager_storage_builder.mm |
+++ b/ios/web/navigation/navigation_manager_storage_builder.mm |
@@ -7,6 +7,7 @@ |
#include "base/logging.h" |
#include "base/mac/foundation_util.h" |
#import "ios/web/navigation/crw_session_controller.h" |
+#import "ios/web/navigation/crw_session_controller+private_constructors.h" |
#import "ios/web/navigation/crw_session_entry.h" |
#import "ios/web/navigation/navigation_item_impl.h" |
#import "ios/web/navigation/navigation_item_storage_builder.h" |
@@ -22,9 +23,7 @@ @interface CRWSessionController (ExposedForSerialization) |
@property(nonatomic, readwrite, copy) NSString* openerId; |
@property(nonatomic, readwrite, getter=isOpenedByDOM) BOOL openedByDOM; |
@property(nonatomic, readwrite, assign) NSInteger openerNavigationIndex; |
-@property(nonatomic, readwrite, assign) NSInteger currentNavigationIndex; |
@property(nonatomic, readwrite, assign) NSInteger previousNavigationIndex; |
-@property(nonatomic, readwrite, retain) NSArray* entries; |
@property(nonatomic, readwrite, retain) |
CRWSessionCertificatePolicyManager* sessionCertificatePolicyManager; |
@end |
@@ -55,9 +54,9 @@ @interface CRWSessionController (ExposedForSerialization) |
session_controller.sessionCertificatePolicyManager; |
NSMutableArray* entries = [[NSMutableArray alloc] init]; |
NavigationItemStorageBuilder item_storage_builder; |
- for (CRWSessionEntry* entry in session_controller.entries) { |
+ for (size_t index = 0; index < session_controller.items.size(); ++index) { |
[entries addObject:item_storage_builder.BuildSerialization( |
- entry.navigationItemImpl)]; |
+ session_controller.items[index].get())]; |
} |
serialized_navigation_manager.entries = entries; |
return serialized_navigation_manager; |
@@ -67,8 +66,20 @@ @interface CRWSessionController (ExposedForSerialization) |
NavigationManagerStorageBuilder::BuildNavigationManagerImpl( |
CRWNavigationManagerStorage* navigation_manager_serialization) const { |
DCHECK(navigation_manager_serialization); |
+ web::ScopedNavigationItemList items; |
+ NavigationItemStorageBuilder item_storage_builder; |
+ NSArray* item_storages = navigation_manager_serialization.entries; |
+ for (CRWNavigationItemStorage* item_storage in item_storages) { |
+ std::unique_ptr<NavigationItemImpl> item_impl = |
+ item_storage_builder.BuildNavigationItemImpl(item_storage); |
+ items.push_back(std::move(item_impl)); |
+ } |
+ NSUInteger currentIndex = |
+ navigation_manager_serialization.currentNavigationIndex; |
base::scoped_nsobject<CRWSessionController> session_controller( |
- [[CRWSessionController alloc] init]); |
+ [[CRWSessionController alloc] initWithNavigationItems:std::move(items) |
+ currentIndex:currentIndex |
+ browserState:nullptr]); |
[session_controller setTabId:navigation_manager_serialization.tabID]; |
[session_controller setOpenerId:navigation_manager_serialization.openerID]; |
[session_controller |
@@ -77,8 +88,6 @@ @interface CRWSessionController (ExposedForSerialization) |
.openerNavigationIndex]; |
[session_controller |
setWindowName:navigation_manager_serialization.windowName]; |
- [session_controller setCurrentNavigationIndex:navigation_manager_serialization |
- .currentNavigationIndex]; |
[session_controller |
setPreviousNavigationIndex:navigation_manager_serialization |
.previousNavigationIndex]; |
@@ -87,17 +96,6 @@ @interface CRWSessionController (ExposedForSerialization) |
[session_controller |
setSessionCertificatePolicyManager:navigation_manager_serialization |
.sessionCertificatePolicyManager]; |
- NavigationItemStorageBuilder item_storage_builder; |
- NSArray* item_storages = navigation_manager_serialization.entries; |
- NSMutableArray* entries = [[NSMutableArray alloc] init]; |
- for (CRWNavigationItemStorage* item_storage in item_storages) { |
- std::unique_ptr<NavigationItemImpl> item_impl = |
- item_storage_builder.BuildNavigationItemImpl(item_storage); |
- std::unique_ptr<NavigationItem> item(item_impl.release()); |
- [entries addObject:[[CRWSessionEntry alloc] |
- initWithNavigationItem:std::move(item)]]; |
- } |
- [session_controller setEntries:entries]; |
std::unique_ptr<NavigationManagerImpl> navigation_manager( |
new NavigationManagerImpl()); |
navigation_manager->SetSessionController(session_controller); |