12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- // 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
|