Commit e5d293af authored by Jeremy Klein's avatar Jeremy Klein Committed by Commit Bot

Reland "Add the ability for AndroidSmsAppHelperDelegate to launch the PWA."

This reverts commit 54d36f8e.

Reason for revert: The original change was in fact not the cause of the builder breakage. Confirmed by jdonnelley.

Original change's description:
> Revert "Add the ability for AndroidSmsAppHelperDelegate to launch the PWA."
> 
> This reverts commit 6d6b6173.
> 
> Reason for revert: Suspected of breaking the Mac builder:
> https://ci.chromium.org/p/chromium/builders/luci.chromium.ci/Mac%20Builder/89748
> 
> This code doesn't seem obviously related to the webui failure there, but there are no other webui CLs in the blame list.
> 
> Original change's description:
> > Add the ability for AndroidSmsAppHelperDelegate to launch the PWA.
> > 
> > Also actually use this ability when the "Set Up" button in multidevice
> > settings is clicked.
> > 
> > R=​khorimoto@chromium.org
> > 
> > Bug: 870093
> > Change-Id: I3dd5bcd9c8e3946e1ae42a5db69f2bb7ed3ea586
> > Reviewed-on: https://chromium-review.googlesource.com/1185498
> > Commit-Queue: Jeremy Klein <jlklein@chromium.org>
> > Reviewed-by: Tommy Li <tommycli@chromium.org>
> > Reviewed-by: Kyle Horimoto <khorimoto@chromium.org>
> > Cr-Commit-Position: refs/heads/master@{#589196}
> 
> TBR=khorimoto@chromium.org,tommycli@chromium.org,jlklein@chromium.org
> 
> Change-Id: I855abd7c530600362082c83ee155aaa3d713415f
> No-Presubmit: true
> No-Tree-Checks: true
> No-Try: true
> Bug: 870093
> Reviewed-on: https://chromium-review.googlesource.com/1211382
> Reviewed-by: Justin Donnelly <jdonnelly@chromium.org>
> Commit-Queue: Justin Donnelly <jdonnelly@chromium.org>
> Cr-Commit-Position: refs/heads/master@{#589218}

TBR=khorimoto@chromium.org,tommycli@chromium.org,jdonnelly@chromium.org,jlklein@chromium.org

Change-Id: I906bbc0862ca17834fd7e009fdd23af4735d4d49
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: 870093
Reviewed-on: https://chromium-review.googlesource.com/1211430Reviewed-by: default avatarJeremy Klein <jlklein@chromium.org>
Commit-Queue: Jeremy Klein <jlklein@chromium.org>
Cr-Commit-Position: refs/heads/master@{#589263}
parent d0484706
...@@ -9,10 +9,15 @@ ...@@ -9,10 +9,15 @@
#include "base/bind.h" #include "base/bind.h"
#include "base/callback.h" #include "base/callback.h"
#include "chrome/browser/chromeos/android_sms/android_sms_urls.h" #include "chrome/browser/chromeos/android_sms/android_sms_urls.h"
#include "chrome/browser/extensions/extension_util.h"
#include "chrome/browser/profiles/profile.h" #include "chrome/browser/profiles/profile.h"
#include "chrome/browser/ui/extensions/app_launch_params.h"
#include "chrome/browser/ui/extensions/application_launch.h"
#include "chrome/browser/web_applications/components/pending_app_manager.h" #include "chrome/browser/web_applications/components/pending_app_manager.h"
#include "chrome/browser/web_applications/web_app_provider.h" #include "chrome/browser/web_applications/web_app_provider.h"
#include "chromeos/components/proximity_auth/logging/logging.h" #include "chromeos/components/proximity_auth/logging/logging.h"
#include "extensions/common/constants.h"
#include "ui/base/window_open_disposition.h"
namespace chromeos { namespace chromeos {
...@@ -22,6 +27,7 @@ AndroidSmsAppHelperDelegateImpl::AndroidSmsAppHelperDelegateImpl( ...@@ -22,6 +27,7 @@ AndroidSmsAppHelperDelegateImpl::AndroidSmsAppHelperDelegateImpl(
Profile* profile) Profile* profile)
: pending_app_manager_( : pending_app_manager_(
&web_app::WebAppProvider::Get(profile)->pending_app_manager()), &web_app::WebAppProvider::Get(profile)->pending_app_manager()),
profile_(profile),
weak_ptr_factory_(this) {} weak_ptr_factory_(this) {}
AndroidSmsAppHelperDelegateImpl::AndroidSmsAppHelperDelegateImpl( AndroidSmsAppHelperDelegateImpl::AndroidSmsAppHelperDelegateImpl(
...@@ -42,6 +48,24 @@ void AndroidSmsAppHelperDelegateImpl::InstallAndroidSmsApp() { ...@@ -42,6 +48,24 @@ void AndroidSmsAppHelperDelegateImpl::InstallAndroidSmsApp() {
weak_ptr_factory_.GetWeakPtr())); weak_ptr_factory_.GetWeakPtr()));
} }
bool AndroidSmsAppHelperDelegateImpl::LaunchAndroidSmsApp() {
const extensions::Extension* android_sms_pwa =
extensions::util::GetInstalledPwaForUrl(
profile_, chromeos::android_sms::GetAndroidMessagesURL());
if (!android_sms_pwa) {
PA_LOG(ERROR) << "No Messages app found.";
return false;
}
PA_LOG(INFO) << "Messages app Launching...";
AppLaunchParams params(
profile_, android_sms_pwa, extensions::LAUNCH_CONTAINER_WINDOW,
WindowOpenDisposition::NEW_WINDOW, extensions::SOURCE_CHROME_INTERNAL);
// OpenApplications() is defined in application_launch.h.
OpenApplication(params);
return true;
}
void AndroidSmsAppHelperDelegateImpl::OnAppInstalled( void AndroidSmsAppHelperDelegateImpl::OnAppInstalled(
const GURL& app_url, const GURL& app_url,
const base::Optional<std::string>& app_id) { const base::Optional<std::string>& app_id) {
......
...@@ -30,6 +30,10 @@ class AndroidSmsAppHelperDelegateImpl : public AndroidSmsAppHelperDelegate { ...@@ -30,6 +30,10 @@ class AndroidSmsAppHelperDelegateImpl : public AndroidSmsAppHelperDelegate {
private: private:
friend class AndroidSmsAppHelperDelegateImplTest; friend class AndroidSmsAppHelperDelegateImplTest;
// Note: This constructor should only be used in testing. Right now, objects
// built using this constructor will segfault on profile_ if
// LaunchAndroidSmsApp is called. We'll need to fix this once tests for that
// function are added. See https://crbug.com/876972.
explicit AndroidSmsAppHelperDelegateImpl( explicit AndroidSmsAppHelperDelegateImpl(
web_app::PendingAppManager* pending_app_manager); web_app::PendingAppManager* pending_app_manager);
void OnAppInstalled(const GURL& app_url, void OnAppInstalled(const GURL& app_url,
...@@ -37,9 +41,11 @@ class AndroidSmsAppHelperDelegateImpl : public AndroidSmsAppHelperDelegate { ...@@ -37,9 +41,11 @@ class AndroidSmsAppHelperDelegateImpl : public AndroidSmsAppHelperDelegate {
// AndroidSmsAppHelperDelegate: // AndroidSmsAppHelperDelegate:
void InstallAndroidSmsApp() override; void InstallAndroidSmsApp() override;
bool LaunchAndroidSmsApp() override;
static const char kMessagesWebAppUrl[]; static const char kMessagesWebAppUrl[];
web_app::PendingAppManager* pending_app_manager_; web_app::PendingAppManager* pending_app_manager_;
Profile* profile_;
base::WeakPtrFactory<AndroidSmsAppHelperDelegateImpl> weak_ptr_factory_; base::WeakPtrFactory<AndroidSmsAppHelperDelegateImpl> weak_ptr_factory_;
DISALLOW_COPY_AND_ASSIGN(AndroidSmsAppHelperDelegateImpl); DISALLOW_COPY_AND_ASSIGN(AndroidSmsAppHelperDelegateImpl);
......
...@@ -24,6 +24,12 @@ cr.define('settings', function() { ...@@ -24,6 +24,12 @@ cr.define('settings', function() {
removeHostDevice() {} removeHostDevice() {}
retryPendingHostSetup() {} retryPendingHostSetup() {}
/**
* Called when the "Set Up" button is clicked to open the Android Messages
* PWA.
*/
setUpAndroidSms() {}
} }
/** /**
...@@ -55,6 +61,11 @@ cr.define('settings', function() { ...@@ -55,6 +61,11 @@ cr.define('settings', function() {
retryPendingHostSetup() { retryPendingHostSetup() {
chrome.send('retryPendingHostSetup'); chrome.send('retryPendingHostSetup');
} }
/** @override */
setUpAndroidSms() {
chrome.send('setUpAndroidSms');
}
} }
cr.addSingletonGetter(MultiDeviceBrowserProxyImpl); cr.addSingletonGetter(MultiDeviceBrowserProxyImpl);
......
...@@ -56,9 +56,17 @@ Polymer({ ...@@ -56,9 +56,17 @@ Polymer({
}, },
}, },
/** @private {?settings.MultiDeviceBrowserProxy} */
browserProxy_: null,
/** @override */
created: function() {
this.browserProxy_ = settings.MultiDeviceBrowserProxyImpl.getInstance();
},
/** @private */ /** @private */
handleAndroidMessagesButtonClick_: function() { handleAndroidMessagesButtonClick_: function() {
this.androidMessagesRequiresSetup_ = false; this.browserProxy_.setUpAndroidSms();
}, },
listeners: { listeners: {
......
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
#include "base/bind.h" #include "base/bind.h"
#include "base/bind_helpers.h" #include "base/bind_helpers.h"
#include "base/logging.h" #include "base/logging.h"
#include "chrome/browser/chromeos/multidevice_setup/android_sms_app_helper_delegate_impl.h"
#include "chrome/browser/ui/webui/chromeos/multidevice_setup/multidevice_setup_dialog.h" #include "chrome/browser/ui/webui/chromeos/multidevice_setup/multidevice_setup_dialog.h"
#include "chromeos/components/proximity_auth/logging/logging.h" #include "chromeos/components/proximity_auth/logging/logging.h"
#include "content/public/browser/web_ui.h" #include "content/public/browser/web_ui.h"
...@@ -35,8 +36,11 @@ void OnRetrySetHostNowResult(bool success) { ...@@ -35,8 +36,11 @@ void OnRetrySetHostNowResult(bool success) {
} // namespace } // namespace
MultideviceHandler::MultideviceHandler( MultideviceHandler::MultideviceHandler(
multidevice_setup::MultiDeviceSetupClient* multidevice_setup_client) multidevice_setup::MultiDeviceSetupClient* multidevice_setup_client,
std::unique_ptr<multidevice_setup::AndroidSmsAppHelperDelegate>
android_sms_app_helper)
: multidevice_setup_client_(multidevice_setup_client), : multidevice_setup_client_(multidevice_setup_client),
android_sms_app_helper_(std::move(android_sms_app_helper)),
multidevice_setup_observer_(this), multidevice_setup_observer_(this),
callback_weak_ptr_factory_(this) {} callback_weak_ptr_factory_(this) {}
...@@ -63,6 +67,10 @@ void MultideviceHandler::RegisterMessages() { ...@@ -63,6 +67,10 @@ void MultideviceHandler::RegisterMessages() {
"retryPendingHostSetup", "retryPendingHostSetup",
base::BindRepeating(&MultideviceHandler::HandleRetryPendingHostSetup, base::BindRepeating(&MultideviceHandler::HandleRetryPendingHostSetup,
base::Unretained(this))); base::Unretained(this)));
web_ui()->RegisterMessageCallback(
"setUpAndroidSms",
base::BindRepeating(&MultideviceHandler::HandleSetUpAndroidSms,
base::Unretained(this)));
} }
void MultideviceHandler::OnJavascriptAllowed() { void MultideviceHandler::OnJavascriptAllowed() {
...@@ -158,6 +166,12 @@ void MultideviceHandler::HandleRetryPendingHostSetup( ...@@ -158,6 +166,12 @@ void MultideviceHandler::HandleRetryPendingHostSetup(
base::BindOnce(&OnRetrySetHostNowResult)); base::BindOnce(&OnRetrySetHostNowResult));
} }
void MultideviceHandler::HandleSetUpAndroidSms(const base::ListValue* args) {
PA_LOG(WARNING) << "HandlingSetupSms";
DCHECK(args->empty());
android_sms_app_helper_->LaunchAndroidSmsApp();
}
void MultideviceHandler::OnSetFeatureStateEnabledResult( void MultideviceHandler::OnSetFeatureStateEnabledResult(
const std::string& js_callback_id, const std::string& js_callback_id,
bool success) { bool success) {
......
...@@ -15,6 +15,10 @@ ...@@ -15,6 +15,10 @@
namespace chromeos { namespace chromeos {
namespace multidevice_setup {
class AndroidSmsAppHelperDelegate;
} // namespace multidevice_setup
namespace settings { namespace settings {
// Chrome "Multidevice" (a.k.a. "Connected Devices") settings page UI handler. // Chrome "Multidevice" (a.k.a. "Connected Devices") settings page UI handler.
...@@ -23,7 +27,9 @@ class MultideviceHandler ...@@ -23,7 +27,9 @@ class MultideviceHandler
public multidevice_setup::MultiDeviceSetupClient::Observer { public multidevice_setup::MultiDeviceSetupClient::Observer {
public: public:
explicit MultideviceHandler( explicit MultideviceHandler(
multidevice_setup::MultiDeviceSetupClient* multidevice_setup_client); multidevice_setup::MultiDeviceSetupClient* multidevice_setup_client,
std::unique_ptr<multidevice_setup::AndroidSmsAppHelperDelegate>
android_sms_app_helper);
~MultideviceHandler() override; ~MultideviceHandler() override;
protected: protected:
...@@ -52,6 +58,7 @@ class MultideviceHandler ...@@ -52,6 +58,7 @@ class MultideviceHandler
void HandleSetFeatureEnabledState(const base::ListValue* args); void HandleSetFeatureEnabledState(const base::ListValue* args);
void HandleRemoveHostDevice(const base::ListValue* args); void HandleRemoveHostDevice(const base::ListValue* args);
void HandleRetryPendingHostSetup(const base::ListValue* args); void HandleRetryPendingHostSetup(const base::ListValue* args);
void HandleSetUpAndroidSms(const base::ListValue* args);
void OnSetFeatureStateEnabledResult(const std::string& js_callback_id, void OnSetFeatureStateEnabledResult(const std::string& js_callback_id,
bool success); bool success);
...@@ -62,6 +69,8 @@ class MultideviceHandler ...@@ -62,6 +69,8 @@ class MultideviceHandler
std::unique_ptr<base::DictionaryValue> GeneratePageContentDataDictionary(); std::unique_ptr<base::DictionaryValue> GeneratePageContentDataDictionary();
multidevice_setup::MultiDeviceSetupClient* multidevice_setup_client_; multidevice_setup::MultiDeviceSetupClient* multidevice_setup_client_;
std::unique_ptr<multidevice_setup::AndroidSmsAppHelperDelegate>
android_sms_app_helper_;
ScopedObserver<multidevice_setup::MultiDeviceSetupClient, ScopedObserver<multidevice_setup::MultiDeviceSetupClient,
multidevice_setup::MultiDeviceSetupClient::Observer> multidevice_setup::MultiDeviceSetupClient::Observer>
......
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
#include <memory> #include <memory>
#include "base/macros.h" #include "base/macros.h"
#include "chromeos/services/multidevice_setup/public/cpp/fake_android_sms_app_helper_delegate.h"
#include "chromeos/services/multidevice_setup/public/cpp/fake_multidevice_setup_client.h" #include "chromeos/services/multidevice_setup/public/cpp/fake_multidevice_setup_client.h"
#include "components/cryptauth/remote_device_test_util.h" #include "components/cryptauth/remote_device_test_util.h"
#include "content/public/test/test_web_ui.h" #include "content/public/test/test_web_ui.h"
...@@ -21,8 +22,11 @@ namespace { ...@@ -21,8 +22,11 @@ namespace {
class TestMultideviceHandler : public MultideviceHandler { class TestMultideviceHandler : public MultideviceHandler {
public: public:
TestMultideviceHandler( TestMultideviceHandler(
multidevice_setup::MultiDeviceSetupClient* multidevice_setup_client) multidevice_setup::MultiDeviceSetupClient* multidevice_setup_client,
: MultideviceHandler(multidevice_setup_client) {} std::unique_ptr<multidevice_setup::AndroidSmsAppHelperDelegate>
android_sms_app_helper)
: MultideviceHandler(multidevice_setup_client,
std::move(android_sms_app_helper)) {}
~TestMultideviceHandler() override = default; ~TestMultideviceHandler() override = default;
// Make public for testing. // Make public for testing.
...@@ -107,9 +111,14 @@ class MultideviceHandlerTest : public testing::Test { ...@@ -107,9 +111,14 @@ class MultideviceHandlerTest : public testing::Test {
fake_multidevice_setup_client_ = fake_multidevice_setup_client_ =
std::make_unique<multidevice_setup::FakeMultiDeviceSetupClient>(); std::make_unique<multidevice_setup::FakeMultiDeviceSetupClient>();
auto fake_android_sms_app_helper_delegate =
std::make_unique<multidevice_setup::FakeAndroidSmsAppHelperDelegate>();
fake_android_sms_app_helper_delegate_ =
fake_android_sms_app_helper_delegate.get();
handler_ = std::make_unique<TestMultideviceHandler>( handler_ = std::make_unique<TestMultideviceHandler>(
fake_multidevice_setup_client_.get()); fake_multidevice_setup_client_.get(),
std::move(fake_android_sms_app_helper_delegate));
handler_->set_web_ui(test_web_ui_.get()); handler_->set_web_ui(test_web_ui_.get());
handler_->RegisterMessages(); handler_->RegisterMessages();
handler_->AllowJavascript(); handler_->AllowJavascript();
...@@ -184,6 +193,11 @@ class MultideviceHandlerTest : public testing::Test { ...@@ -184,6 +193,11 @@ class MultideviceHandlerTest : public testing::Test {
success); success);
} }
void CallSetUpAndroidSms() {
base::ListValue empty_args;
test_web_ui()->HandleReceivedMessage("setUpAndroidSms", &empty_args);
}
void CallSetFeatureEnabledState(multidevice_setup::mojom::Feature feature, void CallSetFeatureEnabledState(multidevice_setup::mojom::Feature feature,
bool enabled, bool enabled,
const base::Optional<std::string>& auth_token, const base::Optional<std::string>& auth_token,
...@@ -225,6 +239,11 @@ class MultideviceHandlerTest : public testing::Test { ...@@ -225,6 +239,11 @@ class MultideviceHandlerTest : public testing::Test {
return fake_multidevice_setup_client_.get(); return fake_multidevice_setup_client_.get();
} }
multidevice_setup::FakeAndroidSmsAppHelperDelegate*
fake_android_sms_app_helper_delegate() {
return fake_android_sms_app_helper_delegate_;
}
const cryptauth::RemoteDeviceRef test_device_; const cryptauth::RemoteDeviceRef test_device_;
private: private:
...@@ -244,6 +263,8 @@ class MultideviceHandlerTest : public testing::Test { ...@@ -244,6 +263,8 @@ class MultideviceHandlerTest : public testing::Test {
host_status_with_device_; host_status_with_device_;
multidevice_setup::MultiDeviceSetupClient::FeatureStatesMap multidevice_setup::MultiDeviceSetupClient::FeatureStatesMap
feature_states_map_; feature_states_map_;
multidevice_setup::FakeAndroidSmsAppHelperDelegate*
fake_android_sms_app_helper_delegate_;
DISALLOW_COPY_AND_ASSIGN(MultideviceHandlerTest); DISALLOW_COPY_AND_ASSIGN(MultideviceHandlerTest);
}; };
...@@ -280,6 +301,12 @@ TEST_F(MultideviceHandlerTest, RetryPendingHostSetup) { ...@@ -280,6 +301,12 @@ TEST_F(MultideviceHandlerTest, RetryPendingHostSetup) {
CallRetryPendingHostSetup(false /* success */); CallRetryPendingHostSetup(false /* success */);
} }
TEST_F(MultideviceHandlerTest, SetUpAndroidSms) {
EXPECT_FALSE(fake_android_sms_app_helper_delegate()->HasLaunchedApp());
CallSetUpAndroidSms();
EXPECT_TRUE(fake_android_sms_app_helper_delegate()->HasLaunchedApp());
}
TEST_F(MultideviceHandlerTest, SetFeatureEnabledState) { TEST_F(MultideviceHandlerTest, SetFeatureEnabledState) {
CallSetFeatureEnabledState( CallSetFeatureEnabledState(
multidevice_setup::mojom::Feature::kBetterTogetherSuite, multidevice_setup::mojom::Feature::kBetterTogetherSuite,
......
...@@ -77,6 +77,7 @@ ...@@ -77,6 +77,7 @@
#include "chrome/browser/chromeos/crostini/crostini_util.h" #include "chrome/browser/chromeos/crostini/crostini_util.h"
#include "chrome/browser/chromeos/login/demo_mode/demo_session.h" #include "chrome/browser/chromeos/login/demo_mode/demo_session.h"
#include "chrome/browser/chromeos/login/quick_unlock/quick_unlock_utils.h" #include "chrome/browser/chromeos/login/quick_unlock/quick_unlock_utils.h"
#include "chrome/browser/chromeos/multidevice_setup/android_sms_app_helper_delegate_impl.h"
#include "chrome/browser/chromeos/multidevice_setup/multidevice_setup_client_factory.h" #include "chrome/browser/chromeos/multidevice_setup/multidevice_setup_client_factory.h"
#include "chrome/browser/signin/account_tracker_service_factory.h" #include "chrome/browser/signin/account_tracker_service_factory.h"
#include "chrome/browser/ui/webui/settings/chromeos/accessibility_handler.h" #include "chrome/browser/ui/webui/settings/chromeos/accessibility_handler.h"
...@@ -226,7 +227,10 @@ MdSettingsUI::MdSettingsUI(content::WebUI* web_ui) ...@@ -226,7 +227,10 @@ MdSettingsUI::MdSettingsUI(content::WebUI* web_ui)
AddSettingsPageUIHandler( AddSettingsPageUIHandler(
std::make_unique<chromeos::settings::MultideviceHandler>( std::make_unique<chromeos::settings::MultideviceHandler>(
chromeos::multidevice_setup::MultiDeviceSetupClientFactory:: chromeos::multidevice_setup::MultiDeviceSetupClientFactory::
GetForProfile(profile))); GetForProfile(profile),
std::make_unique<
chromeos::multidevice_setup::AndroidSmsAppHelperDelegateImpl>(
profile)));
} }
AddSettingsPageUIHandler( AddSettingsPageUIHandler(
std::make_unique<chromeos::settings::PointerHandler>()); std::make_unique<chromeos::settings::PointerHandler>());
......
...@@ -1992,6 +1992,7 @@ CrSettingsMultideviceSubpageTest.prototype = { ...@@ -1992,6 +1992,7 @@ CrSettingsMultideviceSubpageTest.prototype = {
/** @override */ /** @override */
extraLibraries: CrSettingsBrowserTest.prototype.extraLibraries.concat([ extraLibraries: CrSettingsBrowserTest.prototype.extraLibraries.concat([
'../test_browser_proxy.js',
'multidevice_subpage_tests.js', 'multidevice_subpage_tests.js',
]), ]),
}; };
......
...@@ -2,8 +2,25 @@ ...@@ -2,8 +2,25 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
/**
* @implements {settings.MultideviceBrowserProxy}
*/
class TestMultideviceBrowserProxy extends TestBrowserProxy {
constructor() {
super([
'setUpAndroidSms',
]);
}
/** @override */
setUpAndroidSms() {
this.methodCalled('setUpAndroidSms');
}
}
suite('Multidevice', function() { suite('Multidevice', function() {
let multideviceSubpage = null; let multideviceSubpage = null;
let browserProxy = null;
// Although HOST_SET_MODES is effectively a constant, it cannot reference the // Although HOST_SET_MODES is effectively a constant, it cannot reference the
// enum settings.MultiDeviceSettingsMode from here so its initialization is // enum settings.MultiDeviceSettingsMode from here so its initialization is
// deferred to the suiteSetup function. // deferred to the suiteSetup function.
...@@ -60,6 +77,10 @@ suite('Multidevice', function() { ...@@ -60,6 +77,10 @@ suite('Multidevice', function() {
}); });
setup(function() { setup(function() {
browserProxy = new TestMultideviceBrowserProxy();
settings.MultiDeviceBrowserProxyImpl.instance_ = browserProxy;
PolymerTest.clearBody();
multideviceSubpage = document.createElement('settings-multidevice-subpage'); multideviceSubpage = document.createElement('settings-multidevice-subpage');
multideviceSubpage.pageContentData = {hostDeviceName: 'Pixel XL'}; multideviceSubpage.pageContentData = {hostDeviceName: 'Pixel XL'};
setMode(settings.MultiDeviceSettingsMode.HOST_SET_VERIFIED); setMode(settings.MultiDeviceSettingsMode.HOST_SET_VERIFIED);
...@@ -133,4 +154,20 @@ suite('Multidevice', function() { ...@@ -133,4 +154,20 @@ suite('Multidevice', function() {
assertFalse(!!multideviceSubpage.$$(controllerSelector)); assertFalse(!!multideviceSubpage.$$(controllerSelector));
}); });
test(
'AndroidMessages set up button calls browser proxy function', function() {
const messagesItem = multideviceSubpage.$$('#messagesItem');
multideviceSubpage.androidMessagesRequiresSetup_ = true;
Polymer.dom.flush();
const setUpButton =
multideviceSubpage.$$('#messagesItem > [slot=feature-controller]');
assertTrue(!!setUpButton);
setUpButton.click();
return browserProxy.whenCalled('setUpAndroidSms');
});
}); });
...@@ -17,6 +17,9 @@ class AndroidSmsAppHelperDelegate { ...@@ -17,6 +17,9 @@ class AndroidSmsAppHelperDelegate {
// Installs the Messages for Web PWA. Handles retries and errors internally. // Installs the Messages for Web PWA. Handles retries and errors internally.
virtual void InstallAndroidSmsApp() = 0; virtual void InstallAndroidSmsApp() = 0;
// Launches the Messages for Web PWA if it's installed. Returns true if the
// app was launched successfully, false otherwise.
virtual bool LaunchAndroidSmsApp() = 0;
protected: protected:
AndroidSmsAppHelperDelegate() = default; AndroidSmsAppHelperDelegate() = default;
......
...@@ -23,6 +23,15 @@ bool FakeAndroidSmsAppHelperDelegate::HasInstalledApp() { ...@@ -23,6 +23,15 @@ bool FakeAndroidSmsAppHelperDelegate::HasInstalledApp() {
return has_installed_; return has_installed_;
} }
bool FakeAndroidSmsAppHelperDelegate::LaunchAndroidSmsApp() {
has_launched_ = true;
return true;
}
bool FakeAndroidSmsAppHelperDelegate::HasLaunchedApp() {
return has_launched_;
}
} // namespace multidevice_setup } // namespace multidevice_setup
} // namespace chromeos } // namespace chromeos
...@@ -16,12 +16,15 @@ class FakeAndroidSmsAppHelperDelegate : public AndroidSmsAppHelperDelegate { ...@@ -16,12 +16,15 @@ class FakeAndroidSmsAppHelperDelegate : public AndroidSmsAppHelperDelegate {
FakeAndroidSmsAppHelperDelegate(); FakeAndroidSmsAppHelperDelegate();
~FakeAndroidSmsAppHelperDelegate() override; ~FakeAndroidSmsAppHelperDelegate() override;
bool HasInstalledApp(); bool HasInstalledApp();
bool HasLaunchedApp();
// AndroidSmsAppHelperDelegate: // AndroidSmsAppHelperDelegate:
void InstallAndroidSmsApp() override; void InstallAndroidSmsApp() override;
bool LaunchAndroidSmsApp() override;
private: private:
bool has_installed_ = false; bool has_installed_ = false;
bool has_launched_ = false;
DISALLOW_COPY_AND_ASSIGN(FakeAndroidSmsAppHelperDelegate); DISALLOW_COPY_AND_ASSIGN(FakeAndroidSmsAppHelperDelegate);
}; };
......
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