Bug 1017613 - Part 3 - fetch() IDL and stubs. r=baku
--- a/dom/base/nsGlobalWindow.cpp
+++ b/dom/base/nsGlobalWindow.cpp
@@ -182,16 +182,17 @@
#include "prlog.h"
#include "prenv.h"
#include "prprf.h"
#include "mozilla/dom/MessageChannel.h"
#include "mozilla/dom/MessagePort.h"
#include "mozilla/dom/MessagePortBinding.h"
#include "mozilla/dom/indexedDB/IDBFactory.h"
+#include "mozilla/dom/Promise.h"
#include "mozilla/dom/StructuredCloneTags.h"
#ifdef MOZ_GAMEPAD
#include "mozilla/dom/GamepadService.h"
#endif
#include "nsRefreshDriver.h"
@@ -6365,16 +6366,24 @@ NS_IMETHODIMP
nsGlobalWindow::Confirm(const nsAString& aString, bool* aReturn)
{
ErrorResult rv;
*aReturn = Confirm(aString, rv);
return rv.ErrorCode();
}
+already_AddRefed<Promise>
+nsGlobalWindow::Fetch(const RequestOrScalarValueString& aInput,
+ const RequestInit& aInit, ErrorResult& aRv)
+{
+ aRv.Throw(NS_ERROR_NOT_IMPLEMENTED);
+ return nullptr;
+}
+
void
nsGlobalWindow::Prompt(const nsAString& aMessage, const nsAString& aInitial,
nsAString& aReturn, ErrorResult& aError)
{
// XXX This method is very similar to nsGlobalWindow::AlertOrConfirm, make
// sure any modifications here don't need to happen over there!
FORWARD_TO_OUTER_OR_THROW(Prompt, (aMessage, aInitial, aReturn, aError),
aError, );
--- a/dom/base/nsGlobalWindow.h
+++ b/dom/base/nsGlobalWindow.h
@@ -33,18 +33,20 @@
#include "nsIScriptObjectPrincipal.h"
#include "nsITimer.h"
#include "nsIDOMModalContentWindow.h"
#include "mozilla/EventListenerManager.h"
#include "nsIPrincipal.h"
#include "nsSize.h"
#include "mozFlushType.h"
#include "prclist.h"
+#include "mozilla/dom/RequestBinding.h"
#include "mozilla/dom/StorageEvent.h"
#include "mozilla/dom/StorageEventBinding.h"
+#include "mozilla/dom/UnionTypes.h"
#include "nsFrameMessageManager.h"
#include "mozilla/LinkedList.h"
#include "mozilla/TimeStamp.h"
#include "nsWrapperCacheInlines.h"
#include "nsIIdleObserver.h"
#include "nsIDocument.h"
#include "mozilla/dom/EventTarget.h"
#include "mozilla/dom/WindowBinding.h"
@@ -102,16 +104,17 @@ class BarProp;
class Console;
class External;
class Function;
class Gamepad;
class MediaQueryList;
class MozSelfSupport;
class Navigator;
class OwningExternalOrWindowProxy;
+class Promise;
class Selection;
class SpeechSynthesis;
class WakeLock;
namespace indexedDB {
class IDBFactory;
} // namespace indexedDB
} // namespace dom
} // namespace mozilla
@@ -845,16 +848,19 @@ public:
protected:
bool AlertOrConfirm(bool aAlert, const nsAString& aMessage,
mozilla::ErrorResult& aError);
public:
void Alert(mozilla::ErrorResult& aError);
void Alert(const nsAString& aMessage, mozilla::ErrorResult& aError);
bool Confirm(const nsAString& aMessage, mozilla::ErrorResult& aError);
+ already_AddRefed<mozilla::dom::Promise> Fetch(const mozilla::dom::RequestOrScalarValueString& aInput,
+ const mozilla::dom::RequestInit& aInit,
+ mozilla::ErrorResult& aRv);
void Prompt(const nsAString& aMessage, const nsAString& aInitial,
nsAString& aReturn, mozilla::ErrorResult& aError);
void Print(mozilla::ErrorResult& aError);
void ShowModalDialog(JSContext* aCx, const nsAString& aUrl,
JS::Handle<JS::Value> aArgument,
const nsAString& aOptions,
JS::MutableHandle<JS::Value> aRetval,
mozilla::ErrorResult& aError);
--- a/dom/webidl/Fetch.webidl
+++ b/dom/webidl/Fetch.webidl
@@ -22,8 +22,15 @@ interface Body {
Promise<Blob> blob();
// FIXME(nsm): Bug 739173 FormData is not supported in workers.
// Promise<FormData> formData();
[Throws]
Promise<JSON> json();
[Throws]
Promise<ScalarValueString> text();
};
+
+[NoInterfaceObject, Exposed=(Window,Worker)]
+interface GlobalFetch {
+ [Throws, Func="mozilla::dom::Headers::PrefEnabled"]
+ Promise<Response> fetch(RequestInfo input, optional RequestInit init);
+};
+
--- a/dom/webidl/Window.webidl
+++ b/dom/webidl/Window.webidl
@@ -460,8 +460,9 @@ interface ChromeWindow {
*
* Throws NS_ERROR_NOT_IMPLEMENTED if the OS doesn't support this.
*/
[Throws, Func="nsGlobalWindow::IsChromeWindow"]
void beginWindowMove(Event mouseDownEvent, optional Element? panel = null);
};
Window implements ChromeWindow;
+Window implements GlobalFetch;
--- a/dom/webidl/WorkerGlobalScope.webidl
+++ b/dom/webidl/WorkerGlobalScope.webidl
@@ -33,16 +33,17 @@ partial interface WorkerGlobalScope {
[Throws]
void importScripts(DOMString... urls);
readonly attribute WorkerNavigator navigator;
};
WorkerGlobalScope implements WindowTimers;
WorkerGlobalScope implements WindowBase64;
+WorkerGlobalScope implements GlobalFetch;
// Not implemented yet: bug 1072107.
// WorkerGlobalScope implements FontFaceSource;
// Mozilla extensions
partial interface WorkerGlobalScope {
attribute EventHandler onclose;
--- a/dom/workers/WorkerScope.cpp
+++ b/dom/workers/WorkerScope.cpp
@@ -298,16 +298,24 @@ WorkerGlobalScope::GetPerformance()
if (!mPerformance) {
mPerformance = new Performance(mWorkerPrivate);
}
return mPerformance;
}
+already_AddRefed<Promise>
+WorkerGlobalScope::Fetch(const RequestOrScalarValueString& aInput,
+ const RequestInit& aInit, ErrorResult& aRv)
+{
+ aRv.Throw(NS_ERROR_NOT_IMPLEMENTED);
+ return nullptr;
+}
+
DedicatedWorkerGlobalScope::DedicatedWorkerGlobalScope(WorkerPrivate* aWorkerPrivate)
: WorkerGlobalScope(aWorkerPrivate)
{
}
JSObject*
DedicatedWorkerGlobalScope::WrapGlobalObject(JSContext* aCx)
{
--- a/dom/workers/WorkerScope.h
+++ b/dom/workers/WorkerScope.h
@@ -3,16 +3,19 @@
* 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/. */
#ifndef mozilla_dom_workerscope_h__
#define mozilla_dom_workerscope_h__
#include "Workers.h"
#include "mozilla/DOMEventTargetHelper.h"
+#include "mozilla/dom/Headers.h"
+#include "mozilla/dom/RequestBinding.h"
+#include "mozilla/dom/UnionTypes.h"
namespace mozilla {
namespace dom {
class Console;
class Function;
class Promise;
@@ -115,16 +118,19 @@ public:
IMPL_EVENT_HANDLER(online)
IMPL_EVENT_HANDLER(offline)
IMPL_EVENT_HANDLER(close)
void
Dump(const Optional<nsAString>& aString) const;
Performance* GetPerformance();
+
+ already_AddRefed<Promise>
+ Fetch(const RequestOrScalarValueString& aInput, const RequestInit& aInit, ErrorResult& aRv);
};
class DedicatedWorkerGlobalScope MOZ_FINAL : public WorkerGlobalScope
{
~DedicatedWorkerGlobalScope() { }
public:
explicit DedicatedWorkerGlobalScope(WorkerPrivate* aWorkerPrivate);
--- a/dom/workers/test/fetch/worker_interfaces.js
+++ b/dom/workers/test/fetch/worker_interfaces.js
@@ -2,10 +2,11 @@ function ok(a, msg) {
dump("OK: " + !!a + " => " + a + " " + msg + "\n");
postMessage({type: 'status', status: !!a, msg: a + ": " + msg });
}
onmessage = function() {
ok(typeof Headers === "function", "Headers should be defined");
ok(typeof Request === "function", "Request should be defined");
ok(typeof Response === "function", "Response should be defined");
+ ok(typeof fetch === "function", "fetch() should be defined");
postMessage({ type: 'finish' });
}