Bug 1391110: Part 3 - Add nsIWebBrowserPersistable to FrameLoader bindings. r?smaug draft
authorKris Maglione <maglione.k@gmail.com>
Sat, 19 Aug 2017 14:16:16 -0700
changeset 649512 af404fae59a8b260e2a2cbb8cfb9c1b620786ec6
parent 649511 0968851ac4c4aad064646b9fbdbdf5e0d2c43e27
child 649513 f1e26d76cedf62da1fe826f4151d43ab19b2cc3c
push id75044
push usermaglione.k@gmail.com
push dateSat, 19 Aug 2017 21:21:25 +0000
reviewerssmaug
bugs1391110
milestone57.0a1
Bug 1391110: Part 3 - Add nsIWebBrowserPersistable to FrameLoader bindings. r?smaug MozReview-Commit-ID: 8mBNbgmrXBV
dom/base/nsFrameLoader.cpp
dom/base/nsFrameLoader.h
dom/bindings/Bindings.conf
dom/webbrowserpersist/nsIWebBrowserPersistable.idl
dom/webidl/FrameLoader.webidl
xpcom/reflect/xptinfo/ShimInterfaceInfo.cpp
--- 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),