Back out bug 782542 for regressions.

This commit is contained in:
Chris Jones 2012-12-21 18:23:13 -08:00
Родитель 25748f517b
Коммит a01c2255bc
41 изменённых файлов: 168 добавлений и 446 удалений

Просмотреть файл

@ -112,10 +112,6 @@ function setUp() {
SpecialPowers.setBoolPref("dom.ipc.browser_frames.oop_by_default", true);
SpecialPowers.addPermission("browser", true, window.document);
SpecialPowers.addPermission("embed-apps", true, window.document);
// TODO: remove in bug 820712
SpecialPowers.setBoolPref("network.disable.ipc.security", true);
runNextTest();
}
@ -140,10 +136,6 @@ function makeKillTest(isApp) function testKill() {
function tearDown() {
SpecialPowers.clearUserPref("dom.mozBrowserFramesEnabled");
SpecialPowers.clearUserPref("dom.ipc.browser_frames.oop_by_default");
// TODO: remove in bug 820712
SpecialPowers.clearUserPref("network.disable.ipc.security");
SimpleTest.finish();
}

Просмотреть файл

@ -1,7 +1,7 @@
load 257752-1-recursion.xul
load 329335-1.xul
load 329884-1.xul
skip-if(winWidget||browserIsRemote) HTTP load 330010-1.xul # bugs 742455 and 823470
skip-if(winWidget) HTTP load 330010-1.xul # bug 742455
skip-if(winWidget) load 330012-1.xul # bug 742455
skip-if(winWidget) load 397148-1.xul # bug 742455
load 404346-1.xul

Просмотреть файл

@ -8,12 +8,22 @@
#include "nsIScriptSecurityManager.h"
#include "nsServiceManagerUtils.h"
#include "nsContentUtils.h"
#include "mozIApplication.h"
namespace mozilla {
NS_IMPL_ISUPPORTS1(LoadContext, nsILoadContext);
LoadContext::LoadContext(const IPC::SerializedLoadContext& aToCopy,
nsIDOMElement* aTopFrameElemenet)
: mIsNotNull(aToCopy.mIsNotNull)
, mIsContent(aToCopy.mIsContent)
, mUsePrivateBrowsing(aToCopy.mUsePrivateBrowsing)
, mIsInBrowserElement(aToCopy.mIsInBrowserElement)
, mAppId(aToCopy.mAppId)
, mTopFrameElement(do_GetWeakReference(aTopFrameElemenet))
{}
//-----------------------------------------------------------------------------
// LoadContext::nsILoadContext
//-----------------------------------------------------------------------------

Просмотреть файл

@ -10,9 +10,6 @@
#include "SerializedLoadContext.h"
#include "mozilla/Attributes.h"
#include "nsWeakReference.h"
#include "nsIDOMElement.h"
class mozIApplication;
namespace mozilla {
@ -32,19 +29,17 @@ public:
NS_DECL_ISUPPORTS
NS_DECL_NSILOADCONTEXT
// AppId/inBrowser arguments override those in SerializedLoadContext provided
// by child process.
LoadContext(const IPC::SerializedLoadContext& aToCopy,
nsIDOMElement* aTopFrameElement,
uint32_t aAppId, bool aInBrowser)
LoadContext(const IPC::SerializedLoadContext& aToCopy)
: mIsNotNull(aToCopy.mIsNotNull)
, mIsContent(aToCopy.mIsContent)
, mUsePrivateBrowsing(aToCopy.mUsePrivateBrowsing)
, mIsInBrowserElement(aInBrowser)
, mAppId(aAppId)
, mTopFrameElement(do_GetWeakReference(aTopFrameElement))
, mIsInBrowserElement(aToCopy.mIsInBrowserElement)
, mAppId(aToCopy.mAppId)
{}
LoadContext(const IPC::SerializedLoadContext& aToCopy,
nsIDOMElement* aTopFrameElemenet);
private:
bool mIsNotNull;
bool mIsContent;

Просмотреть файл

@ -65,14 +65,6 @@ const browserElementTestHelpers = {
return this._setBoolPref("dom.ipc.browser_frames.oop_by_default", value);
},
getIPCSecurityDisabledPref: function() {
return this._getBoolPref("network.disable.ipc.security");
},
setIPCSecurityDisabledPref: function(value) {
return this._setBoolPref("network.disable.ipc.security", value);
},
getPageThumbsEnabledPref: function() {
return this._getBoolPref('browser.pageThumbs.enabled');
},
@ -102,7 +94,6 @@ const browserElementTestHelpers = {
this.setOOPDisabledPref(this.origOOPDisabledPref);
this.setOOPByDefaultPref(this.origOOPByDefaultPref);
this.setPageThumbsEnabledPref(this.origPageThumbsEnabledPref);
this.setIPCSecurityDisabledPref(this.origIPCSecurityPref);
this.removeAllTempPermissions();
},
@ -110,7 +101,6 @@ const browserElementTestHelpers = {
'origOOPDisabledPref': null,
'origOOPByDefaultPref': null,
'origPageThumbsEnabledPref': null,
'origIPCSecurityPref': null,
'tempPermissions': [],
// Some basically-empty pages from different domains you can load.
@ -132,7 +122,6 @@ browserElementTestHelpers.origEnabledPref = browserElementTestHelpers.getEnabled
browserElementTestHelpers.origOOPDisabledPref = browserElementTestHelpers.getOOPDisabledPref();
browserElementTestHelpers.origOOPByDefaultPref = browserElementTestHelpers.getOOPByDefaultPref();
browserElementTestHelpers.origPageThumbsEnabledPref = browserElementTestHelpers.getPageThumbsEnabledPref();
browserElementTestHelpers.origIPCSecurityPref = browserElementTestHelpers.getIPCSecurityDisabledPref();
// Disable tab view; it seriously messes us up.
browserElementTestHelpers.setPageThumbsEnabledPref(false);
@ -144,10 +133,6 @@ var oop = location.pathname.indexOf('_inproc_') == -1;
browserElementTestHelpers.setOOPByDefaultPref(oop);
browserElementTestHelpers.setOOPDisabledPref(false);
// Disable the networking security checks; our test harness just tests browser elements
// without sticking them in apps, and the security checks dislike that.
browserElementTestHelpers.setIPCSecurityDisabledPref(true);
addEventListener('unload', function() {
browserElementTestHelpers.restoreOriginalPrefs();
});

Просмотреть файл

@ -153,9 +153,6 @@
["device.storage.testing", true],
["device.storage.prompt.testing", true],
// TODO: remove this as part of bug 820712
["network.disable.ipc.security", true],
["dom.ipc.browser_frames.oop_by_default", true],
["dom.mozBrowserFramesEnabled", true],
["browser.pageThumbs.enabled", false]

Просмотреть файл

@ -168,9 +168,6 @@
SpecialPowers.addPermission("browser", true, document);
SpecialPowers.pushPrefEnv({
"set": [
// TODO: remove this as part of bug 820712
["network.disable.ipc.security", true],
["dom.ipc.browser_frames.oop_by_default", true],
["dom.mozBrowserFramesEnabled", true]
]

Просмотреть файл

@ -159,10 +159,5 @@ if (!SpecialPowers.isMainProcess()) {
todo(false, "We should make this work on content process");
SimpleTest.finish();
} else {
// TODO: remove unsetting network.disable.ipc.security as part of bug 820712
SpecialPowers.pushPrefEnv({
"set": [
["network.disable.ipc.security", true],
]
}, startTest);
startTest();
}

Просмотреть файл

@ -216,6 +216,8 @@ parent:
* URI of the manifest to fetch, the application cache group ID
* @param documentURI
* URI of the document that referred the manifest
* @param clientID
* The group cache version identifier to use
* @param stickDocument
* True if the update was initiated by a document load that referred
* a manifest.
@ -233,6 +235,7 @@ parent:
* has already been cached (stickDocument=false).
*/
POfflineCacheUpdate(URIParams manifestURI, URIParams documentURI,
bool isInBrowserElement, uint32_t appId,
bool stickDocument);
sync PIndexedDB(nsCString asciiOrigin)

Просмотреть файл

@ -1576,6 +1576,8 @@ TabChild::RecvActivateFrameEvent(const nsString& aType, const bool& capture)
POfflineCacheUpdateChild*
TabChild::AllocPOfflineCacheUpdate(const URIParams& manifestURI,
const URIParams& documentURI,
const bool& isInBrowserElement,
const uint32_t& appId,
const bool& stickDocument)
{
NS_RUNTIMEABORT("unused");

Просмотреть файл

@ -277,6 +277,8 @@ public:
virtual POfflineCacheUpdateChild* AllocPOfflineCacheUpdate(
const URIParams& manifestURI,
const URIParams& documentURI,
const bool& isInBrowserElement,
const uint32_t& appId,
const bool& stickDocument);
virtual bool DeallocPOfflineCacheUpdate(POfflineCacheUpdateChild* offlineCacheUpdate);

Просмотреть файл

@ -1132,13 +1132,15 @@ TabParent::DeallocPRenderFrame(PRenderFrameParent* aFrame)
mozilla::docshell::POfflineCacheUpdateParent*
TabParent::AllocPOfflineCacheUpdate(const URIParams& aManifestURI,
const URIParams& aDocumentURI,
const bool& isInBrowserElement,
const uint32_t& appId,
const bool& stickDocument)
{
nsRefPtr<mozilla::docshell::OfflineCacheUpdateParent> update =
new mozilla::docshell::OfflineCacheUpdateParent(OwnOrContainingAppId(),
IsBrowserElement());
new mozilla::docshell::OfflineCacheUpdateParent();
nsresult rv = update->Schedule(aManifestURI, aDocumentURI, stickDocument);
nsresult rv = update->Schedule(aManifestURI, aDocumentURI,
isInBrowserElement, appId, stickDocument);
if (NS_FAILED(rv))
return nullptr;

Просмотреть файл

@ -191,6 +191,8 @@ public:
virtual POfflineCacheUpdateParent* AllocPOfflineCacheUpdate(
const URIParams& aManifestURI,
const URIParams& aDocumentURI,
const bool& isInBrowserElement,
const uint32_t& appId,
const bool& stickDocument);
virtual bool DeallocPOfflineCacheUpdate(POfflineCacheUpdateParent* actor);

Просмотреть файл

@ -773,9 +773,6 @@ pref("security.fileuri.strict_origin_policy", true);
// the results
pref("network.allow-experiments", true);
// Turn off interprocess security checks. Needed to run xpcshell tests.
pref("network.disable.ipc.security", false);
// Default action for unlisted external protocol handlers
pref("network.protocol-handler.external-default", true); // OK to load
pref("network.protocol-handler.warn-external-default", true); // warn before load

Просмотреть файл

@ -4,14 +4,12 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#include "mozilla/net/CookieServiceChild.h"
#include "mozilla/dom/TabChild.h"
#include "mozilla/ipc/URIUtils.h"
#include "mozilla/net/NeckoChild.h"
#include "nsIURI.h"
#include "nsIPrefService.h"
#include "nsIPrefBranch.h"
#include "nsITabChild.h"
#include "nsNetUtil.h"
using namespace mozilla::ipc;
@ -117,19 +115,10 @@ CookieServiceChild::GetCookieStringInternal(nsIURI *aHostURI,
URIParams uriParams;
SerializeURI(aHostURI, uriParams);
nsCOMPtr<nsITabChild> iTabChild;
mozilla::dom::TabChild* tabChild = nullptr;
if (aChannel) {
NS_QueryNotificationCallbacks(aChannel, iTabChild);
if (iTabChild) {
tabChild = static_cast<mozilla::dom::TabChild*>(iTabChild.get());
}
}
// Synchronously call the parent.
nsAutoCString result;
SendGetCookieString(uriParams, !!isForeign, aFromHttp,
IPC::SerializedLoadContext(aChannel), tabChild, &result);
IPC::SerializedLoadContext(aChannel), &result);
if (!result.IsEmpty())
*aCookieString = ToNewCString(result);
@ -159,18 +148,9 @@ CookieServiceChild::SetCookieStringInternal(nsIURI *aHostURI,
URIParams uriParams;
SerializeURI(aHostURI, uriParams);
nsCOMPtr<nsITabChild> iTabChild;
mozilla::dom::TabChild* tabChild = nullptr;
if (aChannel) {
NS_QueryNotificationCallbacks(aChannel, iTabChild);
if (iTabChild) {
tabChild = static_cast<mozilla::dom::TabChild*>(iTabChild.get());
}
}
// Synchronously call the parent.
SendSetCookieString(uriParams, !!isForeign, cookieString, serverTime,
aFromHttp, IPC::SerializedLoadContext(aChannel), tabChild);
aFromHttp, IPC::SerializedLoadContext(aChannel));
return NS_OK;
}

Просмотреть файл

@ -4,44 +4,32 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#include "mozilla/net/CookieServiceParent.h"
#include "mozilla/dom/PBrowserParent.h"
#include "mozilla/net/NeckoParent.h"
#include "mozilla/ipc/URIUtils.h"
#include "nsCookieService.h"
#include "nsNetUtil.h"
#include "nsPrintfCString.h"
using namespace mozilla::ipc;
using mozilla::dom::PBrowserParent;
using mozilla::net::NeckoParent;
MOZ_WARN_UNUSED_RESULT
static bool
GetAppInfoFromParams(const IPC::SerializedLoadContext &aLoadContext,
PBrowserParent* aBrowser,
uint32_t& aAppId,
bool& aIsInBrowserElement,
bool& aIsPrivate)
static void
GetAppInfoFromLoadContext(const IPC::SerializedLoadContext &aLoadContext,
uint32_t& aAppId,
bool& aIsInBrowserElement,
bool& aIsPrivate)
{
// TODO: bug 782542: what to do when we get null loadContext? For now assume
// NECKO_NO_APP_ID.
aAppId = NECKO_NO_APP_ID;
aIsInBrowserElement = false;
aIsPrivate = false;
const char* error = NeckoParent::GetValidatedAppInfo(aLoadContext, aBrowser,
&aAppId,
&aIsInBrowserElement);
if (error) {
NS_WARNING(nsPrintfCString("CookieServiceParent: GetAppInfoFromParams: "
"FATAL error: %s: KILLING CHILD PROCESS\n",
error).get());
return false;
if (aLoadContext.IsNotNull()) {
aAppId = aLoadContext.mAppId;
aIsInBrowserElement = aLoadContext.mIsInBrowserElement;
}
if (aLoadContext.IsPrivateBitValid())
aIsPrivate = aLoadContext.mUsePrivateBrowsing;
return true;
}
namespace mozilla {
@ -69,7 +57,6 @@ CookieServiceParent::RecvGetCookieString(const URIParams& aHost,
const bool& aFromHttp,
const IPC::SerializedLoadContext&
aLoadContext,
PBrowserParent* aBrowser,
nsCString* aResult)
{
if (!mCookieService)
@ -83,15 +70,10 @@ CookieServiceParent::RecvGetCookieString(const URIParams& aHost,
uint32_t appId;
bool isInBrowserElement, isPrivate;
bool valid = GetAppInfoFromParams(aLoadContext, aBrowser, appId,
isInBrowserElement, isPrivate);
if (!valid) {
return false;
}
GetAppInfoFromLoadContext(aLoadContext, appId, isInBrowserElement, isPrivate);
mCookieService->GetCookieStringInternal(hostURI, aIsForeign, aFromHttp, appId,
isInBrowserElement, isPrivate,
*aResult);
isInBrowserElement, isPrivate, *aResult);
return true;
}
@ -102,8 +84,7 @@ CookieServiceParent::RecvSetCookieString(const URIParams& aHost,
const nsCString& aServerTime,
const bool& aFromHttp,
const IPC::SerializedLoadContext&
aLoadContext,
PBrowserParent* aBrowser)
aLoadContext)
{
if (!mCookieService)
return true;
@ -116,11 +97,7 @@ CookieServiceParent::RecvSetCookieString(const URIParams& aHost,
uint32_t appId;
bool isInBrowserElement, isPrivate;
bool valid = GetAppInfoFromParams(aLoadContext, aBrowser, appId,
isInBrowserElement, isPrivate);
if (!valid) {
return false;
}
GetAppInfoFromLoadContext(aLoadContext, appId, isInBrowserElement, isPrivate);
nsDependentCString cookieString(aCookieString, 0);
//TODO: bug 812475, pass a real channel object

Просмотреть файл

@ -13,9 +13,6 @@ class nsCookieService;
class nsIIOService;
namespace mozilla {
namespace dom {
class PBrowserParent;
}
namespace net {
class CookieServiceParent : public PCookieServiceParent
@ -30,7 +27,6 @@ protected:
const bool& aFromHttp,
const IPC::SerializedLoadContext&
loadContext,
mozilla::dom::PBrowserParent* aBrowser,
nsCString* aResult);
virtual bool RecvSetCookieString(const URIParams& aHost,
@ -39,8 +35,7 @@ protected:
const nsCString& aServerTime,
const bool& aFromHttp,
const IPC::SerializedLoadContext&
loadContext,
mozilla::dom::PBrowserParent* aBrowser);
loadContext);
nsRefPtr<nsCookieService> mCookieService;
};

Просмотреть файл

@ -6,7 +6,6 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
include protocol PNecko;
include protocol PBrowser;
include URIParams;
include "SerializedLoadContext.h";
@ -65,8 +64,7 @@ parent:
sync GetCookieString(URIParams host,
bool isForeign,
bool fromHttp,
SerializedLoadContext loadContext,
nullable PBrowser browser)
SerializedLoadContext loadContext)
returns (nsCString result);
/*
@ -103,8 +101,7 @@ parent:
nsCString cookieString,
nsCString serverTime,
bool fromHttp,
SerializedLoadContext loadContext,
nullable PBrowser browser);
SerializedLoadContext loadContext);
__delete__();
};

Просмотреть файл

@ -14,22 +14,17 @@
#include "mozilla/net/FTPChannelChild.h"
#include "mozilla/net/WebSocketChannelChild.h"
#include "mozilla/dom/network/TCPSocketChild.h"
#include "mozilla/Preferences.h"
using mozilla::dom::TCPSocketChild;
namespace mozilla {
namespace net {
static bool gDisableIPCSecurity = false;
static const char kPrefDisableIPCSecurity[] = "network.disable.ipc.security";
PNeckoChild *gNeckoChild = nullptr;
// C++ file contents
NeckoChild::NeckoChild()
{
Preferences::AddBoolVarCache(&gDisableIPCSecurity, kPrefDisableIPCSecurity);
}
NeckoChild::~NeckoChild()
@ -85,8 +80,7 @@ NeckoChild::DeallocPHttpChannel(PHttpChannelChild* channel)
}
PFTPChannelChild*
NeckoChild::AllocPFTPChannel(PBrowserChild* aBrowser,
const SerializedLoadContext& aSerialized)
NeckoChild::AllocPFTPChannel()
{
// We don't allocate here: see FTPChannelChild::AsyncOpen()
NS_RUNTIMEABORT("AllocPFTPChannel should not be called");
@ -140,8 +134,7 @@ NeckoChild::DeallocPWyciwygChannel(PWyciwygChannelChild* channel)
}
PWebSocketChild*
NeckoChild::AllocPWebSocket(PBrowserChild* browser,
const SerializedLoadContext& aSerialized)
NeckoChild::AllocPWebSocket(PBrowserChild* browser)
{
NS_NOTREACHED("AllocPWebSocket should not be called");
return nullptr;

Просмотреть файл

@ -33,10 +33,9 @@ protected:
virtual bool DeallocPCookieService(PCookieServiceChild*);
virtual PWyciwygChannelChild* AllocPWyciwygChannel();
virtual bool DeallocPWyciwygChannel(PWyciwygChannelChild*);
virtual PFTPChannelChild* AllocPFTPChannel(PBrowserChild* aBrowser,
const SerializedLoadContext& aSerialized);
virtual PFTPChannelChild* AllocPFTPChannel();
virtual bool DeallocPFTPChannel(PFTPChannelChild*);
virtual PWebSocketChild* AllocPWebSocket(PBrowserChild*, const SerializedLoadContext&);
virtual PWebSocketChild* AllocPWebSocket(PBrowserChild*);
virtual bool DeallocPWebSocket(PWebSocketChild*);
virtual PTCPSocketChild* AllocPTCPSocket(const nsString& aHost,
const uint16_t& aPort,

Просмотреть файл

@ -14,142 +14,30 @@
#include "mozilla/net/WebSocketChannelParent.h"
#include "mozilla/dom/TabParent.h"
#include "mozilla/dom/network/TCPSocketParent.h"
#include "mozilla/Preferences.h"
#include "mozilla/LoadContext.h"
#include "nsPrintfCString.h"
#include "nsHTMLDNSPrefetch.h"
using mozilla::dom::TabParent;
using mozilla::net::PTCPSocketParent;
using mozilla::dom::TCPSocketParent;
using IPC::SerializedLoadContext;
namespace mozilla {
namespace net {
static bool gDisableIPCSecurity = false;
static const char kPrefDisableIPCSecurity[] = "network.disable.ipc.security";
// C++ file contents
NeckoParent::NeckoParent()
{
Preferences::AddBoolVarCache(&gDisableIPCSecurity, kPrefDisableIPCSecurity);
}
NeckoParent::~NeckoParent()
{
}
static PBOverrideStatus
PBOverrideStatusFromLoadContext(const SerializedLoadContext& aSerialized)
{
if (!aSerialized.IsNotNull() && aSerialized.IsPrivateBitValid()) {
return aSerialized.mUsePrivateBrowsing ?
kPBOverride_Private :
kPBOverride_NotPrivate;
}
return kPBOverride_Unset;
}
const char*
NeckoParent::GetValidatedAppInfo(const SerializedLoadContext& aSerialized,
PBrowserParent* aBrowser,
uint32_t* aAppId,
bool* aInBrowserElement)
{
if (!gDisableIPCSecurity) {
if (!aBrowser) {
return "missing required PBrowser argument";
}
if (!aSerialized.IsNotNull()) {
return "SerializedLoadContext from child is null";
}
}
*aAppId = NECKO_UNKNOWN_APP_ID;
*aInBrowserElement = false;
if (aBrowser) {
nsRefPtr<TabParent> tabParent = static_cast<TabParent*>(aBrowser);
*aAppId = tabParent->OwnOrContainingAppId();
*aInBrowserElement = tabParent->IsBrowserElement();
if (*aAppId == NECKO_UNKNOWN_APP_ID) {
return "TabParent reports appId=NECKO_UNKNOWN_APP_ID!";
}
// We may get appID=NO_APP if child frame is neither a browser nor an app
if (*aAppId == NECKO_NO_APP_ID) {
if (tabParent->HasOwnApp()) {
return "TabParent reports NECKO_NO_APP_ID but also is an app";
}
if (!gDisableIPCSecurity && tabParent->IsBrowserElement()) {
// <iframe mozbrowser> which doesn't have an <iframe mozapp> above it.
// This is not supported now, and we'll need to do a code audit to make
// sure we can handle it (i.e don't short-circuit using separate
// namespace if just appID==0)
return "TabParent reports appId=NECKO_NO_APP_ID but is a mozbrowser";
}
}
} else {
// Only trust appId/inBrowser from child-side loadcontext if we're in
// testing mode: allows xpcshell tests to masquerade as apps
MOZ_ASSERT(gDisableIPCSecurity);
if (!gDisableIPCSecurity) {
return "internal error";
}
if (aSerialized.IsNotNull()) {
*aAppId = aSerialized.mAppId;
*aInBrowserElement = aSerialized.mIsInBrowserElement;
} else {
*aAppId = NECKO_NO_APP_ID;
}
}
return nullptr;
}
const char *
NeckoParent::CreateChannelLoadContext(PBrowserParent* aBrowser,
const SerializedLoadContext& aSerialized,
nsCOMPtr<nsILoadContext> &aResult)
{
uint32_t appId = NECKO_UNKNOWN_APP_ID;
bool inBrowser = false;
nsIDOMElement* topFrameElement = nullptr;
const char* error = GetValidatedAppInfo(aSerialized, aBrowser, &appId, &inBrowser);
if (error) {
return error;
}
if (aBrowser) {
nsRefPtr<TabParent> tabParent = static_cast<TabParent*>(aBrowser);
topFrameElement = tabParent->GetOwnerElement();
}
// if gDisableIPCSecurity, we may not have a LoadContext to set. This is
// the common case for most xpcshell tests.
if (aSerialized.IsNotNull()) {
aResult = new LoadContext(aSerialized, topFrameElement, appId, inBrowser);
}
return nullptr;
}
PHttpChannelParent*
NeckoParent::AllocPHttpChannel(PBrowserParent* aBrowser,
const SerializedLoadContext& aSerialized)
NeckoParent::AllocPHttpChannel(PBrowserParent* browser,
const SerializedLoadContext& loadContext)
{
nsCOMPtr<nsILoadContext> loadContext;
const char *error = CreateChannelLoadContext(aBrowser, aSerialized,
loadContext);
if (error) {
NS_WARNING(nsPrintfCString("NeckoParent::AllocPHttpChannel: "
"FATAL error: %s: KILLING CHILD PROCESS\n",
error).get());
return nullptr;
}
PBOverrideStatus overrideStatus = PBOverrideStatusFromLoadContext(aSerialized);
HttpChannelParent *p = new HttpChannelParent(aBrowser, loadContext, overrideStatus);
HttpChannelParent *p = new HttpChannelParent(browser, loadContext);
p->AddRef();
return p;
}
@ -163,20 +51,9 @@ NeckoParent::DeallocPHttpChannel(PHttpChannelParent* channel)
}
PFTPChannelParent*
NeckoParent::AllocPFTPChannel(PBrowserParent* aBrowser,
const SerializedLoadContext& aSerialized)
NeckoParent::AllocPFTPChannel()
{
nsCOMPtr<nsILoadContext> loadContext;
const char *error = CreateChannelLoadContext(aBrowser, aSerialized,
loadContext);
if (error) {
NS_WARNING(nsPrintfCString("NeckoParent::AllocPFTPChannel: "
"FATAL error: %s: KILLING CHILD PROCESS\n",
error).get());
return nullptr;
}
PBOverrideStatus overrideStatus = PBOverrideStatusFromLoadContext(aSerialized);
FTPChannelParent *p = new FTPChannelParent(loadContext, overrideStatus);
FTPChannelParent *p = new FTPChannelParent();
p->AddRef();
return p;
}
@ -219,23 +96,10 @@ NeckoParent::DeallocPWyciwygChannel(PWyciwygChannelParent* channel)
}
PWebSocketParent*
NeckoParent::AllocPWebSocket(PBrowserParent* browser,
const SerializedLoadContext& serialized)
NeckoParent::AllocPWebSocket(PBrowserParent* browser)
{
nsCOMPtr<nsILoadContext> loadContext;
const char *error = CreateChannelLoadContext(browser, serialized,
loadContext);
if (error) {
NS_WARNING(nsPrintfCString("NeckoParent::AllocPWebSocket: "
"FATAL error: %s: KILLING CHILD PROCESS\n",
error).get());
return nullptr;
}
TabParent* tabParent = static_cast<TabParent*>(browser);
PBOverrideStatus overrideStatus = PBOverrideStatusFromLoadContext(serialized);
WebSocketChannelParent* p = new WebSocketChannelParent(tabParent, loadContext,
overrideStatus);
WebSocketChannelParent* p = new WebSocketChannelParent(tabParent);
p->AddRef();
return p;
}

Просмотреть файл

@ -14,13 +14,6 @@
namespace mozilla {
namespace net {
// Used to override channel Private Browsing status if needed.
enum PBOverrideStatus {
kPBOverride_Unset = 0,
kPBOverride_Private,
kPBOverride_NotPrivate
};
// Header file contents
class NeckoParent :
public PNeckoParent
@ -29,27 +22,6 @@ public:
NeckoParent();
virtual ~NeckoParent();
MOZ_WARN_UNUSED_RESULT
static const char *
GetValidatedAppInfo(const SerializedLoadContext& aSerialized,
PBrowserParent* aBrowser,
uint32_t* aAppId,
bool* aInBrowserElement);
/*
* Creates LoadContext for parent-side of an e10s channel.
*
* Values from PBrowserParent are more secure, and override those set in
* SerializedLoadContext.
*
* Returns null if successful, or an error string if failed.
*/
MOZ_WARN_UNUSED_RESULT
static const char*
CreateChannelLoadContext(PBrowserParent* aBrowser,
const SerializedLoadContext& aSerialized,
nsCOMPtr<nsILoadContext> &aResult);
protected:
virtual PHttpChannelParent* AllocPHttpChannel(PBrowserParent*,
const SerializedLoadContext&);
@ -58,11 +30,9 @@ protected:
virtual bool DeallocPCookieService(PCookieServiceParent*);
virtual PWyciwygChannelParent* AllocPWyciwygChannel();
virtual bool DeallocPWyciwygChannel(PWyciwygChannelParent*);
virtual PFTPChannelParent* AllocPFTPChannel(PBrowserParent* aBrowser,
const SerializedLoadContext& aSerialized);
virtual PFTPChannelParent* AllocPFTPChannel();
virtual bool DeallocPFTPChannel(PFTPChannelParent*);
virtual PWebSocketParent* AllocPWebSocket(PBrowserParent* browser,
const SerializedLoadContext& aSerialized);
virtual PWebSocketParent* AllocPWebSocket(PBrowserParent* browser);
virtual bool DeallocPWebSocket(PWebSocketParent*);
virtual PTCPSocketParent* AllocPTCPSocket(const nsString& aHost,
const uint16_t& aPort,
@ -81,6 +51,7 @@ protected:
virtual bool RecvCancelHTMLDNSPrefetch(const nsString& hostname,
const uint16_t& flags,
const nsresult& reason);
};
} // namespace net

Просмотреть файл

@ -40,8 +40,8 @@ parent:
PHttpChannel(nullable PBrowser browser,
SerializedLoadContext loadContext);
PWyciwygChannel();
PFTPChannel(PBrowser browser, SerializedLoadContext loadContext);
PWebSocket(PBrowser browser, SerializedLoadContext loadContext);
PFTPChannel();
PWebSocket(PBrowser browser);
PTCPSocket(nsString host, uint16_t port, bool useSSL, nsString binaryType,
nullable PBrowser browser);

Просмотреть файл

@ -7,9 +7,8 @@
#include "mozilla/net/NeckoChild.h"
#include "mozilla/net/FTPChannelChild.h"
#include "mozilla/dom/TabChild.h"
#include "nsFtpProtocolHandler.h"
#include "nsITabChild.h"
#include "nsStringStream.h"
#include "nsMimeTypes.h"
#include "nsNetUtil.h"
@ -156,18 +155,8 @@ FTPChannelChild::AsyncOpen(::nsIStreamListener* listener, nsISupports* aContext)
if (NS_FAILED(rv))
return rv;
mozilla::dom::TabChild* tabChild = nullptr;
nsCOMPtr<nsITabChild> iTabChild;
NS_QueryNotificationCallbacks(mCallbacks, mLoadGroup,
NS_GET_IID(nsITabChild),
getter_AddRefs(iTabChild));
GetCallback(iTabChild);
if (iTabChild) {
tabChild = static_cast<mozilla::dom::TabChild*>(iTabChild.get());
}
// FIXME: like bug 558623, merge constructor+SendAsyncOpen into 1 IPC msg
gNeckoChild->SendPFTPChannelConstructor(this, tabChild, IPC::SerializedLoadContext(this));
gNeckoChild->SendPFTPChannelConstructor(this);
mListener = listener;
mListenerContext = aContext;
@ -181,7 +170,8 @@ FTPChannelChild::AsyncOpen(::nsIStreamListener* listener, nsISupports* aContext)
OptionalInputStreamParams uploadStream;
SerializeInputStream(mUploadStream, uploadStream);
SendAsyncOpen(uri, mStartPos, mEntityID, uploadStream);
SendAsyncOpen(uri, mStartPos, mEntityID, uploadStream,
IPC::SerializedLoadContext(this));
// The socket transport layer in the chrome process now has a logical ref to
// us until OnStopRequest is called.
@ -519,22 +509,11 @@ FTPChannelChild::Resume()
NS_IMETHODIMP
FTPChannelChild::ConnectParent(uint32_t id)
{
mozilla::dom::TabChild* tabChild = nullptr;
nsCOMPtr<nsITabChild> iTabChild;
NS_QueryNotificationCallbacks(mCallbacks, mLoadGroup,
NS_GET_IID(nsITabChild),
getter_AddRefs(iTabChild));
GetCallback(iTabChild);
if (iTabChild) {
tabChild = static_cast<mozilla::dom::TabChild*>(iTabChild.get());
}
// The socket transport in the chrome process now holds a logical ref to us
// until OnStopRequest, or we do a redirect, or we hit an IPDL error.
AddIPDLReference();
if (!gNeckoChild->SendPFTPChannelConstructor(this, tabChild,
IPC::SerializedLoadContext(this)))
if (!gNeckoChild->SendPFTPChannelConstructor(this))
return NS_ERROR_FAILURE;
if (!SendConnectChannel(id))

Просмотреть файл

@ -23,10 +23,8 @@ using namespace mozilla::ipc;
namespace mozilla {
namespace net {
FTPChannelParent::FTPChannelParent(nsILoadContext* aLoadContext, PBOverrideStatus aOverrideStatus)
FTPChannelParent::FTPChannelParent()
: mIPCClosed(false)
, mLoadContext(aLoadContext)
, mPBOverride(aOverrideStatus)
{
nsIProtocolHandler* handler;
CallGetService(NS_NETWORK_PROTOCOL_CONTRACTID_PREFIX "ftp", &handler);
@ -64,7 +62,8 @@ bool
FTPChannelParent::RecvAsyncOpen(const URIParams& aURI,
const uint64_t& aStartPos,
const nsCString& aEntityID,
const OptionalInputStreamParams& aUploadStream)
const OptionalInputStreamParams& aUploadStream,
const IPC::SerializedLoadContext& loadContext)
{
nsCOMPtr<nsIURI> uri = DeserializeURI(aURI);
if (!uri)
@ -88,11 +87,7 @@ FTPChannelParent::RecvAsyncOpen(const URIParams& aURI,
return SendFailedAsyncOpen(rv);
mChannel = static_cast<nsFtpChannel*>(chan.get());
if (mPBOverride != kPBOverride_Unset) {
mChannel->SetPrivate(mPBOverride == kPBOverride_Private ? true : false);
}
nsCOMPtr<nsIInputStream> upload = DeserializeInputStream(aUploadStream);
if (upload) {
// contentType and contentLength are ignored
@ -105,6 +100,14 @@ FTPChannelParent::RecvAsyncOpen(const URIParams& aURI,
if (NS_FAILED(rv))
return SendFailedAsyncOpen(rv);
if (loadContext.IsNotNull())
mLoadContext = new LoadContext(loadContext);
else if (loadContext.IsPrivateBitValid()) {
nsCOMPtr<nsIPrivateBrowsingChannel> pbChannel = do_QueryInterface(chan);
if (pbChannel)
pbChannel->SetPrivate(loadContext.mUsePrivateBrowsing);
}
rv = mChannel->AsyncOpen(this, nullptr);
if (NS_FAILED(rv))
return SendFailedAsyncOpen(rv);

Просмотреть файл

@ -10,7 +10,6 @@
#include "mozilla/net/PFTPChannelParent.h"
#include "mozilla/net/NeckoCommon.h"
#include "mozilla/net/NeckoParent.h"
#include "nsIParentChannel.h"
#include "nsIInterfaceRequestor.h"
#include "nsILoadContext.h"
@ -31,14 +30,15 @@ public:
NS_DECL_NSIPARENTCHANNEL
NS_DECL_NSIINTERFACEREQUESTOR
FTPChannelParent(nsILoadContext* aLoadContext, PBOverrideStatus aOverrideStatus);
FTPChannelParent();
virtual ~FTPChannelParent();
protected:
virtual bool RecvAsyncOpen(const URIParams& uri,
const uint64_t& startPos,
const nsCString& entityID,
const OptionalInputStreamParams& uploadStream) MOZ_OVERRIDE;
const OptionalInputStreamParams& uploadStream,
const IPC::SerializedLoadContext& loadContext) MOZ_OVERRIDE;
virtual bool RecvConnectChannel(const uint32_t& channelId) MOZ_OVERRIDE;
virtual bool RecvCancel(const nsresult& status) MOZ_OVERRIDE;
virtual bool RecvSuspend() MOZ_OVERRIDE;
@ -51,8 +51,6 @@ protected:
bool mIPCClosed;
nsCOMPtr<nsILoadContext> mLoadContext;
PBOverrideStatus mPBOverride;
};
} // namespace net

Просмотреть файл

@ -13,6 +13,7 @@ include protocol PBlob; //FIXME: bug #792908
include "SerializedLoadContext.h";
using IPC::SerializedLoadContext;
using PRTime;
namespace mozilla {
@ -28,7 +29,8 @@ parent:
AsyncOpen(URIParams uri,
uint64_t startPos,
nsCString entityID,
OptionalInputStreamParams uploadStream);
OptionalInputStreamParams uploadStream,
SerializedLoadContext loadContext);
ConnectChannel(uint32_t channelId);
Cancel(nsresult status);

Просмотреть файл

@ -34,8 +34,7 @@ namespace mozilla {
namespace net {
HttpChannelParent::HttpChannelParent(PBrowserParent* iframeEmbedding,
nsILoadContext* aLoadContext,
PBOverrideStatus aOverrideStatus)
const IPC::SerializedLoadContext& loadContext)
: mIPCClosed(false)
, mStoredStatus(NS_OK)
, mStoredProgress(0)
@ -43,8 +42,7 @@ HttpChannelParent::HttpChannelParent(PBrowserParent* iframeEmbedding,
, mSentRedirect1Begin(false)
, mSentRedirect1BeginFailed(false)
, mReceivedRedirect2Verify(false)
, mPBOverride(aOverrideStatus)
, mLoadContext(aLoadContext)
, mPBOverride(kPBOverride_Unset)
{
// Ensure gHttpHandler is initialized: we need the atom table up and running.
nsIHttpProtocolHandler* handler;
@ -52,6 +50,18 @@ HttpChannelParent::HttpChannelParent(PBrowserParent* iframeEmbedding,
NS_ASSERTION(handler, "no http handler");
mTabParent = static_cast<mozilla::dom::TabParent*>(iframeEmbedding);
if (loadContext.IsNotNull()) {
if (mTabParent) {
mLoadContext = new LoadContext(loadContext, mTabParent->GetOwnerElement());
} else {
mLoadContext = new LoadContext(loadContext);
}
} else if (loadContext.IsPrivateBitValid()) {
// Don't have channel yet: override PB status after we create it.
mPBOverride = loadContext.mUsePrivateBrowsing ? kPBOverride_Private
: kPBOverride_NotPrivate;
}
}
HttpChannelParent::~HttpChannelParent()

Просмотреть файл

@ -12,7 +12,6 @@
#include "mozilla/dom/PBrowserParent.h"
#include "mozilla/net/PHttpChannelParent.h"
#include "mozilla/net/NeckoCommon.h"
#include "mozilla/net/NeckoParent.h"
#include "nsIParentRedirectingChannel.h"
#include "nsIProgressEventSink.h"
#include "nsHttpChannel.h"
@ -45,8 +44,7 @@ public:
NS_DECL_NSIINTERFACEREQUESTOR
HttpChannelParent(mozilla::dom::PBrowserParent* iframeEmbedding,
nsILoadContext* aLoadContext,
PBOverrideStatus aStatus);
const IPC::SerializedLoadContext& loadContext);
virtual ~HttpChannelParent();
protected:
@ -110,6 +108,12 @@ private:
bool mSentRedirect1BeginFailed : 1;
bool mReceivedRedirect2Verify : 1;
// Used to override channel Private Browsing status if needed.
enum PBOverrideStatus {
kPBOverride_Unset = 0,
kPBOverride_Private,
kPBOverride_NotPrivate
};
PBOverrideStatus mPBOverride;
nsCOMPtr<nsILoadContext> mLoadContext;

Просмотреть файл

@ -27,7 +27,8 @@ parent:
AsyncOpen(URIParams aURI,
nsCString aOrigin,
nsCString aProtocol,
bool aSecure);
bool aSecure,
SerializedLoadContext loadContext);
Close(uint16_t code, nsCString reason);
SendMsg(nsCString aMsg);
SendBinaryMsg(nsCString aMsg);

Просмотреть файл

@ -338,9 +338,9 @@ WebSocketChannelChild::AsyncOpen(nsIURI *aURI,
// Corresponding release in DeallocPWebSocket
AddIPDLReference();
gNeckoChild->SendPWebSocketConstructor(this, tabChild,
IPC::SerializedLoadContext(this));
if (!SendAsyncOpen(uri, nsCString(aOrigin), mProtocol, mEncrypted))
gNeckoChild->SendPWebSocketConstructor(this, tabChild);
if (!SendAsyncOpen(uri, nsCString(aOrigin), mProtocol, mEncrypted,
IPC::SerializedLoadContext(this)))
return NS_ERROR_UNEXPECTED;
mOriginalURI = aURI;

Просмотреть файл

@ -7,6 +7,7 @@
#include "WebSocketLog.h"
#include "WebSocketChannelParent.h"
#include "nsIAuthPromptProvider.h"
#include "mozilla/LoadContext.h"
#include "mozilla/ipc/InputStreamUtils.h"
#include "mozilla/ipc/URIUtils.h"
@ -19,15 +20,10 @@ NS_IMPL_THREADSAFE_ISUPPORTS2(WebSocketChannelParent,
nsIWebSocketListener,
nsIInterfaceRequestor)
WebSocketChannelParent::WebSocketChannelParent(nsIAuthPromptProvider* aAuthProvider,
nsILoadContext* aLoadContext,
PBOverrideStatus aOverrideStatus)
WebSocketChannelParent::WebSocketChannelParent(nsIAuthPromptProvider* aAuthProvider)
: mAuthProvider(aAuthProvider)
, mLoadContext(aLoadContext)
, mIPCOpen(true)
{
// Websocket channels can't have a private browsing override
MOZ_ASSERT_IF(!aLoadContext, aOverrideStatus == kPBOverride_Unset);
#if defined(PR_LOGGING)
if (!webSocketLog)
webSocketLog = PR_NewLogModule("nsWebSocket");
@ -51,7 +47,8 @@ bool
WebSocketChannelParent::RecvAsyncOpen(const URIParams& aURI,
const nsCString& aOrigin,
const nsCString& aProtocol,
const bool& aSecure)
const bool& aSecure,
const IPC::SerializedLoadContext& loadContext)
{
LOG(("WebSocketChannelParent::RecvAsyncOpen() %p\n", this));
@ -68,6 +65,14 @@ WebSocketChannelParent::RecvAsyncOpen(const URIParams& aURI,
if (NS_FAILED(rv))
goto fail;
if (loadContext.IsNotNull())
mLoadContext = new LoadContext(loadContext);
#ifdef DEBUG
else
// websocket channels cannot have a private bit override
MOZ_ASSERT(!loadContext.IsPrivateBitValid());
#endif
rv = mChannel->SetNotificationCallbacks(this);
if (NS_FAILED(rv))
goto fail;

Просмотреть файл

@ -8,7 +8,6 @@
#define mozilla_net_WebSocketChannelParent_h
#include "mozilla/net/PWebSocketParent.h"
#include "mozilla/net/NeckoParent.h"
#include "nsIInterfaceRequestor.h"
#include "nsIWebSocketListener.h"
#include "nsIWebSocketChannel.h"
@ -30,15 +29,14 @@ class WebSocketChannelParent : public PWebSocketParent,
NS_DECL_NSIWEBSOCKETLISTENER
NS_DECL_NSIINTERFACEREQUESTOR
WebSocketChannelParent(nsIAuthPromptProvider* aAuthProvider,
nsILoadContext* aLoadContext,
PBOverrideStatus aOverrideStatus);
WebSocketChannelParent(nsIAuthPromptProvider* aAuthProvider);
private:
bool RecvAsyncOpen(const URIParams& aURI,
const nsCString& aOrigin,
const nsCString& aProtocol,
const bool& aSecure);
const bool& aSecure,
const IPC::SerializedLoadContext& loadContext);
bool RecvClose(const uint16_t & code, const nsCString & reason);
bool RecvSendMsg(const nsCString& aMsg);
bool RecvSendBinaryMsg(const nsCString& aMsg);

Просмотреть файл

@ -3,7 +3,6 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
include protocol PNecko;
include protocol PBrowser;
include URIParams;
include "SerializedLoadContext.h";
@ -24,8 +23,7 @@ parent:
Init(URIParams uri);
AsyncOpen(URIParams originalURI,
uint32_t loadFlags,
SerializedLoadContext loadContext,
PBrowser browser);
SerializedLoadContext loadContext);
// methods corresponding to those of nsIWyciwygChannel
WriteToCacheEntry(nsString data);

Просмотреть файл

@ -6,7 +6,6 @@
#include "mozilla/net/NeckoChild.h"
#include "WyciwygChannelChild.h"
#include "mozilla/dom/TabChild.h"
#include "nsCharsetSource.h"
#include "nsStringStream.h"
@ -593,16 +592,7 @@ WyciwygChannelChild::AsyncOpen(nsIStreamListener *aListener, nsISupports *aConte
URIParams originalURI;
SerializeURI(mOriginalURI, originalURI);
mozilla::dom::TabChild* tabChild = nullptr;
nsCOMPtr<nsITabChild> iTabChild;
NS_QueryNotificationCallbacks(mCallbacks, mLoadGroup,
NS_GET_IID(nsITabChild),
getter_AddRefs(iTabChild));
if (iTabChild) {
tabChild = static_cast<mozilla::dom::TabChild*>(iTabChild.get());
}
SendAsyncOpen(originalURI, mLoadFlags, IPC::SerializedLoadContext(this), tabChild);
SendAsyncOpen(originalURI, mLoadFlags, IPC::SerializedLoadContext(this));
mState = WCC_OPENED;

Просмотреть файл

@ -11,8 +11,8 @@
#include "nsCharsetSource.h"
#include "nsISerializable.h"
#include "nsSerializationHelper.h"
#include "mozilla/LoadContext.h"
#include "mozilla/ipc/URIUtils.h"
#include "mozilla/net/NeckoParent.h"
using namespace mozilla::ipc;
@ -86,8 +86,7 @@ WyciwygChannelParent::RecvInit(const URIParams& aURI)
bool
WyciwygChannelParent::RecvAsyncOpen(const URIParams& aOriginal,
const uint32_t& aLoadFlags,
const IPC::SerializedLoadContext& loadContext,
PBrowserParent* aParent)
const IPC::SerializedLoadContext& loadContext)
{
nsCOMPtr<nsIURI> original = DeserializeURI(aOriginal);
if (!original)
@ -108,15 +107,9 @@ WyciwygChannelParent::RecvAsyncOpen(const URIParams& aOriginal,
if (NS_FAILED(rv))
return SendCancelEarly(rv);
const char* error = NeckoParent::CreateChannelLoadContext(aParent, loadContext,
mLoadContext);
if (error) {
NS_WARNING(nsPrintfCString("WyciwygChannelParent::RecvAsyncOpen: error: %s\n",
error).get());
return false;
}
if (!mLoadContext && loadContext.IsPrivateBitValid()) {
if (loadContext.IsNotNull())
mLoadContext = new LoadContext(loadContext);
else if (loadContext.IsPrivateBitValid()) {
nsCOMPtr<nsIPrivateBrowsingChannel> pbChannel = do_QueryInterface(mChannel);
if (pbChannel)
pbChannel->SetPrivate(loadContext.mUsePrivateBrowsing);

Просмотреть файл

@ -14,10 +14,6 @@
#include "nsILoadContext.h"
namespace mozilla {
namespace dom {
class PBrowserParent;
}
namespace net {
class WyciwygChannelParent : public PWyciwygChannelParent
@ -37,8 +33,7 @@ protected:
virtual bool RecvInit(const URIParams& uri);
virtual bool RecvAsyncOpen(const URIParams& original,
const uint32_t& loadFlags,
const IPC::SerializedLoadContext& loadContext,
PBrowserParent* parent);
const IPC::SerializedLoadContext& loadContext);
virtual bool RecvWriteToCacheEntry(const nsString& data);
virtual bool RecvCloseCacheEntry(const nsresult& reason);
virtual bool RecvSetCharsetAndSource(const int32_t& source,

Просмотреть файл

@ -36,27 +36,16 @@ let (ios = Components.classes["@mozilla.org/network/io-service;1"]
ios.offline = false;
}
// Determine if we're running on parent or child
let runningInParent = true;
// Disable IPv6 lookups for 'localhost' on windows.
try {
runningInParent = Components.classes["@mozilla.org/xre/runtime;1"].
getService(Components.interfaces.nsIXULRuntime).processType
== Components.interfaces.nsIXULRuntime.PROCESS_TYPE_DEFAULT;
}
catch (e) { }
try {
if (runningInParent) {
let prefs = Components.classes["@mozilla.org/preferences-service;1"]
.getService(Components.interfaces.nsIPrefBranch);
// disable necko IPC security checks for xpcshell, as they lack the
// docshells needed to pass them
prefs.setBoolPref("network.disable.ipc.security", true);
// Disable IPv6 lookups for 'localhost' on windows.
if ("@mozilla.org/windows-registry-key;1" in Components.classes) {
prefs.setCharPref("network.dns.ipv4OnlyDomains", "localhost");
if ("@mozilla.org/windows-registry-key;1" in Components.classes) {
let processType = Components.classes["@mozilla.org/xre/runtime;1"].
getService(Components.interfaces.nsIXULRuntime).processType;
if (processType == Components.interfaces.nsIXULRuntime.PROCESS_TYPE_DEFAULT) {
let (prefs = Components.classes["@mozilla.org/preferences-service;1"]
.getService(Components.interfaces.nsIPrefBranch)) {
prefs.setCharPref("network.dns.ipv4OnlyDomains", "localhost");
}
}
}
}
@ -68,7 +57,9 @@ catch (e) { }
// Note that if we're in a child process, we don't want to init the
// crashreporter component.
try { // nsIXULRuntime is not available in some configurations.
if (runningInParent &&
let processType = Components.classes["@mozilla.org/xre/runtime;1"].
getService(Components.interfaces.nsIXULRuntime).processType;
if (processType == Components.interfaces.nsIXULRuntime.PROCESS_TYPE_DEFAULT &&
"@mozilla.org/toolkit/crash-reporter;1" in Components.classes) {
// Remember to update </toolkit/crashreporter/test/unit/test_crashreporter.js>
// too if you change this initial setting.
@ -809,7 +800,11 @@ function do_get_profile() {
function do_load_child_test_harness()
{
// Make sure this isn't called from child process
if (!runningInParent) {
var runtime = Components.classes["@mozilla.org/xre/app-info;1"]
.getService(Components.interfaces.nsIXULRuntime);
if (runtime.processType !=
Components.interfaces.nsIXULRuntime.PROCESS_TYPE_DEFAULT)
{
do_throw("run_test_in_child cannot be called from child!");
}

Просмотреть файл

@ -441,6 +441,7 @@ OfflineCacheUpdateChild::Schedule()
// a reference to us. Will be released in RecvFinish() that identifies
// the work has been done.
child->SendPOfflineCacheUpdateConstructor(this, manifestURI, documentURI,
mInBrowser, mAppID,
stickDocument);
mIPCActivated = true;

Просмотреть файл

@ -5,14 +5,12 @@
#include "OfflineCacheUpdateParent.h"
#include "mozilla/dom/TabParent.h"
#include "mozilla/ipc/URIUtils.h"
#include "nsOfflineCacheUpdate.h"
#include "nsIApplicationCache.h"
#include "nsNetUtil.h"
using namespace mozilla::ipc;
using mozilla::dom::TabParent;
#if defined(PR_LOGGING)
//
@ -45,11 +43,8 @@ NS_IMPL_ISUPPORTS2(OfflineCacheUpdateParent,
// OfflineCacheUpdateParent <public>
//-----------------------------------------------------------------------------
OfflineCacheUpdateParent::OfflineCacheUpdateParent(uint32_t aAppId,
bool aIsInBrowser)
OfflineCacheUpdateParent::OfflineCacheUpdateParent()
: mIPCClosed(false)
, mIsInBrowserElement(aIsInBrowser)
, mAppId(aAppId)
{
// Make sure the service has been initialized
nsOfflineCacheUpdateService* service =
@ -74,6 +69,8 @@ OfflineCacheUpdateParent::ActorDestroy(ActorDestroyReason why)
nsresult
OfflineCacheUpdateParent::Schedule(const URIParams& aManifestURI,
const URIParams& aDocumentURI,
const bool& isInBrowserElement,
const uint32_t& appId,
const bool& stickDocument)
{
LOG(("OfflineCacheUpdateParent::RecvSchedule [%p]", this));
@ -103,7 +100,7 @@ OfflineCacheUpdateParent::Schedule(const URIParams& aManifestURI,
if (!NS_SecurityCompareURIs(manifestURI, documentURI, false))
return NS_ERROR_DOM_SECURITY_ERR;
service->FindUpdate(manifestURI, mAppId, mIsInBrowserElement,
service->FindUpdate(manifestURI, appId, isInBrowserElement,
getter_AddRefs(update));
if (!update) {
update = new nsOfflineCacheUpdate();
@ -111,7 +108,7 @@ OfflineCacheUpdateParent::Schedule(const URIParams& aManifestURI,
// Leave aDocument argument null. Only glues and children keep
// document instances.
rv = update->Init(manifestURI, documentURI, nullptr, nullptr,
mAppId, mIsInBrowserElement);
appId, isInBrowserElement);
NS_ENSURE_SUCCESS(rv, rv);
rv = update->Schedule();

Просмотреть файл

@ -14,10 +14,6 @@
namespace mozilla {
namespace dom {
class TabParent;
}
namespace ipc {
class URIParams;
} // namespace ipc
@ -38,9 +34,11 @@ public:
nsresult
Schedule(const URIParams& manifestURI,
const URIParams& documentURI,
const bool& isInBrowserElement,
const uint32_t& appId,
const bool& stickDocument);
OfflineCacheUpdateParent(uint32_t aAppId, bool aIsInBrowser);
OfflineCacheUpdateParent();
~OfflineCacheUpdateParent();
virtual void ActorDestroy(ActorDestroyReason why);