gecko-dev/dom/permission/PermissionUtils.cpp
Ehsan Akhgari b5a2bda7ee Bug 1527505 - Part 9: Make nsIPermissionManager accept ACString arguments for permission types instead of raw C strings; r=nika
This will mean that in places like the tight loop in GetTypeIndex()
we would no longer require calling strlen() on the input type argument
once per loop iteration.

Depends on D20236

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

--HG--
extra : moz-landing-system : lando
2019-02-21 22:54:28 +00:00

60 lines
1.8 KiB
C++

/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at http://mozilla.org/MPL/2.0/. */
#include "PermissionUtils.h"
namespace mozilla {
namespace dom {
static const nsLiteralCString kPermissionTypes[] = {
// clang-format off
NS_LITERAL_CSTRING("geo"),
NS_LITERAL_CSTRING("desktop-notification"),
// Alias `push` to `desktop-notification`.
NS_LITERAL_CSTRING("desktop-notification"),
NS_LITERAL_CSTRING("persistent-storage")
// clang-format on
};
// `-1` for the last null entry.
const size_t kPermissionNameCount =
MOZ_ARRAY_LENGTH(PermissionNameValues::strings) - 1;
static_assert(MOZ_ARRAY_LENGTH(kPermissionTypes) == kPermissionNameCount,
"kPermissionTypes and PermissionName count should match");
const nsLiteralCString& PermissionNameToType(PermissionName aName) {
MOZ_ASSERT((size_t)aName < ArrayLength(kPermissionTypes));
return kPermissionTypes[static_cast<size_t>(aName)];
}
Maybe<PermissionName> TypeToPermissionName(const nsACString& aType) {
for (size_t i = 0; i < ArrayLength(kPermissionTypes); ++i) {
if (kPermissionTypes[i].Equals(aType)) {
return Some(static_cast<PermissionName>(i));
}
}
return Nothing();
}
PermissionState ActionToPermissionState(uint32_t aAction) {
switch (aAction) {
case nsIPermissionManager::ALLOW_ACTION:
return PermissionState::Granted;
case nsIPermissionManager::DENY_ACTION:
return PermissionState::Denied;
default:
case nsIPermissionManager::PROMPT_ACTION:
return PermissionState::Prompt;
}
}
} // namespace dom
} // namespace mozilla