Commit 4731f0a3 authored by Thanh Le's avatar Thanh Le Committed by Commit Bot

Displaying different Previews modes enabled/disabled statuses on chrome://interventions-internals.

Bug: 764413
Cq-Include-Trybots: master.tryserver.chromium.linux:closure_compilation
Change-Id: I37d9046c98e3c94030a87484249f6de20687eda1
Reviewed-on: https://chromium-review.googlesource.com/679743
Commit-Queue: Thanh Le <thanhdle@chromium.org>
Reviewed-by: default avatarDave Schuyler <dschuyler@chromium.org>
Reviewed-by: default avatarTom Sepez <tsepez@chromium.org>
Reviewed-by: default avatarRyan Sturm <ryansturm@chromium.org>
Cr-Commit-Position: refs/heads/master@{#505265}
parent 09a4d450
...@@ -12,9 +12,7 @@ ...@@ -12,9 +12,7 @@
</head> </head>
<body> <body>
<p>Interventions-Internals -- Comming soon!</p>
<div id="previewsStatuses"> <div id="previewsStatuses">
<p id="offlinePreviews"></p>
</div> </div>
</body> </body>
</html> </html>
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
// 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.
cr.define('interventions_internals', function() { cr.define('interventions_internals', () => {
let pageHandler = null; let pageHandler = null;
function init(handler) { function init(handler) {
...@@ -12,13 +12,23 @@ cr.define('interventions_internals', function() { ...@@ -12,13 +12,23 @@ cr.define('interventions_internals', function() {
function getPreviewsEnabled() { function getPreviewsEnabled() {
pageHandler.getPreviewsEnabled() pageHandler.getPreviewsEnabled()
.then(function(response) { .then((response) => {
let message = 'OfflinePreviews: '; let statuses = $('previewsStatuses');
message += response.enabled ? 'Enabled' : 'Disabled';
$('offlinePreviews').textContent = message; response.statuses.forEach((value, key) => {
let message = value.description + ': ';
message += value.enabled ? 'Enabled' : 'Disabled';
assert(!$(key), 'Component ' + key + ' already existed!');
let node = document.createElement('p');
node.setAttribute('id', key);
node.textContent = message;
statuses.appendChild(node);
});
}) })
.catch(function(error) { .catch((error) => {
node.textContent = error.message; console.error(error.message);
}); });
} }
...@@ -31,10 +41,10 @@ window.setupFn = window.setupFn || function() { ...@@ -31,10 +41,10 @@ window.setupFn = window.setupFn || function() {
return Promise.resolve(); return Promise.resolve();
}; };
document.addEventListener('DOMContentLoaded', function() { document.addEventListener('DOMContentLoaded', () => {
let pageHandler = null; let pageHandler = null;
window.setupFn().then(function() { window.setupFn().then(() => {
if (window.testPageHandler) { if (window.testPageHandler) {
pageHandler = window.testPageHandler; pageHandler = window.testPageHandler;
} else { } else {
......
...@@ -4,8 +4,14 @@ ...@@ -4,8 +4,14 @@
module mojom; module mojom;
struct PreviewsStatus {
// The human readable description of the status that will be displayed on
// chrome://interventions-internals.
string description;
bool enabled;
};
interface InterventionsInternalsPageHandler { interface InterventionsInternalsPageHandler {
// Send a message showing if previews is enabled or disabled. // Returns a map of previews modes statuses.
// Returns true if previews is enabled, and false otherwise. GetPreviewsEnabled() => (map<string, PreviewsStatus> statuses);
GetPreviewsEnabled() => (bool enabled);
}; };
...@@ -4,8 +4,24 @@ ...@@ -4,8 +4,24 @@
#include "chrome/browser/ui/webui/interventions_internals/interventions_internals_page_handler.h" #include "chrome/browser/ui/webui/interventions_internals/interventions_internals_page_handler.h"
#include <unordered_map>
#include "components/previews/core/previews_experiments.h" #include "components/previews/core/previews_experiments.h"
namespace {
// Key for status mapping.
const char kAmpRedirectionPreviews[] = "ampPreviews";
const char kClientLoFiPreviews[] = "clientLoFiPreviews";
const char kOfflinePreviews[] = "offlinePreviews";
// Description for statuses.
const char kAmpRedirectionDescription[] = "AMP Previews";
const char kClientLoFiDescription[] = "Client LoFi Previews";
const char kOfflineDesciption[] = "Offline Previews";
} // namespace
InterventionsInternalsPageHandler::InterventionsInternalsPageHandler( InterventionsInternalsPageHandler::InterventionsInternalsPageHandler(
mojom::InterventionsInternalsPageHandlerRequest request) mojom::InterventionsInternalsPageHandlerRequest request)
: binding_(this, std::move(request)) {} : binding_(this, std::move(request)) {}
...@@ -14,9 +30,22 @@ InterventionsInternalsPageHandler::~InterventionsInternalsPageHandler() {} ...@@ -14,9 +30,22 @@ InterventionsInternalsPageHandler::~InterventionsInternalsPageHandler() {}
void InterventionsInternalsPageHandler::GetPreviewsEnabled( void InterventionsInternalsPageHandler::GetPreviewsEnabled(
GetPreviewsEnabledCallback callback) { GetPreviewsEnabledCallback callback) {
// TODO(thanhdle): change enable to a dictionary with all previews mode std::unordered_map<std::string, mojom::PreviewsStatusPtr> statuses;
// status.
bool enabled = previews::params::IsOfflinePreviewsEnabled(); auto amp_status = mojom::PreviewsStatus::New();
amp_status->description = kAmpRedirectionDescription;
amp_status->enabled = previews::params::IsAMPRedirectionPreviewEnabled();
statuses[kAmpRedirectionPreviews] = std::move(amp_status);
auto client_lofi_status = mojom::PreviewsStatus::New();
client_lofi_status->description = kClientLoFiDescription;
client_lofi_status->enabled = previews::params::IsClientLoFiEnabled();
statuses[kClientLoFiPreviews] = std::move(client_lofi_status);
auto offline_status = mojom::PreviewsStatus::New();
offline_status->description = kOfflineDesciption;
offline_status->enabled = previews::params::IsOfflinePreviewsEnabled();
statuses[kOfflinePreviews] = std::move(offline_status);
std::move(callback).Run(enabled); std::move(callback).Run(std::move(statuses));
} }
// Copyright 2017 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/ui/webui/interventions_internals/interventions_internals_page_handler.h"
#include <unordered_map>
#include "base/macros.h"
#include "base/test/scoped_feature_list.h"
#include "base/test/scoped_task_environment.h"
#include "chrome/browser/ui/webui/interventions_internals/interventions_internals.mojom.h"
#include "components/previews/core/previews_features.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace {
// The key for the mapping for the enabled/disabled status map.
constexpr char kAMPRedirectionPreviews[] = "ampPreviews";
constexpr char kClientLoFiPreviews[] = "clientLoFiPreviews";
constexpr char kOfflinePreviews[] = "offlinePreviews";
// Description for statuses.
constexpr char kAmpRedirectionDescription[] = "AMP Previews";
constexpr char kClientLoFiDescription[] = "Client LoFi Previews";
constexpr char kOfflineDesciption[] = "Offline Previews";
std::unordered_map<std::string, mojom::PreviewsStatusPtr> passedInParams;
void MockGetPreviewsEnabledCallback(
std::unordered_map<std::string, mojom::PreviewsStatusPtr> params) {
passedInParams = std::move(params);
}
} // namespace
class InterventionsInternalsPageHandlerTest : public testing::Test {
public:
InterventionsInternalsPageHandlerTest()
: scoped_task_environment_(
base::test::ScopedTaskEnvironment::MainThreadType::IO) {}
~InterventionsInternalsPageHandlerTest() override {}
void SetUp() override {
scoped_task_environment_.RunUntilIdle();
request = mojo::MakeRequest(&pageHandlerPtr);
pageHandler.reset(
new InterventionsInternalsPageHandler(std::move(request)));
scoped_feature_list_ = base::MakeUnique<base::test::ScopedFeatureList>();
}
protected:
base::test::ScopedTaskEnvironment scoped_task_environment_;
mojom::InterventionsInternalsPageHandlerPtr pageHandlerPtr;
mojom::InterventionsInternalsPageHandlerRequest request;
std::unique_ptr<InterventionsInternalsPageHandler> pageHandler;
std::unique_ptr<base::test::ScopedFeatureList> scoped_feature_list_;
};
TEST_F(InterventionsInternalsPageHandlerTest, CorrectSizeOfPassingParameters) {
pageHandler->GetPreviewsEnabled(
base::BindOnce(&MockGetPreviewsEnabledCallback));
constexpr size_t expected = 3;
EXPECT_EQ(expected, passedInParams.size());
}
TEST_F(InterventionsInternalsPageHandlerTest, AMPRedirectionDisabled) {
// Init with kAMPRedirection disabled.
scoped_feature_list_->InitWithFeatures({},
{previews::features::kAMPRedirection});
pageHandler->GetPreviewsEnabled(
base::BindOnce(&MockGetPreviewsEnabledCallback));
auto amp_redirection = passedInParams.find(kAMPRedirectionPreviews);
ASSERT_NE(passedInParams.end(), amp_redirection);
EXPECT_EQ(kAmpRedirectionDescription, amp_redirection->second->description);
EXPECT_FALSE(amp_redirection->second->enabled);
}
TEST_F(InterventionsInternalsPageHandlerTest, AMPRedirectionEnabled) {
// Init with kAMPRedirection enabled.
scoped_feature_list_->InitWithFeatures({previews::features::kAMPRedirection},
{});
pageHandler->GetPreviewsEnabled(
base::BindOnce(&MockGetPreviewsEnabledCallback));
auto amp_redirection = passedInParams.find(kAMPRedirectionPreviews);
ASSERT_NE(passedInParams.end(), amp_redirection);
EXPECT_EQ(kAmpRedirectionDescription, amp_redirection->second->description);
EXPECT_TRUE(amp_redirection->second->enabled);
}
TEST_F(InterventionsInternalsPageHandlerTest, ClientLoFiDisabled) {
// Init with kClientLoFi disabled.
scoped_feature_list_->InitWithFeatures({}, {previews::features::kClientLoFi});
pageHandler->GetPreviewsEnabled(
base::BindOnce(&MockGetPreviewsEnabledCallback));
auto client_lofi = passedInParams.find(kClientLoFiPreviews);
ASSERT_NE(passedInParams.end(), client_lofi);
EXPECT_EQ(kClientLoFiDescription, client_lofi->second->description);
EXPECT_FALSE(client_lofi->second->enabled);
}
TEST_F(InterventionsInternalsPageHandlerTest, ClientLoFiEnabled) {
// Init with kClientLoFi enabled.
scoped_feature_list_->InitWithFeatures({previews::features::kClientLoFi}, {});
pageHandler->GetPreviewsEnabled(
base::BindOnce(&MockGetPreviewsEnabledCallback));
auto client_lofi = passedInParams.find(kClientLoFiPreviews);
ASSERT_NE(passedInParams.end(), client_lofi);
EXPECT_EQ(kClientLoFiDescription, client_lofi->second->description);
EXPECT_TRUE(client_lofi->second->enabled);
}
TEST_F(InterventionsInternalsPageHandlerTest, OfflinePreviewsDisabled) {
// Init with kOfflinePreviews disabled.
scoped_feature_list_->InitWithFeatures(
{}, {previews::features::kOfflinePreviews});
pageHandler->GetPreviewsEnabled(
base::BindOnce(&MockGetPreviewsEnabledCallback));
auto offline_previews = passedInParams.find(kOfflinePreviews);
ASSERT_NE(passedInParams.end(), offline_previews);
EXPECT_EQ(kOfflineDesciption, offline_previews->second->description);
EXPECT_FALSE(offline_previews->second->enabled);
}
TEST_F(InterventionsInternalsPageHandlerTest, OfflinePreviewsEnabled) {
// Init with kOfflinePreviews enabled.
scoped_feature_list_->InitWithFeatures({previews::features::kOfflinePreviews},
{});
pageHandler->GetPreviewsEnabled(
base::BindOnce(&MockGetPreviewsEnabledCallback));
auto offline_previews = passedInParams.find(kOfflinePreviews);
ASSERT_NE(passedInParams.end(), offline_previews);
EXPECT_TRUE(offline_previews->second);
EXPECT_EQ(kOfflineDesciption, offline_previews->second->description);
EXPECT_TRUE(offline_previews->second->enabled);
}
...@@ -3400,6 +3400,7 @@ test("unit_tests") { ...@@ -3400,6 +3400,7 @@ test("unit_tests") {
"../browser/ui/tests/ui_gfx_image_unittest.cc", "../browser/ui/tests/ui_gfx_image_unittest.cc",
"../browser/ui/tests/ui_gfx_image_unittest.mm", "../browser/ui/tests/ui_gfx_image_unittest.mm",
"../browser/ui/webui/fileicon_source_unittest.cc", "../browser/ui/webui/fileicon_source_unittest.cc",
"../browser/ui/webui/interventions_internals/interventions_internals_page_handler_unittest.cc",
"../browser/ui/webui/local_state/local_state_ui_unittest.cc", "../browser/ui/webui/local_state/local_state_ui_unittest.cc",
"../browser/ui/webui/log_web_ui_url_unittest.cc", "../browser/ui/webui/log_web_ui_url_unittest.cc",
"../browser/update_client/chrome_update_query_params_delegate_unittest.cc", "../browser/update_client/chrome_update_query_params_delegate_unittest.cc",
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
*/ */
/** @const {string} Path to source root. */ /** @const {string} Path to source root. */
var ROOT_PATH = '../../../../'; let ROOT_PATH = '../../../../';
/** /**
* Test fixture for InterventionsInternals WebUI testing. * Test fixture for InterventionsInternals WebUI testing.
...@@ -46,23 +46,23 @@ InterventionsInternalsUITest.prototype = { ...@@ -46,23 +46,23 @@ InterventionsInternalsUITest.prototype = {
constructor() { constructor() {
super(['getPreviewsEnabled']); super(['getPreviewsEnabled']);
/** @private {boolean} */ /** @private {!Map} */
this.previewsEnabled_ = false; this.statuses_ = new Map();
} }
/** /**
* Change the behavior of the PageHandler for testing purposes. * Setup testing map.
* @param {boolean} The new status for previews. * @param {!Map} map The testing status map.
*/ */
setPreviewsEnabled(enabled) { setTestingMap(map) {
this.previewsEnabled_ = enabled; this.statuses_ = map;
} }
/** @override */ /** @override **/
getPreviewsEnabled() { getPreviewsEnabled() {
this.methodCalled('getPreviewsEnabled'); this.methodCalled('getPreviewsEnabled');
return Promise.resolve({ return Promise.resolve({
enabled: this.previewsEnabled_, statuses: this.statuses_,
}); });
} }
} }
...@@ -75,42 +75,39 @@ InterventionsInternalsUITest.prototype = { ...@@ -75,42 +75,39 @@ InterventionsInternalsUITest.prototype = {
}, },
}; };
TEST_F('InterventionsInternalsUITest', 'PreviewStatusEnabledTest', function() { TEST_F('InterventionsInternalsUITest', 'DisplayCorrectStatuses', function() {
let setupFnResolver = this.setupFnResolver; let setupFnResolver = this.setupFnResolver;
test('EnabledStatusTest', function() { test('DisplayCorrectStatuses', () => {
// Setup testPageHandler behavior. // Setup testPageHandler behavior.
window.testPageHandler.setPreviewsEnabled(true); let testMap = new Map();
setupFnResolver.resolve(); testMap.set('params1', {
description: 'Params 1',
enabled: true,
});
testMap.set('params2', {
description: 'Params 2',
enabled: false,
});
testMap.set('params3', {
description: 'Param 3',
enabled: false,
});
window.testPageHandler.setTestingMap(testMap);
this.setupFnResolver.resolve();
return setupFnResolver.promise return setupFnResolver.promise
.then(function() { .then(() => {
return window.testPageHandler.whenCalled('getPreviewsEnabled'); return window.testPageHandler.whenCalled('getPreviewsEnabled');
}) })
.then(function() { .then(() => {
let message = document.querySelector('#offlinePreviews'); testMap.forEach((value, key) => {
expectEquals('OfflinePreviews: Enabled', message.textContent); let expected = value.description + ': ' +
}); (value.enabled ? 'Enabled' : 'Disabled');
}); let actual = document.querySelector('#' + key).textContent;
expectEquals(expected, actual);
mocha.run(); });
});
TEST_F('InterventionsInternalsUITest', 'PreviewStatusDisabledTest', function() {
let setupFnResolver = this.setupFnResolver;
test('DisabledStatusTest', function() {
// Setup testPageHandler behavior.
window.testPageHandler.setPreviewsEnabled(false);
setupFnResolver.resolve();
return setupFnResolver.promise
.then(function() {
return window.testPageHandler.whenCalled('getPreviewsEnabled');
})
.then(function() {
let message = document.querySelector('#offlinePreviews');
expectEquals('OfflinePreviews: Disabled', message.textContent);
}); });
}); });
......
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