blob: f003e73c158e93e90f2e1489c5a9431f85d7af84 [file] [log] [blame]
// 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.
#include "ios/web_view/internal/web_view_global_state_util.h"
#import <UIKit/UIKit.h>
#include <memory>
#include "ios/web/public/init/web_main.h"
#import "ios/web_view/internal/web_view_web_client.h"
#import "ios/web_view/internal/web_view_web_main_delegate.h"
#import "testing/coverage_util_ios.h"
#if !defined(__has_feature) || !__has_feature(objc_arc)
#error "This file requires ARC support."
#endif
namespace ios_web_view {
void InitializeGlobalState() {
static std::unique_ptr<ios_web_view::WebViewWebClient> web_client;
static std::unique_ptr<ios_web_view::WebViewWebMainDelegate>
web_main_delegate;
static std::unique_ptr<web::WebMain> web_main;
static dispatch_once_t once_token;
dispatch_once(&once_token, ^{
// This is for generating coverage data for tests only.
coverage_util::ConfigureCoverageReportPath();
web_client = std::make_unique<ios_web_view::WebViewWebClient>();
web::SetWebClient(web_client.get());
web_main_delegate =
std::make_unique<ios_web_view::WebViewWebMainDelegate>();
web::WebMainParams params(web_main_delegate.get());
web_main = std::make_unique<web::WebMain>(std::move(params));
[NSNotificationCenter.defaultCenter
addObserverForName:UIApplicationWillTerminateNotification
object:nil
queue:nil
usingBlock:^(NSNotification* _Nonnull note) {
// These global variables should be destructed when the app is
// about to terminate, and in reverse order to construction.
web_main.reset();
web_main_delegate.reset();
web_client.reset();
}];
});
}
} // namespace ios_web_view