Index: chrome/browser/extensions/api/enterprise_device_attributes/enterprise_device_attributes_apitest.cc |
diff --git a/chrome/browser/extensions/api/enterprise_device_attributes/enterprise_device_attributes_apitest.cc b/chrome/browser/extensions/api/enterprise_device_attributes/enterprise_device_attributes_apitest.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..925943f36d48694e74d834ed2aa59d40b6e6a117 |
--- /dev/null |
+++ b/chrome/browser/extensions/api/enterprise_device_attributes/enterprise_device_attributes_apitest.cc |
@@ -0,0 +1,164 @@ |
+// Copyright (c) 2015 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 "chrome/browser/chromeos/policy/browser_policy_connector_chromeos.h" |
+#include "chrome/browser/chromeos/policy/device_policy_cros_browser_test.h" |
+#include "chrome/browser/chromeos/policy/stub_enterprise_install_attributes.h" |
+#include "chrome/browser/extensions/api/enterprise_device_attributes/enterprise_device_attributes_api.h" |
+#include "chrome/browser/extensions/extension_apitest.h" |
+#include "chromeos/dbus/fake_session_manager_client.h" |
+#include "chromeos/login/user_names.h" |
+#include "extensions/browser/api_test_utils.h" |
+#include "extensions/common/manifest_constants.h" |
+#include "extensions/common/permissions/permissions_info.h" |
+ |
+namespace { |
+ const std::string kDeviceId = "device_id"; |
pneubeck (no reviews)
2015/07/23 12:53:22
nit: indentation is wrong (just run 'git cl format
Polina Bondarenko
2015/07/24 16:47:58
Done.
|
+} |
+ |
+namespace extensions { |
+ |
+// Base class for apitests - inits the testing enviroment init, provides API for |
pneubeck (no reviews)
2015/07/23 12:53:22
this comment can be removed
instead rename it to
Polina Bondarenko
2015/07/24 16:47:59
Done.
|
+// testing. |
+class EnterpriseDeviceAttributesBase : public ExtensionApiTest { |
+ public: |
+ EnterpriseDeviceAttributesBase() |
+ : fake_session_manager_client_(new chromeos::FakeSessionManagerClient) { |
+ |
pneubeck (no reviews)
2015/07/23 12:53:22
nit: remove empty line
Polina Bondarenko
2015/07/24 16:47:59
Done.
|
+ } |
+ |
+ protected: |
+ void SetUpInProcessBrowserTestFixture() override { |
+ chromeos::DBusThreadManager::GetSetterForTesting()->SetSessionManagerClient( |
+ scoped_ptr<chromeos::SessionManagerClient>(fake_session_manager_client_)); |
+ ExtensionApiTest::SetUpInProcessBrowserTestFixture(); |
+ } |
+ |
+ // Inits the device policy and install attributes, should be invoked before |
+ // browser init. |
+ void InitTest(const std::string& domain) { |
+ // Set up fake install attributes. |
+ scoped_ptr<policy::StubEnterpriseInstallAttributes> attributes( |
+ new policy::StubEnterpriseInstallAttributes()); |
+ |
+ attributes->SetDomain(domain); |
+ attributes->SetRegistrationUser(chromeos::login::kStubUser); |
+ policy::BrowserPolicyConnectorChromeOS::SetInstallAttributesForTesting( |
+ attributes.release()); |
+ |
+ test_helper_.InstallOwnerKey(); |
+ // Init the device policy. |
+ policy::DevicePolicyBuilder* device_policy = test_helper_.device_policy(); |
+ device_policy->SetDefaultSigningKey(); |
+ device_policy->policy_data().set_directory_api_id(kDeviceId); |
+ device_policy->Build(); |
+ |
+ fake_session_manager_client_->set_device_policy(device_policy->GetBlob()); |
+ fake_session_manager_client_->OnPropertyChangeComplete(true); |
+ } |
+ |
+ // Runs test with the expected directory device ID value and the extension |
+ // location. |
+ void RunTest(const std::string& expect_value, |
+ const Manifest::Location location) { |
+ // Init the testing extension function. |
+ scoped_refptr<EnterpriseDeviceAttributesGetDirectoryDeviceIdFunction> |
+ get_device_id_function( |
+ new EnterpriseDeviceAttributesGetDirectoryDeviceIdFunction()); |
+ |
+ // |feature_full_name| = permission:<Extension API name> |
+ // The get_device_id_function - is a permission feature. |
pneubeck (no reviews)
2015/07/23 12:53:22
I don't understand this part of the comment
Polina Bondarenko
2015/07/24 16:47:59
Done.
|
+ std::string feature_full_name = std::string("permission:") + |
+ EnterpriseDeviceAttributesGetDirectoryDeviceIdFunction::function_name(); |
+ feature_full_name.erase(feature_full_name.find_last_of('.'), |
+ feature_full_name.size()); |
+ get_device_id_function->set_name(feature_full_name.c_str()); |
pneubeck (no reviews)
2015/07/23 12:53:22
as far as I understand, you're testing several ort
Polina Bondarenko
2015/07/24 16:47:58
Done.
|
+ get_device_id_function->set_has_callback(true); |
+ |
+ // Init manifest for the extension. |
+ base::DictionaryValue manifest; |
+ manifest.SetString(manifest_keys::kVersion, "1.0.0.0"); |
+ manifest.SetString(manifest_keys::kName, "test"); |
+ base::ListValue* permission_list = new base::ListValue; |
+ // Should have permission to use the testing extension API. |
+ permission_list->Append( |
+ new base::StringValue(PermissionsInfo::GetInstance()-> |
+ GetByID(APIPermission::kEnterpriseDeviceAttributes)->name())); |
+ manifest.Set(manifest_keys::kPermissions, permission_list); |
+ |
+ // Creates the extension with appropriate location and permissions. |
+ scoped_refptr<extensions::Extension> extension = |
+ api_test_utils::CreateExtension(location, &manifest, ""); |
+ get_device_id_function->set_extension(extension); |
+ |
+ // Check if the extension has permissions to the testing function. |
+ EXPECT_EQ(location == Manifest::EXTERNAL_POLICY, |
+ get_device_id_function->HasPermission()); |
+ |
+ // Run the testing function and check result. |
+ scoped_ptr<base::Value> result( |
+ api_test_utils::RunFunctionAndReturnSingleResult( |
+ get_device_id_function.get(), "[]", browser()->profile())); |
+ |
+ std::string value; |
+ EXPECT_TRUE(result->GetAsString(&value)); |
+ EXPECT_EQ(expect_value, value); |
+ } |
+ |
+ private: |
+ chromeos::FakeSessionManagerClient* fake_session_manager_client_; |
+ policy::DevicePolicyCrosTestHelper test_helper_; |
+}; |
+ |
+// Creates affiliated user before browser init. |
pneubeck (no reviews)
2015/07/23 12:53:22
nit: s/init/initializes/
Polina Bondarenko
2015/07/24 16:47:59
Done.
|
+class EnterpriseDeviceAttributesAffiliatedTest : |
+ public EnterpriseDeviceAttributesBase { |
+ protected: |
+ void SetUpInProcessBrowserTestFixture() override { |
+ EnterpriseDeviceAttributesBase::SetUpInProcessBrowserTestFixture(); |
+ |
+ InitTest(kDomain); |
+ } |
+ private: |
+ const std::string kDomain = "gmail.com"; |
pneubeck (no reviews)
2015/07/23 12:53:22
could you instead pass this to the Base constructo
Polina Bondarenko
2015/07/24 16:47:58
Done.
|
+}; |
+ |
+// Creates non-affiliated user before browser init. |
pneubeck (no reviews)
2015/07/23 12:53:22
nit: s/init/initializes/
Polina Bondarenko
2015/07/24 16:47:58
Done.
|
+class EnterpriseDeviceAttributesNonAffiliatedTest : |
+ public EnterpriseDeviceAttributesBase { |
+ protected: |
+ void SetUpInProcessBrowserTestFixture() override { |
+ EnterpriseDeviceAttributesBase::SetUpInProcessBrowserTestFixture(); |
+ |
+ InitTest(kDomain); |
+ } |
+ private: |
+ const std::string kDomain = "example.com"; |
+}; |
+ |
+// Tests the case when the user is affiliated and the extension has been |
pneubeck (no reviews)
2015/07/23 12:53:22
better describe what the rule or fact is that you
Polina Bondarenko
2015/07/24 16:47:59
Done.
|
+// force installed by policy. |
+IN_PROC_BROWSER_TEST_F(EnterpriseDeviceAttributesAffiliatedTest, Success) { |
+ RunTest(kDeviceId, Manifest::EXTERNAL_POLICY); |
+} |
+ |
+// Tests the case when the user is affiliated and the extension is the part of |
+// external component of Chrome OS. |
+IN_PROC_BROWSER_TEST_F(EnterpriseDeviceAttributesAffiliatedTest, Failure) { |
+ RunTest(kDeviceId, Manifest::EXTERNAL_COMPONENT); |
pneubeck (no reviews)
2015/07/23 12:53:22
why component?
you might instead want to ensure th
Polina Bondarenko
2015/07/24 16:47:58
Done.
|
+} |
+ |
+// Tests the case when the user is non affiliated and the extension has been |
+// force installed by policy. |
+IN_PROC_BROWSER_TEST_F(EnterpriseDeviceAttributesNonAffiliatedTest, |
+ EmptyString) { |
+ RunTest("", Manifest::EXTERNAL_POLICY); |
+} |
+ |
+// Tests the case when the user is non affiliated and the extension is the part |
+// of an integrat component of Chrome. |
+IN_PROC_BROWSER_TEST_F(EnterpriseDeviceAttributesNonAffiliatedTest, Failure) { |
+ RunTest("", Manifest::COMPONENT); |
+} |
+} // namespace extensions |