blob: f75783370513f95758b617d9689ccb25c91ae30b [file] [log] [blame]
// Copyright 2016 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 <memory>
#include <string>
#include "base/macros.h"
#include "base/memory/ptr_util.h"
#include "base/values.h"
#include "chrome/browser/chromeos/arc/arc_policy_bridge.h"
#include "components/arc/test/fake_arc_bridge_service.h"
#include "components/policy/core/common/mock_policy_service.h"
#include "components/policy/core/common/policy_map.h"
#include "components/policy/core/common/policy_namespace.h"
#include "components/policy/core/common/policy_types.h"
#include "mojo/public/cpp/bindings/string.h"
#include "policy/policy_constants.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace arc {
using testing::ReturnRef;
class ArcPolicyBridgeTest : public testing::Test {
public:
ArcPolicyBridgeTest() {}
void SetUp() override {
bridge_service_.reset(new FakeArcBridgeService());
policy_bridge_.reset(
new ArcPolicyBridge(bridge_service_.get(), &policy_service_));
policy_bridge_->OverrideIsManagedForTesting(true);
EXPECT_CALL(policy_service_,
GetPolicies(policy::PolicyNamespace(
policy::POLICY_DOMAIN_CHROME, std::string())))
.WillRepeatedly(ReturnRef(policy_map_));
}
protected:
class PolicyStringRunnable
: public ArcPolicyBridge::GetPoliciesCallback::Runnable {
public:
explicit PolicyStringRunnable(mojo::String expected)
: expected_(expected) {}
void Run(const mojo::String& policies) override {
EXPECT_EQ(expected_, policies);
}
private:
mojo::String expected_;
};
class PolicyStringCallback : public ArcPolicyBridge::GetPoliciesCallback {
public:
explicit PolicyStringCallback(mojo::String expected)
: ArcPolicyBridge::GetPoliciesCallback(
new PolicyStringRunnable(expected)) {}
};
ArcPolicyBridge* policy_bridge() { return policy_bridge_.get(); }
policy::PolicyMap& policy_map() { return policy_map_; }
private:
std::unique_ptr<arc::FakeArcBridgeService> bridge_service_;
std::unique_ptr<arc::ArcPolicyBridge> policy_bridge_;
policy::PolicyMap policy_map_;
policy::MockPolicyService policy_service_;
DISALLOW_COPY_AND_ASSIGN(ArcPolicyBridgeTest);
};
TEST_F(ArcPolicyBridgeTest, UnmanagedTest) {
policy_bridge()->OverrideIsManagedForTesting(false);
policy_bridge()->GetPolicies(PolicyStringCallback(""));
}
TEST_F(ArcPolicyBridgeTest, EmptyPolicyTest) {
// No policy is set, result should be empty.
policy_bridge()->GetPolicies(PolicyStringCallback("{}"));
}
TEST_F(ArcPolicyBridgeTest, ArcPolicyTest) {
policy_map().Set(
policy::key::kArcPolicy, policy::POLICY_LEVEL_MANDATORY,
policy::POLICY_SCOPE_USER, policy::POLICY_SOURCE_CLOUD,
base::WrapUnique(new base::StringValue(
"{\"applications\":"
"[{\"packageName\":\"com.google.android.apps.youtube.kids\","
"\"installType\":\"REQUIRED\","
"\"lockTaskAllowed\":false,"
"\"permissionGrants\":[]"
"}],"
"\"defaultPermissionPolicy\":\"GRANT\""
"}")),
nullptr);
policy_bridge()->GetPolicies(PolicyStringCallback(
"{\"applications\":"
"[{\"installType\":\"REQUIRED\","
"\"lockTaskAllowed\":false,"
"\"packageName\":\"com.google.android.apps.youtube.kids\","
"\"permissionGrants\":[]"
"}],"
"\"defaultPermissionPolicy\":\"GRANT\""
"}"));
}
TEST_F(ArcPolicyBridgeTest, HompageLocationTest) {
// This policy will not be passed on, result should be empty.
policy_map().Set(
policy::key::kHomepageLocation, policy::POLICY_LEVEL_MANDATORY,
policy::POLICY_SCOPE_USER, policy::POLICY_SOURCE_CLOUD,
base::WrapUnique(new base::StringValue("http://chromium.org")), nullptr);
policy_bridge()->GetPolicies(PolicyStringCallback("{}"));
}
TEST_F(ArcPolicyBridgeTest, DisableScreenshotsTest) {
policy_map().Set(policy::key::kDisableScreenshots,
policy::POLICY_LEVEL_MANDATORY, policy::POLICY_SCOPE_USER,
policy::POLICY_SOURCE_CLOUD,
base::WrapUnique(new base::FundamentalValue(true)), nullptr);
policy_bridge()->GetPolicies(
PolicyStringCallback("{\"screenCaptureDisabled\":true}"));
}
TEST_F(ArcPolicyBridgeTest, VideoCaptureAllowedTest) {
policy_map().Set(
policy::key::kVideoCaptureAllowed, policy::POLICY_LEVEL_MANDATORY,
policy::POLICY_SCOPE_USER, policy::POLICY_SOURCE_CLOUD,
base::WrapUnique(new base::FundamentalValue(false)), nullptr);
policy_bridge()->GetPolicies(
PolicyStringCallback("{\"cameraDisabled\":true}"));
}
TEST_F(ArcPolicyBridgeTest, AudioCaptureAllowedTest) {
policy_map().Set(
policy::key::kAudioCaptureAllowed, policy::POLICY_LEVEL_MANDATORY,
policy::POLICY_SCOPE_USER, policy::POLICY_SOURCE_CLOUD,
base::WrapUnique(new base::FundamentalValue(false)), nullptr);
policy_bridge()->GetPolicies(
PolicyStringCallback("{\"unmuteMicrophoneDisabled\":true}"));
}
TEST_F(ArcPolicyBridgeTest, DefaultGeolocationSettingTest) {
policy_map().Set(policy::key::kDefaultGeolocationSetting,
policy::POLICY_LEVEL_MANDATORY, policy::POLICY_SCOPE_USER,
policy::POLICY_SOURCE_CLOUD,
base::WrapUnique(new base::FundamentalValue(1)), nullptr);
policy_bridge()->GetPolicies(
PolicyStringCallback("{\"shareLocationDisabled\":false}"));
policy_map().Set(policy::key::kDefaultGeolocationSetting,
policy::POLICY_LEVEL_MANDATORY, policy::POLICY_SCOPE_USER,
policy::POLICY_SOURCE_CLOUD,
base::WrapUnique(new base::FundamentalValue(2)), nullptr);
policy_bridge()->GetPolicies(
PolicyStringCallback("{\"shareLocationDisabled\":true}"));
policy_map().Set(policy::key::kDefaultGeolocationSetting,
policy::POLICY_LEVEL_MANDATORY, policy::POLICY_SCOPE_USER,
policy::POLICY_SOURCE_CLOUD,
base::WrapUnique(new base::FundamentalValue(3)), nullptr);
policy_bridge()->GetPolicies(
PolicyStringCallback("{\"shareLocationDisabled\":false}"));
}
TEST_F(ArcPolicyBridgeTest, ExternalStorageDisabledTest) {
policy_map().Set(policy::key::kExternalStorageDisabled,
policy::POLICY_LEVEL_MANDATORY, policy::POLICY_SCOPE_USER,
policy::POLICY_SOURCE_CLOUD,
base::WrapUnique(new base::FundamentalValue(true)), nullptr);
policy_bridge()->GetPolicies(
PolicyStringCallback("{\"mountPhysicalMediaDisabled\":true}"));
}
TEST_F(ArcPolicyBridgeTest, URLBlacklistTest) {
base::ListValue blacklist;
blacklist.Append(new base::StringValue("www.blacklist1.com"));
blacklist.Append(new base::StringValue("www.blacklist2.com"));
policy_map().Set(policy::key::kURLBlacklist, policy::POLICY_LEVEL_MANDATORY,
policy::POLICY_SCOPE_USER, policy::POLICY_SOURCE_CLOUD,
blacklist.CreateDeepCopy(), nullptr);
policy_bridge()->GetPolicies(
PolicyStringCallback("{\"globalAppRestrictions\":"
"{\"com.android.browser:URLBlacklist\":"
"[\"www.blacklist1.com\","
"\"www.blacklist2.com\""
"]}}"));
}
TEST_F(ArcPolicyBridgeTest, URLWhitelistTest) {
base::ListValue whitelist;
whitelist.Append(new base::StringValue("www.whitelist1.com"));
whitelist.Append(new base::StringValue("www.whitelist2.com"));
policy_map().Set(policy::key::kURLWhitelist, policy::POLICY_LEVEL_MANDATORY,
policy::POLICY_SCOPE_USER, policy::POLICY_SOURCE_CLOUD,
whitelist.CreateDeepCopy(), nullptr);
policy_bridge()->GetPolicies(
PolicyStringCallback("{\"globalAppRestrictions\":"
"{\"com.android.browser:URLWhitelist\":"
"[\"www.whitelist1.com\","
"\"www.whitelist2.com\""
"]}}"));
}
TEST_F(ArcPolicyBridgeTest, MultiplePoliciesTest) {
policy_map().Set(
policy::key::kArcPolicy, policy::POLICY_LEVEL_MANDATORY,
policy::POLICY_SCOPE_USER, policy::POLICY_SOURCE_CLOUD,
base::WrapUnique(new base::StringValue(
"{\"applications\":"
"[{\"packageName\":\"com.google.android.apps.youtube.kids\","
"\"installType\":\"REQUIRED\","
"\"lockTaskAllowed\":false,"
"\"permissionGrants\":[]"
"}],"
"\"defaultPermissionPolicy\":\"GRANT\"}")),
nullptr);
policy_map().Set(
policy::key::kHomepageLocation, policy::POLICY_LEVEL_MANDATORY,
policy::POLICY_SCOPE_USER, policy::POLICY_SOURCE_CLOUD,
base::WrapUnique(new base::StringValue("http://chromium.org")), nullptr);
policy_map().Set(
policy::key::kVideoCaptureAllowed, policy::POLICY_LEVEL_MANDATORY,
policy::POLICY_SCOPE_USER, policy::POLICY_SOURCE_CLOUD,
base::WrapUnique(new base::FundamentalValue(false)), nullptr);
policy_bridge()->GetPolicies(PolicyStringCallback(
"{\"applications\":"
"[{\"installType\":\"REQUIRED\","
"\"lockTaskAllowed\":false,"
"\"packageName\":\"com.google.android.apps.youtube.kids\","
"\"permissionGrants\":[]"
"}],"
"\"cameraDisabled\":true,"
"\"defaultPermissionPolicy\":\"GRANT\""
"}"));
}
} // namespace arc