OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #import "ios/web/navigation/session_storage_builder.h" | 5 #import "ios/web/navigation/session_storage_builder.h" |
6 | 6 |
7 #include "base/logging.h" | 7 #include "base/logging.h" |
8 #include "base/mac/foundation_util.h" | 8 #include "base/mac/foundation_util.h" |
9 #import "ios/web/navigation/crw_session_controller+private_constructors.h" | 9 #import "ios/web/navigation/crw_session_controller+private_constructors.h" |
10 #import "ios/web/navigation/crw_session_controller.h" | 10 #import "ios/web/navigation/crw_session_controller.h" |
11 #import "ios/web/navigation/navigation_item_impl.h" | 11 #import "ios/web/navigation/navigation_item_impl.h" |
12 #import "ios/web/navigation/navigation_item_storage_builder.h" | 12 #import "ios/web/navigation/navigation_item_storage_builder.h" |
13 #include "ios/web/navigation/navigation_manager_impl.h" | 13 #include "ios/web/navigation/navigation_manager_impl.h" |
14 #import "ios/web/public/crw_session_storage.h" | 14 #import "ios/web/public/crw_session_storage.h" |
15 #import "ios/web/public/serializable_user_data_manager.h" | 15 #import "ios/web/public/serializable_user_data_manager.h" |
16 #import "ios/web/web_state/web_state_impl.h" | 16 #import "ios/web/web_state/web_state_impl.h" |
17 | 17 |
18 // CRWSessionController's readonly properties redefined as readwrite. These | 18 // CRWSessionController's readonly properties redefined as readwrite. These |
19 // will be removed and NavigationManagerImpl's ivars will be written directly | 19 // will be removed and NavigationManagerImpl's ivars will be written directly |
20 // as this functionality moves from CRWSessionController to | 20 // as this functionality moves from CRWSessionController to |
21 // NavigationManagerImpl; | 21 // NavigationManagerImpl; |
22 @interface CRWSessionController (ExposedForSerialization) | 22 @interface CRWSessionController (ExposedForSerialization) |
23 @property(nonatomic, readwrite, getter=isOpenedByDOM) BOOL openedByDOM; | |
24 @property(nonatomic, readwrite, assign) NSInteger previousNavigationIndex; | 23 @property(nonatomic, readwrite, assign) NSInteger previousNavigationIndex; |
25 @property(nonatomic, readwrite, retain) | 24 @property(nonatomic, readwrite, retain) |
26 CRWSessionCertificatePolicyManager* sessionCertificatePolicyManager; | 25 CRWSessionCertificatePolicyManager* sessionCertificatePolicyManager; |
27 @end | 26 @end |
28 | 27 |
29 namespace web { | 28 namespace web { |
30 | 29 |
31 CRWSessionStorage* SessionStorageBuilder::BuildStorage( | 30 CRWSessionStorage* SessionStorageBuilder::BuildStorage( |
32 WebStateImpl* web_state) const { | 31 WebStateImpl* web_state) const { |
33 DCHECK(web_state); | 32 DCHECK(web_state); |
34 web::NavigationManagerImpl* navigation_manager = | 33 web::NavigationManagerImpl* navigation_manager = |
35 web_state->navigation_manager_.get(); | 34 web_state->navigation_manager_.get(); |
36 DCHECK(navigation_manager); | 35 DCHECK(navigation_manager); |
37 CRWSessionStorage* serialized_navigation_manager = | 36 CRWSessionStorage* session_storage = [[CRWSessionStorage alloc] init]; |
38 [[CRWSessionStorage alloc] init]; | 37 session_storage.hasOpener = web_state->HasOpener(); |
39 CRWSessionController* session_controller = | 38 CRWSessionController* session_controller = |
40 navigation_manager->GetSessionController(); | 39 navigation_manager->GetSessionController(); |
41 serialized_navigation_manager.openedByDOM = session_controller.openedByDOM; | 40 session_storage.currentNavigationIndex = |
42 serialized_navigation_manager.currentNavigationIndex = | |
43 session_controller.currentNavigationIndex; | 41 session_controller.currentNavigationIndex; |
44 serialized_navigation_manager.previousNavigationIndex = | 42 session_storage.previousNavigationIndex = |
45 session_controller.previousNavigationIndex; | 43 session_controller.previousNavigationIndex; |
46 serialized_navigation_manager.sessionCertificatePolicyManager = | 44 session_storage.sessionCertificatePolicyManager = |
47 session_controller.sessionCertificatePolicyManager; | 45 session_controller.sessionCertificatePolicyManager; |
48 NSMutableArray* item_storages = [[NSMutableArray alloc] init]; | 46 NSMutableArray* item_storages = [[NSMutableArray alloc] init]; |
49 NavigationItemStorageBuilder item_storage_builder; | 47 NavigationItemStorageBuilder item_storage_builder; |
50 for (size_t index = 0; index < session_controller.items.size(); ++index) { | 48 for (size_t index = 0; index < session_controller.items.size(); ++index) { |
51 web::NavigationItemImpl* item = session_controller.items[index].get(); | 49 web::NavigationItemImpl* item = session_controller.items[index].get(); |
52 [item_storages addObject:item_storage_builder.BuildStorage(item)]; | 50 [item_storages addObject:item_storage_builder.BuildStorage(item)]; |
53 } | 51 } |
54 serialized_navigation_manager.itemStorages = item_storages; | 52 session_storage.itemStorages = item_storages; |
55 web::SerializableUserDataManager* user_data_manager = | 53 web::SerializableUserDataManager* user_data_manager = |
56 web::SerializableUserDataManager::FromWebState(web_state); | 54 web::SerializableUserDataManager::FromWebState(web_state); |
57 [serialized_navigation_manager | 55 [session_storage |
58 setSerializableUserData:user_data_manager->CreateSerializableUserData()]; | 56 setSerializableUserData:user_data_manager->CreateSerializableUserData()]; |
59 return serialized_navigation_manager; | 57 return session_storage; |
60 } | 58 } |
61 | 59 |
62 void SessionStorageBuilder::ExtractSessionState( | 60 void SessionStorageBuilder::ExtractSessionState( |
63 WebStateImpl* web_state, | 61 WebStateImpl* web_state, |
64 CRWSessionStorage* storage) const { | 62 CRWSessionStorage* storage) const { |
65 DCHECK(web_state); | 63 DCHECK(web_state); |
66 DCHECK(storage); | 64 DCHECK(storage); |
| 65 web_state->created_with_opener_ = storage.hasOpener; |
67 NSArray* item_storages = storage.itemStorages; | 66 NSArray* item_storages = storage.itemStorages; |
68 web::ScopedNavigationItemList items(item_storages.count); | 67 web::ScopedNavigationItemList items(item_storages.count); |
69 NavigationItemStorageBuilder item_storage_builder; | 68 NavigationItemStorageBuilder item_storage_builder; |
70 for (size_t index = 0; index < item_storages.count; ++index) { | 69 for (size_t index = 0; index < item_storages.count; ++index) { |
71 std::unique_ptr<NavigationItemImpl> item_impl = | 70 std::unique_ptr<NavigationItemImpl> item_impl = |
72 item_storage_builder.BuildNavigationItemImpl(item_storages[index]); | 71 item_storage_builder.BuildNavigationItemImpl(item_storages[index]); |
73 items[index] = std::move(item_impl); | 72 items[index] = std::move(item_impl); |
74 } | 73 } |
75 NSUInteger current_index = storage.currentNavigationIndex; | 74 NSUInteger current_index = storage.currentNavigationIndex; |
76 base::scoped_nsobject<CRWSessionController> session_controller( | 75 base::scoped_nsobject<CRWSessionController> session_controller( |
77 [[CRWSessionController alloc] initWithBrowserState:nullptr | 76 [[CRWSessionController alloc] initWithBrowserState:nullptr |
78 navigationItems:std::move(items) | 77 navigationItems:std::move(items) |
79 currentIndex:current_index]); | 78 currentIndex:current_index]); |
80 [session_controller setOpenedByDOM:storage.openedByDOM]; | |
81 [session_controller | 79 [session_controller |
82 setPreviousNavigationIndex:storage.previousNavigationIndex]; | 80 setPreviousNavigationIndex:storage.previousNavigationIndex]; |
83 [session_controller | 81 [session_controller |
84 setSessionCertificatePolicyManager:storage | 82 setSessionCertificatePolicyManager:storage |
85 .sessionCertificatePolicyManager]; | 83 .sessionCertificatePolicyManager]; |
86 web_state->navigation_manager_.reset(new NavigationManagerImpl()); | 84 web_state->navigation_manager_.reset(new NavigationManagerImpl()); |
87 web_state->navigation_manager_->SetSessionController(session_controller); | 85 web_state->navigation_manager_->SetSessionController(session_controller); |
88 web::SerializableUserDataManager::FromWebState(web_state) | 86 web::SerializableUserDataManager::FromWebState(web_state) |
89 ->AddSerializableUserData(storage.userData); | 87 ->AddSerializableUserData(storage.userData); |
90 } | 88 } |
91 | 89 |
92 } // namespace web | 90 } // namespace web |
OLD | NEW |