Bug 449141. Save media resources when doing 'Save As' on the page. r=roc,a=dbaron
authorChris Double <chris.double@double.co.nz>
Thu, 19 Aug 2010 21:35:09 +1200
changeset 50877 4e274fd92b252d39439471618e255b232a1d3fff
parent 50876 6db5378923fb882674eadfae4ca11c8a4b26ca6b
child 50878 3d344a88e59034c54494c218a0ecf270ed678f35
push idunknown
push userunknown
push dateunknown
reviewersroc, dbaron
bugs449141
milestone2.0b5pre
Bug 449141. Save media resources when doing 'Save As' on the page. r=roc,a=dbaron
embedding/components/webbrowserpersist/src/nsWebBrowserPersist.cpp
embedding/test/320x240.ogv
embedding/test/Makefile.in
embedding/test/bug449141_page.html
embedding/test/test_bug449141.html
--- a/embedding/components/webbrowserpersist/src/nsWebBrowserPersist.cpp
+++ b/embedding/components/webbrowserpersist/src/nsWebBrowserPersist.cpp
@@ -109,17 +109,21 @@
 #include "nsIDOMHTMLOptionElement.h"
 #include "nsIDOMHTMLTextAreaElement.h"
 #include "nsIDOMHTMLDocument.h"
 #include "nsIDOMText.h"
 #ifdef MOZ_SVG
 #include "nsIDOMSVGImageElement.h"
 #include "nsIDOMSVGScriptElement.h"
 #endif // MOZ_SVG
-
+#ifdef MOZ_MEDIA
+#include "nsIDOMHTMLSourceElement.h"
+#include "nsIDOMHTMLMediaElement.h"
+#endif // MOZ_MEDIA
+ 
 #include "nsIImageLoadingContent.h"
 
 #include "ftpCore.h"
 #include "nsITransport.h"
 #include "nsISocketTransport.h"
 #include "nsIStringBundle.h"
 #include "nsIProtocolHandler.h"
 
@@ -2791,16 +2795,31 @@ nsresult nsWebBrowserPersist::OnWalkDOMN
     nsCOMPtr<nsIDOMSVGImageElement> nodeAsSVGImage = do_QueryInterface(aNode);
     if (nodeAsSVGImage)
     {
         StoreURIAttributeNS(aNode, "http://www.w3.org/1999/xlink", "href");
         return NS_OK;
     }
 #endif // MOZ_SVG
 
+#ifdef MOZ_MEDIA
+    nsCOMPtr<nsIDOMHTMLMediaElement> nodeAsMedia = do_QueryInterface(aNode);
+    if (nodeAsMedia)
+    {
+        StoreURIAttribute(aNode, "src");
+        return NS_OK;
+    }
+    nsCOMPtr<nsIDOMHTMLSourceElement> nodeAsSource = do_QueryInterface(aNode);
+    if (nodeAsSource)
+    {
+        StoreURIAttribute(aNode, "src");
+        return NS_OK;
+    }
+#endif // MOZ_MEDIA
+
     nsCOMPtr<nsIDOMHTMLBodyElement> nodeAsBody = do_QueryInterface(aNode);
     if (nodeAsBody)
     {
         StoreURIAttribute(aNode, "background");
         return NS_OK;
     }
 
     nsCOMPtr<nsIDOMHTMLTableElement> nodeAsTable = do_QueryInterface(aNode);
@@ -3140,16 +3159,42 @@ nsWebBrowserPersist::CloneNodeWithFixedU
                 imgCon->SetLoadingEnabled(PR_FALSE);
 
             FixupAnchor(*aNodeOut);
             FixupNodeAttribute(*aNodeOut, "src");
         }
         return rv;
     }
 
+#ifdef MOZ_MEDIA
+    nsCOMPtr<nsIDOMHTMLMediaElement> nodeAsMedia = do_QueryInterface(aNodeIn);
+    if (nodeAsMedia)
+    {
+        rv = GetNodeToFixup(aNodeIn, aNodeOut);
+        if (NS_SUCCEEDED(rv) && *aNodeOut)
+        {
+            FixupNodeAttribute(*aNodeOut, "src");
+        }
+
+        return rv;
+    }
+
+    nsCOMPtr<nsIDOMHTMLSourceElement> nodeAsSource = do_QueryInterface(aNodeIn);
+    if (nodeAsSource)
+    {
+        rv = GetNodeToFixup(aNodeIn, aNodeOut);
+        if (NS_SUCCEEDED(rv) && *aNodeOut)
+        {
+            FixupNodeAttribute(*aNodeOut, "src");
+        }
+
+        return rv;
+    }
+#endif // MOZ_MEDIA
+
 #ifdef MOZ_SVG
     nsCOMPtr<nsIDOMSVGImageElement> nodeAsSVGImage = do_QueryInterface(aNodeIn);
     if (nodeAsSVGImage)
     {
         rv = GetNodeToFixup(aNodeIn, aNodeOut);
         if (NS_SUCCEEDED(rv) && *aNodeOut)
         {
             // Disable image loads
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..093158432ac64090f3572fa7167da8e102b94515
GIT binary patch
literal 28942
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
b3319{?)f`EH^5kUhA>sh?BveV1f~B2`qzoq
--- a/embedding/test/Makefile.in
+++ b/embedding/test/Makefile.in
@@ -41,14 +41,17 @@ VPATH		= @srcdir@
 relativesrcdir  = embedding/test
 
 include $(DEPTH)/config/autoconf.mk
 include $(topsrcdir)/config/rules.mk
 
 _TEST_FILES = \
 	test_bug293834.html \
 	bug293834_form.html \
+	320x240.ogv \
+	test_bug449141.html \
+	bug449141_page.html \
 	test_bug499115.html \
 	test_nsFind.html \
 	$(NULL)
 
 libs:: $(_TEST_FILES)
 	$(INSTALL) $(foreach f,$^,"$f") $(DEPTH)/_tests/testing/mochitest/tests/$(relativesrcdir)
new file mode 100644
--- /dev/null
+++ b/embedding/test/bug449141_page.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+
+<html>
+    <head>
+        <title>Nested iframe for bug 449141</title>
+        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    </head>
+    <body>
+      <video src='320x240.ogv'></video>
+    </body>
+</html>
+
new file mode 100644
--- /dev/null
+++ b/embedding/test/test_bug449141.html
@@ -0,0 +1,107 @@
+<!DOCTYPE HTML>
+<html>
+<!--
+https://bugzilla.mozilla.org/show_bug.cgi?id=449141
+-->
+<head>
+  <title>Test for Bug 449141</title>
+  <script type="text/javascript" src="/MochiKit/packed.js"></script>
+  <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
+  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
+</head>
+<body>
+<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=449141">Mozilla Bug 449141</a>
+<p id="display">
+
+</p>
+<pre id="results"></pre>
+<div id="content" style="display: none">
+    <iframe src="bug449141_page.html" id="source"></iframe>
+</div>
+<pre id="test">
+<script class="testbody" type="text/javascript">
+/** Test for Bug 449141 **/
+
+netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
+const Cc = Components.classes;
+const Ci = Components.interfaces;
+
+function getTempDir() {
+    return Cc["@mozilla.org/file/directory_service;1"]
+            .getService(Ci.nsIProperties)
+            .get("TmpD", Ci.nsILocalFile);
+}
+
+// STATE_STOP from nsIWebProgressListener.idl
+const STATE_STOP = 0x00000010;
+
+var progressListener = {
+  onProgressChange: function() {
+    /* Ignore progress callback */
+  },
+  onStateChange: function(aProgress, aRequest, aStateFlag, aStatus) {
+    if (aStateFlag & STATE_STOP) {
+      netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
+      var dirExists = false;
+      var videoExists = false;
+
+      var videoFile = getTempDir();
+      videoFile.append(this.dirName);
+      dirExists = videoFile.exists();
+      videoFile.append("320x240.ogv");
+      videoExists = videoFile.exists();
+      this.folder.remove(true);
+      this.file.remove(false);
+      ok(dirExists, 'Directory containing video file should be created');
+      ok(videoExists, 'Video should be persisted with document');
+      SimpleTest.finish();
+    }    
+  }
+};
+
+function persistDocument(aDoc) {
+    netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
+
+    const nsIWBP = Ci.nsIWebBrowserPersist;
+    const persistFlags =
+                  nsIWBP.PERSIST_FLAGS_REPLACE_EXISTING_FILES
+                | nsIWBP.PERSIST_FLAGS_AUTODETECT_APPLY_CONVERSION
+    const encodingFlags =
+                  nsIWBP.ENCODE_FLAGS_ENCODE_BASIC_ENTITIES;
+
+    var ioService = Components.classes["@mozilla.org/network/io-service;1"]
+                    .getService(Ci.nsIIOService);
+
+    var id = Math.round(Math.random() * 10000);
+    var dirName = "bug449141_serialized" + id;
+    progressListener.dirName = dirName;
+
+    var file = getTempDir();
+    file.append("bug449141-serialized" + id + ".html");
+
+    var persist = Cc["@mozilla.org/embedding/browser/nsWebBrowserPersist;1"]
+                    .createInstance(Ci.nsIWebBrowserPersist);
+    persist.progressListener = progressListener;
+    persist.persistFlags = persistFlags;
+    const kWrapColumn = 80;
+    var folder = getTempDir();
+    folder.append(dirName);
+    progressListener.folder = folder;
+    progressListener.file = file;
+    persist.saveDocument(aDoc, ioService.newFileURI(file),
+                         folder,
+                         aDoc.contentType,
+                         encodingFlags, kWrapColumn);
+}
+
+SimpleTest.waitForExplicitFinish();
+
+addLoadEvent(function() {
+    netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
+    var srcDoc = document.getElementById('source').contentDocument;
+    persistDocument(srcDoc);
+});
+</script>
+</pre>
+</body>
+</html>