diff options
Diffstat (limited to 'chromium/chrome/browser/ui/webui/chromeos/add_supervision')
8 files changed, 356 insertions, 59 deletions
diff --git a/chromium/chrome/browser/ui/webui/chromeos/add_supervision/add_supervision_handler.cc b/chromium/chrome/browser/ui/webui/chromeos/add_supervision/add_supervision_handler.cc index e418a046414..626b2d4cc9a 100644 --- a/chromium/chrome/browser/ui/webui/chromeos/add_supervision/add_supervision_handler.cc +++ b/chromium/chrome/browser/ui/webui/chromeos/add_supervision/add_supervision_handler.cc @@ -11,12 +11,13 @@ #include "base/stl_util.h" #include "chrome/browser/apps/app_service/app_service_proxy.h" #include "chrome/browser/apps/app_service/app_service_proxy_factory.h" -#include "chrome/browser/chromeos/arc/arc_session_manager.h" +#include "chrome/browser/chromeos/arc/session/arc_session_manager.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/signin/identity_manager_factory.h" #include "chrome/browser/supervised_user/supervised_user_service.h" #include "chrome/browser/supervised_user/supervised_user_service_factory.h" #include "chrome/browser/ui/app_list/arc/arc_app_utils.h" +#include "chrome/browser/ui/webui/chromeos/add_supervision/add_supervision.mojom.h" #include "chrome/browser/ui/webui/chromeos/add_supervision/add_supervision_handler_utils.h" #include "chrome/browser/ui/webui/chromeos/add_supervision/add_supervision_metrics_recorder.h" #include "chrome/services/app_service/public/cpp/app_registry_cache.h" @@ -26,17 +27,20 @@ #include "components/user_manager/user_manager.h" #include "content/public/browser/web_ui.h" #include "google_apis/gaia/gaia_constants.h" +#include "mojo/public/cpp/bindings/pending_receiver.h" +#include "mojo/public/cpp/bindings/receiver.h" namespace chromeos { AddSupervisionHandler::AddSupervisionHandler( - add_supervision::mojom::AddSupervisionHandlerRequest request, + mojo::PendingReceiver<add_supervision::mojom::AddSupervisionHandler> + receiver, content::WebUI* web_ui, + signin::IdentityManager* identity_manager, Delegate* delegate) : web_ui_(web_ui), - identity_manager_( - IdentityManagerFactory::GetForProfile(Profile::FromWebUI(web_ui))), - binding_(this, std::move(request)), + identity_manager_(identity_manager), + receiver_(this, std::move(receiver)), delegate_(delegate) {} AddSupervisionHandler::~AddSupervisionHandler() = default; diff --git a/chromium/chrome/browser/ui/webui/chromeos/add_supervision/add_supervision_handler.h b/chromium/chrome/browser/ui/webui/chromeos/add_supervision/add_supervision_handler.h index 63db8d65ecd..8310d5bda98 100644 --- a/chromium/chrome/browser/ui/webui/chromeos/add_supervision/add_supervision_handler.h +++ b/chromium/chrome/browser/ui/webui/chromeos/add_supervision/add_supervision_handler.h @@ -9,7 +9,8 @@ #include "base/macros.h" #include "base/memory/weak_ptr.h" #include "chrome/browser/ui/webui/chromeos/add_supervision/add_supervision.mojom.h" -#include "mojo/public/cpp/bindings/binding.h" +#include "mojo/public/cpp/bindings/pending_receiver.h" +#include "mojo/public/cpp/bindings/receiver.h" namespace content { class WebUI; @@ -39,8 +40,10 @@ class AddSupervisionHandler // |delegate| is owned by the caller and its lifetime must outlive |this|. AddSupervisionHandler( - add_supervision::mojom::AddSupervisionHandlerRequest request, + mojo::PendingReceiver<add_supervision::mojom::AddSupervisionHandler> + receiver, content::WebUI* web_ui, + signin::IdentityManager* identity_manager, Delegate* delegate); ~AddSupervisionHandler() override; @@ -63,7 +66,7 @@ class AddSupervisionHandler signin::IdentityManager* identity_manager_; std::unique_ptr<signin::AccessTokenFetcher> oauth2_access_token_fetcher_; - mojo::Binding<add_supervision::mojom::AddSupervisionHandler> binding_; + mojo::Receiver<add_supervision::mojom::AddSupervisionHandler> receiver_; Delegate* delegate_; diff --git a/chromium/chrome/browser/ui/webui/chromeos/add_supervision/add_supervision_metrics_recorder_browsertest.cc b/chromium/chrome/browser/ui/webui/chromeos/add_supervision/add_supervision_metrics_recorder_browsertest.cc index 3071dacac19..72e41559d58 100644 --- a/chromium/chrome/browser/ui/webui/chromeos/add_supervision/add_supervision_metrics_recorder_browsertest.cc +++ b/chromium/chrome/browser/ui/webui/chromeos/add_supervision/add_supervision_metrics_recorder_browsertest.cc @@ -14,6 +14,7 @@ #include "chrome/browser/ui/webui/chromeos/add_supervision/add_supervision_ui.h" #include "chrome/test/base/in_process_browser_test.h" #include "chromeos/constants/chromeos_features.h" +#include "components/signin/public/identity_manager/identity_test_environment.h" #include "content/public/test/test_web_ui.h" namespace chromeos { @@ -55,10 +56,12 @@ class AddSupervisionMetricsRecorderTest : public InProcessBrowserTest { } void NotifySupervisionEnabled() { + signin::IdentityTestEnvironment identity_test_env; add_supervision::mojom::AddSupervisionHandlerRequest request; AddSupervisionUI add_supervision_ui(&test_web_ui_); AddSupervisionHandler add_supervision_handler( - std::move(request), &test_web_ui_, &add_supervision_ui); + std::move(request), &test_web_ui_, identity_test_env.identity_manager(), + &add_supervision_ui); add_supervision_handler.NotifySupervisionEnabled(); } diff --git a/chromium/chrome/browser/ui/webui/chromeos/add_supervision/add_supervision_ui.cc b/chromium/chrome/browser/ui/webui/chromeos/add_supervision/add_supervision_ui.cc index c0c3fb9b98f..6579db46102 100644 --- a/chromium/chrome/browser/ui/webui/chromeos/add_supervision/add_supervision_ui.cc +++ b/chromium/chrome/browser/ui/webui/chromeos/add_supervision/add_supervision_ui.cc @@ -12,7 +12,10 @@ #include "chrome/browser/browser_process.h" #include "chrome/browser/profiles/profile_manager.h" #include "chrome/browser/signin/identity_manager_factory.h" +#include "chrome/browser/supervised_user/supervised_user_service.h" +#include "chrome/browser/supervised_user/supervised_user_service_factory.h" #include "chrome/browser/ui/views/chrome_web_dialog_view.h" +#include "chrome/browser/ui/webui/chromeos/add_supervision/add_supervision.mojom.h" #include "chrome/browser/ui/webui/chromeos/add_supervision/add_supervision_handler_utils.h" #include "chrome/browser/ui/webui/chromeos/add_supervision/add_supervision_metrics_recorder.h" #include "chrome/browser/ui/webui/chromeos/add_supervision/confirm_signout_dialog.h" @@ -22,7 +25,7 @@ #include "components/google/core/common/google_util.h" #include "content/public/browser/web_ui.h" #include "content/public/browser/web_ui_data_source.h" -#include "mojo/public/cpp/bindings/binding.h" +#include "mojo/public/cpp/bindings/pending_receiver.h" #include "ui/base/resource/resource_bundle.h" #include "ui/resources/grit/ui_resources.h" #include "ui/web_dialogs/web_dialog_delegate.h" @@ -50,22 +53,6 @@ const char kAddSupervisionDefaultURL[] = const char kAddSupervisionFlowType[] = "1"; const char kAddSupervisionSwitch[] = "add-supervision-url"; -// Returns the URL of the Add Supervision flow from the command-line switch, -// or the default value if it's not defined. -GURL GetAddSupervisionURL() { - std::string url; - base::CommandLine* command_line = base::CommandLine::ForCurrentProcess(); - if (command_line->HasSwitch(kAddSupervisionSwitch)) { - url = command_line->GetSwitchValueASCII(kAddSupervisionSwitch); - } else { - url = kAddSupervisionDefaultURL; - } - const GURL result(url); - DCHECK(result.is_valid()) << "Invalid URL \"" << url << "\" for switch \"" - << kAddSupervisionSwitch << "\""; - return result; -} - } // namespace // AddSupervisionDialog implementations. @@ -144,6 +131,9 @@ AddSupervisionDialog::~AddSupervisionDialog() = default; // AddSupervisionUI implementations. +// static +signin::IdentityManager* AddSupervisionUI::test_identity_manager_ = nullptr; + AddSupervisionUI::AddSupervisionUI(content::WebUI* web_ui) : ui::MojoWebUIController(web_ui) { // Register the Mojo API handler. @@ -151,17 +141,47 @@ AddSupervisionUI::AddSupervisionUI(content::WebUI* web_ui) &AddSupervisionUI::BindAddSupervisionHandler, base::Unretained(this))); // Set up the basic page framework. - SetupResources(); + SetUpResources(); +} + +AddSupervisionUI::~AddSupervisionUI() = default; + +bool AddSupervisionUI::CloseDialog() { + bool showing_confirm_dialog = MaybeShowConfirmSignoutDialog(); + if (!showing_confirm_dialog) { + // We aren't showing the confirm dialog, so close the AddSupervisionDialog. + AddSupervisionDialog::Close(); + } + return !showing_confirm_dialog; +} + +// static +void AddSupervisionUI::SetUpForTest(signin::IdentityManager* identity_manager) { + test_identity_manager_ = identity_manager; } -void AddSupervisionUI::SetupResources() { +void AddSupervisionUI::BindAddSupervisionHandler( + mojo::PendingReceiver<add_supervision::mojom::AddSupervisionHandler> + receiver) { + signin::IdentityManager* identity_manager = + test_identity_manager_ + ? test_identity_manager_ + : IdentityManagerFactory::GetForProfile(Profile::FromWebUI(web_ui())); + + mojo_api_handler_ = std::make_unique<AddSupervisionHandler>( + std::move(receiver), web_ui(), identity_manager, this); +} + +void AddSupervisionUI::SetUpResources() { Profile* profile = Profile::FromWebUI(web_ui()); std::unique_ptr<content::WebUIDataSource> source( content::WebUIDataSource::Create(chrome::kChromeUIAddSupervisionHost)); // Initialize supervision URL from the command-line arguments (if provided). supervision_url_ = GetAddSupervisionURL(); - DCHECK(supervision_url_.DomainIs("google.com")); + if (!allow_non_google_url_for_tests_) { + DCHECK(supervision_url_.DomainIs("google.com")); + } // Forward data to the WebUI. source->AddResourcePath("post_message_api.js", @@ -201,21 +221,24 @@ void AddSupervisionUI::SetupResources() { content::WebUIDataSource::Add(profile, source.release()); } -AddSupervisionUI::~AddSupervisionUI() = default; - -bool AddSupervisionUI::CloseDialog() { - bool showing_confirm_dialog = MaybeShowConfirmSignoutDialog(); - if (!showing_confirm_dialog) { - // We aren't showing the confirm dialog, so close the AddSupervisionDialog. - AddSupervisionDialog::Close(); +// Returns the URL of the Add Supervision flow from the command-line switch, +// or the default value if it's not defined. +GURL AddSupervisionUI::GetAddSupervisionURL() { + std::string url; + base::CommandLine* command_line = base::CommandLine::ForCurrentProcess(); + if (command_line->HasSwitch(kAddSupervisionSwitch)) { + url = command_line->GetSwitchValueASCII(kAddSupervisionSwitch); + // The URL should only be set on the command line for testing purposes, + // which may include pointing to a non-google URL (i.e. http://localhost/). + // Therefore, we allow non-Google URLs in this instance. + allow_non_google_url_for_tests_ = true; + } else { + url = kAddSupervisionDefaultURL; } - return !showing_confirm_dialog; -} - -void AddSupervisionUI::BindAddSupervisionHandler( - add_supervision::mojom::AddSupervisionHandlerRequest request) { - mojo_api_handler_ = std::make_unique<AddSupervisionHandler>( - std::move(request), web_ui(), this); + const GURL result(url); + DCHECK(result.is_valid()) << "Invalid URL \"" << url << "\" for switch \"" + << kAddSupervisionSwitch << "\""; + return result; } } // namespace chromeos diff --git a/chromium/chrome/browser/ui/webui/chromeos/add_supervision/add_supervision_ui.h b/chromium/chrome/browser/ui/webui/chromeos/add_supervision/add_supervision_ui.h index 02afc8e1d8e..a05b13f8b31 100644 --- a/chromium/chrome/browser/ui/webui/chromeos/add_supervision/add_supervision_ui.h +++ b/chromium/chrome/browser/ui/webui/chromeos/add_supervision/add_supervision_ui.h @@ -11,6 +11,7 @@ #include "chrome/browser/ui/webui/chromeos/add_supervision/add_supervision.mojom.h" #include "chrome/browser/ui/webui/chromeos/add_supervision/add_supervision_handler.h" #include "chrome/browser/ui/webui/chromeos/system_web_dialog_delegate.h" +#include "mojo/public/cpp/bindings/pending_receiver.h" #include "ui/base/ui_base_types.h" #include "ui/gfx/native_widget_types.h" #include "ui/views/controls/label.h" @@ -64,16 +65,23 @@ class AddSupervisionUI : public ui::MojoWebUIController, // AddSupervisionHandler::Delegate: bool CloseDialog() override; + static void SetUpForTest(signin::IdentityManager* identity_manager); + private: void BindAddSupervisionHandler( - add_supervision::mojom::AddSupervisionHandlerRequest request); - void SetupResources(); + mojo::PendingReceiver<add_supervision::mojom::AddSupervisionHandler> + receiver); + void SetUpResources(); + GURL GetAddSupervisionURL(); std::unique_ptr<add_supervision::mojom::AddSupervisionHandler> mojo_api_handler_; GURL supervision_url_; + static signin::IdentityManager* test_identity_manager_; + bool allow_non_google_url_for_tests_ = false; + DISALLOW_COPY_AND_ASSIGN(AddSupervisionUI); }; diff --git a/chromium/chrome/browser/ui/webui/chromeos/add_supervision/add_supervision_ui_browsertest.cc b/chromium/chrome/browser/ui/webui/chromeos/add_supervision/add_supervision_ui_browsertest.cc new file mode 100644 index 00000000000..f0995d1b6d7 --- /dev/null +++ b/chromium/chrome/browser/ui/webui/chromeos/add_supervision/add_supervision_ui_browsertest.cc @@ -0,0 +1,242 @@ +// 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. + +#include <string> + +#include "base/macros.h" +#include "base/test/metrics/histogram_tester.h" +#include "base/test/metrics/user_action_tester.h" +#include "base/test/scoped_feature_list.h" +#include "chrome/browser/ui/browser.h" +#include "chrome/browser/ui/webui/chromeos/add_supervision/add_supervision_metrics_recorder.h" +#include "chrome/browser/ui/webui/chromeos/add_supervision/add_supervision_ui.h" +#include "chrome/browser/ui/webui/chromeos/add_supervision/confirm_signout_dialog.h" +#include "chrome/common/webui_url_constants.h" +#include "chrome/test/base/in_process_browser_test.h" +#include "chrome/test/base/ui_test_utils.h" +#include "chromeos/constants/chromeos_features.h" +#include "components/signin/public/identity_manager/identity_test_environment.h" +#include "content/public/browser/web_contents.h" +#include "content/public/test/browser_test_utils.h" +#include "content/public/test/network_connection_change_simulator.h" +#include "third_party/cros_system_api/dbus/service_constants.h" + +namespace chromeos { + +// NOTE: This test is flaky and therefore disabled under MSAN: +// https://crbug.com/1002560 +#if !defined(MEMORY_SANITIZER) + +namespace { + +const char kGetAddSupervisionUIElementJS[] = + "document.querySelector('add-supervision-ui')"; +} + +// Base class for AddSupervision tests. +class AddSupervisionBrowserTest : public InProcessBrowserTest { + public: + AddSupervisionBrowserTest() { + scoped_feature_list_.InitWithFeatures( + {chromeos::features::kParentalControlsSettings}, {}); + } + ~AddSupervisionBrowserTest() override = default; + + void SetUpOnMainThread() override { + // TODO(danan): See if this is possible to do this instead using + // FakeGaia.IssueOAuthToken(). + identity_test_env_ = std::make_unique<signin::IdentityTestEnvironment>(); + identity_test_env_->MakePrimaryAccountAvailable("example@gmail.com"); + // This makes the identity manager return the string "access_token" for the + // access token. + identity_test_env_->SetAutomaticIssueOfAccessTokens(true); + AddSupervisionUI::SetUpForTest(identity_test_env_->identity_manager()); + + // Set start_time_ so that the DCHECK(!start_time_.is_null()) in + // AddSupervisionMetricsRecorder::RecordUserTime() doesn't throw. + AddSupervisionMetricsRecorder::GetInstance() + ->RecordAddSupervisionEnrollment( + AddSupervisionMetricsRecorder::EnrollmentState::kInitiated); + } + + chromeos::AddSupervisionUI* GetAddSupervisionUI() { + return static_cast<chromeos::AddSupervisionUI*>( + contents()->GetWebUI()->GetController()); + } + + content::WebContents* contents() { + return browser()->tab_strip_model()->GetActiveWebContents(); + } + + GURL settings_webui_url() { return GURL(chrome::kChromeUISettingsURL); } + + GURL add_supervision_webui_url() { + return GURL(chrome::kChromeUIAddSupervisionURL); + } + + bool IsElementVisible(const std::string& element_selector) { + bool found; + bool hidden; + std::string script = std::string("domAutomationController.send(") + + element_selector + ".hidden);"; + LOG(ERROR) << "Script: " << script; + found = content::ExecuteScriptAndExtractBool(contents(), script, &hidden); + return found && !hidden; + } + + private: + base::test::ScopedFeatureList scoped_feature_list_; + std::unique_ptr<signin::IdentityTestEnvironment> identity_test_env_; + + DISALLOW_COPY_AND_ASSIGN(AddSupervisionBrowserTest); +}; + +// Disabled on ASan and LSAn builds, because it's very flaky. See +// crbug.com/1004237 +#if defined(ADDRESS_SANITIZER) || defined(LEAK_SANITIZER) +#define MAYBE_URLParameters DISABLED_URLParameters +#else +#define MAYBE_URLParameters URLParameters +#endif +IN_PROC_BROWSER_TEST_F(AddSupervisionBrowserTest, MAYBE_URLParameters) { + // Open the Add Supervision URL. + ui_test_utils::NavigateToURL(browser(), add_supervision_webui_url()); + content::WaitForLoadStop(contents()); + + // Get the URL from the embedded webview. + std::string webview_url; + ASSERT_TRUE(content::ExecuteScriptAndExtractString( + contents(), + std::string("domAutomationController.send(") + + std::string(kGetAddSupervisionUIElementJS) + + ".shadowRoot.querySelector('#webview').getAttribute('src')" + + std::string(");"), + &webview_url)); + + GURL webview_gurl(webview_url); + ASSERT_TRUE(webview_gurl.has_query()); + + // Split the query string into a map of keys to values. + std::string query_str = webview_gurl.query(); + url::Component query(0, query_str.length()); + url::Component key; + url::Component value; + std::map<std::string, std::string> query_parts; + while (url::ExtractQueryKeyValue(query_str.c_str(), &query, &key, &value)) { + query_parts[query_str.substr(key.begin, key.len)] = + query_str.substr(value.begin, value.len); + } + + // Validate the query parameters. + ASSERT_EQ(query_parts.at("flow_type"), "1"); + ASSERT_EQ(query_parts.at("platform_version"), + base::SysInfo::OperatingSystemVersion()); + ASSERT_EQ(query_parts.at("access_token"), "access_token"); + ASSERT_EQ(query_parts.at("hl"), "en-US"); +} + +IN_PROC_BROWSER_TEST_F(AddSupervisionBrowserTest, ShowOfflineScreen) { + // Open the Add Supervision URL. + ui_test_utils::NavigateToURL(browser(), add_supervision_webui_url()); + content::WaitForLoadStop(contents()); + + // Webview div should be initially visible. + ASSERT_TRUE(IsElementVisible(std::string(kGetAddSupervisionUIElementJS) + + std::string(".webviewDiv"))); + + // Simulate going offline. + ASSERT_TRUE(content::ExecuteScript( + contents(), "window.dispatchEvent(new CustomEvent('offline'));")); + + // Ensure the offline content view is shown. + ASSERT_TRUE(IsElementVisible(std::string(kGetAddSupervisionUIElementJS) + + std::string(".offlineContentDiv"))); + + // Ensure the online webview content content is hidden. + ASSERT_FALSE(IsElementVisible(std::string(kGetAddSupervisionUIElementJS) + + std::string(".webviewDiv"))); + + // Simulate going online. + ASSERT_TRUE(content::ExecuteScript( + contents(), "window.dispatchEvent(new CustomEvent('online'));")); + + // Offline div should be hidden. + ASSERT_FALSE(IsElementVisible(std::string(kGetAddSupervisionUIElementJS) + + std::string(".offlineContentDiv"))); + + // Webview div should be shown. + ASSERT_TRUE(IsElementVisible(std::string(kGetAddSupervisionUIElementJS) + + std::string(".webviewDiv"))); +} + +// Disabled on ASan and LSAn builds, because it's very flaky. See +// crbug.com/1004237 +#if defined(ADDRESS_SANITIZER) || defined(LEAK_SANITIZER) +#define MAYBE_ShowConfirmSignoutDialog DISABLED_ShowConfirmSignoutDialog +#else +#define MAYBE_ShowConfirmSignoutDialog ShowConfirmSignoutDialog +#endif +IN_PROC_BROWSER_TEST_F(AddSupervisionBrowserTest, + MAYBE_ShowConfirmSignoutDialog) { + // Open the Add Supervision URL. + ui_test_utils::NavigateToURL(browser(), add_supervision_webui_url()); + content::WaitForLoadStop(contents()); + + // Request that the dialog close before supervision has been enabled. + ASSERT_TRUE(content::ExecuteScript( + contents(), std::string(kGetAddSupervisionUIElementJS) + + std::string(".server.requestClose()"))); + // Confirm that the signout dialog isn't showing + ASSERT_FALSE(ConfirmSignoutDialog::IsShowing()); + + // Simulate supervision being enabled. + ASSERT_TRUE(content::ExecuteScript( + contents(), std::string(kGetAddSupervisionUIElementJS) + + std::string(".server.notifySupervisionEnabled()"))); + + // Request that the dialog is closed again. + ASSERT_TRUE(content::ExecuteScript( + contents(), std::string(kGetAddSupervisionUIElementJS) + + std::string(".server.requestClose()"))); + + // Confirm that the dialog is showing. + ASSERT_TRUE(ConfirmSignoutDialog::IsShowing()); +} + +IN_PROC_BROWSER_TEST_F(AddSupervisionBrowserTest, UMATest) { + base::HistogramTester histogram_tester; + base::UserActionTester user_action_tester; + + // Should see 0 Add Supervision enrollment metrics at first. + histogram_tester.ExpectTotalCount("AddSupervisionDialog.Enrollment", 0); + + // Should see 0 user actions at first. + EXPECT_EQ(user_action_tester.GetActionCount( + "AddSupervisionDialog_AttemptedSignoutAfterEnrollment"), + 0); + + // Open the Add Supervision URL. + ui_test_utils::NavigateToURL(browser(), add_supervision_webui_url()); + content::WaitForLoadStop(contents()); + + // Simulate supervision being enabled. + ASSERT_TRUE(content::ExecuteScript( + contents(), std::string(kGetAddSupervisionUIElementJS) + + std::string(".server.notifySupervisionEnabled()"))); + + // Should see 1 Add Supervision process completed. + histogram_tester.ExpectUniqueSample( + "AddSupervisionDialog.Enrollment", + AddSupervisionMetricsRecorder::EnrollmentState::kCompleted, 1); + histogram_tester.ExpectTotalCount("AddSupervisionDialog.Enrollment", 1); + + // Should see 1 EnrollmentCompleted action. + EXPECT_EQ(user_action_tester.GetActionCount( + "AddSupervisionDialog_EnrollmentCompleted"), + 1); +} + +#endif // !defined(MEMORY_SANITIZER) + +} // namespace chromeos diff --git a/chromium/chrome/browser/ui/webui/chromeos/add_supervision/confirm_signout_dialog.cc b/chromium/chrome/browser/ui/webui/chromeos/add_supervision/confirm_signout_dialog.cc index b0754f4a57b..f9594134ec5 100644 --- a/chromium/chrome/browser/ui/webui/chromeos/add_supervision/confirm_signout_dialog.cc +++ b/chromium/chrome/browser/ui/webui/chromeos/add_supervision/confirm_signout_dialog.cc @@ -29,6 +29,14 @@ const int kDialogBodyTextWidth = 250; } // namespace ConfirmSignoutDialog::ConfirmSignoutDialog() { + DialogDelegate::set_button_label( + ui::DIALOG_BUTTON_OK, + l10n_util::GetStringUTF16( + IDS_ADD_SUPERVISION_EXIT_DIALOG_SIGNOUT_BUTTON_LABEL)); + DialogDelegate::set_button_label( + ui::DIALOG_BUTTON_CANCEL, + l10n_util::GetStringUTF16( + IDS_ADD_SUPERVISION_EXIT_DIALOG_CANCEL_BUTTON_LABEL)); SetLayoutManager(std::make_unique<views::FillLayout>()); SetBorder(views::CreateEmptyBorder( views::LayoutProvider::Get()->GetDialogInsetsForContentType( @@ -44,7 +52,9 @@ ConfirmSignoutDialog::ConfirmSignoutDialog() { AddChildView(body); } -ConfirmSignoutDialog::~ConfirmSignoutDialog() = default; +ConfirmSignoutDialog::~ConfirmSignoutDialog() { + ConfirmSignoutDialog::current_instance_ = nullptr; +} ui::ModalType ConfirmSignoutDialog::GetModalType() const { return ui::ModalType::MODAL_TYPE_SYSTEM; @@ -64,23 +74,22 @@ int ConfirmSignoutDialog::GetDialogButtons() const { ui::DialogButton::DIALOG_BUTTON_CANCEL; } -base::string16 ConfirmSignoutDialog::GetDialogButtonLabel( - ui::DialogButton button) const { - if (button == ui::DialogButton::DIALOG_BUTTON_OK) { - return l10n_util::GetStringUTF16( - IDS_ADD_SUPERVISION_EXIT_DIALOG_SIGNOUT_BUTTON_LABEL); - } - return l10n_util::GetStringUTF16( - IDS_ADD_SUPERVISION_EXIT_DIALOG_CANCEL_BUTTON_LABEL); -} +// static +views::Widget* ConfirmSignoutDialog::current_instance_ = nullptr; // static void ConfirmSignoutDialog::Show() { // Ownership of the ConfirmSignoutDialog is passed to the views system. // Dialog is system-modal, so no parent window is needed. - constrained_window::CreateBrowserModalDialogViews(new ConfirmSignoutDialog(), - nullptr /* parent window */) - ->Show(); + ConfirmSignoutDialog::current_instance_ = + constrained_window::CreateBrowserModalDialogViews( + new ConfirmSignoutDialog(), nullptr /* parent window */); + current_instance_->Show(); +} + +// static +bool ConfirmSignoutDialog::IsShowing() { + return ConfirmSignoutDialog::current_instance_ != nullptr; } } // namespace chromeos diff --git a/chromium/chrome/browser/ui/webui/chromeos/add_supervision/confirm_signout_dialog.h b/chromium/chrome/browser/ui/webui/chromeos/add_supervision/confirm_signout_dialog.h index 6e7bff69d73..c8d7a820a6b 100644 --- a/chromium/chrome/browser/ui/webui/chromeos/add_supervision/confirm_signout_dialog.h +++ b/chromium/chrome/browser/ui/webui/chromeos/add_supervision/confirm_signout_dialog.h @@ -9,6 +9,10 @@ #include "ui/base/ui_base_types.h" #include "ui/views/window/dialog_delegate.h" +namespace views { +class Widget; +} + namespace chromeos { // Dialog shown when the user tries to close the flow when account has already @@ -25,12 +29,13 @@ class ConfirmSignoutDialog : public views::DialogDelegateView { // views::DialogDelegate: bool Accept() override; int GetDialogButtons() const override; - base::string16 GetDialogButtonLabel(ui::DialogButton button) const override; static void Show(); + static bool IsShowing(); private: ConfirmSignoutDialog(); + static views::Widget* current_instance_; DISALLOW_COPY_AND_ASSIGN(ConfirmSignoutDialog); }; |