diff options
Diffstat (limited to 'caps/NullPrincipalJSONHandler.h')
-rw-r--r-- | caps/NullPrincipalJSONHandler.h | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/caps/NullPrincipalJSONHandler.h b/caps/NullPrincipalJSONHandler.h new file mode 100644 index 0000000000..3c5f9e1631 --- /dev/null +++ b/caps/NullPrincipalJSONHandler.h @@ -0,0 +1,91 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* 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/. */ + +#ifndef mozilla_NullPrincipalJSONHandler_h +#define mozilla_NullPrincipalJSONHandler_h + +#include <stddef.h> // size_t +#include <stdint.h> // uint32_t + +#include "js/TypeDecls.h" // JS::Latin1Char + +#include "mozilla/AlreadyAddRefed.h" // already_AddRefed +#include "mozilla/Assertions.h" // MOZ_ASSERT_UNREACHABLE +#include "mozilla/RefPtr.h" // RefPtr + +#include "nsCOMPtr.h" // nsCOMPtr +#include "nsDebug.h" // NS_WARNING +#include "nsIURI.h" // nsIURI + +#include "NullPrincipal.h" +#include "OriginAttributes.h" +#include "SharedJSONHandler.h" + +namespace mozilla { + +// JSON parse handler for an inner object for NullPrincipal. +// Used by PrincipalJSONHandler or SubsumedPrincipalJSONHandler. +class NullPrincipalJSONHandler : public PrincipalJSONHandlerShared { + enum class State { + Init, + + // After the inner object's '{'. + StartObject, + + // After the property key for eSpec. + SpecKey, + + // After the property key for eSuffix. + SuffixKey, + + // After the property value for eSpec or eSuffix. + AfterPropertyValue, + + // After the inner object's '}'. + EndObject, + + Error, + }; + + public: + NullPrincipalJSONHandler() = default; + virtual ~NullPrincipalJSONHandler() = default; + + virtual bool startObject() override; + + using PrincipalJSONHandlerShared::propertyName; + virtual bool propertyName(const JS::Latin1Char* name, size_t length) override; + + virtual bool endObject() override; + + virtual bool startArray() override { + NS_WARNING("Unexpected array value"); + mState = State::Error; + return false; + } + virtual bool endArray() override { + NS_WARNING("Unexpected array value"); + mState = State::Error; + return false; + } + + using PrincipalJSONHandlerShared::stringValue; + virtual bool stringValue(const JS::Latin1Char* str, size_t length) override; + + bool HasAccepted() const { return mState == State::EndObject; } + + protected: + virtual void SetErrorState() override { mState = State::Error; } + + private: + State mState = State::Init; + + nsCOMPtr<nsIURI> mUri; + OriginAttributes mAttrs; +}; + +} // namespace mozilla + +#endif // mozilla_NullPrincipalJSONHandler_h |