summaryrefslogtreecommitdiff
path: root/www/firefox-esr/files/patch-ff-414540
blob: 75cbf9b5cf3f53916f8bff3b126e90879e867e07 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
diff -up mozilla/rdf/base/src/Makefile.in.414540 mozilla/rdf/base/src/Makefile.in
--- rdf/base/src/Makefile.in.414540	2005-06-24 09:49:43.000000000 +0200
+++ rdf/base/src/Makefile.in	2009-02-20 22:48:06.000000000 +0100
@@ -49,6 +49,9 @@ LIBXUL_LIBRARY  = 1
 REQUIRES	= xpcom \
 		  string \
 		  rdfutil \
+		  js \
+		  caps \
+		  xpconnect \
 		  necko \
 		  content \
 		  htmlparser \
diff -up mozilla/rdf/base/src/nsRDFXMLDataSource.cpp.414540 mozilla/rdf/base/src/nsRDFXMLDataSource.cpp
--- rdf/base/src/nsRDFXMLDataSource.cpp.414540	2005-06-24 09:49:43.000000000 +0200
+++ rdf/base/src/nsRDFXMLDataSource.cpp	2009-02-20 23:20:55.000000000 +0100
@@ -122,6 +122,9 @@
 #include "prlog.h"
 #include "nsNameSpaceMap.h"
 #include "nsCRT.h"
+#include "nsIScriptSecurityManager.h"
+#include "nsIChannelEventSink.h"
+#include "nsNetUtil.h"
 
 #include "rdfIDataSource.h"
 
@@ -218,7 +221,9 @@ class RDFXMLDataSourceImpl : public nsIR
                              public nsIRDFXMLSink,
                              public nsIRDFXMLSource,
                              public nsIStreamListener,
-                             public rdfIDataSource
+                             public rdfIDataSource,
+                             public nsIInterfaceRequestor,
+                             public nsIChannelEventSink
 {
 protected:
     enum LoadState {
@@ -389,6 +394,12 @@ public:
     // nsIStreamListener
     NS_DECL_NSISTREAMLISTENER
 
+    // nsIInterfaceRequestor
+    NS_DECL_NSIINTERFACEREQUESTOR
+
+    // nsIChannelEventSink
+    NS_DECL_NSICHANNELEVENTSINK
+
     // rdfIDataSource
     NS_IMETHOD VisitAllSubjects(rdfITripleVisitor *aVisitor) {
         nsresult rv;
@@ -537,15 +548,23 @@ RDFXMLDataSourceImpl::~RDFXMLDataSourceI
 }
 
 
-NS_IMPL_ISUPPORTS7(RDFXMLDataSourceImpl,
+NS_IMPL_ISUPPORTS9(RDFXMLDataSourceImpl,
                    nsIRDFDataSource,
                    nsIRDFRemoteDataSource,
                    nsIRDFXMLSink,
                    nsIRDFXMLSource,
                    nsIRequestObserver,
                    nsIStreamListener,
-                   rdfIDataSource)
-
+                   rdfIDataSource,
+                   nsIInterfaceRequestor,
+                   nsIChannelEventSink)
+
+// nsIInterfaceRequestor
+NS_IMETHODIMP 
+RDFXMLDataSourceImpl::GetInterface(const nsIID& aIID, void** aSink) 
+{ 
+  return QueryInterface(aIID, aSink); 
+} 
 
 nsresult
 RDFXMLDataSourceImpl::BlockingParse(nsIURI* aURL, nsIStreamListener* aConsumer)
@@ -924,6 +943,31 @@ RDFXMLDataSourceImpl::SetReadOnly(PRBool
 
 #include "nsITimelineService.h"
 
+// nsIChannelEventSink
+
+NS_IMETHODIMP
+RDFXMLDataSourceImpl::OnChannelRedirect(nsIChannel *aOldChannel,
+                                        nsIChannel *aNewChannel,
+                                        PRUint32 aFlags)
+{
+  NS_PRECONDITION(aNewChannel, "Redirecting to null channel?");
+
+  nsresult rv;
+  nsCOMPtr<nsIScriptSecurityManager> secMan =
+      do_GetService(NS_SCRIPTSECURITYMANAGER_CONTRACTID, &rv);
+  NS_ENSURE_SUCCESS(rv, rv);
+
+  nsCOMPtr<nsIURI> oldURI;
+  rv = aOldChannel->GetURI(getter_AddRefs(oldURI));
+  NS_ENSURE_SUCCESS(rv, rv);
+
+  nsCOMPtr<nsIURI> newURI;
+  rv = aNewChannel->GetURI(getter_AddRefs(newURI));
+  NS_ENSURE_SUCCESS(rv, rv);
+
+  return secMan->CheckSameOriginURI(oldURI, newURI);
+}
+
 NS_IMETHODIMP
 RDFXMLDataSourceImpl::Refresh(PRBool aBlocking)
 {
@@ -972,7 +1016,7 @@ RDFXMLDataSourceImpl::Refresh(PRBool aBl
     }
     else {
         // Null LoadGroup ?
-        rv = NS_OpenURI(this, nsnull, mURL, nsnull);
+        rv = NS_OpenURI(this, nsnull, mURL, nsnull, nsnull, this);
         if (NS_FAILED(rv)) return rv;
 
         // So we don't try to issue two asynchronous loads at once.