Bug 1391110: Part 3 - Add nsIWebBrowserPersistable to FrameLoader bindings. r?smaug
MozReview-Commit-ID: 8mBNbgmrXBV
--- a/dom/base/nsFrameLoader.cpp
+++ b/dom/base/nsFrameLoader.cpp
@@ -3868,16 +3868,27 @@ nsFrameLoader::DestroyBrowserFrameScript
return;
}
nsCOMPtr<nsIMozBrowserFrame> browserFrame = do_QueryInterface(mOwnerContent);
if (browserFrame) {
browserFrame->DestroyBrowserFrameScripts();
}
}
+void
+nsFrameLoader::StartPersistence(uint64_t aOuterWindowID,
+ nsIWebBrowserPersistDocumentReceiver* aRecv,
+ ErrorResult& aRv)
+{
+ nsresult rv = StartPersistence(aOuterWindowID, aRecv);
+ if (NS_FAILED(rv)) {
+ aRv.Throw(rv);
+ }
+}
+
NS_IMETHODIMP
nsFrameLoader::StartPersistence(uint64_t aOuterWindowID,
nsIWebBrowserPersistDocumentReceiver* aRecv)
{
if (!aRecv) {
return NS_ERROR_INVALID_POINTER;
}
--- a/dom/base/nsFrameLoader.h
+++ b/dom/base/nsFrameLoader.h
@@ -95,16 +95,19 @@ public:
nsresult ReallyStartLoading();
void StartDestroy();
void DestroyDocShell();
void DestroyComplete();
nsIDocShell* GetExistingDocShell() { return mDocShell; }
mozilla::dom::EventTarget* GetTabChildGlobalAsEventTarget();
nsresult CreateStaticClone(nsIFrameLoader* aDest);
+
+ // WebIDL methods
+
already_AddRefed<nsIDocShell> GetDocShell(mozilla::ErrorResult& aRv);
already_AddRefed<nsITabParent> GetTabParent();
already_AddRefed<nsILoadContext> LoadContext();
void LoadFrame(mozilla::ErrorResult& aRv);
@@ -154,32 +157,36 @@ public:
void Print(uint64_t aOuterWindowID,
nsIPrintSettings* aPrintSettings,
nsIWebProgressListener* aProgressListener,
mozilla::ErrorResult& aRv);
already_AddRefed<nsIGroupedSHistory> EnsureGroupedSHistory(mozilla::ErrorResult& aRv);
+ void StartPersistence(uint64_t aOuterWindowID,
+ nsIWebBrowserPersistDocumentReceiver* aRecv,
+ mozilla::ErrorResult& aRv);
+
+ // WebIDL getters
already_AddRefed<nsIMessageSender> GetMessageManager();
uint32_t EventMode() const { return mEventMode; }
already_AddRefed<Element> GetOwnerElement();
uint32_t LazyWidth() const;
uint32_t LazyHeight() const;
already_AddRefed<nsIPartialSHistory> GetPartialSHistory();
already_AddRefed<nsIGroupedSHistory> GetGroupedSHistory();
-
uint64_t ChildID() const { return mChildID; }
bool ClampScrollPosition() const { return mClampScrollPosition; }
bool ClipSubdocument() const { return mClipSubdocument; }
bool DepthTooGreat() const { return mDepthTooGreat; }
--- a/dom/bindings/Bindings.conf
+++ b/dom/bindings/Bindings.conf
@@ -1761,16 +1761,19 @@ addExternalIface('nsISelectionListener',
addExternalIface('nsIStreamListener', nativeType='nsIStreamListener', notflattened=True)
addExternalIface('nsITransportProvider', nativeType='nsITransportProvider')
addExternalIface('nsITreeSelection', nativeType='nsITreeSelection',
notflattened=True)
addExternalIface('nsISupports', nativeType='nsISupports')
addExternalIface('nsIDocShell', nativeType='nsIDocShell', notflattened=True)
addExternalIface('nsIEditor', nativeType='nsIEditor', notflattened=True)
addExternalIface('nsIVariant', nativeType='nsIVariant', notflattened=True)
+addExternalIface('nsIWebBrowserPersistDocumentReceiver',
+ nativeType='nsIWebBrowserPersistDocumentReceiver',
+ notflattened=True)
addExternalIface('nsIWebProgressListener', nativeType='nsIWebProgressListener',
notflattened=True)
addExternalIface('nsIScriptableRegion', nativeType='nsIScriptableRegion', notflattened=True)
addExternalIface('OutputStream', nativeType='nsIOutputStream',
notflattened=True)
addExternalIface('Principal', nativeType='nsIPrincipal',
headerFile='nsIPrincipal.h', notflattened=True)
addExternalIface('StackFrame', nativeType='nsIStackFrame',
--- a/dom/webbrowserpersist/nsIWebBrowserPersistable.idl
+++ b/dom/webbrowserpersist/nsIWebBrowserPersistable.idl
@@ -28,14 +28,14 @@ interface nsIWebBrowserPersistDocumentRe
* If set at 0, nsIWebBrowserPersistable will attempt to persist
* the top-level document. If the outer window ID is for a subframe
* that does not exist, or is not held beneath the nsIWebBrowserPersistable,
* aRecv's onError method will be called with NS_ERROR_NO_CONTENT.
* @param aRecv
* The nsIWebBrowserPersistDocumentReceiver is a callback that
* will be fired once the document is ready for persisting.
*/
-[scriptable, uuid(f4c3fa8e-83e9-49f8-ac6f-951fc7541fe4)]
+[uuid(f4c3fa8e-83e9-49f8-ac6f-951fc7541fe4)]
interface nsIWebBrowserPersistable : nsISupports
{
void startPersistence(in unsigned long long aOuterWindowID,
in nsIWebBrowserPersistDocumentReceiver aRecv);
};
--- a/dom/webidl/FrameLoader.webidl
+++ b/dom/webidl/FrameLoader.webidl
@@ -7,16 +7,17 @@
interface LoadContext;
interface TabParent;
interface URI;
interface nsIDocShell;
interface nsIGroupedSHistory;
interface nsIMessageSender;
interface nsIPartialSHistory;
interface nsIPrintSettings;
+interface nsIWebBrowserPersistDocumentReceiver;
interface nsIWebProgressListener;
[ChromeOnly]
interface FrameLoader {
/**
* Get the docshell from the frame loader.
*/
[GetterThrows]
@@ -266,8 +267,18 @@ interface FrameLoader {
readonly attribute nsIGroupedSHistory? groupedSHistory;
/**
* Is `true` if the frameloader is dead (destroy has been called on it)
*/
[Pure]
readonly attribute boolean isDead;
};
+
+[NoInterfaceObject]
+interface WebBrowserPersistable
+{
+ [Throws]
+ void startPersistence(unsigned long long aOuterWindowID,
+ nsIWebBrowserPersistDocumentReceiver aRecv);
+};
+
+FrameLoader implements WebBrowserPersistable;
--- a/xpcom/reflect/xptinfo/ShimInterfaceInfo.cpp
+++ b/xpcom/reflect/xptinfo/ShimInterfaceInfo.cpp
@@ -127,16 +127,17 @@
#include "nsIDOMXULDocument.h"
#include "nsIDOMXULElement.h"
#include "nsIFrameLoader.h"
#include "nsIListBoxObject.h"
#include "nsIMenuBoxObject.h"
#include "nsIScrollBoxObject.h"
#include "nsISelection.h"
#include "nsITreeBoxObject.h"
+#include "nsIWebBrowserPersistable.h"
#include "nsIXMLHttpRequest.h"
#include "mozilla/dom/AnimationEventBinding.h"
#include "mozilla/dom/AttrBinding.h"
#include "mozilla/dom/BeforeUnloadEventBinding.h"
#include "mozilla/dom/CanvasRenderingContext2DBinding.h"
#include "mozilla/dom/CDATASectionBinding.h"
#include "mozilla/dom/CharacterDataBinding.h"
@@ -431,16 +432,17 @@ const ComponentsInterfaceShimEntry kComp
DEFINE_SHIM(Text),
DEFINE_SHIM(TimeEvent),
DEFINE_SHIM(TimeRanges),
DEFINE_SHIM(TransitionEvent),
DEFINE_SHIM_WITH_CUSTOM_INTERFACE(nsITreeBoxObject, TreeBoxObject),
DEFINE_SHIM(TreeWalker),
DEFINE_SHIM(UIEvent),
DEFINE_SHIM(ValidityState),
+ DEFINE_SHIM_WITH_CUSTOM_INTERFACE(nsIWebBrowserPersistable, FrameLoader),
DEFINE_SHIM(WheelEvent),
DEFINE_SHIM(XMLDocument),
DEFINE_SHIM_WITH_CUSTOM_INTERFACE(nsIXMLHttpRequestEventTarget, XMLHttpRequestEventTarget),
DEFINE_SHIM_WITH_CUSTOM_INTERFACE(nsIXMLHttpRequestUpload, XMLHttpRequestUpload),
DEFINE_SHIM(XPathEvaluator),
DEFINE_SHIM(XPathResult),
DEFINE_SHIM(XULCommandEvent),
DEFINE_SHIM(XULDocument),