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 @@
</head>
<body>
<p>Interventions-Internals -- Comming soon!</p>
<div id="previewsStatuses">
<p id="offlinePreviews"></p>
</div>
</body>
</html>
......@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
cr.define('interventions_internals', function() {
cr.define('interventions_internals', () => {
let pageHandler = null;
function init(handler) {
......@@ -12,13 +12,23 @@ cr.define('interventions_internals', function() {
function getPreviewsEnabled() {
pageHandler.getPreviewsEnabled()
.then(function(response) {
let message = 'OfflinePreviews: ';
message += response.enabled ? 'Enabled' : 'Disabled';
$('offlinePreviews').textContent = message;
.then((response) => {
let statuses = $('previewsStatuses');
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) {
node.textContent = error.message;
.catch((error) => {
console.error(error.message);
});
}
......@@ -31,10 +41,10 @@ window.setupFn = window.setupFn || function() {
return Promise.resolve();
};
document.addEventListener('DOMContentLoaded', function() {
document.addEventListener('DOMContentLoaded', () => {
let pageHandler = null;
window.setupFn().then(function() {
window.setupFn().then(() => {
if (window.testPageHandler) {
pageHandler = window.testPageHandler;
} else {
......
......@@ -4,8 +4,14 @@
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 {
// Send a message showing if previews is enabled or disabled.
// Returns true if previews is enabled, and false otherwise.
GetPreviewsEnabled() => (bool enabled);
// Returns a map of previews modes statuses.
GetPreviewsEnabled() => (map<string, PreviewsStatus> statuses);
};
......@@ -4,8 +4,24 @@
#include "chrome/browser/ui/webui/interventions_internals/interventions_internals_page_handler.h"
#include <unordered_map>
#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(
mojom::InterventionsInternalsPageHandlerRequest request)
: binding_(this, std::move(request)) {}
......@@ -14,9 +30,22 @@ InterventionsInternalsPageHandler::~InterventionsInternalsPageHandler() {}
void InterventionsInternalsPageHandler::GetPreviewsEnabled(
GetPreviewsEnabledCallback callback) {
// TODO(thanhdle): change enable to a dictionary with all previews mode
// status.
bool enabled = previews::params::IsOfflinePreviewsEnabled();
std::unordered_map<std::string, mojom::PreviewsStatusPtr> statuses;
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") {
"../browser/ui/tests/ui_gfx_image_unittest.cc",
"../browser/ui/tests/ui_gfx_image_unittest.mm",
"../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/log_web_ui_url_unittest.cc",
"../browser/update_client/chrome_update_query_params_delegate_unittest.cc",
......
......@@ -7,7 +7,7 @@
*/
/** @const {string} Path to source root. */
var ROOT_PATH = '../../../../';
let ROOT_PATH = '../../../../';
/**
* Test fixture for InterventionsInternals WebUI testing.
......@@ -46,23 +46,23 @@ InterventionsInternalsUITest.prototype = {
constructor() {
super(['getPreviewsEnabled']);
/** @private {boolean} */
this.previewsEnabled_ = false;
/** @private {!Map} */
this.statuses_ = new Map();
}
/**
* Change the behavior of the PageHandler for testing purposes.
* @param {boolean} The new status for previews.
* Setup testing map.
* @param {!Map} map The testing status map.
*/
setPreviewsEnabled(enabled) {
this.previewsEnabled_ = enabled;
setTestingMap(map) {
this.statuses_ = map;
}
/** @override */
/** @override **/
getPreviewsEnabled() {
this.methodCalled('getPreviewsEnabled');
return Promise.resolve({
enabled: this.previewsEnabled_,
statuses: this.statuses_,
});
}
}
......@@ -75,42 +75,39 @@ InterventionsInternalsUITest.prototype = {
},
};
TEST_F('InterventionsInternalsUITest', 'PreviewStatusEnabledTest', function() {
TEST_F('InterventionsInternalsUITest', 'DisplayCorrectStatuses', function() {
let setupFnResolver = this.setupFnResolver;
test('EnabledStatusTest', function() {
test('DisplayCorrectStatuses', () => {
// Setup testPageHandler behavior.
window.testPageHandler.setPreviewsEnabled(true);
setupFnResolver.resolve();
let testMap = new Map();
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
.then(function() {
.then(() => {
return window.testPageHandler.whenCalled('getPreviewsEnabled');
})
.then(function() {
let message = document.querySelector('#offlinePreviews');
expectEquals('OfflinePreviews: Enabled', message.textContent);
});
});
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);
.then(() => {
testMap.forEach((value, key) => {
let expected = value.description + ': ' +
(value.enabled ? 'Enabled' : 'Disabled');
let actual = document.querySelector('#' + key).textContent;
expectEquals(expected, actual);
});
});
});
......
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