Backed out 2 changesets (bug 1117337) for b2g build bustage on a CLOSED TREE
authorWes Kocher <wkocher@mozilla.com>
Wed, 11 Feb 2015 15:53:49 -0800
changeset 228791 a7d0685f13f215fc57a71c7bb17084b8224d4dd1
parent 228790 3836094729293f5ab79672288f1d2b16069ee774
child 228792 2db20a9e01b961988fd5e5041bc1b058f3b8a910
push id28271
push usercbook@mozilla.com
push dateThu, 12 Feb 2015 14:33:39 +0000
treeherdermozilla-central@81f979b17fbd [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
bugs1117337
milestone38.0a1
backs out016b3f06add14e21135d91087542bb2e915aa60f
aa4817b6ad6164309f2677ba8966b87c11882c88
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Backed out 2 changesets (bug 1117337) for b2g build bustage on a CLOSED TREE Backed out changeset 016b3f06add1 (bug 1117337) Backed out changeset aa4817b6ad61 (bug 1117337)
image/decoders/icon/moz.build
image/decoders/icon/nsIconURI.cpp
image/decoders/icon/nsIconURI.h
ipc/glue/URIParams.ipdlh
ipc/glue/URIUtils.cpp
--- a/image/decoders/icon/moz.build
+++ b/image/decoders/icon/moz.build
@@ -5,32 +5,26 @@
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
 
 XPIDL_SOURCES += [
     'nsIIconURI.idl',
 ]
 
 XPIDL_MODULE = 'imgicon'
 
-EXPORTS += [
-    'nsIconURI.h',
-]
-
 UNIFIED_SOURCES += [
     'nsIconModule.cpp',
     'nsIconProtocolHandler.cpp',
     'nsIconURI.cpp',
 ]
 
 FAIL_ON_WARNINGS = True
 
 FINAL_LIBRARY = 'xul'
 
-include('/ipc/chromium/chromium-config.mozbuild')
-
 platform = None
 
 if CONFIG['MOZ_WIDGET_GTK']:
     platform = 'gtk'
 
 if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'qt':
     platform = 'qt'
 
--- a/image/decoders/icon/nsIconURI.cpp
+++ b/image/decoders/icon/nsIconURI.cpp
@@ -1,29 +1,25 @@
 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
- * vim: set sw=2 sts=2 ts=2 et 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/ArrayUtils.h"
 
-#include "mozilla/ipc/URIUtils.h"
-
 #include "nsIconURI.h"
 #include "nsNetUtil.h"
 #include "nsIIOService.h"
 #include "nsIURL.h"
 #include "prprf.h"
 #include "plstr.h"
 #include <stdlib.h>
 
 using namespace mozilla;
-using namespace mozilla::ipc;
 
 #define DEFAULT_IMAGE_SIZE 16
 
 #if defined(MAX_PATH)
 #define SANE_FILE_NAME_LEN MAX_PATH
 #elif defined(PATH_MAX)
 #define SANE_FILE_NAME_LEN PATH_MAX
 #else
@@ -58,17 +54,17 @@ nsMozIconURI::nsMozIconURI()
   : mSize(DEFAULT_IMAGE_SIZE),
     mIconSize(-1),
     mIconState(-1)
 { }
 
 nsMozIconURI::~nsMozIconURI()
 { }
 
-NS_IMPL_ISUPPORTS(nsMozIconURI, nsIMozIconURI, nsIURI, nsIIPCSerializableURI)
+NS_IMPL_ISUPPORTS(nsMozIconURI, nsIMozIconURI, nsIURI)
 
 #define MOZICON_SCHEME "moz-icon:"
 #define MOZICON_SCHEME_LEN (sizeof(MOZICON_SCHEME) - 1)
 
 ////////////////////////////////////////////////////////////////////////////////
 // nsIURI methods:
 
 NS_IMETHODIMP
@@ -581,64 +577,8 @@ nsMozIconURI::GetIconState(nsACString& a
   if (mIconState >= 0) {
     aState = kStateStrings[mIconState];
   } else {
     aState.Truncate();
   }
   return NS_OK;
 }
 ////////////////////////////////////////////////////////////////////////////////
-// nsIIPCSerializableURI methods:
-
-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;
-}
-
-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;
-}
--- a/image/decoders/icon/nsIconURI.h
+++ b/image/decoders/icon/nsIconURI.h
@@ -5,34 +5,31 @@
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 #ifndef nsMozIconURI_h__
 #define nsMozIconURI_h__
 
 #include "nsIIconURI.h"
 #include "nsCOMPtr.h"
 #include "nsString.h"
-#include "nsIIPCSerializableURI.h"
 
 #define NS_MOZICONURI_CID                            \
 {                                                    \
     0x43a88e0e,                                      \
     0x2d37,                                          \
     0x11d5,                                          \
     { 0x99, 0x7, 0x0, 0x10, 0x83, 0x1, 0xe, 0x9b }   \
 }
 
 class nsMozIconURI MOZ_FINAL : public nsIMozIconURI
-                             , public nsIIPCSerializableURI
 {
 public:
   NS_DECL_THREADSAFE_ISUPPORTS
   NS_DECL_NSIURI
   NS_DECL_NSIMOZICONURI
-  NS_DECL_NSIIPCSERIALIZABLEURI
 
   // nsMozIconURI
   nsMozIconURI();
 
 protected:
   virtual ~nsMozIconURI();
   nsCOMPtr<nsIURL> mIconURL; // a URL that we want the icon for
   uint32_t mSize; // the # of pixels in a row that we want for this image.
--- a/ipc/glue/URIParams.ipdlh
+++ b/ipc/glue/URIParams.ipdlh
@@ -48,33 +48,28 @@ struct StandardURLParams
 
 struct JARURIParams
 {
   URIParams jarFile;
   URIParams jarEntry;
   nsCString charset;
 };
 
-struct IconURIParams
+struct GenericURIParams
 {
-  OptionalURIParams uri;
-  uint32_t size;
-  nsCString contentType;
-  nsCString fileName;
-  nsCString stockIcon;
-  int32_t iconSize;
-  int32_t iconState;
+  nsCString spec;
+  nsCString charset;
 };
 
 union URIParams
 {
   SimpleURIParams;
   StandardURLParams;
   JARURIParams;
-  IconURIParams;
+  GenericURIParams;
 };
 
 union OptionalURIParams
 {
   void_t;
   URIParams;
 };
 
--- a/ipc/glue/URIUtils.cpp
+++ b/ipc/glue/URIUtils.cpp
@@ -7,51 +7,94 @@
 #include "nsIIPCSerializableURI.h"
 
 #include "mozilla/ArrayUtils.h"
 #include "mozilla/Assertions.h"
 #include "nsComponentManagerUtils.h"
 #include "nsDebug.h"
 #include "nsID.h"
 #include "nsJARURI.h"
-#include "nsIconURI.h"
 #include "nsNetCID.h"
 #include "nsNetUtil.h"
 #include "nsThreadUtils.h"
 
 using namespace mozilla::ipc;
 using mozilla::ArrayLength;
 
 namespace {
 
 NS_DEFINE_CID(kSimpleURICID, NS_SIMPLEURI_CID);
 NS_DEFINE_CID(kStandardURLCID, NS_STANDARDURL_CID);
 NS_DEFINE_CID(kJARURICID, NS_JARURI_CID);
 
+struct StringWithLengh
+{
+  const char* string;
+  size_t length;
+};
+
+#define STRING_WITH_LENGTH(_str) \
+  { _str, ArrayLength(_str) - 1 }
+
+const StringWithLengh kGenericURIAllowedSchemes[] = {
+  STRING_WITH_LENGTH("about:"),
+  STRING_WITH_LENGTH("javascript:"),
+  STRING_WITH_LENGTH("javascript")
+};
+
+#undef STRING_WITH_LENGTH
+
 } // anonymous namespace
 
 namespace mozilla {
 namespace ipc {
 
 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!");
+  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!");
   }
 
-  serializable->Serialize(aParams);
-  if (aParams.type() == URIParams::T__None) {
-    MOZ_CRASH("Serialize failed!");
+  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;
 }
 
 void
 SerializeURI(nsIURI* aURI,
              OptionalURIParams& aParams)
 {
   MOZ_ASSERT(NS_IsMainThread());
 
@@ -65,48 +108,80 @@ SerializeURI(nsIURI* aURI,
   }
 }
 
 already_AddRefed<nsIURI>
 DeserializeURI(const URIParams& aParams)
 {
   MOZ_ASSERT(NS_IsMainThread());
 
-  nsCOMPtr<nsIIPCSerializableURI> serializable;
+  nsCOMPtr<nsIURI> uri;
+
+  if (aParams.type() != URIParams::TGenericURIParams) {
+    nsCOMPtr<nsIIPCSerializableURI> serializable;
 
-  switch (aParams.type()) {
-    case URIParams::TSimpleURIParams:
-      serializable = do_CreateInstance(kSimpleURICID);
-      break;
+    switch (aParams.type()) {
+      case URIParams::TSimpleURIParams:
+        serializable = do_CreateInstance(kSimpleURICID);
+        break;
 
-    case URIParams::TStandardURLParams:
-      serializable = do_CreateInstance(kStandardURLCID);
-      break;
+      case URIParams::TStandardURLParams:
+        serializable = do_CreateInstance(kStandardURLCID);
+        break;
 
-    case URIParams::TJARURIParams:
-      serializable = do_CreateInstance(kJARURICID);
-      break;
+      case URIParams::TJARURIParams:
+        serializable = do_CreateInstance(kJARURICID);
+        break;
+
+      default:
+        MOZ_CRASH("Unknown params!");
+    }
+
+    MOZ_ASSERT(serializable);
 
-    case URIParams::TIconURIParams:
-      serializable = new nsMozIconURI();
-      break;
+    if (!serializable->Deserialize(aParams)) {
+      MOZ_ASSERT(false, "Deserialize failed!");
+      return nullptr;
+    }
 
-    default:
-      MOZ_CRASH("Unknown params!");
+    uri = do_QueryInterface(serializable);
+    MOZ_ASSERT(uri);
+
+    return uri.forget();
   }
 
-  MOZ_ASSERT(serializable);
+  MOZ_ASSERT(aParams.type() == URIParams::TGenericURIParams);
+
+  const GenericURIParams& params = aParams.get_GenericURIParams();
 
-  if (!serializable->Deserialize(aParams)) {
-    MOZ_ASSERT(false, "Deserialize failed!");
+  if (NS_FAILED(NS_NewURI(getter_AddRefs(uri), params.spec(),
+                          params.charset().get()))) {
+    NS_WARNING("Failed to make new URI!");
     return nullptr;
   }
 
-  nsCOMPtr<nsIURI> uri = do_QueryInterface(serializable);
-  MOZ_ASSERT(uri);
+  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();
 }
 
 already_AddRefed<nsIURI>
 DeserializeURI(const OptionalURIParams& aParams)
 {
   MOZ_ASSERT(NS_IsMainThread());