123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- // Copyright 2017 The Chromium Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style license that can be
- // found in the LICENSE file.
- #import "ios/web/navigation/serializable_user_data_manager_impl.h"
- #import "base/mac/foundation_util.h"
- #import "ios/web/public/web_state.h"
- #import "ios/web/session/crw_session_user_data.h"
- #if !defined(__has_feature) || !__has_feature(objc_arc)
- #error "This file requires ARC support."
- #endif
- namespace web {
- namespace {
- // The key under which SerializableUserDataManagerWrapper are stored in the
- // WebState's user data.
- const void* const kSerializableUserDataManagerKey =
- &kSerializableUserDataManagerKey;
- // Wrapper class used to associate SerializableUserDataManagerImpls with its
- // associated WebState.
- class SerializableUserDataManagerWrapper : public base::SupportsUserData::Data {
- public:
- // Returns the SerializableUserDataManagerWrapper associated with |web_state|,
- // creating one if necessary.
- static SerializableUserDataManagerWrapper* FromWebState(WebState* web_state) {
- DCHECK(web_state);
- SerializableUserDataManagerWrapper* wrapper =
- static_cast<SerializableUserDataManagerWrapper*>(
- web_state->GetUserData(kSerializableUserDataManagerKey));
- if (wrapper)
- return wrapper;
- web_state->SetUserData(
- kSerializableUserDataManagerKey,
- std::make_unique<SerializableUserDataManagerWrapper>());
- return static_cast<SerializableUserDataManagerWrapper*>(
- web_state->GetUserData(kSerializableUserDataManagerKey));
- }
- static const SerializableUserDataManagerWrapper* FromWebState(
- const WebState* web_state) {
- DCHECK(web_state);
- const SerializableUserDataManagerWrapper* wrapper =
- static_cast<const SerializableUserDataManagerWrapper*>(
- web_state->GetUserData(kSerializableUserDataManagerKey));
- return wrapper;
- }
- // Returns the manager owned by this wrapper.
- SerializableUserDataManagerImpl* manager() { return &manager_; }
- const SerializableUserDataManagerImpl* manager() const { return &manager_; }
- private:
- // The SerializableUserDataManagerWrapper owned by this object.
- SerializableUserDataManagerImpl manager_;
- };
- } // namespace
- // static
- SerializableUserDataManager* SerializableUserDataManager::FromWebState(
- WebState* web_state) {
- DCHECK(web_state);
- return SerializableUserDataManagerWrapper::FromWebState(web_state)->manager();
- }
- // static
- const SerializableUserDataManager* SerializableUserDataManager::FromWebState(
- const WebState* web_state) {
- DCHECK(web_state);
- const SerializableUserDataManagerWrapper* wrapper =
- SerializableUserDataManagerWrapper::FromWebState(web_state);
- return wrapper ? wrapper->manager() : nullptr;
- }
- SerializableUserDataManagerImpl::SerializableUserDataManagerImpl()
- : data_([[CRWSessionUserData alloc] init]) {}
- SerializableUserDataManagerImpl::~SerializableUserDataManagerImpl() {}
- void SerializableUserDataManagerImpl::AddSerializableData(id<NSCoding> data,
- NSString* key) {
- DCHECK(data);
- DCHECK(key.length);
- [data_ setObject:data forKey:key];
- }
- id<NSCoding> SerializableUserDataManagerImpl::GetValueForSerializationKey(
- NSString* key) {
- return [data_ objectForKey:key];
- }
- CRWSessionUserData* SerializableUserDataManagerImpl::GetUserDataForSession()
- const {
- return data_;
- }
- void SerializableUserDataManagerImpl::SetUserDataFromSession(
- CRWSessionUserData* data) {
- if (data) {
- data_ = data;
- } else {
- data = [[CRWSessionUserData alloc] init];
- }
- }
- } // namespace web
|