Chromium Code Reviews| Index: ios/web/web_state/web_state_impl.mm |
| diff --git a/ios/web/web_state/web_state_impl.mm b/ios/web/web_state/web_state_impl.mm |
| index 17e4a547e043d5033101724aa4243cfe295b844e..07e59a926b5085fb9c17ad1f86cbde7fdacc6b13 100644 |
| --- a/ios/web/web_state/web_state_impl.mm |
| +++ b/ios/web/web_state/web_state_impl.mm |
| @@ -12,6 +12,7 @@ |
| #include "ios/web/net/request_group_util.h" |
| #include "ios/web/public/browser_state.h" |
| #include "ios/web/public/navigation_item.h" |
| +#include "ios/web/public/serialized_user_data_manager.h" |
| #include "ios/web/public/url_util.h" |
| #include "ios/web/public/web_client.h" |
| #include "ios/web/public/web_state/credential.h" |
| @@ -107,8 +108,19 @@ void WebStateImpl::SetFacadeDelegate(WebStateFacadeDelegate* facade_delegate) { |
| } |
| scoped_ptr<WebStateImpl> WebStateImpl::CopyForSerialization() const { |
| - return scoped_ptr<WebStateImpl>(new WebStateImpl( |
| + scoped_ptr<WebStateImpl> copy(new WebStateImpl( |
| GetBrowserState(), navigation_manager_->CopyForSerialization())); |
| + // Copy the serialized user data and detach the user data thread so the newly |
| + // created WebState can be serialized on another thread. |
| + WebStateImpl* non_const_this = const_cast<WebStateImpl*>(this); |
|
Eugene But (OOO till 7-30)
2015/09/24 21:39:25
This is a violation of API contract. This method p
|
| + SerializedUserDataManager* user_data_manager = |
| + SerializedUserDataManager::FromWebState(non_const_this); |
| + SerializedUserDataManager* copy_user_data_manager = |
| + SerializedUserDataManager::FromWebState(copy.get()); |
| + copy_user_data_manager->AddValuesFromDictionary( |
| + user_data_manager->GetSerializationDictionary()); |
| + copy->DetachUserDataThread(); |
| + return copy.Pass(); |
| } |
| void WebStateImpl::OnUrlHashChanged() { |