зеркало из https://github.com/mozilla/gecko-dev.git
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:
Родитель
e7037fe85f
Коммит
035192e513
|
@ -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, ®exResults);
|
||||
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"));
|
||||
|
|
Загрузка…
Ссылка в новой задаче