Bug 1350459 - Remove the [Throws] annotation from Window.navigator, r=qdot draft
authorBen Tian <btian@mozilla.com>
Fri, 14 Apr 2017 10:40:03 +0800
changeset 562588 d63942141b562e0e69611f3cbc1da4e9ee522efc
parent 562432 198effec6e11460e977f13e9cb83050a21a64d27
child 624266 33507a6a4c839a22cd23febf414e5f745c329877
push id54057
push userbtian@mozilla.com
push dateFri, 14 Apr 2017 03:09:55 +0000
reviewersqdot
bugs1350459
milestone55.0a1
Bug 1350459 - Remove the [Throws] annotation from Window.navigator, r=qdot MozReview-Commit-ID: 8vjyVrfa3xT
docshell/base/nsDocShell.cpp
dom/base/nsGlobalWindow.cpp
dom/base/nsGlobalWindow.h
dom/presentation/PresentationRequest.cpp
dom/webidl/Window.webidl
dom/workers/ServiceWorkerClient.cpp
dom/workers/ServiceWorkerManager.cpp
gfx/vr/ipc/VRManagerChild.cpp
--- a/docshell/base/nsDocShell.cpp
+++ b/docshell/base/nsDocShell.cpp
@@ -3204,19 +3204,17 @@ nsDocShell::GetCustomUserAgent(nsAString
 
 NS_IMETHODIMP
 nsDocShell::SetCustomUserAgent(const nsAString& aCustomUserAgent)
 {
   mCustomUserAgent = aCustomUserAgent;
   RefPtr<nsGlobalWindow> win = mScriptGlobal ?
     mScriptGlobal->GetCurrentInnerWindowInternal() : nullptr;
   if (win) {
-    ErrorResult ignored;
-    Navigator* navigator = win->GetNavigator(ignored);
-    ignored.SuppressException();
+    Navigator* navigator = win->Navigator();
     if (navigator) {
       navigator->ClearUserAgentCache();
     }
   }
 
   uint32_t childCount = mChildList.Length();
   for (uint32_t i = 0; i < childCount; ++i) {
     nsCOMPtr<nsIDocShell> childShell = do_QueryInterface(ChildAt(i));
--- a/dom/base/nsGlobalWindow.cpp
+++ b/dom/base/nsGlobalWindow.cpp
@@ -4162,36 +4162,33 @@ nsGlobalWindow::Window()
 
 nsGlobalWindow*
 nsGlobalWindow::Self()
 {
   return this;
 }
 
 Navigator*
-nsGlobalWindow::GetNavigator(ErrorResult& aError)
+nsGlobalWindow::Navigator()
 {
   MOZ_RELEASE_ASSERT(IsInnerWindow());
 
   if (!mNavigator) {
-    mNavigator = new Navigator(AsInner());
+    mNavigator = new mozilla::dom::Navigator(AsInner());
   }
 
   return mNavigator;
 }
 
 nsIDOMNavigator*
 nsGlobalWindow::GetNavigator()
 {
   FORWARD_TO_INNER(GetNavigator, (), nullptr);
 
-  ErrorResult dummy;
-  nsIDOMNavigator* navigator = GetNavigator(dummy);
-  dummy.SuppressException();
-  return navigator;
+  return Navigator();
 }
 
 nsScreen*
 nsGlobalWindow::GetScreen(ErrorResult& aError)
 {
   MOZ_RELEASE_ASSERT(IsInnerWindow());
 
   if (!mScreen) {
--- a/dom/base/nsGlobalWindow.h
+++ b/dom/base/nsGlobalWindow.h
@@ -919,17 +919,17 @@ public:
        const nsAString& aName,
        const nsAString& aOptions,
        mozilla::ErrorResult& aError);
   nsresult Open(const nsAString& aUrl, const nsAString& aName,
                 const nsAString& aOptions,
                 nsIDocShellLoadInfo* aLoadInfo,
                 bool aForceNoOpener,
                 nsPIDOMWindowOuter **_retval) override;
-  mozilla::dom::Navigator* GetNavigator(mozilla::ErrorResult& aError);
+  mozilla::dom::Navigator* Navigator();
   nsIDOMNavigator* GetNavigator() override;
   nsIDOMOfflineResourceList* GetApplicationCache(mozilla::ErrorResult& aError);
   already_AddRefed<nsIDOMOfflineResourceList> GetApplicationCache() override;
 
 #if defined(MOZ_WIDGET_ANDROID) || defined(MOZ_WIDGET_GONK)
   int16_t Orientation(mozilla::dom::CallerType aCallerType) const;
 #endif
 
--- a/dom/presentation/PresentationRequest.cpp
+++ b/dom/presentation/PresentationRequest.cpp
@@ -176,18 +176,17 @@ PresentationRequest::StartWithDevice(con
     return promise.forget();
   }
 
   if (doc->GetSandboxFlags() & SANDBOXED_PRESENTATION) {
     promise->MaybeReject(NS_ERROR_DOM_SECURITY_ERR);
     return promise.forget();
   }
 
-  RefPtr<Navigator> navigator =
-    nsGlobalWindow::Cast(GetOwner())->GetNavigator(aRv);
+  RefPtr<Navigator> navigator = nsGlobalWindow::Cast(GetOwner())->Navigator();
   if (NS_WARN_IF(aRv.Failed())) {
     return nullptr;
   }
 
   RefPtr<Presentation> presentation = navigator->GetPresentation(aRv);
   if (NS_WARN_IF(aRv.Failed())) {
     return nullptr;
   }
@@ -463,23 +462,22 @@ void
 PresentationRequest::NotifyPromiseSettled()
 {
   PRES_DEBUG("%s\n", __func__);
 
   if (!GetOwner()) {
     return;
   }
 
-  ErrorResult rv;
-  RefPtr<Navigator> navigator =
-    nsGlobalWindow::Cast(GetOwner())->GetNavigator(rv);
+  RefPtr<Navigator> navigator = nsGlobalWindow::Cast(GetOwner())->Navigator();
   if (!navigator) {
     return;
   }
 
+  ErrorResult rv;
   RefPtr<Presentation> presentation = navigator->GetPresentation(rv);
 
   if (presentation) {
     presentation->SetStartSessionUnsettled(false);
   }
 }
 
 bool
--- a/dom/webidl/Window.webidl
+++ b/dom/webidl/Window.webidl
@@ -62,17 +62,17 @@ interface nsIDOMCrypto;
   //[Throws] readonly attribute WindowProxy parent;
   [Replaceable, Throws, CrossOriginReadable] readonly attribute WindowProxy? parent;
   [Throws, NeedsSubjectPrincipal] readonly attribute Element? frameElement;
   //[Throws] WindowProxy? open(optional USVString url = "about:blank", optional DOMString target = "_blank", [TreatNullAs=EmptyString] optional DOMString features = "");
   [Throws, UnsafeInPrerendering] WindowProxy? open(optional DOMString url = "", optional DOMString target = "", [TreatNullAs=EmptyString] optional DOMString features = "");
   getter object (DOMString name);
 
   // the user agent
-  [Throws] readonly attribute Navigator navigator;
+  readonly attribute Navigator navigator;
 #ifdef HAVE_SIDEBAR
   [Replaceable, Throws] readonly attribute External external;
 #endif
   [Throws, Pref="browser.cache.offline.enable"] readonly attribute ApplicationCache applicationCache;
 
   // user prompts
   [Throws, UnsafeInPrerendering, NeedsSubjectPrincipal] void alert();
   [Throws, UnsafeInPrerendering, NeedsSubjectPrincipal] void alert(DOMString message);
--- a/dom/workers/ServiceWorkerClient.cpp
+++ b/dom/workers/ServiceWorkerClient.cpp
@@ -148,20 +148,19 @@ public:
   Run() override
   {
     AssertIsOnMainThread();
     nsGlobalWindow* window = nsGlobalWindow::GetInnerWindowWithId(mWindowId);
     if (!window) {
       return NS_ERROR_FAILURE;
     }
 
-    ErrorResult result;
-    dom::Navigator* navigator = window->GetNavigator(result);
-    if (NS_WARN_IF(result.Failed())) {
-      return result.StealNSResult();
+    dom::Navigator* navigator = window->Navigator();
+    if (!navigator) {
+      return NS_ERROR_FAILURE;
     }
 
     RefPtr<ServiceWorkerContainer> container = navigator->ServiceWorker();
     AutoJSAPI jsapi;
     if (NS_WARN_IF(!jsapi.Init(window))) {
       return NS_ERROR_FAILURE;
     }
     JSContext* cx = jsapi.cx();
--- a/dom/workers/ServiceWorkerManager.cpp
+++ b/dom/workers/ServiceWorkerManager.cpp
@@ -3186,24 +3186,23 @@ FireControllerChangeOnDocument(nsIDocume
 
   nsCOMPtr<nsPIDOMWindowInner> w = aDocument->GetInnerWindow();
   if (!w) {
     NS_WARNING("Failed to dispatch controllerchange event");
     return;
   }
 
   auto* window = nsGlobalWindow::Cast(w.get());
-  ErrorResult result;
-  dom::Navigator* navigator = window->GetNavigator(result);
-  if (NS_WARN_IF(result.Failed())) {
-    result.SuppressException();
+  dom::Navigator* navigator = window->Navigator();
+  if (!navigator) {
     return;
   }
 
   RefPtr<ServiceWorkerContainer> container = navigator->ServiceWorker();
+  ErrorResult result;
   container->ControllerChanged(result);
   if (result.Failed()) {
     NS_WARNING("Failed to dispatch controllerchange event");
   }
 }
 
 } // anonymous namespace
 
--- a/gfx/vr/ipc/VRManagerChild.cpp
+++ b/gfx/vr/ipc/VRManagerChild.cpp
@@ -274,19 +274,18 @@ VRManagerChild::RecvUpdateDisplayInfo(ns
      * the promise returned by Navigator.GetVRDevices
      * can resolve.  This must happen even if no changes
      * to VRDisplays have been detected here.
      */
     nsGlobalWindow* window = nsGlobalWindow::GetInnerWindowWithId(windowId);
     if (!window) {
       continue;
     }
-    ErrorResult result;
-    dom::Navigator* nav = window->GetNavigator(result);
-    if (NS_WARN_IF(result.Failed())) {
+    dom::Navigator* nav = window->Navigator();
+    if (!nav) {
       continue;
     }
     nav->NotifyVRDisplaysUpdated();
   }
   mNavigatorCallbacks.Clear();
   return IPC_OK();
 }