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 78a37ed97dc8ad3102d8abc899854d3878c32b25..035f755b4cbd6b67ed68bb86a9899b2d02a3fcb2 100644 |
--- a/ios/web/navigation/navigation_manager_storage_builder.mm |
+++ b/ios/web/navigation/navigation_manager_storage_builder.mm |
@@ -8,6 +8,8 @@ |
#include "base/mac/foundation_util.h" |
#import "ios/web/navigation/crw_session_controller.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" |
#include "ios/web/navigation/navigation_manager_impl.h" |
#import "ios/web/public/crw_navigation_manager_storage.h" |
@@ -52,9 +54,11 @@ @interface CRWSessionController (ExposedForSerialization) |
serialized_navigation_manager.sessionCertificatePolicyManager = |
session_controller.sessionCertificatePolicyManager; |
NSMutableArray* entries = [[NSMutableArray alloc] init]; |
- // Perform a deep copy of the NavigationItems. |
- for (CRWSessionEntry* entry in session_controller.entries) |
- [entries addObject:[entry copy]]; |
+ NavigationItemStorageBuilder item_storage_builder; |
+ for (CRWSessionEntry* entry in session_controller.entries) { |
+ [entries addObject:item_storage_builder.BuildSerialization( |
+ entry.navigationItemImpl)]; |
+ } |
serialized_navigation_manager.entries = entries; |
return serialized_navigation_manager; |
} |
@@ -80,10 +84,20 @@ @interface CRWSessionController (ExposedForSerialization) |
.previousNavigationIndex]; |
[session_controller setLastVisitedTimestamp:navigation_manager_serialization |
.lastVisitedTimestamp]; |
- [session_controller setEntries:navigation_manager_serialization.entries]; |
[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); |