summaryrefslogtreecommitdiffstats
path: root/dom/html/FetchPriority.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'dom/html/FetchPriority.cpp')
-rw-r--r--dom/html/FetchPriority.cpp109
1 files changed, 109 insertions, 0 deletions
diff --git a/dom/html/FetchPriority.cpp b/dom/html/FetchPriority.cpp
new file mode 100644
index 0000000000..259c05c6c3
--- /dev/null
+++ b/dom/html/FetchPriority.cpp
@@ -0,0 +1,109 @@
+/* -*- 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 "mozilla/dom/FetchPriority.h"
+
+#include "mozilla/Assertions.h"
+#include "mozilla/Logging.h"
+#include "mozilla/dom/RequestBinding.h"
+#include "nsISupportsPriority.h"
+#include "nsStringFwd.h"
+
+namespace mozilla::dom {
+const char* kFetchPriorityAttributeValueHigh = "high";
+const char* kFetchPriorityAttributeValueLow = "low";
+const char* kFetchPriorityAttributeValueAuto = "auto";
+
+FetchPriority ToFetchPriority(RequestPriority aRequestPriority) {
+ switch (aRequestPriority) {
+ case RequestPriority::High: {
+ return FetchPriority::High;
+ }
+ case RequestPriority::Low: {
+ return FetchPriority::Low;
+ }
+ case RequestPriority::Auto: {
+ return FetchPriority::Auto;
+ }
+ default: {
+ MOZ_ASSERT_UNREACHABLE();
+ return FetchPriority::Auto;
+ }
+ }
+}
+
+#ifdef DEBUG
+constexpr auto kPriorityHighest = "PRIORITY_HIGHEST"_ns;
+constexpr auto kPriorityHigh = "PRIORITY_HIGH"_ns;
+constexpr auto kPriorityNormal = "PRIORITY_NORMAL"_ns;
+constexpr auto kPriorityLow = "PRIORITY_LOW"_ns;
+constexpr auto kPriorityLowest = "PRIORITY_LOWEST"_ns;
+constexpr auto kPriorityUnknown = "UNKNOWN"_ns;
+
+/**
+ * See <nsISupportsPriority.idl>.
+ */
+static void SupportsPriorityToString(int32_t aSupportsPriority,
+ nsACString& aResult) {
+ switch (aSupportsPriority) {
+ case nsISupportsPriority::PRIORITY_HIGHEST: {
+ aResult = kPriorityHighest;
+ break;
+ }
+ case nsISupportsPriority::PRIORITY_HIGH: {
+ aResult = kPriorityHigh;
+ break;
+ }
+ case nsISupportsPriority::PRIORITY_NORMAL: {
+ aResult = kPriorityNormal;
+ break;
+ }
+ case nsISupportsPriority::PRIORITY_LOW: {
+ aResult = kPriorityLow;
+ break;
+ }
+ case nsISupportsPriority::PRIORITY_LOWEST: {
+ aResult = kPriorityLowest;
+ break;
+ }
+ default: {
+ aResult = kPriorityUnknown;
+ break;
+ }
+ }
+}
+
+static const char* ToString(FetchPriority aFetchPriority) {
+ switch (aFetchPriority) {
+ case FetchPriority::Auto: {
+ return kFetchPriorityAttributeValueAuto;
+ }
+ case FetchPriority::Low: {
+ return kFetchPriorityAttributeValueLow;
+ }
+ case FetchPriority::High: {
+ return kFetchPriorityAttributeValueHigh;
+ }
+ default: {
+ MOZ_ASSERT_UNREACHABLE();
+ return kFetchPriorityAttributeValueAuto;
+ }
+ }
+}
+#endif // DEBUG
+
+void LogPriorityMapping(LazyLogModule& aLazyLogModule,
+ FetchPriority aFetchPriority,
+ int32_t aSupportsPriority) {
+#ifdef DEBUG
+ nsDependentCString supportsPriority;
+ SupportsPriorityToString(aSupportsPriority, supportsPriority);
+ MOZ_LOG(aLazyLogModule, LogLevel::Debug,
+ ("Mapping priority: %s -> %s", ToString(aFetchPriority),
+ supportsPriority.get()));
+#endif // DEBUG
+}
+} // namespace mozilla::dom