Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(91)

Side by Side Diff: ios/web/navigation/navigation_manager_storage_builder.mm

Issue 2687353003: Created SerializableUserDataManager. (Closed)
Patch Set: self review, added unittest Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #import "ios/web/navigation/navigation_manager_storage_builder.h"
6
7 #include "base/logging.h"
8 #include "base/mac/foundation_util.h"
9 #import "ios/web/navigation/crw_session_controller+private_constructors.h"
10 #import "ios/web/navigation/crw_session_controller.h"
11 #import "ios/web/navigation/crw_session_entry.h"
12 #import "ios/web/navigation/navigation_item_impl.h"
13 #import "ios/web/navigation/navigation_item_storage_builder.h"
14 #include "ios/web/navigation/navigation_manager_impl.h"
15 #import "ios/web/public/crw_navigation_manager_storage.h"
16
17 // CRWSessionController's readonly properties redefined as readwrite. These
18 // will be removed and NavigationManagerImpl's ivars will be written directly
19 // as this functionality moves from CRWSessionController to
20 // NavigationManagerImpl;
21 @interface CRWSessionController (ExposedForSerialization)
22 @property(nonatomic, readwrite, retain) NSString* tabId;
23 @property(nonatomic, readwrite, copy) NSString* openerId;
24 @property(nonatomic, readwrite, getter=isOpenedByDOM) BOOL openedByDOM;
25 @property(nonatomic, readwrite, assign) NSInteger openerNavigationIndex;
26 @property(nonatomic, readwrite, assign) NSInteger previousNavigationIndex;
27 @property(nonatomic, readwrite, retain)
28 CRWSessionCertificatePolicyManager* sessionCertificatePolicyManager;
29 @end
30
31 namespace web {
32
33 CRWNavigationManagerStorage* NavigationManagerStorageBuilder::BuildStorage(
34 NavigationManagerImpl* navigation_manager) const {
35 DCHECK(navigation_manager);
36 CRWNavigationManagerStorage* serialized_navigation_manager =
37 [[CRWNavigationManagerStorage alloc] init];
38 CRWSessionController* session_controller =
39 navigation_manager->GetSessionController();
40 serialized_navigation_manager.tabID = session_controller.tabId;
41 serialized_navigation_manager.openerID = session_controller.openerId;
42 serialized_navigation_manager.openedByDOM = session_controller.openedByDOM;
43 serialized_navigation_manager.openerNavigationIndex =
44 session_controller.openerNavigationIndex;
45 serialized_navigation_manager.windowName = session_controller.windowName;
46 serialized_navigation_manager.currentNavigationIndex =
47 session_controller.currentNavigationIndex;
48 serialized_navigation_manager.previousNavigationIndex =
49 session_controller.previousNavigationIndex;
50 serialized_navigation_manager.lastVisitedTimestamp =
51 session_controller.lastVisitedTimestamp;
52 serialized_navigation_manager.sessionCertificatePolicyManager =
53 session_controller.sessionCertificatePolicyManager;
54 NSMutableArray* item_storages = [[NSMutableArray alloc] init];
55 NavigationItemStorageBuilder item_storage_builder;
56 for (size_t index = 0; index < session_controller.items.size(); ++index) {
57 web::NavigationItemImpl* item = session_controller.items[index].get();
58 [item_storages addObject:item_storage_builder.BuildStorage(item)];
59 }
60 serialized_navigation_manager.itemStorages = item_storages;
61 return serialized_navigation_manager;
62 }
63
64 std::unique_ptr<NavigationManagerImpl>
65 NavigationManagerStorageBuilder::BuildNavigationManagerImpl(
66 CRWNavigationManagerStorage* navigation_manager_serialization) const {
67 DCHECK(navigation_manager_serialization);
68 NSArray* item_storages = navigation_manager_serialization.itemStorages;
69 web::ScopedNavigationItemList items(item_storages.count);
70 NavigationItemStorageBuilder item_storage_builder;
71 for (size_t index = 0; index < item_storages.count; ++index) {
72 std::unique_ptr<NavigationItemImpl> item_impl =
73 item_storage_builder.BuildNavigationItemImpl(item_storages[index]);
74 items[index] = std::move(item_impl);
75 }
76 NSUInteger current_index =
77 navigation_manager_serialization.currentNavigationIndex;
78 base::scoped_nsobject<CRWSessionController> session_controller(
79 [[CRWSessionController alloc] initWithNavigationItems:std::move(items)
80 currentIndex:current_index
81 browserState:nullptr]);
82 [session_controller setTabId:navigation_manager_serialization.tabID];
83 [session_controller setOpenerId:navigation_manager_serialization.openerID];
84 [session_controller
85 setOpenedByDOM:navigation_manager_serialization.openedByDOM];
86 [session_controller setOpenerNavigationIndex:navigation_manager_serialization
87 .openerNavigationIndex];
88 [session_controller
89 setWindowName:navigation_manager_serialization.windowName];
90 [session_controller
91 setPreviousNavigationIndex:navigation_manager_serialization
92 .previousNavigationIndex];
93 [session_controller setLastVisitedTimestamp:navigation_manager_serialization
94 .lastVisitedTimestamp];
95 [session_controller
96 setSessionCertificatePolicyManager:navigation_manager_serialization
97 .sessionCertificatePolicyManager];
98 std::unique_ptr<NavigationManagerImpl> navigation_manager(
99 new NavigationManagerImpl());
100 navigation_manager->SetSessionController(session_controller);
101 return navigation_manager;
102 }
103
104 } // namespace web
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698