Commit d2672dc0 authored by Kurt Horimoto's avatar Kurt Horimoto Committed by Commit Bot

[iOS] Add JavaScript prompt overlay UI classes.

This CL adds the classes to support showing JS prompts via
OverlayPresenter, and adds the prompt coordinator to the
OverlayModality::kWebContentArea supported classes list.

Bug: 941745
Change-Id: I15743a8489d59cd3667812667f51abe2561af1af
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1639030
Commit-Queue: Kurt Horimoto <kkhorimoto@chromium.org>
Reviewed-by: default avatarEugene But <eugenebut@chromium.org>
Cr-Commit-Position: refs/heads/master@{#667317}
parent ea475de0
...@@ -17,5 +17,6 @@ source_set("web_content_area") { ...@@ -17,5 +17,6 @@ source_set("web_content_area") {
"//ios/chrome/browser/ui/overlays:coordinators", "//ios/chrome/browser/ui/overlays:coordinators",
"//ios/chrome/browser/ui/overlays/web_content_area/java_script_dialogs:alerts", "//ios/chrome/browser/ui/overlays/web_content_area/java_script_dialogs:alerts",
"//ios/chrome/browser/ui/overlays/web_content_area/java_script_dialogs:confirmations", "//ios/chrome/browser/ui/overlays/web_content_area/java_script_dialogs:confirmations",
"//ios/chrome/browser/ui/overlays/web_content_area/java_script_dialogs:prompts",
] ]
} }
...@@ -76,6 +76,30 @@ source_set("confirmations") { ...@@ -76,6 +76,30 @@ source_set("confirmations") {
] ]
} }
source_set("prompts") {
sources = [
"java_script_prompt_overlay_coordinator.h",
"java_script_prompt_overlay_coordinator.mm",
"java_script_prompt_overlay_mediator.h",
"java_script_prompt_overlay_mediator.mm",
]
configs += [ "//build/config/compiler:enable_arc" ]
deps = [
":common",
"//base",
"//components/strings:components_strings_grit",
"//ios/chrome/app/strings:ios_strings_grit",
"//ios/chrome/browser/overlays",
"//ios/chrome/browser/overlays/public/web_content_area",
"//ios/chrome/browser/ui/alert_view_controller",
"//ios/chrome/browser/ui/elements",
"//ios/chrome/browser/ui/overlays:coordinators",
"//ui/base",
]
}
source_set("unit_tests") { source_set("unit_tests") {
testonly = true testonly = true
sources = [ sources = [
...@@ -84,6 +108,8 @@ source_set("unit_tests") { ...@@ -84,6 +108,8 @@ source_set("unit_tests") {
"java_script_confirmation_overlay_coordinator_unittest.mm", "java_script_confirmation_overlay_coordinator_unittest.mm",
"java_script_confirmation_overlay_mediator_unittest.mm", "java_script_confirmation_overlay_mediator_unittest.mm",
"java_script_dialog_overlay_mediator_unittest.mm", "java_script_dialog_overlay_mediator_unittest.mm",
"java_script_prompt_overlay_coordinator_unittest.mm",
"java_script_prompt_overlay_mediator_unittest.mm",
] ]
configs += [ "//build/config/compiler:enable_arc" ] configs += [ "//build/config/compiler:enable_arc" ]
...@@ -92,6 +118,7 @@ source_set("unit_tests") { ...@@ -92,6 +118,7 @@ source_set("unit_tests") {
":alerts", ":alerts",
":common", ":common",
":confirmations", ":confirmations",
":prompts",
"//base/test:test_support", "//base/test:test_support",
"//components/strings:components_strings_grit", "//components/strings:components_strings_grit",
"//components/url_formatter", "//components/url_formatter",
...@@ -101,6 +128,7 @@ source_set("unit_tests") { ...@@ -101,6 +128,7 @@ source_set("unit_tests") {
"//ios/chrome/browser/overlays/test", "//ios/chrome/browser/overlays/test",
"//ios/chrome/browser/ui/alert_view_controller", "//ios/chrome/browser/ui/alert_view_controller",
"//ios/chrome/browser/ui/alert_view_controller/test", "//ios/chrome/browser/ui/alert_view_controller/test",
"//ios/chrome/browser/ui/elements",
"//ios/chrome/browser/ui/overlays/test", "//ios/chrome/browser/ui/overlays/test",
"//ios/chrome/browser/ui/overlays/web_content_area/java_script_dialogs/test", "//ios/chrome/browser/ui/overlays/web_content_area/java_script_dialogs/test",
"//ios/web/public", "//ios/web/public",
......
// Copyright 2019 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.
#ifndef IOS_CHROME_BROWSER_UI_OVERLAYS_WEB_CONTENT_AREA_JAVA_SCRIPT_DIALOGS_JAVA_SCRIPT_PROMPT_OVERLAY_COORDINATOR_H_
#define IOS_CHROME_BROWSER_UI_OVERLAYS_WEB_CONTENT_AREA_JAVA_SCRIPT_DIALOGS_JAVA_SCRIPT_PROMPT_OVERLAY_COORDINATOR_H_
#import "ios/chrome/browser/ui/overlays/web_content_area/java_script_dialogs/java_script_dialog_overlay_coordinator.h"
// An OverlayCoordinator that displays the UI for JavaScript prompts.
@interface JavaScriptPromptOverlayCoordinator
: JavaScriptDialogOverlayCoordinator
@end
#endif // IOS_CHROME_BROWSER_UI_OVERLAYS_WEB_CONTENT_AREA_JAVA_SCRIPT_DIALOGS_JAVA_SCRIPT_PROMPT_OVERLAY_COORDINATOR_H_
// Copyright 2019 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/chrome/browser/ui/overlays/web_content_area/java_script_dialogs/java_script_prompt_overlay_coordinator.h"
#import "ios/chrome/browser/overlays/public/overlay_request.h"
#import "ios/chrome/browser/overlays/public/web_content_area/java_script_prompt_overlay.h"
#import "ios/chrome/browser/ui/alert_view_controller/alert_view_controller.h"
#import "ios/chrome/browser/ui/overlays/web_content_area/java_script_dialogs/java_script_dialog_overlay_coordinator+subclassing.h"
#import "ios/chrome/browser/ui/overlays/web_content_area/java_script_dialogs/java_script_prompt_overlay_mediator.h"
#if !defined(__has_feature) || !__has_feature(objc_arc)
#error "This file requires ARC support."
#endif
@interface JavaScriptPromptOverlayCoordinator () <
JavaScriptPromptOverlayMediatorDataSource>
// Returns the prompt configuration from the OverlayRequest.
@property(nonatomic, readonly)
JavaScriptPromptOverlayRequestConfig* promptConfig;
@end
@implementation JavaScriptPromptOverlayCoordinator
#pragma mark - OverlayCoordinator
+ (BOOL)supportsRequest:(OverlayRequest*)request {
return !!request->GetConfig<JavaScriptPromptOverlayRequestConfig>();
}
#pragma mark - JavaScriptPromptOverlayMediatorDataSource
- (NSString*)promptInputForMediator:(JavaScriptPromptOverlayMediator*)mediator {
return self.alertViewController.textFieldResults.firstObject;
}
@end
@implementation JavaScriptPromptOverlayCoordinator (Subclassing)
- (JavaScriptDialogOverlayMediator*)newMediator {
JavaScriptPromptOverlayMediator* mediator =
[[JavaScriptPromptOverlayMediator alloc] initWithRequest:self.request];
mediator.dataSource = self;
return mediator;
}
@end
// Copyright 2019 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/chrome/browser/ui/overlays/web_content_area/java_script_dialogs/java_script_prompt_overlay_coordinator.h"
#import "base/test/ios/wait_util.h"
#import "ios/chrome/browser/overlays/public/overlay_request.h"
#import "ios/chrome/browser/overlays/public/web_content_area/java_script_prompt_overlay.h"
#import "ios/chrome/browser/ui/overlays/web_content_area/java_script_dialogs/test/java_script_dialog_overlay_coordinator_test.h"
#if !defined(__has_feature) || !__has_feature(objc_arc)
#error "This file requires ARC support."
#endif
using base::test::ios::kWaitForUIElementTimeout;
using base::test::ios::WaitUntilConditionOrTimeout;
// Test fixture for JavaScriptPromptOverlayCoordinator.
using JavaScriptPromptOverlayCoordinatorTest =
JavaScriptDialogOverlayCoordinatorTest;
// Tests that JavaScriptPromptOverlayCoordinator creates an alert and
// presents it non-modally.
TEST_F(JavaScriptPromptOverlayCoordinatorTest, StartAndStop) {
std::unique_ptr<OverlayRequest> passed_request =
OverlayRequest::CreateWithConfig<JavaScriptPromptOverlayRequestConfig>(
GURL("https://chromium.test"), /*is_main_frame=*/true, "Message Text",
"Default Prompt Value");
OverlayRequest* request = passed_request.get();
SetRequest(std::move(passed_request));
// Start the coordinator and verify that the alert is shown.
StartDialogCoordinator();
__weak UIViewController* prompt = GetAlertViewController();
EXPECT_TRUE(WaitUntilConditionOrTimeout(kWaitForUIElementTimeout, ^bool {
return !!prompt.presentingViewController && !prompt.isBeingPresented;
}));
// Stop the coordinator and verify that the alert is dismissed and that the
// dismissal delegate is notified.
StopDialogCoordinator();
EXPECT_TRUE(WaitUntilConditionOrTimeout(kWaitForUIElementTimeout, ^bool {
return !prompt.presentingViewController;
}));
EXPECT_TRUE(dismissal_delegate().HasUIBeenDismissed(request));
}
// Copyright 2019 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.
#ifndef IOS_CHROME_BROWSER_UI_OVERLAYS_WEB_CONTENT_AREA_JAVA_SCRIPT_DIALOGS_JAVA_SCRIPT_PROMPT_OVERLAY_MEDIATOR_H_
#define IOS_CHROME_BROWSER_UI_OVERLAYS_WEB_CONTENT_AREA_JAVA_SCRIPT_DIALOGS_JAVA_SCRIPT_PROMPT_OVERLAY_MEDIATOR_H_
#import "ios/chrome/browser/ui/overlays/web_content_area/java_script_dialogs/java_script_dialog_overlay_mediator.h"
class JavaScriptPromptOverlayRequestConfig;
@protocol JavaScriptPromptOverlayMediatorDataSource;
// The accessibility ID for prompt's text field.
extern NSString* const kJavaScriptPromptTextFieldAccessibiltyIdentifier;
// Mediator object that uses a JavaScriptPromptOverlayRequestConfig to set
// up the UI for a JavaScript prompt overlay.
@interface JavaScriptPromptOverlayMediator : JavaScriptDialogOverlayMediator
// The datasource for prompt input values.
@property(nonatomic, weak) id<JavaScriptPromptOverlayMediatorDataSource>
dataSource;
@end
// Protocol used to provide the text input from the prompt UI to the mediator.
@protocol JavaScriptPromptOverlayMediatorDataSource <NSObject>
// Returns the input value for the prompt UI set up by |mediator|.
- (NSString*)promptInputForMediator:(JavaScriptPromptOverlayMediator*)mediator;
@end
#endif // IOS_CHROME_BROWSER_UI_OVERLAYS_WEB_CONTENT_AREA_JAVA_SCRIPT_DIALOGS_JAVA_SCRIPT_PROMPT_OVERLAY_MEDIATOR_H_
// Copyright 2019 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/chrome/browser/ui/overlays/web_content_area/java_script_dialogs/java_script_prompt_overlay_mediator.h"
#include "base/strings/sys_string_conversions.h"
#include "components/strings/grit/components_strings.h"
#import "ios/chrome/browser/overlays/public/overlay_request.h"
#import "ios/chrome/browser/overlays/public/overlay_response.h"
#import "ios/chrome/browser/overlays/public/web_content_area/java_script_prompt_overlay.h"
#import "ios/chrome/browser/ui/alert_view_controller/alert_action.h"
#import "ios/chrome/browser/ui/alert_view_controller/alert_view_controller.h"
#import "ios/chrome/browser/ui/elements/text_field_configuration.h"
#import "ios/chrome/browser/ui/overlays/overlay_ui_dismissal_delegate.h"
#import "ios/chrome/browser/ui/overlays/web_content_area/java_script_dialogs/java_script_dialog_overlay_coordinator+subclassing.h"
#import "ios/chrome/browser/ui/overlays/web_content_area/java_script_dialogs/java_script_dialog_overlay_mediator+subclassing.h"
#include "ios/chrome/grit/ios_strings.h"
#include "ui/base/l10n/l10n_util.h"
#if !defined(__has_feature) || !__has_feature(objc_arc)
#error "This file requires ARC support."
#endif
NSString* const kJavaScriptPromptTextFieldAccessibiltyIdentifier =
@"JavaScriptPromptTextFieldAccessibiltyIdentifier";
@interface JavaScriptPromptOverlayMediator ()
// The confirmation config.
@property(nonatomic, readonly) JavaScriptPromptOverlayRequestConfig* config;
@end
@implementation JavaScriptPromptOverlayMediator
#pragma mark - Accessors
- (JavaScriptPromptOverlayRequestConfig*)config {
return self.request->GetConfig<JavaScriptPromptOverlayRequestConfig>();
}
- (void)setConsumer:(id<AlertConsumer>)consumer {
if (self.consumer == consumer)
return;
[super setConsumer:consumer];
[self.consumer setMessage:base::SysUTF8ToNSString(self.config->message())];
__weak __typeof__(self) weakSelf = self;
[self.consumer setActions:@[
[AlertAction actionWithTitle:l10n_util::GetNSString(IDS_OK)
style:UIAlertActionStyleDefault
handler:^(AlertAction* action) {
__typeof__(self) strongSelf = weakSelf;
NSString* input = [strongSelf.dataSource
promptInputForMediator:strongSelf];
[strongSelf setPromptResponse:input ? input : @""];
[strongSelf.delegate
stopDialogForMediator:strongSelf];
}],
[AlertAction actionWithTitle:l10n_util::GetNSString(IDS_CANCEL)
style:UIAlertActionStyleCancel
handler:^(AlertAction* action) {
[weakSelf.delegate stopDialogForMediator:weakSelf];
}],
]];
NSString* defaultPromptValue =
base::SysUTF8ToNSString(self.config->default_prompt_value());
[self.consumer setTextFieldConfigurations:@[
[[TextFieldConfiguration alloc]
initWithText:defaultPromptValue
placeholder:nil
accessibilityIdentifier:kJavaScriptPromptTextFieldAccessibiltyIdentifier
secureTextEntry:NO]
]];
}
#pragma mark - Response helpers
// Sets the OverlayResponse using the user input from the prompt UI.
- (void)setPromptResponse:(NSString*)textInput {
self.request->set_response(
OverlayResponse::CreateWithInfo<JavaScriptPromptOverlayResponseInfo>(
base::SysNSStringToUTF8(textInput)));
}
@end
@implementation JavaScriptPromptOverlayMediator (Subclassing)
- (const JavaScriptDialogSource*)requestSource {
return &self.config->source();
}
@end
// Copyright 2019 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/chrome/browser/ui/overlays/web_content_area/java_script_dialogs/java_script_prompt_overlay_mediator.h"
#include "base/strings/sys_string_conversions.h"
#include "components/strings/grit/components_strings.h"
#include "components/url_formatter/elide_url.h"
#import "ios/chrome/browser/overlays/public/overlay_request.h"
#import "ios/chrome/browser/overlays/public/overlay_response.h"
#import "ios/chrome/browser/overlays/public/web_content_area/java_script_prompt_overlay.h"
#import "ios/chrome/browser/ui/alert_view_controller/alert_action.h"
#import "ios/chrome/browser/ui/alert_view_controller/test/fake_alert_consumer.h"
#import "ios/chrome/browser/ui/elements/text_field_configuration.h"
#import "ios/chrome/browser/ui/overlays/web_content_area/java_script_dialogs/java_script_dialog_overlay_mediator.h"
#import "ios/chrome/browser/ui/overlays/web_content_area/java_script_dialogs/test/java_script_dialog_overlay_mediator_test.h"
#include "ios/chrome/grit/ios_strings.h"
#include "testing/gtest_mac.h"
#include "ui/base/l10n/l10n_util.h"
#if !defined(__has_feature) || !__has_feature(objc_arc)
#error "This file requires ARC support."
#endif
namespace {
// User input string provided by FakePromptOverlayMediatorDataSource.
NSString* const kFakeUserInput = @"Fake User Input";
}
// Fake version of the mediator data source.
@interface FakePromptOverlayMediatorDataSource
: NSObject <JavaScriptPromptOverlayMediatorDataSource>
@property(nonatomic, copy) NSString* promptInput;
@end
@implementation FakePromptOverlayMediatorDataSource
- (NSString*)promptInputForMediator:(JavaScriptPromptOverlayMediator*)mediator {
return self.promptInput;
}
@end
class JavaScriptPromptOverlayMediatorTest
: public JavaScriptDialogOverlayMediatorTest {
public:
JavaScriptPromptOverlayMediatorTest()
: url_("https://chromium.test"),
message_("Message"),
default_prompt_value_("Default Prompt Value"),
data_source_([[FakePromptOverlayMediatorDataSource alloc] init]) {}
// Creates a mediator and sets it for testing.
void CreateMediator() {
request_ =
OverlayRequest::CreateWithConfig<JavaScriptPromptOverlayRequestConfig>(
url_, /*is_main_frame=*/true, message_, default_prompt_value_);
JavaScriptPromptOverlayMediator* mediator =
[[JavaScriptPromptOverlayMediator alloc]
initWithRequest:request_.get()];
mediator.dataSource = data_source_;
SetMediator(mediator);
}
const GURL& url() const { return url_; }
const std::string& message() const { return message_; }
const std::string& default_prompt_value() const {
return default_prompt_value_;
}
const OverlayRequest* request() const { return request_.get(); }
FakePromptOverlayMediatorDataSource* data_source() { return data_source_; }
private:
const GURL url_;
const std::string message_;
const std::string default_prompt_value_;
std::unique_ptr<OverlayRequest> request_;
FakePromptOverlayMediatorDataSource* data_source_ = nil;
};
// Tests that the consumer values are set correctly for main frame prompts.
TEST_F(JavaScriptPromptOverlayMediatorTest, PromptSetup) {
CreateMediator();
// Verify the consumer values.
EXPECT_NSEQ(base::SysUTF8ToNSString(message()), consumer().message);
ASSERT_EQ(1U, consumer().textFieldConfigurations.count);
EXPECT_NSEQ(base::SysUTF8ToNSString(default_prompt_value()),
consumer().textFieldConfigurations[0].text);
EXPECT_FALSE(!!consumer().textFieldConfigurations[0].placeholder);
EXPECT_NSEQ(kJavaScriptPromptTextFieldAccessibiltyIdentifier,
consumer().textFieldConfigurations[0].accessibilityIdentifier);
ASSERT_EQ(2U, consumer().actions.count);
EXPECT_EQ(UIAlertActionStyleDefault, consumer().actions[0].style);
EXPECT_NSEQ(l10n_util::GetNSString(IDS_OK), consumer().actions[0].title);
EXPECT_EQ(UIAlertActionStyleCancel, consumer().actions[1].style);
EXPECT_NSEQ(l10n_util::GetNSString(IDS_CANCEL), consumer().actions[1].title);
}
// Tests that the correct response is provided for the confirm action.
TEST_F(JavaScriptPromptOverlayMediatorTest, ConfirmResponse) {
data_source().promptInput = kFakeUserInput;
CreateMediator();
ASSERT_EQ(2U, consumer().actions.count);
ASSERT_FALSE(!!request()->response());
// Execute the confirm action and verify the response.
AlertAction* confirm_action = consumer().actions[0];
confirm_action.handler(confirm_action);
OverlayResponse* confirm_response = request()->response();
ASSERT_TRUE(!!confirm_response);
JavaScriptPromptOverlayResponseInfo* confirm_response_info =
confirm_response->GetInfo<JavaScriptPromptOverlayResponseInfo>();
ASSERT_TRUE(confirm_response_info);
EXPECT_NSEQ(kFakeUserInput,
base::SysUTF8ToNSString(confirm_response_info->text_input()));
}
// Tests that an empty string is provided in the response when the confirm
// action is executed and the datasource returns nil.
TEST_F(JavaScriptPromptOverlayMediatorTest, EmptyConfirmResponse) {
data_source().promptInput = nil;
CreateMediator();
ASSERT_EQ(2U, consumer().actions.count);
ASSERT_FALSE(!!request()->response());
// Execute the confirm action and verify the response.
AlertAction* confirm_action = consumer().actions[0];
confirm_action.handler(confirm_action);
OverlayResponse* confirm_response = request()->response();
ASSERT_TRUE(!!confirm_response);
JavaScriptPromptOverlayResponseInfo* confirm_response_info =
confirm_response->GetInfo<JavaScriptPromptOverlayResponseInfo>();
ASSERT_TRUE(confirm_response_info);
EXPECT_NSEQ(@"",
base::SysUTF8ToNSString(confirm_response_info->text_input()));
}
// Tests that the correct response is provided for the cancel action.
TEST_F(JavaScriptPromptOverlayMediatorTest, CancelResponse) {
data_source().promptInput = kFakeUserInput;
CreateMediator();
ASSERT_EQ(2U, consumer().actions.count);
ASSERT_FALSE(!!request()->response());
// Execute the cancel action and verify that there is no response for
// cancelled prompts.
AlertAction* cancel_action = consumer().actions[1];
cancel_action.handler(cancel_action);
OverlayResponse* cancel_response = request()->response();
EXPECT_FALSE(!!cancel_response);
}
...@@ -27,6 +27,7 @@ source_set("test") { ...@@ -27,6 +27,7 @@ source_set("test") {
"//ios/chrome/browser/ui/overlays/web_content_area/java_script_dialogs:alerts", "//ios/chrome/browser/ui/overlays/web_content_area/java_script_dialogs:alerts",
"//ios/chrome/browser/ui/overlays/web_content_area/java_script_dialogs:common", "//ios/chrome/browser/ui/overlays/web_content_area/java_script_dialogs:common",
"//ios/chrome/browser/ui/overlays/web_content_area/java_script_dialogs:confirmations", "//ios/chrome/browser/ui/overlays/web_content_area/java_script_dialogs:confirmations",
"//ios/chrome/browser/ui/overlays/web_content_area/java_script_dialogs:prompts",
"//ios/chrome/browser/web_state_list", "//ios/chrome/browser/web_state_list",
"//ios/chrome/browser/web_state_list:test_support", "//ios/chrome/browser/web_state_list:test_support",
"//ios/chrome/test:test_support", "//ios/chrome/test:test_support",
......
...@@ -10,6 +10,7 @@ ...@@ -10,6 +10,7 @@
#import "ios/chrome/browser/ui/overlays/overlay_request_coordinator.h" #import "ios/chrome/browser/ui/overlays/overlay_request_coordinator.h"
#import "ios/chrome/browser/ui/overlays/web_content_area/java_script_dialogs/java_script_alert_overlay_coordinator.h" #import "ios/chrome/browser/ui/overlays/web_content_area/java_script_dialogs/java_script_alert_overlay_coordinator.h"
#import "ios/chrome/browser/ui/overlays/web_content_area/java_script_dialogs/java_script_confirmation_overlay_coordinator.h" #import "ios/chrome/browser/ui/overlays/web_content_area/java_script_dialogs/java_script_confirmation_overlay_coordinator.h"
#import "ios/chrome/browser/ui/overlays/web_content_area/java_script_dialogs/java_script_prompt_overlay_coordinator.h"
#if !defined(__has_feature) || !__has_feature(objc_arc) #if !defined(__has_feature) || !__has_feature(objc_arc)
#error "This file requires ARC support." #error "This file requires ARC support."
...@@ -39,7 +40,8 @@ void JavaScriptDialogOverlayCoordinatorTest::SetRequest( ...@@ -39,7 +40,8 @@ void JavaScriptDialogOverlayCoordinatorTest::SetRequest(
request_ = std::move(request); request_ = std::move(request);
NSArray<Class>* coordinator_classes = NSArray<Class>* coordinator_classes =
@ [[JavaScriptAlertOverlayCoordinator class], @ [[JavaScriptAlertOverlayCoordinator class],
[JavaScriptConfirmationOverlayCoordinator class]]; [JavaScriptConfirmationOverlayCoordinator class],
[JavaScriptPromptOverlayCoordinator class]];
OverlayRequestCoordinatorFactory* factory = OverlayRequestCoordinatorFactory* factory =
[[OverlayRequestCoordinatorFactory alloc] [[OverlayRequestCoordinatorFactory alloc]
initWithBrowser:browser_.get() initWithBrowser:browser_.get()
......
...@@ -6,6 +6,7 @@ ...@@ -6,6 +6,7 @@
#import "ios/chrome/browser/ui/overlays/web_content_area/java_script_dialogs/java_script_alert_overlay_coordinator.h" #import "ios/chrome/browser/ui/overlays/web_content_area/java_script_dialogs/java_script_alert_overlay_coordinator.h"
#import "ios/chrome/browser/ui/overlays/web_content_area/java_script_dialogs/java_script_confirmation_overlay_coordinator.h" #import "ios/chrome/browser/ui/overlays/web_content_area/java_script_dialogs/java_script_confirmation_overlay_coordinator.h"
#import "ios/chrome/browser/ui/overlays/web_content_area/java_script_dialogs/java_script_prompt_overlay_coordinator.h"
#if !defined(__has_feature) || !__has_feature(objc_arc) #if !defined(__has_feature) || !__has_feature(objc_arc)
#error "This file requires ARC support." #error "This file requires ARC support."
...@@ -16,7 +17,8 @@ namespace web_content_area { ...@@ -16,7 +17,8 @@ namespace web_content_area {
NSArray<Class>* GetSupportedOverlayCoordinatorClasses() { NSArray<Class>* GetSupportedOverlayCoordinatorClasses() {
// TODO(crbug.com/941745): Add more supported overlay coordinator classes. // TODO(crbug.com/941745): Add more supported overlay coordinator classes.
return @ [[JavaScriptAlertOverlayCoordinator class], return @ [[JavaScriptAlertOverlayCoordinator class],
[JavaScriptConfirmationOverlayCoordinator class]]; [JavaScriptConfirmationOverlayCoordinator class],
[JavaScriptPromptOverlayCoordinator class]];
} }
} // web_content_area } // web_content_area
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment