| Index: ios/web_view/internal/cwv_user_content_controller.mm
|
| diff --git a/ios/web_view/internal/cwv_user_content_controller.mm b/ios/web_view/internal/cwv_user_content_controller.mm
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..6533c97ca232cb861fb1fd89fbd35893c4227c33
|
| --- /dev/null
|
| +++ b/ios/web_view/internal/cwv_user_content_controller.mm
|
| @@ -0,0 +1,64 @@
|
| +// 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/public/cwv_user_content_controller.h"
|
| +#import "ios/web_view/internal/cwv_user_content_controller_internal.h"
|
| +
|
| +#import "ios/web_view/internal/cwv_web_view_configuration_internal.h"
|
| +#include "ios/web_view/internal/web_view_browser_state.h"
|
| +#import "ios/web_view/internal/web_view_early_page_script_provider.h"
|
| +#import "ios/web_view/public/cwv_user_script.h"
|
| +
|
| +@interface CWVUserContentController ()
|
| +@property(weak, nonatomic) CWVWebViewConfiguration* configuration;
|
| +@end
|
| +
|
| +@implementation CWVUserContentController {
|
| + NSMutableArray<CWVUserScript*>* _userScripts;
|
| +}
|
| +
|
| +@synthesize configuration = _configuration;
|
| +
|
| +- (nullable instancetype)initWithConfiguration:
|
| + (nonnull __weak CWVWebViewConfiguration*)configuration {
|
| + self = [super init];
|
| + if (self) {
|
| + DCHECK(configuration);
|
| + _configuration = configuration;
|
| + _userScripts = [[NSMutableArray alloc] init];
|
| + }
|
| + return self;
|
| +}
|
| +
|
| +- (void)addUserScript:(nonnull CWVUserScript*)userScript {
|
| + DCHECK(userScript);
|
| + [_userScripts addObject:userScript];
|
| + [self updateEarlyPageScript];
|
| +}
|
| +
|
| +- (void)removeAllUserScripts {
|
| + [_userScripts removeAllObjects];
|
| + [self updateEarlyPageScript];
|
| +}
|
| +
|
| +- (nonnull NSArray<CWVUserScript*>*)userScripts {
|
| + return _userScripts;
|
| +}
|
| +
|
| +// Updates the early page script associated with the BrowserState with the
|
| +// content of _userScripts.
|
| +- (void)updateEarlyPageScript {
|
| + NSMutableString* joinedScript = [[NSMutableString alloc] init];
|
| + for (CWVUserScript* script in _userScripts) {
|
| + [joinedScript appendString:script.source];
|
| + // Inserts "\n" between scripts to make it safer to join multiple scripts,
|
| + // in case the first script doesn't end with ";" or "\n".
|
| + [joinedScript appendString:@"\n"];
|
| + }
|
| + ios_web_view::WebViewEarlyPageScriptProvider::FromBrowserState(
|
| + _configuration.browserState)
|
| + .SetScript(joinedScript);
|
| +}
|
| +
|
| +@end
|
|
|