author | Ehsan Akhgari <ehsan@mozilla.com> |
Mon, 05 Jan 2015 14:10:49 -0500 | |
changeset 222173 | 9ea0c21e8e33a434642d8c03a6b939e29200bccc |
parent 222172 | d0d8a0b73ac8b78f5d2f3b50175adb576ccdcb7a |
child 222174 | 75a20fb5f86430a9dc8ef49a6cdd0aa7bea9d50c |
push id | 28059 |
push user | ryanvm@gmail.com |
push date | Tue, 06 Jan 2015 15:53:01 +0000 |
treeherder | mozilla-central@4d91c33b351c [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | smaug |
bugs | 1061864 |
milestone | 37.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 @@ -833,16 +833,17 @@ nsDocShell::nsDocShell(): mAllowContentRetargeting(true), mCreatingDocument(false), mUseErrorPages(false), mObserveErrorPages(true), mAllowAuth(true), mAllowKeywordFixup(false), mIsOffScreenBrowser(false), mIsActive(true), + mIsPrerendered(false), mIsAppTab(false), mUseGlobalHistory(false), mInPrivateBrowsing(false), mUseRemoteTabs(false), mDeviceSizeIsPageSize(false), mCanExecuteScripts(false), mFiredUnloadEvent(false), mEODForCurrentDocument(false), @@ -3381,16 +3382,21 @@ nsDocShell::SetDocLoaderParent(nsDocLoad SetAllowWindowControl(value); } SetAllowContentRetargeting( parentAsDocShell->GetAllowContentRetargeting()); if (NS_SUCCEEDED(parentAsDocShell->GetIsActive(&value))) { SetIsActive(value); } + if (NS_SUCCEEDED(parentAsDocShell->GetIsPrerendered(&value))) { + if (value) { + SetIsPrerendered(true); + } + } if (NS_FAILED(parentAsDocShell->GetAllowDNSPrefetch(&value))) { value = false; } SetAllowDNSPrefetch(value); value = parentAsDocShell->GetAffectPrivateSessionLifetime(); SetAffectPrivateSessionLifetime(value); uint32_t flags; if (NS_SUCCEEDED(parentAsDocShell->GetDefaultLoadFlags(&flags))) @@ -6048,16 +6054,32 @@ nsDocShell::SetIsActive(bool aIsActive) NS_IMETHODIMP nsDocShell::GetIsActive(bool *aIsActive) { *aIsActive = mIsActive; return NS_OK; } NS_IMETHODIMP +nsDocShell::SetIsPrerendered(bool aPrerendered) +{ + MOZ_ASSERT(!aPrerendered || !mIsPrerendered, + "SetIsPrerendered(true) called on already prerendered docshell"); + mIsPrerendered = aPrerendered; + return NS_OK; +} + +NS_IMETHODIMP +nsDocShell::GetIsPrerendered(bool *aIsPrerendered) +{ + *aIsPrerendered = mIsPrerendered; + return NS_OK; +} + +NS_IMETHODIMP nsDocShell::SetIsAppTab(bool aIsAppTab) { mIsAppTab = aIsAppTab; return NS_OK; } NS_IMETHODIMP nsDocShell::GetIsAppTab(bool *aIsAppTab) @@ -8548,18 +8570,18 @@ nsDocShell::RestoreFromHistory() bool allowContentRetargeting = childShell->GetAllowContentRetargeting(); uint32_t defaultLoadFlags; childShell->GetDefaultLoadFlags(&defaultLoadFlags); // this.AddChild(child) calls child.SetDocLoaderParent(this), meaning // that the child inherits our state. Among other things, this means - // that the child inherits our mIsActive and mInPrivateBrowsing, which - // is what we want. + // that the child inherits our mIsActive, mIsPrerendered and mInPrivateBrowsing, + // which is what we want. AddChild(childItem); childShell->SetAllowPlugins(allowPlugins); childShell->SetAllowJavascript(allowJavascript); childShell->SetAllowMetaRedirects(allowRedirects); childShell->SetAllowSubframes(allowSubframes); childShell->SetAllowImages(allowImages); childShell->SetAllowMedia(allowMedia);
--- a/docshell/base/nsDocShell.h +++ b/docshell/base/nsDocShell.h @@ -872,16 +872,17 @@ protected: bool mAllowContentRetargeting; bool mCreatingDocument; // (should be) debugging only bool mUseErrorPages; bool mObserveErrorPages; bool mAllowAuth; bool mAllowKeywordFixup; bool mIsOffScreenBrowser; bool mIsActive; + bool mIsPrerendered; bool mIsAppTab; bool mUseGlobalHistory; bool mInPrivateBrowsing; bool mUseRemoteTabs; bool mDeviceSizeIsPageSize; // Because scriptability depends on the mAllowJavascript values of our // ancestors, we cache the effective scriptability and recompute it when
--- a/docshell/base/nsIDocShell.idl +++ b/docshell/base/nsIDocShell.idl @@ -49,17 +49,17 @@ interface nsIWebBrowserPrint; interface nsIVariant; interface nsIPrivacyTransitionObserver; interface nsIReflowObserver; interface nsIScrollObserver; interface nsITabParent; typedef unsigned long nsLoadFlags; -[scriptable, builtinclass, uuid(c2756385-bc54-417b-9ae4-c5a40053a2a3)] +[scriptable, builtinclass, uuid(fef3bae1-6673-4c49-9f5a-fcc075926730)] interface nsIDocShell : nsIDocShellTreeItem { /** * Loads a given URI. This will give priority to loading the requested URI * in the object implementing this interface. If it can't be loaded here * however, the URL dispatcher will go through its normal process of content * loading. * @@ -615,16 +615,23 @@ interface nsIDocShell : nsIDocShellTreeI /** * Sets whether a docshell is active. An active docshell is one that is * visible, and thus is not a good candidate for certain optimizations * like image frame discarding. Docshells are active unless told otherwise. */ attribute boolean isActive; /** + * Puts the docshell in prerendering mode. noscript because we want only + * native code to be able to put a docshell in prerendering. + */ + [noscript] void SetIsPrerendered(in boolean prerendered); + readonly attribute boolean isPrerendered; + + /** * The ID of the docshell in the session history. */ readonly attribute unsigned long long historyID; /** * Sets whether a docshell is an app tab. An app tab docshell may behave * differently than a non-app tab docshell in some cases, such as when * handling link clicks. Docshells are not app tabs unless told otherwise.