blob: e24120c1a1985f14fbb336f437ad0236e121a6bb [file] [log] [blame]
// Copyright 2014 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/public/cwv.h"
#include <memory>
#include "base/location.h"
#import "base/mac/bind_objc_block.h"
#include "base/memory/ptr_util.h"
#include "base/single_thread_task_runner.h"
#include "ios/web/public/app/web_main.h"
#include "ios/web/public/web_thread.h"
#import "ios/web_view/internal/web_view_web_main_delegate.h"
#import "ios/web_view/public/cwv_delegate.h"
#import "ios/web_view/public/cwv_web_view.h"
#import "ios/web_view/public/cwv_web_view_configuration.h"
#import "ios/web_view/public/cwv_website_data_store.h"
#if !defined(__has_feature) || !__has_feature(objc_arc)
#error "This file requires ARC support."
#endif
namespace {
CWV* g_criwv = nil;
}
@interface CWV () {
std::unique_ptr<ios_web_view::WebViewWebMainDelegate> _webMainDelegate;
std::unique_ptr<web::WebMain> _webMain;
}
@property(nonatomic, weak) id<CWVDelegate> delegate;
- (instancetype)initWithDelegate:(id<CWVDelegate>)delegate;
@end
@implementation CWV
@synthesize delegate = _delegate;
+ (void)configureWithDelegate:(id<CWVDelegate>)delegate {
g_criwv = [[CWV alloc] initWithDelegate:delegate];
}
+ (void)shutDown {
g_criwv = nil;
}
+ (CWVWebView*)webViewWithFrame:(CGRect)frame {
CWVWebViewConfiguration* configuration =
[[CWVWebViewConfiguration alloc] init];
configuration.websiteDataStore = [CWVWebsiteDataStore defaultDataStore];
return [[CWVWebView alloc] initWithFrame:frame configuration:configuration];
}
- (instancetype)initWithDelegate:(id<CWVDelegate>)delegate {
self = [super init];
if (self) {
_delegate = delegate;
_webMainDelegate =
base::MakeUnique<ios_web_view::WebViewWebMainDelegate>(_delegate);
web::WebMainParams params(_webMainDelegate.get());
_webMain = base::MakeUnique<web::WebMain>(params);
}
return self;
}
- (void)dealloc {
_webMain.reset();
_webMainDelegate.reset();
}
@end