Bug 1363482: Part 5 - Preload component manifests off-thread during startup. r?erahm
MozReview-Commit-ID: 2BTkf2C5tMI
--- a/xpcom/components/nsComponentManager.cpp
+++ b/xpcom/components/nsComponentManager.cpp
@@ -44,16 +44,17 @@
#include "mozilla/GenericFactory.h"
#include "nsSupportsPrimitives.h"
#include "nsArray.h"
#include "nsIMutableArray.h"
#include "nsArrayEnumerator.h"
#include "nsStringEnumerator.h"
#include "mozilla/FileUtils.h"
+#include "mozilla/URLPreloader.h"
#include "mozilla/UniquePtr.h"
#include "nsDataHashtable.h"
#include <new> // for placement new
#include "mozilla/Omnijar.h"
#include "mozilla/Logging.h"
@@ -533,30 +534,22 @@ CutExtension(nsCString& aPath)
static void
DoRegisterManifest(NSLocationType aType,
FileLocation& aFile,
bool aChromeOnly,
bool aXPTOnly)
{
MOZ_ASSERT(!aXPTOnly || !nsComponentManagerImpl::gComponentManager);
- uint32_t len;
- FileLocation::Data data;
- UniquePtr<char[]> buf;
- nsresult rv = aFile.GetData(data);
- if (NS_SUCCEEDED(rv)) {
- rv = data.GetSize(&len);
- }
- if (NS_SUCCEEDED(rv)) {
- buf = MakeUnique<char[]>(len + 1);
- rv = data.Copy(buf.get(), len);
- }
- if (NS_SUCCEEDED(rv)) {
- buf[len] = '\0';
- ParseManifest(aType, aFile, buf.get(), aChromeOnly, aXPTOnly);
+
+ auto result = URLPreloader::Read(aFile);
+ if (result.isOk()) {
+ nsCString buf(result.unwrap());
+
+ ParseManifest(aType, aFile, buf.BeginWriting(), aChromeOnly, aXPTOnly);
} else if (NS_BOOTSTRAPPED_LOCATION != aType) {
nsCString uri;
aFile.GetURIString(uri);
LogMessage("Could not read chrome manifest '%s'.", uri.get());
}
}
void