Commit b9650e04 authored by Leonardo Padilha's avatar Leonardo Padilha Committed by Commit Bot

Request status report after a suspend mode has been completed.

Add return from suspend mode as trigger to status report.

Bug: 919132
Change-Id: I9a3533de21bc8d83761889d26e81066c14e03428
Reviewed-on: https://chromium-review.googlesource.com/c/1427839Reviewed-by: default avatarAga Wronska <agawronska@chromium.org>
Commit-Queue: Leonardo Padilha <ldaguilar@chromium.org>
Cr-Commit-Position: refs/heads/master@{#625279}
parent 095f090c
......@@ -8,6 +8,7 @@
#include "chrome/browser/chromeos/child_accounts/consumer_status_reporting_service.h"
#include "chrome/browser/chromeos/child_accounts/consumer_status_reporting_service_factory.h"
#include "chrome/browser/profiles/profile.h"
#include "chromeos/dbus/dbus_thread_manager.h"
#include "components/session_manager/core/session_manager.h"
namespace chromeos {
......@@ -21,6 +22,7 @@ EventBasedStatusReportingService::EventBasedStatusReportingService(
arc_app_prefs->AddObserver(this);
session_manager::SessionManager::Get()->AddObserver(this);
net::NetworkChangeNotifier::AddNetworkChangeObserver(this);
DBusThreadManager::Get()->GetPowerManagerClient()->AddObserver(this);
}
EventBasedStatusReportingService::~EventBasedStatusReportingService() = default;
......@@ -61,6 +63,12 @@ void EventBasedStatusReportingService::OnNetworkChanged(
RequestStatusReport("Request status report due to device going online.");
}
void EventBasedStatusReportingService::SuspendDone(
const base::TimeDelta& duration) {
RequestStatusReport(
"Request status report after a suspend has been completed.");
}
void EventBasedStatusReportingService::RequestStatusReport(
const std::string& reason) {
VLOG(1) << reason;
......@@ -75,6 +83,7 @@ void EventBasedStatusReportingService::Shutdown() {
arc_app_prefs->RemoveObserver(this);
session_manager::SessionManager::Get()->RemoveObserver(this);
net::NetworkChangeNotifier::RemoveNetworkChangeObserver(this);
DBusThreadManager::Get()->GetPowerManagerClient()->RemoveObserver(this);
}
} // namespace chromeos
......@@ -8,7 +8,9 @@
#include <string>
#include "base/macros.h"
#include "base/time/time.h"
#include "chrome/browser/ui/app_list/arc/arc_app_list_prefs.h"
#include "chromeos/dbus/power_manager_client.h"
#include "components/keyed_service/core/keyed_service.h"
#include "components/session_manager/core/session_manager_observer.h"
#include "net/base/network_change_notifier.h"
......@@ -26,11 +28,13 @@ namespace chromeos {
// * Device lock
// * Device unlock
// * Device connected
// * Device returns from suspend mode
class EventBasedStatusReportingService
: public KeyedService,
public ArcAppListPrefs::Observer,
public session_manager::SessionManagerObserver,
public net::NetworkChangeNotifier::NetworkChangeObserver {
public net::NetworkChangeNotifier::NetworkChangeObserver,
public PowerManagerClient::Observer {
public:
explicit EventBasedStatusReportingService(content::BrowserContext* context);
~EventBasedStatusReportingService() override;
......@@ -48,6 +52,9 @@ class EventBasedStatusReportingService
void OnNetworkChanged(
net::NetworkChangeNotifier::ConnectionType type) override;
// PowerManagerClient::Observer:
void SuspendDone(const base::TimeDelta& duration) override;
private:
void RequestStatusReport(const std::string& reason);
......
......@@ -13,6 +13,8 @@
#include "chrome/browser/supervised_user/supervised_user_constants.h"
#include "chrome/browser/ui/app_list/arc/arc_app_test.h"
#include "chrome/test/base/testing_profile.h"
#include "chromeos/dbus/dbus_thread_manager.h"
#include "chromeos/dbus/fake_power_manager_client.h"
#include "components/account_id/account_id.h"
#include "components/arc/common/app.mojom.h"
#include "components/keyed_service/core/keyed_service.h"
......@@ -56,6 +58,9 @@ class EventBasedStatusReportingServiceTest : public testing::Test {
~EventBasedStatusReportingServiceTest() override = default;
void SetUp() override {
DBusThreadManager::GetSetterForTesting()->SetPowerManagerClient(
std::make_unique<FakePowerManagerClient>());
profile_.SetSupervisedUserId(supervised_users::kChildAccountSUID);
arc_test_.SetUp(profile());
......@@ -77,7 +82,10 @@ class EventBasedStatusReportingServiceTest : public testing::Test {
consumer_status_reporting_service);
}
void TearDown() override { arc_test_.TearDown(); }
void TearDown() override {
arc_test_.TearDown();
DBusThreadManager::Shutdown();
}
void SetConnectionType(net::NetworkChangeNotifier::ConnectionType type) {
notifier_.SetConnectionType(type);
......@@ -88,6 +96,11 @@ class EventBasedStatusReportingServiceTest : public testing::Test {
arc::mojom::AppHost* app_host() { return arc_test_.arc_app_list_prefs(); }
Profile* profile() { return &profile_; }
FakePowerManagerClient* power_manager_client() {
return static_cast<FakePowerManagerClient*>(
DBusThreadManager::Get()->GetPowerManagerClient());
}
TestingConsumerStatusReportingService*
test_consumer_status_reporting_service() {
return test_consumer_status_reporting_service_;
......@@ -187,6 +200,16 @@ TEST_F(EventBasedStatusReportingServiceTest, ReportWhenDeviceGoesOnline) {
1, test_consumer_status_reporting_service()->performed_status_reports());
}
TEST_F(EventBasedStatusReportingServiceTest, ReportWhenSuspendIsDone) {
EventBasedStatusReportingService service(profile());
ASSERT_EQ(
0, test_consumer_status_reporting_service()->performed_status_reports());
power_manager_client()->SendSuspendDone();
EXPECT_EQ(
1, test_consumer_status_reporting_service()->performed_status_reports());
}
TEST_F(EventBasedStatusReportingServiceTest, ReportForMultipleEvents) {
EventBasedStatusReportingService service(profile());
SetConnectionType(
......@@ -213,6 +236,9 @@ TEST_F(EventBasedStatusReportingServiceTest, ReportForMultipleEvents) {
app_host()->OnPackageModified(arc::mojom::ArcPackageInfo::New());
EXPECT_EQ(
5, test_consumer_status_reporting_service()->performed_status_reports());
power_manager_client()->SendSuspendDone();
EXPECT_EQ(
6, test_consumer_status_reporting_service()->performed_status_reports());
}
} // namespace chromeos
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