blob: bc630de15f08c594124b7aa488597bd29e6607eb [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 "components/supervised_user_error_page/supervised_user_error_page.h"
#include "base/macros.h"
#include "base/strings/string16.h"
#include "base/strings/string_number_conversions.h"
#include "base/strings/utf_string_conversions.h"
#include "base/values.h"
#include "components/grit/components_resources.h"
#include "components/strings/grit/components_strings.h"
#include "ui/base/l10n/l10n_util.h"
#include "ui/base/resource/resource_bundle.h"
#include "ui/base/webui/jstemplate_builder.h"
#include "ui/base/webui/web_ui_util.h"
namespace supervised_user_error_page {
namespace {
static const int kAvatarSize1x = 36;
static const int kAvatarSize2x = 72;
bool ReasonIsAutomatic(FilteringBehaviorReason reason) {
return reason == ASYNC_CHECKER || reason == BLACKLIST;
}
std::string BuildAvatarImageUrl(const std::string& url, int size) {
std::string result = url;
size_t slash = result.rfind('/');
if (slash != std::string::npos) {
// Check if the URL already contains the monogram (-mo) option.
// In that case, we must use the '-' separator, instead of '/'.
std::string separator = result.substr(slash - 3, 3) == "/mo" ? "-" : "/";
result.insert(slash, separator + "s" + base::NumberToString(size) + "-c");
}
return result;
}
} // namespace
int GetBlockMessageID(FilteringBehaviorReason reason,
bool is_child_account,
bool single_parent) {
switch (reason) {
case DEFAULT:
if (!is_child_account)
return IDS_SUPERVISED_USER_BLOCK_MESSAGE_DEFAULT;
if (single_parent)
return IDS_CHILD_BLOCK_MESSAGE_DEFAULT_SINGLE_PARENT;
return IDS_CHILD_BLOCK_MESSAGE_DEFAULT_MULTI_PARENT;
case BLACKLIST:
case ASYNC_CHECKER:
return IDS_SUPERVISED_USER_BLOCK_MESSAGE_SAFE_SITES;
case WHITELIST:
NOTREACHED();
break;
case MANUAL:
if (!is_child_account)
return IDS_SUPERVISED_USER_BLOCK_MESSAGE_MANUAL;
if (single_parent)
return IDS_CHILD_BLOCK_MESSAGE_MANUAL_SINGLE_PARENT;
return IDS_CHILD_BLOCK_MESSAGE_MANUAL_MULTI_PARENT;
case NOT_SIGNED_IN:
return IDS_SUPERVISED_USER_NOT_SIGNED_IN;
}
NOTREACHED();
return 0;
}
std::string BuildHtml(bool allow_access_requests,
const std::string& profile_image_url,
const std::string& profile_image_url2,
const std::string& custodian,
const std::string& custodian_email,
const std::string& second_custodian,
const std::string& second_custodian_email,
bool is_child_account,
bool is_deprecated,
FilteringBehaviorReason reason,
const std::string& app_locale) {
base::DictionaryValue strings;
strings.SetString("blockPageTitle",
l10n_util::GetStringUTF16(IDS_BLOCK_INTERSTITIAL_TITLE));
strings.SetBoolean("allowAccessRequests", allow_access_requests);
strings.SetString("avatarURL1x",
BuildAvatarImageUrl(profile_image_url, kAvatarSize1x));
strings.SetString("avatarURL2x",
BuildAvatarImageUrl(profile_image_url, kAvatarSize2x));
strings.SetString("secondAvatarURL1x",
BuildAvatarImageUrl(profile_image_url2, kAvatarSize1x));
strings.SetString("secondAvatarURL2x",
BuildAvatarImageUrl(profile_image_url2, kAvatarSize2x));
strings.SetString("custodianName", custodian);
strings.SetString("custodianEmail", custodian_email);
strings.SetString("secondCustodianName", second_custodian);
strings.SetString("secondCustodianEmail", second_custodian_email);
base::string16 custodian16 = base::UTF8ToUTF16(custodian);
base::string16 block_header;
base::string16 block_message;
if (reason == FilteringBehaviorReason::NOT_SIGNED_IN) {
block_header =
l10n_util::GetStringUTF16(IDS_BLOCK_INTERSTITIAL_HEADER_NOT_SIGNED_IN);
} else if (allow_access_requests) {
if (is_child_account) {
block_header =
l10n_util::GetStringUTF16(IDS_CHILD_BLOCK_INTERSTITIAL_HEADER);
block_message =
l10n_util::GetStringUTF16(IDS_CHILD_BLOCK_INTERSTITIAL_MESSAGE);
} else {
block_header = l10n_util::GetStringFUTF16(IDS_BLOCK_INTERSTITIAL_HEADER,
custodian16);
// For non-child accounts, the block message is empty.
}
} else {
block_header = l10n_util::GetStringUTF16(
IDS_BLOCK_INTERSTITIAL_HEADER_ACCESS_REQUESTS_DISABLED);
if (is_deprecated) {
DCHECK(!is_child_account);
block_message = l10n_util::GetStringUTF16(
IDS_BLOCK_INTERSTITIAL_MESSAGE_SUPERVISED_USERS_DEPRECATED);
}
}
strings.SetString("blockPageHeader", block_header);
strings.SetString("blockPageMessage", block_message);
strings.SetString("blockReasonMessage",
l10n_util::GetStringUTF16(GetBlockMessageID(
reason, is_child_account, second_custodian.empty())));
strings.SetString("blockReasonHeader", l10n_util::GetStringUTF16(
IDS_SUPERVISED_USER_BLOCK_HEADER));
bool show_feedback = ReasonIsAutomatic(reason);
DCHECK(is_child_account || !show_feedback);
strings.SetBoolean("showFeedbackLink", show_feedback);
strings.SetString("feedbackLink", l10n_util::GetStringUTF16(
IDS_BLOCK_INTERSTITIAL_SEND_FEEDBACK));
strings.SetString("backButton", l10n_util::GetStringUTF16(IDS_BACK_BUTTON));
strings.SetString(
"requestAccessButton",
l10n_util::GetStringUTF16(IDS_BLOCK_INTERSTITIAL_REQUEST_ACCESS_BUTTON));
strings.SetString(
"showDetailsLink",
l10n_util::GetStringUTF16(IDS_BLOCK_INTERSTITIAL_SHOW_DETAILS));
strings.SetString(
"hideDetailsLink",
l10n_util::GetStringUTF16(IDS_BLOCK_INTERSTITIAL_HIDE_DETAILS));
base::string16 request_sent_message;
base::string16 request_failed_message;
if (is_child_account) {
if (second_custodian.empty()) {
request_sent_message = l10n_util::GetStringUTF16(
IDS_CHILD_BLOCK_INTERSTITIAL_REQUEST_SENT_MESSAGE_SINGLE_PARENT);
request_failed_message = l10n_util::GetStringUTF16(
IDS_CHILD_BLOCK_INTERSTITIAL_REQUEST_FAILED_MESSAGE_SINGLE_PARENT);
} else {
request_sent_message = l10n_util::GetStringUTF16(
IDS_CHILD_BLOCK_INTERSTITIAL_REQUEST_SENT_MESSAGE_MULTI_PARENT);
request_failed_message = l10n_util::GetStringUTF16(
IDS_CHILD_BLOCK_INTERSTITIAL_REQUEST_FAILED_MESSAGE_MULTI_PARENT);
}
} else {
request_sent_message = l10n_util::GetStringFUTF16(
IDS_BLOCK_INTERSTITIAL_REQUEST_SENT_MESSAGE, custodian16);
request_failed_message = l10n_util::GetStringFUTF16(
IDS_BLOCK_INTERSTITIAL_REQUEST_FAILED_MESSAGE, custodian16);
}
strings.SetString("requestSentMessage", request_sent_message);
strings.SetString("requestFailedMessage", request_failed_message);
webui::SetLoadTimeDataDefaults(app_locale, &strings);
std::string html =
ui::ResourceBundle::GetSharedInstance()
.GetRawDataResource(IDR_SUPERVISED_USER_BLOCK_INTERSTITIAL_HTML)
.as_string();
webui::AppendWebUiCssTextDefaults(&html);
std::string error_html = webui::GetI18nTemplateHtml(html, &strings);
return error_html;
}
} // namespace supervised_user_error_page