// 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/crw_navigation_item_holder.h"

#import <objc/runtime.h>

#import "ios/web/navigation/navigation_item_impl.h"

#if !defined(__has_feature) || !__has_feature(objc_arc)
#error "This file requires ARC support."
#endif

// The address of this static variable is used to set and get the associated
// NavigationItemImpl object from a WKBackForwardListItem.
const void* kNavigationItemKey = &kNavigationItemKey;

@implementation CRWNavigationItemHolder {
  std::unique_ptr<web::NavigationItemImpl> _navigationItem;
}

+ (instancetype)holderForBackForwardListItem:(WKBackForwardListItem*)item {
  DCHECK(item);
  CRWNavigationItemHolder* holder =
      objc_getAssociatedObject(item, &kNavigationItemKey);
  if (!holder) {
    holder = [[CRWNavigationItemHolder alloc] initWithBackForwardListItem:item];
  }
  return holder;
}

- (instancetype)initWithBackForwardListItem:(WKBackForwardListItem*)item {
  self = [super init];
  if (self) {
    objc_setAssociatedObject(item, &kNavigationItemKey, self,
                             OBJC_ASSOCIATION_RETAIN);
  }
  return self;
}

- (web::NavigationItemImpl*)navigationItem {
  return _navigationItem.get();
}

- (void)setNavigationItem:
    (std::unique_ptr<web::NavigationItemImpl>)navigationItem {
  _navigationItem = std::move(navigationItem);
}

@end
