Bug 1582512 - Rename FilenameType to FilenameTypeAndDetails r=Gijs,ckerschb

Differential Revision: https://phabricator.services.mozilla.com/D53231

--HG--
extra : moz-landing-system : lando
This commit is contained in:
Tom Ritter 2019-11-18 20:44:48 +00:00
Родитель e7037fe85f
Коммит 035192e513
3 изменённых файлов: 67 добавлений и 40 удалений

Просмотреть файл

@ -147,7 +147,7 @@ nsString OptimizeFileName(const nsAString& aFileName) {
*/
/* static */
FilenameType nsContentSecurityUtils::FilenameToEvalType(
FilenameTypeAndDetails nsContentSecurityUtils::FilenameToEvalType(
const nsString& fileName) {
// These are strings because the Telemetry Events API only accepts strings
static NS_NAMED_LITERAL_CSTRING(kChromeURI, "chromeuri");
@ -172,15 +172,15 @@ FilenameType nsContentSecurityUtils::FilenameToEvalType(
// resource:// and chrome://
if (StringBeginsWith(fileName, NS_LITERAL_STRING("chrome://"))) {
return FilenameType(kChromeURI, Some(fileName));
return FilenameTypeAndDetails(kChromeURI, Some(fileName));
}
if (StringBeginsWith(fileName, NS_LITERAL_STRING("resource://"))) {
return FilenameType(kResourceURI, Some(fileName));
return FilenameTypeAndDetails(kResourceURI, Some(fileName));
}
if (!NS_IsMainThread()) {
// We can't do Regex matching off the main thread; so just report.
return FilenameType(kOtherWorker, Nothing());
return FilenameTypeAndDetails(kOtherWorker, Nothing());
}
// Extension
@ -189,7 +189,7 @@ FilenameType nsContentSecurityUtils::FilenameToEvalType(
nsresult rv = RegexEval(kExtensionRegex, fileName, /* aOnlyMatch = */ false,
regexMatch, &regexResults);
if (NS_FAILED(rv)) {
return FilenameType(kRegexFailure, Nothing());
return FilenameTypeAndDetails(kRegexFailure, Nothing());
}
if (regexMatch) {
nsCString type =
@ -198,26 +198,27 @@ FilenameType nsContentSecurityUtils::FilenameToEvalType(
: kOtherExtension;
auto& extensionNameAndPath =
Substring(regexResults[0], ArrayLength("extensions/") - 1);
return FilenameType(type, Some(OptimizeFileName(extensionNameAndPath)));
return FilenameTypeAndDetails(type,
Some(OptimizeFileName(extensionNameAndPath)));
}
// Single File
rv = RegexEval(kSingleFileRegex, fileName, /* aOnlyMatch = */ true,
regexMatch);
if (NS_FAILED(rv)) {
return FilenameType(kRegexFailure, Nothing());
return FilenameTypeAndDetails(kRegexFailure, Nothing());
}
if (regexMatch) {
return FilenameType(kSingleString, Some(fileName));
return FilenameTypeAndDetails(kSingleString, Some(fileName));
}
// Suspected userChromeJS script
rv = RegexEval(kUCJSRegex, fileName, /* aOnlyMatch = */ true, regexMatch);
if (NS_FAILED(rv)) {
return FilenameType(kRegexFailure, Nothing());
return FilenameTypeAndDetails(kRegexFailure, Nothing());
}
if (regexMatch) {
return FilenameType(kSuspectedUserChromeJS, Nothing());
return FilenameTypeAndDetails(kSuspectedUserChromeJS, Nothing());
}
#if defined(XP_WIN)
@ -237,14 +238,16 @@ FilenameType nsContentSecurityUtils::FilenameToEvalType(
sanitizedPathAndScheme.Append(NS_LITERAL_STRING("://.../"));
sanitizedPathAndScheme.Append(strSanitizedPath);
}
return FilenameType(kSanitizedWindowsURL, Some(sanitizedPathAndScheme));
return FilenameTypeAndDetails(kSanitizedWindowsURL,
Some(sanitizedPathAndScheme));
} else {
return FilenameType(kSanitizedWindowsPath, Some(strSanitizedPath));
return FilenameTypeAndDetails(kSanitizedWindowsPath,
Some(strSanitizedPath));
}
}
#endif
return FilenameType(kOther, Nothing());
return FilenameTypeAndDetails(kOther, Nothing());
}
class EvalUsageNotificationRunnable final : public Runnable {
@ -462,12 +465,13 @@ void nsContentSecurityUtils::NotifyEvalUsage(bool aIsSystemPrincipal,
aIsSystemPrincipal ? Telemetry::EventID::Security_Evalusage_Systemcontext
: Telemetry::EventID::Security_Evalusage_Parentprocess;
FilenameType fileNameType = FilenameToEvalType(aFileNameA);
FilenameTypeAndDetails fileNameTypeAndDetails =
FilenameToEvalType(aFileNameA);
mozilla::Maybe<nsTArray<EventExtraEntry>> extra;
if (fileNameType.second().isSome()) {
if (fileNameTypeAndDetails.second().isSome()) {
extra = Some<nsTArray<EventExtraEntry>>({EventExtraEntry{
NS_LITERAL_CSTRING("fileinfo"),
NS_ConvertUTF16toUTF8(fileNameType.second().value())}});
NS_ConvertUTF16toUTF8(fileNameTypeAndDetails.second().value())}});
} else {
extra = Nothing();
}
@ -475,7 +479,8 @@ void nsContentSecurityUtils::NotifyEvalUsage(bool aIsSystemPrincipal,
sTelemetryEventEnabled = true;
Telemetry::SetEventRecordingEnabled(NS_LITERAL_CSTRING("security"), true);
}
Telemetry::RecordEvent(eventType, mozilla::Some(fileNameType.first()), extra);
Telemetry::RecordEvent(eventType,
mozilla::Some(fileNameTypeAndDetails.first()), extra);
// Report an error to console
nsCOMPtr<nsIConsoleService> console(

Просмотреть файл

@ -18,11 +18,12 @@ class Document;
} // namespace dom
} // namespace mozilla
typedef mozilla::Pair<nsCString, mozilla::Maybe<nsString>> FilenameType;
typedef mozilla::Pair<nsCString, mozilla::Maybe<nsString>>
FilenameTypeAndDetails;
class nsContentSecurityUtils {
public:
static FilenameType FilenameToEvalType(const nsString& fileName);
static FilenameTypeAndDetails FilenameToEvalType(const nsString& fileName);
static bool IsEvalAllowed(JSContext* cx, bool aIsSystemPrincipal,
const nsAString& aScript);
static void NotifyEvalUsage(bool aIsSystemPrincipal,

Просмотреть файл

@ -32,13 +32,15 @@ TEST(FilenameEvalParser, ResourceChrome)
{
{
NS_NAMED_LITERAL_STRING(str, "chrome://firegestures/content/browser.js");
FilenameType ret = nsContentSecurityUtils::FilenameToEvalType(str);
FilenameTypeAndDetails ret =
nsContentSecurityUtils::FilenameToEvalType(str);
ASSERT_TRUE(ret.first() == kChromeURI && ret.second().isSome() &&
ret.second().value() == str);
}
{
NS_NAMED_LITERAL_STRING(str, "resource://firegestures/content/browser.js");
FilenameType ret = nsContentSecurityUtils::FilenameToEvalType(str);
FilenameTypeAndDetails ret =
nsContentSecurityUtils::FilenameToEvalType(str);
ASSERT_TRUE(ret.first() == kResourceURI && ret.second().isSome() &&
ret.second().value() == str);
}
@ -52,7 +54,8 @@ TEST(FilenameEvalParser, MozExtension)
"jar:file:///c:/users/bob/appdata/roaming/mozilla/firefox/profiles/foo/"
"extensions/federated-learning@shield.mozilla.org.xpi!/experiments/"
"study/api.js");
FilenameType ret = nsContentSecurityUtils::FilenameToEvalType(str);
FilenameTypeAndDetails ret =
nsContentSecurityUtils::FilenameToEvalType(str);
ASSERT_TRUE(ret.first() == kMozillaExtension &&
ret.second().value() ==
NS_LITERAL_STRING(
@ -64,7 +67,8 @@ TEST(FilenameEvalParser, MozExtension)
"jar:file:///c:/users/bob/appdata/roaming/mozilla/firefox/profiles/foo/"
"extensions/federated-learning@shigeld.mozilla.org.xpi!/experiments/"
"study/api.js");
FilenameType ret = nsContentSecurityUtils::FilenameToEvalType(str);
FilenameTypeAndDetails ret =
nsContentSecurityUtils::FilenameToEvalType(str);
ASSERT_TRUE(
ret.first() == kMozillaExtension &&
ret.second().value() ==
@ -77,7 +81,8 @@ TEST(FilenameEvalParser, MozExtension)
"jar:file:///c:/users/bob/appdata/roaming/mozilla/firefox/profiles/foo/"
"extensions/federated-learning@shigeld.mozilla.org.xpi!/experiments/"
"study/apiiiiiiiiiiiiiiiiiiiiiiiiiiiiii.js");
FilenameType ret = nsContentSecurityUtils::FilenameToEvalType(str);
FilenameTypeAndDetails ret =
nsContentSecurityUtils::FilenameToEvalType(str);
ASSERT_TRUE(
ret.first() == kMozillaExtension &&
ret.second().value() ==
@ -90,20 +95,23 @@ TEST(FilenameEvalParser, UserChromeJS)
{
{
NS_NAMED_LITERAL_STRING(str, "firegestures/content/browser.uc.js");
FilenameType ret = nsContentSecurityUtils::FilenameToEvalType(str);
FilenameTypeAndDetails ret =
nsContentSecurityUtils::FilenameToEvalType(str);
ASSERT_TRUE(ret.first() == kSuspectedUserChromeJS &&
!ret.second().isSome());
}
{
NS_NAMED_LITERAL_STRING(str, "firegestures/content/browser.uc.js?");
FilenameType ret = nsContentSecurityUtils::FilenameToEvalType(str);
FilenameTypeAndDetails ret =
nsContentSecurityUtils::FilenameToEvalType(str);
ASSERT_TRUE(ret.first() == kSuspectedUserChromeJS &&
!ret.second().isSome());
}
{
nsLiteralString str =
NS_LITERAL_STRING("firegestures/content/browser.uc.js?243244224");
FilenameType ret = nsContentSecurityUtils::FilenameToEvalType(str);
FilenameTypeAndDetails ret =
nsContentSecurityUtils::FilenameToEvalType(str);
ASSERT_TRUE(ret.first() == kSuspectedUserChromeJS &&
!ret.second().isSome());
}
@ -112,7 +120,8 @@ TEST(FilenameEvalParser, UserChromeJS)
str,
"file:///b:/fxprofiles/mark/chrome/"
"addbookmarkherewithmiddleclick.uc.js?1558444389291");
FilenameType ret = nsContentSecurityUtils::FilenameToEvalType(str);
FilenameTypeAndDetails ret =
nsContentSecurityUtils::FilenameToEvalType(str);
ASSERT_TRUE(ret.first() == kSuspectedUserChromeJS &&
!ret.second().isSome());
}
@ -122,13 +131,15 @@ TEST(FilenameEvalParser, SingleFile)
{
{
NS_NAMED_LITERAL_STRING(str, "browser.uc.js?2456");
FilenameType ret = nsContentSecurityUtils::FilenameToEvalType(str);
FilenameTypeAndDetails ret =
nsContentSecurityUtils::FilenameToEvalType(str);
ASSERT_TRUE(ret.first() == kSingleString && ret.second().isSome() &&
ret.second().value() == str);
}
{
NS_NAMED_LITERAL_STRING(str, "debugger");
FilenameType ret = nsContentSecurityUtils::FilenameToEvalType(str);
FilenameTypeAndDetails ret =
nsContentSecurityUtils::FilenameToEvalType(str);
ASSERT_TRUE(ret.first() == kSingleString && ret.second().isSome() &&
ret.second().value() == str);
}
@ -138,12 +149,14 @@ TEST(FilenameEvalParser, Other)
{
{
NS_NAMED_LITERAL_STRING(str, "firegestures--content");
FilenameType ret = nsContentSecurityUtils::FilenameToEvalType(str);
FilenameTypeAndDetails ret =
nsContentSecurityUtils::FilenameToEvalType(str);
ASSERT_TRUE(ret.first() == kOther && !ret.second().isSome());
}
{
NS_NAMED_LITERAL_STRING(str, "gallop://thing/fire");
FilenameType ret = nsContentSecurityUtils::FilenameToEvalType(str);
FilenameTypeAndDetails ret =
nsContentSecurityUtils::FilenameToEvalType(str);
#if defined(XP_WIN)
ASSERT_TRUE(ret.first() == kSanitizedWindowsURL &&
ret.second().value() == NS_LITERAL_STRING("gallop"));
@ -153,7 +166,8 @@ TEST(FilenameEvalParser, Other)
}
{
NS_NAMED_LITERAL_STRING(str, "gallop://fire");
FilenameType ret = nsContentSecurityUtils::FilenameToEvalType(str);
FilenameTypeAndDetails ret =
nsContentSecurityUtils::FilenameToEvalType(str);
#if defined(XP_WIN)
ASSERT_TRUE(ret.first() == kSanitizedWindowsURL &&
ret.second().value() == NS_LITERAL_STRING("gallop"));
@ -163,7 +177,8 @@ TEST(FilenameEvalParser, Other)
}
{
NS_NAMED_LITERAL_STRING(str, "firegestures/content");
FilenameType ret = nsContentSecurityUtils::FilenameToEvalType(str);
FilenameTypeAndDetails ret =
nsContentSecurityUtils::FilenameToEvalType(str);
#if defined(XP_WIN)
ASSERT_TRUE(ret.first() == kSanitizedWindowsPath &&
ret.second().value() == NS_LITERAL_STRING("content"));
@ -173,7 +188,8 @@ TEST(FilenameEvalParser, Other)
}
{
NS_NAMED_LITERAL_STRING(str, "firegestures\\content");
FilenameType ret = nsContentSecurityUtils::FilenameToEvalType(str);
FilenameTypeAndDetails ret =
nsContentSecurityUtils::FilenameToEvalType(str);
#if defined(XP_WIN)
ASSERT_TRUE(ret.first() == kSanitizedWindowsPath &&
ret.second().value() == NS_LITERAL_STRING("content"));
@ -183,7 +199,8 @@ TEST(FilenameEvalParser, Other)
}
{
NS_NAMED_LITERAL_STRING(str, "/home/tom/files/thing");
FilenameType ret = nsContentSecurityUtils::FilenameToEvalType(str);
FilenameTypeAndDetails ret =
nsContentSecurityUtils::FilenameToEvalType(str);
#if defined(XP_WIN)
ASSERT_TRUE(ret.first() == kSanitizedWindowsPath &&
ret.second().value() == NS_LITERAL_STRING("thing"));
@ -193,7 +210,8 @@ TEST(FilenameEvalParser, Other)
}
{
NS_NAMED_LITERAL_STRING(str, "file://c/uers/tom/file.txt");
FilenameType ret = nsContentSecurityUtils::FilenameToEvalType(str);
FilenameTypeAndDetails ret =
nsContentSecurityUtils::FilenameToEvalType(str);
#if defined(XP_WIN)
ASSERT_TRUE(ret.first() == kSanitizedWindowsURL &&
ret.second().value() ==
@ -204,7 +222,8 @@ TEST(FilenameEvalParser, Other)
}
{
NS_NAMED_LITERAL_STRING(str, "c:/uers/tom/file.txt");
FilenameType ret = nsContentSecurityUtils::FilenameToEvalType(str);
FilenameTypeAndDetails ret =
nsContentSecurityUtils::FilenameToEvalType(str);
#if defined(XP_WIN)
ASSERT_TRUE(ret.first() == kSanitizedWindowsPath &&
ret.second().value() == NS_LITERAL_STRING("file.txt"));
@ -214,7 +233,8 @@ TEST(FilenameEvalParser, Other)
}
{
NS_NAMED_LITERAL_STRING(str, "http://example.com/");
FilenameType ret = nsContentSecurityUtils::FilenameToEvalType(str);
FilenameTypeAndDetails ret =
nsContentSecurityUtils::FilenameToEvalType(str);
#if defined(XP_WIN)
ASSERT_TRUE(ret.first() == kSanitizedWindowsURL &&
ret.second().value() == NS_LITERAL_STRING("http"));
@ -224,7 +244,8 @@ TEST(FilenameEvalParser, Other)
}
{
NS_NAMED_LITERAL_STRING(str, "http://example.com/thing.html");
FilenameType ret = nsContentSecurityUtils::FilenameToEvalType(str);
FilenameTypeAndDetails ret =
nsContentSecurityUtils::FilenameToEvalType(str);
#if defined(XP_WIN)
ASSERT_TRUE(ret.first() == kSanitizedWindowsURL &&
ret.second().value() == NS_LITERAL_STRING("http"));