bool
nsMozIconURI::Deserialize(const URIParams& aParams)
{
  if (aParams.type() != URIParams::TIconURIParams) {
    MOZ_ASSERT_UNREACHABLE("Received unknown URI from other process!");
    return false;
  }

  const IconURIParams& params = aParams.get_IconURIParams();
  if (params.uri().type() != OptionalURIParams::Tvoid_t) {
    nsCOMPtr<nsIURI> uri = DeserializeURI(params.uri().get_URIParams());
    mIconURL = do_QueryInterface(uri);
    if (!mIconURL) {
      MOZ_ASSERT_UNREACHABLE("bad nsIURI passed");
      return false;
    }
  }

  mSize = params.size();
  mContentType = params.contentType();
  mFileName = params.fileName();
  mStockIcon = params.stockIcon();
  mIconSize = params.iconSize();
  mIconState = params.iconState();

  return true;
}
void
nsMozIconURI::Serialize(URIParams& aParams)
{
  IconURIParams params;

  if (mIconURL) {
    URIParams iconURLParams;
    SerializeURI(mIconURL, iconURLParams);
    if (iconURLParams.type() == URIParams::T__None) {
      // Serialization failed, bail.
      return;
    }

    params.uri() = iconURLParams;
  } else {
    params.uri() = void_t();
  }

  params.size() = mSize;
  params.fileName() = mFileName;
  params.stockIcon() = mStockIcon;
  params.iconSize() = mIconSize;
  params.iconState() = mIconState;

  aParams = params;
}
Exemple #3
0
already_AddRefed<nsIURI>
DeserializeURI(const URIParams& aParams)
{
  MOZ_ASSERT(NS_IsMainThread());

  nsCOMPtr<nsIURIMutator> mutator;

  switch (aParams.type()) {
    case URIParams::TSimpleURIParams:
      mutator = do_CreateInstance(kSimpleURIMutatorCID);
      break;

    case URIParams::TStandardURLParams:
      mutator = do_CreateInstance(kStandardURLMutatorCID);
      break;

    case URIParams::TJARURIParams:
      mutator = do_CreateInstance(kJARURIMutatorCID);
      break;

    case URIParams::TJSURIParams:
      mutator = new nsJSURI::Mutator();
      break;

    case URIParams::TIconURIParams:
      mutator = do_CreateInstance(kIconURIMutatorCID);
      break;

    case URIParams::TNullPrincipalURIParams:
      mutator = new NullPrincipalURI::Mutator();
      break;

    case URIParams::TSimpleNestedURIParams:
      mutator = new nsSimpleNestedURI::Mutator();
      break;

    case URIParams::THostObjectURIParams:
      mutator = new nsHostObjectURI::Mutator();
      break;

    default:
      MOZ_CRASH("Unknown params!");
  }

  MOZ_ASSERT(mutator);

  nsresult rv = mutator->Deserialize(aParams);
  if (NS_FAILED(rv)) {
    MOZ_ASSERT(false, "Deserialize failed!");
    return nullptr;
  }

  nsCOMPtr<nsIURI> uri;
  DebugOnly<nsresult> rv2 = mutator->Finalize(getter_AddRefs(uri));
  MOZ_ASSERT(uri);
  MOZ_ASSERT(NS_SUCCEEDED(rv2));

  return uri.forget();
}
Exemple #4
0
already_AddRefed<nsIURI>
DeserializeURI(const URIParams& aParams)
{
  MOZ_ASSERT(NS_IsMainThread());

  nsCOMPtr<nsIIPCSerializableURI> serializable;

  switch (aParams.type()) {
    case URIParams::TSimpleURIParams:
      serializable = do_CreateInstance(kSimpleURICID);
      break;

    case URIParams::TStandardURLParams:
      serializable = do_CreateInstance(kStandardURLCID);
      break;

    case URIParams::TJARURIParams:
      serializable = do_CreateInstance(kJARURICID);
      break;

    case URIParams::TJSURIParams:
      serializable = new nsJSURI();
      break;

    case URIParams::TIconURIParams:
      serializable = do_CreateInstance(kIconURICID);
      break;

    case URIParams::TNullPrincipalURIParams:
      serializable = new nsNullPrincipalURI();
      break;

    case URIParams::TSimpleNestedURIParams:
      serializable = new nsSimpleNestedURI();
      break;

    case URIParams::THostObjectURIParams:
      serializable = new nsHostObjectURI();
      break;

    default:
      MOZ_CRASH("Unknown params!");
  }

  MOZ_ASSERT(serializable);

  if (!serializable->Deserialize(aParams)) {
    MOZ_ASSERT(false, "Deserialize failed!");
    return nullptr;
  }

  nsCOMPtr<nsIURI> uri = do_QueryInterface(serializable);
  MOZ_ASSERT(uri);

  return uri.forget();
}
Exemple #5
0
bool
nsSimpleURI::Deserialize(const URIParams& aParams)
{
    if (aParams.type() != URIParams::TSimpleURIParams) {
        NS_ERROR("Received unknown parameters from the other process!");
        return false;
    }

    const SimpleURIParams& params = aParams.get_SimpleURIParams();

    mScheme = params.scheme();
    mPath = params.path();
    if (params.ref().IsVoid()) {
        mRef.Truncate();
        mIsRefValid = false;
    }
    else {
        mRef = params.ref();
        mIsRefValid = true;
    }
    mMutable = params.isMutable();

    return true;
}
Exemple #6
0
void
SerializeURI(nsIURI* aURI,
             URIParams& aParams)
{
  MOZ_ASSERT(NS_IsMainThread());
  MOZ_ASSERT(aURI);

  nsCOMPtr<nsIIPCSerializableURI> serializable = do_QueryInterface(aURI);
  if (!serializable) {
    MOZ_CRASH("All IPDL URIs must be serializable!");
  }

  serializable->Serialize(aParams);
  if (aParams.type() == URIParams::T__None) {
    MOZ_CRASH("Serialize failed!");
  }
}
Exemple #7
0
void
SerializeURI(nsIURI* aURI,
             URIParams& aParams)
{
  MOZ_ASSERT(NS_IsMainThread());
  MOZ_ASSERT(aURI);

  nsCOMPtr<nsIIPCSerializableURI> serializable = do_QueryInterface(aURI);
  if (serializable) {
    serializable->Serialize(aParams);
    if (aParams.type() == URIParams::T__None) {
      MOZ_CRASH("Serialize failed!");
    }
    return;
  }

  nsCString scheme;
  if (NS_FAILED(aURI->GetScheme(scheme))) {
    MOZ_CRASH("This must never fail!");
  }

  bool allowed = false;

  for (size_t i = 0; i < ArrayLength(kGenericURIAllowedSchemes); i++) {
    const StringWithLengh& entry = kGenericURIAllowedSchemes[i];
    if (scheme.EqualsASCII(entry.string, entry.length)) {
      allowed = true;
      break;
    }
  }

  if (!allowed) {
    MOZ_CRASH("All IPDL URIs must be serializable or an allowed "
              "scheme!");
  }

  GenericURIParams params;
  if (NS_FAILED(aURI->GetSpec(params.spec())) ||
      NS_FAILED(aURI->GetOriginCharset(params.charset()))) {
    MOZ_CRASH("This must never fail!");
  }

  aParams = params;
}
Exemple #8
0
already_AddRefed<nsIURI>
DeserializeURI(const URIParams& aParams)
{
  MOZ_ASSERT(NS_IsMainThread());

  nsCOMPtr<nsIURI> uri;

  if (aParams.type() != URIParams::TGenericURIParams) {
    nsCOMPtr<nsIIPCSerializableURI> serializable;

    switch (aParams.type()) {
      case URIParams::TSimpleURIParams:
        serializable = do_CreateInstance(kSimpleURICID);
        break;

      case URIParams::TStandardURLParams:
        serializable = do_CreateInstance(kStandardURLCID);
        break;

      case URIParams::TJARURIParams:
        serializable = do_CreateInstance(kJARURICID);
        break;

      default:
        MOZ_CRASH("Unknown params!");
    }

    MOZ_ASSERT(serializable);

    if (!serializable->Deserialize(aParams)) {
      MOZ_ASSERT(false, "Deserialize failed!");
      return nullptr;
    }

    uri = do_QueryInterface(serializable);
    MOZ_ASSERT(uri);

    return uri.forget();
  }

  MOZ_ASSERT(aParams.type() == URIParams::TGenericURIParams);

  const GenericURIParams& params = aParams.get_GenericURIParams();

  if (NS_FAILED(NS_NewURI(getter_AddRefs(uri), params.spec(),
                          params.charset().get()))) {
    NS_WARNING("Failed to make new URI!");
    return nullptr;
  }

  nsCString scheme;
  if (NS_FAILED(uri->GetScheme(scheme))) {
    MOZ_CRASH("This must never fail!");
  }

  bool allowed = false;

  for (size_t i = 0; i < ArrayLength(kGenericURIAllowedSchemes); i++) {
    const StringWithLengh& entry = kGenericURIAllowedSchemes[i];
    if (scheme.EqualsASCII(entry.string, entry.length)) {
      allowed = true;
      break;
    }
  }

  if (!allowed) {
    MOZ_ASSERT(false, "This type of URI is not allowed!");
    return nullptr;
  }

  return uri.forget();
}