/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* vim: set ts=8 sts=2 et sw=2 tw=80: */ /* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
namespace mozilla { class ErrorResult; namespace dom { class BrowsingContext; class BrowsingContextGroup; class BrowserBridgeChild; class ContentParent; class Element; struct RemotenessOptions; struct NavigationIsolationOptions;
} // namespace dom
} // namespace mozilla
// Mixin that handles ownership of nsFrameLoader for Frame elements // (XULFrameElement, HTMLI/FrameElement, etc...). Manages information when doing // FrameLoader swaps. // // This class is considered an XPCOM mixin. This means that while we inherit // from ISupports in order to be QI'able, we expect the classes that inherit // nsFrameLoaderOwner to actually implement ISupports for us. class nsFrameLoaderOwner : public nsISupports { public:
NS_DECLARE_STATIC_IID_ACCESSOR(NS_FRAMELOADEROWNER_IID)
// Destroy (if it exists) and recreate our frameloader, based on new // remoteness requirements. // // This method is called by frontend code when it wants to perform a // remoteness update, and allows for behaviour such as preserving // BrowsingContexts across process switches during navigation. // // See the WebIDL definition for more details.
MOZ_CAN_RUN_SCRIPT void ChangeRemoteness(const mozilla::dom::RemotenessOptions& aOptions,
mozilla::ErrorResult& rv);
// Like `ChangeRemoteness` but switches to an already-created // `BrowserBridgeChild`. This method is used when performing remote subframe // process switches.
MOZ_CAN_RUN_SCRIPT void ChangeRemotenessWithBridge(mozilla::dom::BrowserBridgeChild* aBridge,
mozilla::ErrorResult& rv);
// Like `ChangeRemoteness`, but switches into an already-created // `ContentParent`. This method is used when performing toplevel process // switches. If `aContentParent` is nullptr, switches into the parent process. // // If `aReplaceBrowsingContext` is set, BrowsingContext preservation will be // disabled for this process switch.
MOZ_CAN_RUN_SCRIPT void ChangeRemotenessToProcess(
mozilla::dom::ContentParent* aContentParent, const mozilla::dom::NavigationIsolationOptions& aOptions,
mozilla::dom::BrowsingContextGroup* aGroup, mozilla::ErrorResult& rv);
void AttachFrameLoader(nsFrameLoader* aFrameLoader); void DetachFrameLoader(nsFrameLoader* aFrameLoader); // If aDestroyBFCached is true and aFrameLoader is the current frameloader // (mFrameLoader) then this will also call nsFrameLoader::Destroy on all the // other frame loaders in mFrameLoaderList and remove them from the list. void FrameLoaderDestroying(nsFrameLoader* aFrameLoader, bool aDestroyBFCached);
private: bool UseRemoteSubframes();
// The enum class for determine how to handle previous BrowsingContext during // the change remoteness. It could be followings // 1. DONT_PRESERVE // Create a whole new BrowsingContext. // 2. PRESERVE // Preserve the previous BrowsingContext. enumclass ChangeRemotenessContextType {
DONT_PRESERVE = 0,
PRESERVE = 1,
};
ChangeRemotenessContextType ShouldPreserveBrowsingContext( bool aIsRemote, bool aReplaceBrowsingContext);
// The list contains all the nsFrameLoaders created for this owner or moved // from another nsFrameLoaderOwner which haven't been destroyed yet. // In particular it contains all the nsFrameLoaders which are in bfcache.
mozilla::LinkedList<nsFrameLoader> mFrameLoaderList;
};
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung ist noch experimentell.