Bug 1099092 - Navigation Timing has incorrect values when page is load via link with target=_blank attribute r=bz

This commit is contained in:
Valentin Gosu 2015-01-09 16:36:00 +02:00
Родитель bb16ca59a7
Коммит 601b80dfaf
3 изменённых файлов: 25 добавлений и 6 удалений

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

@ -195,6 +195,7 @@
#include "mozilla/dom/EncodingUtils.h"
#include "mozilla/dom/ScriptSettings.h"
#include "mozilla/dom/URLSearchParams.h"
#include "nsPerformance.h"
#ifdef MOZ_TOOLKIT_SEARCH
#include "nsIBrowserSearchService.h"
@ -859,6 +860,7 @@ nsDocShell::nsDocShell():
mInvisible(false),
mHasLoadedNonBlankURI(false),
mDefaultLoadFlags(nsIRequest::LOAD_NORMAL),
mBlankTiming(false),
mFrameType(eFrameTypeRegular),
mOwnOrContainingAppId(nsIScriptSecurityManager::UNKNOWN_APP_ID),
mParentCharsetSource(0),
@ -1770,11 +1772,22 @@ nsDocShell::FirePageHideNotification(bool aIsUnload)
void
nsDocShell::MaybeInitTiming()
{
if (mTiming) {
if (mTiming && !mBlankTiming) {
return;
}
mTiming = new nsDOMNavigationTiming();
if (mScriptGlobal && mBlankTiming) {
nsPIDOMWindow* innerWin = mScriptGlobal->GetCurrentInnerWindow();
if (innerWin && innerWin->GetPerformance()) {
mTiming = innerWin->GetPerformance()->GetDOMTiming();
mBlankTiming = false;
}
}
if (!mTiming) {
mTiming = new nsDOMNavigationTiming();
}
mTiming->NotifyNavigationStart();
}
@ -7869,6 +7882,7 @@ nsDocShell::CreateAboutBlankContentViewer(nsIPrincipal* aPrincipal,
// have one before entering this function.
if (!hadTiming) {
mTiming = nullptr;
mBlankTiming = true;
}
return rv;

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

@ -929,6 +929,11 @@ protected:
nsRefPtr<nsDOMNavigationTiming> mTiming;
// This flag means that mTiming has been initialized but nulled out.
// We will check the innerWin's timing before creating a new one
// in MaybeInitTiming()
bool mBlankTiming;
// Are we a regular frame, a browser frame, or an app frame?
FrameType mFrameType;

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

@ -185,11 +185,11 @@ DOMTimeMilliSec
nsPerformanceTiming::RedirectStart()
{
if (!IsInitialized()) {
return mZeroTime;
return 0;
}
// We have to check if all the redirect URIs had the same origin (since there
// is no check in RedirectStartHighRes())
if (mAllRedirectsSameOrigin) {
if (mAllRedirectsSameOrigin && mRedirectCount) {
return static_cast<int64_t>(RedirectStartHighRes());
}
return 0;
@ -218,11 +218,11 @@ DOMTimeMilliSec
nsPerformanceTiming::RedirectEnd()
{
if (!IsInitialized()) {
return mZeroTime;
return 0;
}
// We have to check if all the redirect URIs had the same origin (since there
// is no check in RedirectEndHighRes())
if (mAllRedirectsSameOrigin) {
if (mAllRedirectsSameOrigin && mRedirectCount) {
return static_cast<int64_t>(RedirectEndHighRes());
}
return 0;