LexerTransition<nsIconDecoder::State> nsIconDecoder::ReadRowOfPixels(const char* aData, size_t aLength) { MOZ_ASSERT(aLength % 4 == 0, "Rows should contain a multiple of four bytes"); auto result = mPipe.WritePixels<uint32_t>([&]() -> NextPixel<uint32_t> { if (aLength == 0) { return AsVariant(WriteState::NEED_MORE_DATA); // Done with this row. } uint32_t pixel; memcpy(&pixel, aData, 4); aData += 4; aLength -= 4; return AsVariant(pixel); }); MOZ_ASSERT(result != WriteState::FAILURE); Maybe<SurfaceInvalidRect> invalidRect = mPipe.TakeInvalidRect(); if (invalidRect) { PostInvalidation(invalidRect->mInputSpaceRect, Some(invalidRect->mOutputSpaceRect)); } return result == WriteState::FINISHED ? Transition::To(State::FINISH, 0) : Transition::To(State::ROW_OF_PIXELS, mBytesPerRow); }
/*static*/ MP4Metadata::ResultAndByteBuffer MP4Metadata::Metadata( ByteStream* aSource) { auto parser = mozilla::MakeUnique<MoofParser>( aSource, AsVariant(ParseAllTracks{}), false); RefPtr<mozilla::MediaByteBuffer> buffer = parser->Metadata(); if (!buffer) { return {MediaResult(NS_ERROR_DOM_MEDIA_METADATA_ERR, RESULT_DETAIL("Cannot parse metadata")), nullptr}; } return {NS_OK, std::move(buffer)}; }
DocInfo::DocInfo(nsPIDOMWindowOuter* aWindow) : mURL(aWindow->GetDocumentURI()) , mObj(AsVariant(aWindow)) {}
DocInfo::DocInfo(const URLInfo& aURL, nsILoadInfo* aLoadInfo) : mURL(aURL) , mObj(AsVariant(aLoadInfo)) {}
ClientState::ClientState(const IPCClientWorkerState& aData) { mData.emplace(AsVariant(ClientWorkerState(aData))); }
ClientState::ClientState(const ClientWorkerState& aWorkerState) { mData.emplace(AsVariant(aWorkerState)); }
ClientState::ClientState(const ClientWindowState& aWindowState) { mData.emplace(AsVariant(aWindowState)); }