blob: 4f1dd6e14c6907a0907c3e597696662998e10f24 [file] [log] [blame]
// Copyright 2021 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/ash/input_method/ime_rules_config.h"
#include "base/strings/string_piece.h"
#include "base/strings/string_util.h"
#include "net/base/registry_controlled_domains/registry_controlled_domain.h"
#include "url/url_util.h"
namespace ash {
namespace input_method {
namespace {
// The default denylist of domains that will turn off auto_correct feature.
const char* kDefaultAutocorrectDomainDenylist[] = {
"amazon",
"b.corp.google",
"buganizer.corp.google",
"cider.corp.google",
"classroom.google",
"desmos",
"docs.google",
"facebook",
"instagram",
"outlook.live",
"outlook.office",
"quizlet",
"whatsapp",
"youtube",
};
} // namespace
// Checks if domain is a sub-domain of url
bool IsSubDomain(const GURL& url, const base::StringPiece domain) {
const size_t registryLength =
net::registry_controlled_domains::GetRegistryLength(
url, net::registry_controlled_domains::EXCLUDE_UNKNOWN_REGISTRIES,
net::registry_controlled_domains::EXCLUDE_PRIVATE_REGISTRIES);
if (registryLength == 0) {
return false;
}
const base::StringPiece urlContent = url.host_piece();
const base::StringPiece urlDomain =
urlContent.substr(0, urlContent.length() - registryLength - 1);
return url::DomainIs(urlDomain, domain);
}
// Checks if url belongs to domain and has the path_prefix
bool IsSubDomainWithPathPrefix(const GURL& url,
const base::StringPiece domain,
const base::StringPiece path_prefix) {
return IsSubDomain(url, domain) && url.has_path() &&
base::StartsWith(url.path(), path_prefix);
}
bool IsAutoCorrectDisabled(const TextFieldContextualInfo& info) {
// Check the default domain denylist rules.
for (const char* domain : kDefaultAutocorrectDomainDenylist) {
if (IsSubDomain(info.tab_url, domain)) {
return true;
}
}
return false;
}
} // namespace input_method
} // namespace ash