author | Jason Duell <jduell.mcbugs@gmail.com> |
Wed, 17 Oct 2012 22:00:16 -0700 | |
changeset 110633 | 40cca178608aaa7f859c6b607a42a80b63ef3ffe |
parent 110632 | 0883b53129b9f7767ec1f25304fd37163186f624 |
child 110634 | 87df09bc5e8e44547fd1669ae04580326c4c935c |
push id | 23704 |
push user | emorley@mozilla.com |
push date | Thu, 18 Oct 2012 17:12:58 +0000 |
treeherder | mozilla-central@3779eb3f036f [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | jdm |
bugs | 802885 |
milestone | 19.0a1 |
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
|
--- a/docshell/base/nsDocShell.cpp +++ b/docshell/base/nsDocShell.cpp @@ -6420,21 +6420,24 @@ nsDocShell::OnRedirectStateChange(nsICha // here. OnNewURI will do that, so we will cache it. SaveLastVisit(aNewChannel, oldURI, aRedirectFlags); } // check if the new load should go through the application cache. nsCOMPtr<nsIApplicationCacheChannel> appCacheChannel = do_QueryInterface(aNewChannel); if (appCacheChannel) { - // Permission will be checked in the parent process. - if (GeckoProcessType_Default != XRE_GetProcessType()) + if (GeckoProcessType_Default != XRE_GetProcessType()) { + // Permission will be checked in the parent process. appCacheChannel->SetChooseApplicationCache(true); - else - appCacheChannel->SetChooseApplicationCache(ShouldCheckAppCache(newURI)); + } else { + appCacheChannel->SetChooseApplicationCache( + NS_ShouldCheckAppCache(newURI, + mInPrivateBrowsing)); + } } if (!(aRedirectFlags & nsIChannelEventSink::REDIRECT_INTERNAL) && mLoadType & (LOAD_CMD_RELOAD | LOAD_CMD_HISTORY)) { mLoadType = LOAD_NORMAL_REPLACE; SetHistoryEntry(&mLSHE, nullptr); } } @@ -9164,36 +9167,16 @@ nsDocShell::GetInheritedPrincipal(bool a } return docPrincipal; } return nullptr; } -bool -nsDocShell::ShouldCheckAppCache(nsIURI *aURI) -{ - if (mInPrivateBrowsing) { - return false; - } - - nsCOMPtr<nsIOfflineCacheUpdateService> offlineService = - do_GetService(NS_OFFLINECACHEUPDATESERVICE_CONTRACTID); - if (!offlineService) { - return false; - } - - bool allowed; - nsresult rv = offlineService->OfflineAppAllowedForURI(aURI, - nullptr, - &allowed); - return NS_SUCCEEDED(rv) && allowed; -} - nsresult nsDocShell::DoURILoad(nsIURI * aURI, nsIURI * aReferrerURI, bool aSendReferrer, nsISupports * aOwner, const char * aTypeHint, nsIInputStream * aPostData, nsIInputStream * aHeadersData, @@ -9271,22 +9254,23 @@ nsDocShell::DoURILoad(nsIURI * aURI, nsCOMPtr<nsIApplicationCacheChannel> appCacheChannel = do_QueryInterface(channel); if (appCacheChannel) { // Any document load should not inherit application cache. appCacheChannel->SetInheritApplicationCache(false); // Loads with the correct permissions should check for a matching // application cache. - // Permission will be checked in the parent process - if (GeckoProcessType_Default != XRE_GetProcessType()) + if (GeckoProcessType_Default != XRE_GetProcessType()) { + // Permission will be checked in the parent process appCacheChannel->SetChooseApplicationCache(true); - else + } else { appCacheChannel->SetChooseApplicationCache( - ShouldCheckAppCache(aURI)); + NS_ShouldCheckAppCache(aURI, mInPrivateBrowsing)); + } } // Make sure to give the caller a channel if we managed to create one // This is important for correct error page/session history interaction if (aRequest) NS_ADDREF(*aRequest = channel); channel->SetOriginalURI(aURI);
--- a/docshell/base/nsDocShell.h +++ b/docshell/base/nsDocShell.h @@ -277,20 +277,16 @@ protected: // Get the principal that we'll set on the channel if we're inheriting. If // aConsiderCurrentDocument is true, we try to use the current document if // at all possible. If that fails, we fall back on the parent document. // If that fails too, we force creation of a content viewer and use the // resulting principal. If aConsiderCurrentDocument is false, we just look // at the parent. nsIPrincipal* GetInheritedPrincipal(bool aConsiderCurrentDocument); - // True if when loading aURI into this docshell, the channel should look - // for an appropriate application cache. - bool ShouldCheckAppCache(nsIURI * aURI); - // Actually open a channel and perform a URI load. Note: whatever owner is // passed to this function will be set on the channel. Callers who wish to // not have an owner on the channel should just pass null. virtual nsresult DoURILoad(nsIURI * aURI, nsIURI * aReferrer, bool aSendReferrer, nsISupports * aOwner, const char * aTypeHint,
--- a/netwerk/base/public/nsNetUtil.h +++ b/netwerk/base/public/nsNetUtil.h @@ -73,16 +73,17 @@ #include "nsISocketProviderService.h" #include "nsISocketProvider.h" #include "nsIRedirectChannelRegistrar.h" #include "nsIMIMEHeaderParam.h" #include "nsILoadContext.h" #include "mozilla/Services.h" #include "nsIPrivateBrowsingChannel.h" #include "mozIApplicationClearPrivateDataParams.h" +#include "nsIOfflineCacheUpdate.h" #include <limits> #ifdef MOZILLA_INTERNAL_API inline already_AddRefed<nsIIOService> do_GetIOService(nsresult* error = 0) { @@ -1371,16 +1372,39 @@ NS_GetAppInfoFromClearDataNotification(n NS_ENSURE_SUCCESS(rv, rv); *aAppID = appId; *aBrowserOnly = browserOnly; return NS_OK; } /** + * Determines whether appcache should be checked for a given URI. + */ +inline bool +NS_ShouldCheckAppCache(nsIURI *aURI, bool usePrivateBrowsing) +{ + if (usePrivateBrowsing) { + return false; + } + + nsCOMPtr<nsIOfflineCacheUpdateService> offlineService = + do_GetService("@mozilla.org/offlinecacheupdate-service;1"); + if (!offlineService) { + return false; + } + + bool allowed; + nsresult rv = offlineService->OfflineAppAllowedForURI(aURI, + nullptr, + &allowed); + return NS_SUCCEEDED(rv) && allowed; +} + +/** * Wraps an nsIAuthPrompt so that it can be used as an nsIAuthPrompt2. This * method is provided mainly for use by other methods in this file. * * *aAuthPrompt2 should be set to null before calling this function. */ inline void NS_WrapAuthPrompt(nsIAuthPrompt *aAuthPrompt, nsIAuthPrompt2** aAuthPrompt2) {
--- a/netwerk/protocol/http/HttpChannelParent.cpp +++ b/netwerk/protocol/http/HttpChannelParent.cpp @@ -206,40 +206,34 @@ HttpChannelParent::RecvAsyncOpen(const U nsCOMPtr<nsIApplicationCacheChannel> appCacheChan = do_QueryInterface(mChannel); nsCOMPtr<nsIApplicationCacheService> appCacheService = do_GetService(NS_APPLICATIONCACHESERVICE_CONTRACTID); bool setChooseApplicationCache = chooseApplicationCache; if (appCacheChan && appCacheService) { // We might potentially want to drop this flag (that is TRUE by default) - // after we succefully associate the channel with an application cache + // after we successfully associate the channel with an application cache // reported by the channel child. Dropping it here may be too early. appCacheChan->SetInheritApplicationCache(false); if (!appCacheClientID.IsEmpty()) { nsCOMPtr<nsIApplicationCache> appCache; rv = appCacheService->GetApplicationCache(appCacheClientID, getter_AddRefs(appCache)); if (NS_SUCCEEDED(rv)) { appCacheChan->SetApplicationCache(appCache); setChooseApplicationCache = false; } } if (setChooseApplicationCache) { - nsCOMPtr<nsIOfflineCacheUpdateService> offlineUpdateService = - do_GetService("@mozilla.org/offlinecacheupdate-service;1", &rv); - if (NS_SUCCEEDED(rv)) { - rv = offlineUpdateService->OfflineAppAllowedForURI(uri, - nullptr, - &setChooseApplicationCache); - - if (setChooseApplicationCache && NS_SUCCEEDED(rv)) - appCacheChan->SetChooseApplicationCache(true); - } + // This works because we've already called SetNotificationCallbacks and + // done mPBOverride logic by this point. + appCacheChan->SetChooseApplicationCache( + NS_ShouldCheckAppCache(uri, NS_UsePrivateBrowsing(mChannel))); } } rv = httpChan->AsyncOpen(channelListener, nullptr); if (NS_FAILED(rv)) return SendFailedAsyncOpen(rv); return true;