Commit 66dd6fe1 authored by Nikita Podguzov's avatar Nikita Podguzov Committed by Commit Bot

Printing API: Add integration tests for chrome.printingMetrics API

Bug: 992889
Change-Id: I5c45d9089a02844e0043e314e69cb57058b33b7d
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1798666
Commit-Queue: Nikita Podguzov <nikitapodguzov@chromium.org>
Reviewed-by: default avatarSean Kau <skau@chromium.org>
Reviewed-by: default avatarDenis Kuznetsov <antrim@chromium.org>
Reviewed-by: default avatarDevlin <rdevlin.cronin@chromium.org>
Cr-Commit-Position: refs/heads/master@{#700158}
parent 61fded6b
// 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 "base/bind.h"
#include "chrome/browser/chromeos/policy/browser_policy_connector_chromeos.h"
#include "chrome/browser/chromeos/printing/cups_print_job.h"
#include "chrome/browser/chromeos/printing/cups_print_job_manager_factory.h"
#include "chrome/browser/chromeos/printing/test_cups_print_job_manager.h"
#include "chrome/browser/extensions/extension_apitest.h"
#include "chrome/browser/extensions/policy_test_utils.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/ui/browser.h"
#include "chrome/test/base/ui_test_utils.h"
#include "components/policy/core/common/mock_configuration_policy_provider.h"
#include "extensions/test/extension_test_message_listener.h"
#include "extensions/test/result_catcher.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace extensions {
namespace {
constexpr char kUpdateManifestPath[] =
"/extensions/api_test/printing_metrics/update_manifest.xml";
// The managed_storage extension has a key defined in its manifest, so that
// its extension ID is well-known and the policy system can push policies for
// the extension.
constexpr char kTestExtensionID[] = "cmgkkmeeoiceijkpmaabbmpgnkpaaela";
std::unique_ptr<KeyedService> BuildTestCupsPrintJobManager(
content::BrowserContext* context) {
return std::make_unique<chromeos::TestCupsPrintJobManager>(
Profile::FromBrowserContext(context));
}
} // namespace
class PrintJobFinishedEventDispatcherApiTest : public ExtensionApiTest {
public:
PrintJobFinishedEventDispatcherApiTest() {}
~PrintJobFinishedEventDispatcherApiTest() override = default;
protected:
void SetUpInProcessBrowserTestFixture() override {
// Init the user policy provider.
EXPECT_CALL(policy_provider_, IsInitializationComplete(testing::_))
.WillRepeatedly(testing::Return(true));
policy_provider_.SetAutoRefresh();
policy::BrowserPolicyConnector::SetPolicyProviderForTesting(
&policy_provider_);
will_create_browser_context_services_subscription_ =
BrowserContextDependencyManager::GetInstance()
->RegisterWillCreateBrowserContextServicesCallbackForTesting(
base::BindRepeating(&PrintJobFinishedEventDispatcherApiTest::
OnWillCreateBrowserContextServices,
base::Unretained(this)));
ExtensionApiTest::SetUpInProcessBrowserTestFixture();
}
policy::MockConfigurationPolicyProvider policy_provider_;
private:
void OnWillCreateBrowserContextServices(content::BrowserContext* context) {
chromeos::CupsPrintJobManagerFactory::GetInstance()->SetTestingFactory(
context, base::BindRepeating(&BuildTestCupsPrintJobManager));
}
std::unique_ptr<
base::CallbackList<void(content::BrowserContext*)>::Subscription>
will_create_browser_context_services_subscription_;
DISALLOW_COPY_AND_ASSIGN(PrintJobFinishedEventDispatcherApiTest);
};
IN_PROC_BROWSER_TEST_F(PrintJobFinishedEventDispatcherApiTest,
OnPrintJobFinished) {
constexpr char kTitle[] = "title";
const int kPagesNumber = 3;
policy_test_utils::SetUpEmbeddedTestServer(embedded_test_server());
ASSERT_TRUE(embedded_test_server()->Start());
policy_test_utils::SetExtensionInstallForcelistPolicy(
kTestExtensionID, embedded_test_server()->GetURL(kUpdateManifestPath),
profile(), &policy_provider_);
const Extension* extension =
ExtensionRegistry::Get(profile())->enabled_extensions().GetByID(
kTestExtensionID);
ASSERT_TRUE(extension);
ResultCatcher catcher;
Browser* const new_browser = CreateBrowser(profile());
ui_test_utils::NavigateToURL(
new_browser, extension->GetResourceURL("on_print_job_finished.html"));
std::unique_ptr<chromeos::CupsPrintJob> print_job =
std::make_unique<chromeos::CupsPrintJob>(
chromeos::Printer(), /*job_id=*/0, kTitle, kPagesNumber,
::printing::PrintJob::Source::PRINT_PREVIEW,
/*source_id=*/"", chromeos::printing::proto::PrintSettings());
chromeos::TestCupsPrintJobManager* print_job_manager =
static_cast<chromeos::TestCupsPrintJobManager*>(
chromeos::CupsPrintJobManagerFactory::GetForBrowserContext(
browser()->profile()));
print_job_manager->CreatePrintJob(print_job.get());
print_job_manager->CancelPrintJob(print_job.get());
ASSERT_TRUE(catcher.GetNextResult()) << catcher.message();
}
} // namespace extensions
// 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 "base/bind.h"
#include "chrome/browser/chromeos/extensions/printing_metrics/printing_metrics_api.h"
#include "chrome/browser/chromeos/policy/browser_policy_connector_chromeos.h"
#include "chrome/browser/chromeos/printing/cups_print_job.h"
#include "chrome/browser/chromeos/printing/cups_print_job_manager_factory.h"
#include "chrome/browser/chromeos/printing/history/print_job_history_service_factory.h"
#include "chrome/browser/chromeos/printing/history/test_print_job_history_service_observer.h"
#include "chrome/browser/chromeos/printing/test_cups_print_job_manager.h"
#include "chrome/browser/extensions/extension_apitest.h"
#include "chrome/browser/extensions/policy_test_utils.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/ui/browser.h"
#include "chrome/test/base/ui_test_utils.h"
#include "components/policy/core/common/mock_configuration_policy_provider.h"
#include "extensions/test/extension_test_message_listener.h"
#include "extensions/test/result_catcher.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace extensions {
namespace {
constexpr char kUpdateManifestPath[] =
"/extensions/api_test/printing_metrics/update_manifest.xml";
// The managed_storage extension has a key defined in its manifest, so that
// its extension ID is well-known and the policy system can push policies for
// the extension.
constexpr char kTestExtensionID[] = "cmgkkmeeoiceijkpmaabbmpgnkpaaela";
std::unique_ptr<KeyedService> BuildTestCupsPrintJobManager(
content::BrowserContext* context) {
return std::make_unique<chromeos::TestCupsPrintJobManager>(
Profile::FromBrowserContext(context));
}
} // namespace
class PrintingMetricsApiTest : public ExtensionApiTest {
public:
PrintingMetricsApiTest() {}
~PrintingMetricsApiTest() override = default;
protected:
void SetUpInProcessBrowserTestFixture() override {
// Init the user policy provider.
EXPECT_CALL(policy_provider_, IsInitializationComplete(testing::_))
.WillRepeatedly(testing::Return(true));
policy_provider_.SetAutoRefresh();
policy::BrowserPolicyConnector::SetPolicyProviderForTesting(
&policy_provider_);
will_create_browser_context_services_subscription_ =
BrowserContextDependencyManager::GetInstance()
->RegisterWillCreateBrowserContextServicesCallbackForTesting(
base::BindRepeating(
&PrintingMetricsApiTest::OnWillCreateBrowserContextServices,
base::Unretained(this)));
ExtensionApiTest::SetUpInProcessBrowserTestFixture();
}
policy::MockConfigurationPolicyProvider policy_provider_;
private:
void OnWillCreateBrowserContextServices(content::BrowserContext* context) {
chromeos::CupsPrintJobManagerFactory::GetInstance()->SetTestingFactory(
context, base::BindRepeating(&BuildTestCupsPrintJobManager));
}
std::unique_ptr<
base::CallbackList<void(content::BrowserContext*)>::Subscription>
will_create_browser_context_services_subscription_;
DISALLOW_COPY_AND_ASSIGN(PrintingMetricsApiTest);
};
IN_PROC_BROWSER_TEST_F(PrintingMetricsApiTest, GetPrintJobs) {
constexpr char kTitle[] = "title";
const int kPagesNumber = 3;
policy_test_utils::SetUpEmbeddedTestServer(embedded_test_server());
ASSERT_TRUE(embedded_test_server()->Start());
policy_test_utils::SetExtensionInstallForcelistPolicy(
kTestExtensionID, embedded_test_server()->GetURL(kUpdateManifestPath),
profile(), &policy_provider_);
const Extension* extension =
ExtensionRegistry::Get(profile())->enabled_extensions().GetByID(
kTestExtensionID);
ASSERT_TRUE(extension);
base::RunLoop run_loop;
chromeos::TestPrintJobHistoryServiceObserver observer(
chromeos::PrintJobHistoryServiceFactory::GetForBrowserContext(
browser()->profile()),
run_loop.QuitClosure());
std::unique_ptr<chromeos::CupsPrintJob> print_job =
std::make_unique<chromeos::CupsPrintJob>(
chromeos::Printer(), /*job_id=*/0, kTitle, kPagesNumber,
::printing::PrintJob::Source::PRINT_PREVIEW,
/*source_id=*/"", chromeos::printing::proto::PrintSettings());
chromeos::TestCupsPrintJobManager* print_job_manager =
static_cast<chromeos::TestCupsPrintJobManager*>(
chromeos::CupsPrintJobManagerFactory::GetForBrowserContext(
browser()->profile()));
print_job_manager->CreatePrintJob(print_job.get());
print_job_manager->CancelPrintJob(print_job.get());
run_loop.Run();
Browser* const new_browser = CreateBrowser(profile());
SetCustomArg(kTitle);
extensions::ResultCatcher catcher;
ui_test_utils::NavigateToURL(
new_browser, extension->GetResourceURL("get_print_jobs.html"));
ASSERT_TRUE(catcher.GetNextResult()) << catcher.message();
}
// Ensure that extensions that are not pre-installed by policy throw an install
// warning if they request the printingMetrics permission in the manifest and
// that such extensions don't see the chrome.printingMetrics namespace.
IN_PROC_BROWSER_TEST_F(PrintingMetricsApiTest, IsRestrictedToPolicyExtension) {
ASSERT_TRUE(RunExtensionSubtest("printing_metrics", "api_not_available.html",
kFlagIgnoreManifestWarnings));
base::FilePath extension_path =
test_data_dir_.AppendASCII("printing_metrics");
extensions::ExtensionRegistry* registry =
extensions::ExtensionRegistry::Get(profile());
const extensions::Extension* extension =
GetExtensionByPath(registry->enabled_extensions(), extension_path);
ASSERT_FALSE(extension->install_warnings().empty());
EXPECT_EQ("'printingMetrics' is not allowed for specified install location.",
extension->install_warnings()[0].message);
}
} // namespace extensions
...@@ -2045,6 +2045,8 @@ if (!is_android) { ...@@ -2045,6 +2045,8 @@ if (!is_android) {
"../browser/chromeos/extensions/login_screen/login_state/login_state_apitest.cc", "../browser/chromeos/extensions/login_screen/login_state/login_state_apitest.cc",
"../browser/chromeos/extensions/login_screen/login_state/session_state_changed_event_dispatcher_apitest.cc", "../browser/chromeos/extensions/login_screen/login_state/session_state_changed_event_dispatcher_apitest.cc",
"../browser/chromeos/extensions/login_screen/storage_apitest.cc", "../browser/chromeos/extensions/login_screen/storage_apitest.cc",
"../browser/chromeos/extensions/printing_metrics/print_job_finished_event_dispatcher_apitest.cc",
"../browser/chromeos/extensions/printing_metrics/printing_metrics_apitest.cc",
"../browser/chromeos/extensions/users_private/users_private_apitest.cc", "../browser/chromeos/extensions/users_private/users_private_apitest.cc",
"../browser/chromeos/extensions/wallpaper_apitest.cc", "../browser/chromeos/extensions/wallpaper_apitest.cc",
"../browser/chromeos/extensions/wallpaper_manager_browsertest.cc", "../browser/chromeos/extensions/wallpaper_manager_browsertest.cc",
...@@ -2249,6 +2251,10 @@ if (!is_android) { ...@@ -2249,6 +2251,10 @@ if (!is_android) {
"../browser/chromeos/policy/user_policy_test_helper.h", "../browser/chromeos/policy/user_policy_test_helper.h",
"../browser/chromeos/policy/variations_service_policy_browsertest.cc", "../browser/chromeos/policy/variations_service_policy_browsertest.cc",
"../browser/chromeos/preferences_chromeos_browsertest.cc", "../browser/chromeos/preferences_chromeos_browsertest.cc",
"../browser/chromeos/printing/history/test_print_job_history_service_observer.cc",
"../browser/chromeos/printing/history/test_print_job_history_service_observer.h",
"../browser/chromeos/printing/test_cups_print_job_manager.cc",
"../browser/chromeos/printing/test_cups_print_job_manager.h",
"../browser/chromeos/profiles/profile_helper_browsertest.cc", "../browser/chromeos/profiles/profile_helper_browsertest.cc",
"../browser/chromeos/shutdown_policy_browsertest.cc", "../browser/chromeos/shutdown_policy_browsertest.cc",
"../browser/chromeos/startup_settings_cache_browsertest.cc", "../browser/chromeos/startup_settings_cache_browsertest.cc",
......
-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC8PhT/gPpbk9uL
/xUvylB0QyIlr/zU9+UtYCDsiT0KqouuusP8FtOex4pyt+be6/xljjtcw5j/WRmk
zK+UOT2HfpKTqiFnPkHAmMycEPzaYeJWskiGSY/8pHiD2x4hQBqgZTg7q+4iUNMo
psH7uKVrXJqvbzqqYM0aZPL9mj+wTrnR9jcoknaRUil/liFBPm5+lhok9LwRtyzg
Qd3zUnhegYDJ5tv4P3Wl76uSGDWXXTKjg8BMyoCCFH9/QJmFAXvsrrynwaE/PDAJ
ieGR1qcMOy3kHBGQjaEebmTNaxjBcKc8iuP/mCYANQ4ktWwdn8ikTJdrogsL2lIv
v9FUIx/7AgMBAAECggEAF1qxGo/4alMvn7ClLW7cHh3UHI6Mf37v689rgPJ35HJg
mRbVHi9WJZ1brmblhE5ihoD9GWxaTNfTktAi5RtYPblfhbrLoSD8DGEzWsDQILyY
gFQRzmNNs1+pD1wojUyENoEdrGg6HP91FdaL5jyJfVvvBF6i4yTWXXTHzDHjvpjs
rrW143b4LbcpstBatgNHefBPvJL9bBdqvBpceREWE4HIXtj1B3Ac8vhnvNcH3eZF
909/VO4Xugp+8MHm+m2onFTvRkDkl/JWSPmJHmftuwMxBP2JcarZfcaJ0V568jrZ
Op1IA/y+PasowN3zHX2lAFnkkpvtza1JGm1qWjpllQKBgQDb1rMFd3Tge4oA+/YL
UGEZMf2PfgZkSLIt1Q0PxvvRO4ybau/MTeNkEp7wig0mE+WIP7s3ebdhlY+jBoNg
qDvS3LWzKkL1jNsy1jqGqwYxuEmq1c9QO3GlfBV1+b96s2JWm8fdoiWoMTkBU7i0
cimuYMMCOQa5aKM7sJHUcSo2/wKBgQDbNOIw0gxWowYSNoRF6Z+R/t8BRT8k7dNN
cj5SbF8+agnlKC5jvpQ/MdjsXF9werR2V6BBXGOHXcDbTHiHrMYnBic887CXAXIC
jF8GxnpE0l0d0Kkmd3SedJKILYkBX40QkUas+GynfgjIchcIyFCCeBbhOT6pOcox
cPqx7+TzBQKBgQC1sFf8qKG79d40ugi7iQ72184MDcgSkdJQ9sf4xifQ4TpwKI1P
eP/58TnS6wW69q65UJLWYo4g5I712agy9lebCjZRgRgeAPAYr91m92oDJaAcxOC2
GqrubgL+og6Sxjb8BXvFvQEKZMQMSLlayQ+Rwv7ok2DvU3+1EVU1EuIk2QKBgBQG
cb9qAOyNOgnB5zWH0ScCNJcmH02dWFdT33OiKNVH1J2VnR9JkrtvL1TwX1ukKgZB
nQc7jHAaVXrzMnOaigOYoU8FKBWzcRngfvHcgeD1osINhNZZxVKQba55EnIIq5de
3ikBDNQERIMjQQ1xV0GD/PsYQqws9lar7osA0laNAoGANs4auFpqjoaRNypgO2G2
GqQV/Y4GAqZRxjsceZNdJ0wa+h5fkYpCEadIDQtL76hpX84opbhTuoBGNpkMeRAH
y+zRRRUqBB/dG/95C5gboEDfDYbTYvJLHFPIJ/uYyh77QoKIZdHmCKGO2VR/xur/
psX82yq4i8lQnwaFyiZM0Cw=
-----END PRIVATE KEY-----
<!--
* 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.
-->
<script src="api_not_available.js"></script>
// 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.
chrome.test.assertTrue(!chrome.printingMetrics);
chrome.test.succeed();
<!--
* 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.
-->
<script src="get_print_jobs.js"></script>
// 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.
function testGetPrintJobs(expectedTitle) {
chrome.test.runTests([() => {
chrome.printingMetrics.getPrintJobs(printJobs => {
chrome.test.assertEq(1, printJobs.length);
chrome.test.assertEq(expectedTitle, printJobs[0].title);
chrome.test.succeed();
});
}]);
}
chrome.test.getConfig(config => {
testGetPrintJobs(config.customArg);
});
{
"name": "chrome.printingMetrics",
"version": "0.1",
"manifest_version": 2,
"description": "Browser tests for chrome.printingMetrics API",
"permissions": [
"printingMetrics"
]
}
<!--
* 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.
-->
<script src="on_print_job_finished.js"></script>
// 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.
chrome.printingMetrics.onPrintJobFinished.addListener(printJobInfo => {
chrome.test.assertEqual('title', printJobInfo.title);
chrome.test.notifyPass();
});
<?xml version='1.0' encoding='UTF-8'?>
<!--
This update manifest points to the enterprise_device_attributes.crx file.
"mock.http" is a placeholder that gets substituted with the test server
address in runtime.
-->
<gupdate xmlns='http://www.google.com/update2/response' protocol='2.0'>
<app appid='cmgkkmeeoiceijkpmaabbmpgnkpaaela'>
<updatecheck
codebase='http://mock.http/extensions/api_test/printing_metrics.crx'
version='1.0.0.0' />
</app>
</gupdate>
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