// 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_view/internal/web_view_early_page_script_provider.h"

#import <Foundation/Foundation.h>

#include "ios/web/public/browser_state.h"
#include "ios/web/public/web_thread.h"

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

namespace ios_web_view {

namespace {
// A key used to associate a WebViewEarlyPageScriptProvider with a BrowserState.
const char kWebViewEarlyPageScriptProviderKeyName[] =
    "web_view_early_page_script_provider";

}  // namespace

// static
WebViewEarlyPageScriptProvider&
WebViewEarlyPageScriptProvider::FromBrowserState(
    web::BrowserState* _Nonnull browser_state) {
  DCHECK_CURRENTLY_ON(web::WebThread::UI);
  DCHECK(browser_state);
  if (!browser_state->GetUserData(kWebViewEarlyPageScriptProviderKeyName)) {
    browser_state->SetUserData(kWebViewEarlyPageScriptProviderKeyName,
                               std::unique_ptr<WebViewEarlyPageScriptProvider>(
                                   new WebViewEarlyPageScriptProvider()));
  }
  return *(static_cast<WebViewEarlyPageScriptProvider*>(
      browser_state->GetUserData(kWebViewEarlyPageScriptProviderKeyName)));
}

WebViewEarlyPageScriptProvider::~WebViewEarlyPageScriptProvider() = default;

void WebViewEarlyPageScriptProvider::SetScript(NSString* _Nonnull script) {
  script_ = [script copy];
}

WebViewEarlyPageScriptProvider::WebViewEarlyPageScriptProvider()
    : script_([[NSString alloc] init]) {}

}  // namespace ios_web_view
