already_AddRefed<DOMRequest> nsBrowserElement::ExecuteScript(const nsAString& aScript, const BrowserElementExecuteScriptOptions& aOptions, ErrorResult& aRv) { NS_ENSURE_TRUE(IsBrowserElementOrThrow(aRv), nullptr); NS_ENSURE_TRUE(IsNotWidgetOrThrow(aRv), nullptr); nsCOMPtr<nsIDOMDOMRequest> req; nsCOMPtr<nsIXPConnectWrappedJS> wrappedObj = do_QueryInterface(mBrowserElementAPI); MOZ_ASSERT(wrappedObj, "Failed to get wrapped JS from XPCOM component."); AutoJSAPI jsapi; jsapi.Init(wrappedObj->GetJSObject()); JSContext* cx = jsapi.cx(); JS::Rooted<JS::Value> options(cx); aRv.MightThrowJSException(); if (!ToJSValue(cx, aOptions, &options)) { aRv.StealExceptionFromJSContext(cx); return nullptr; } nsresult rv = mBrowserElementAPI->ExecuteScript(aScript, options, getter_AddRefs(req)); if (NS_FAILED(rv)) { if (rv == NS_ERROR_INVALID_ARG) { aRv.Throw(NS_ERROR_DOM_INVALID_ACCESS_ERR); } else { aRv.Throw(NS_ERROR_DOM_INVALID_STATE_ERR); } return nullptr; } return req.forget().downcast<DOMRequest>(); }
already_AddRefed<DOMRequest> nsBrowserElement::Download(const nsAString& aUrl, const BrowserElementDownloadOptions& aOptions, ErrorResult& aRv) { NS_ENSURE_TRUE(IsBrowserElementOrThrow(aRv), nullptr); NS_ENSURE_TRUE(IsNotWidgetOrThrow(aRv), nullptr); nsCOMPtr<nsIDOMDOMRequest> req; nsCOMPtr<nsIXPConnectWrappedJS> wrappedObj = do_QueryInterface(mBrowserElementAPI); MOZ_ASSERT(wrappedObj, "Failed to get wrapped JS from XPCOM component."); AutoJSAPI jsapi; jsapi.Init(wrappedObj->GetJSObject()); JSContext* cx = jsapi.cx(); JS::Rooted<JS::Value> options(cx); if (!ToJSValue(cx, aOptions, &options)) { aRv.Throw(NS_ERROR_OUT_OF_MEMORY); return nullptr; } nsresult rv = mBrowserElementAPI->Download(aUrl, options, getter_AddRefs(req)); if (NS_WARN_IF(NS_FAILED(rv))) { aRv.Throw(NS_ERROR_DOM_INVALID_STATE_ERR); return nullptr; } return req.forget().downcast<DOMRequest>(); }
void nsBrowserElement::SetVolume(float aVolume, ErrorResult& aRv) { NS_ENSURE_TRUE_VOID(IsBrowserElementOrThrow(aRv)); NS_ENSURE_TRUE_VOID(IsNotWidgetOrThrow(aRv)); nsresult rv = mBrowserElementAPI->SetVolume(aVolume); if (NS_WARN_IF(NS_FAILED(rv))) { aRv.Throw(NS_ERROR_DOM_INVALID_STATE_ERR); } }
void nsBrowserElement::Unmute(ErrorResult& aRv) { NS_ENSURE_TRUE_VOID(IsBrowserElementOrThrow(aRv)); NS_ENSURE_TRUE_VOID(IsNotWidgetOrThrow(aRv)); nsresult rv = mBrowserElementAPI->Unmute(); if (NS_WARN_IF(NS_FAILED(rv))) { aRv.Throw(NS_ERROR_DOM_INVALID_STATE_ERR); } }
void nsBrowserElement::ClearMatch(ErrorResult& aRv) { NS_ENSURE_TRUE_VOID(IsBrowserElementOrThrow(aRv)); NS_ENSURE_TRUE_VOID(IsNotWidgetOrThrow(aRv)); nsresult rv = mBrowserElementAPI->ClearMatch(); if (NS_FAILED(rv)) { aRv.Throw(rv); } }
void nsBrowserElement::Reload(bool aHardReload, ErrorResult& aRv) { NS_ENSURE_TRUE_VOID(IsBrowserElementOrThrow(aRv)); NS_ENSURE_TRUE_VOID(IsNotWidgetOrThrow(aRv)); nsresult rv = mBrowserElementAPI->Reload(aHardReload); if (NS_WARN_IF(NS_FAILED(rv))) { aRv.Throw(NS_ERROR_DOM_INVALID_STATE_ERR); } }
already_AddRefed<DOMRequest> nsBrowserElement::GetVolume(ErrorResult& aRv) { NS_ENSURE_TRUE(IsBrowserElementOrThrow(aRv), nullptr); NS_ENSURE_TRUE(IsNotWidgetOrThrow(aRv), nullptr); nsCOMPtr<nsIDOMDOMRequest> req; nsresult rv = mBrowserElementAPI->GetVolume(getter_AddRefs(req)); if (NS_WARN_IF(NS_FAILED(rv))) { aRv.Throw(NS_ERROR_DOM_INVALID_STATE_ERR); return nullptr; } return req.forget().downcast<DOMRequest>(); }
void nsBrowserElement::SendTouchEvent(const nsAString& aType, const Sequence<uint32_t>& aIdentifiers, const Sequence<int32_t>& aXs, const Sequence<int32_t>& aYs, const Sequence<uint32_t>& aRxs, const Sequence<uint32_t>& aRys, const Sequence<float>& aRotationAngles, const Sequence<float>& aForces, uint32_t aCount, uint32_t aModifiers, ErrorResult& aRv) { NS_ENSURE_TRUE_VOID(IsBrowserElementOrThrow(aRv)); NS_ENSURE_TRUE_VOID(IsNotWidgetOrThrow(aRv)); if (aIdentifiers.Length() != aCount || aXs.Length() != aCount || aYs.Length() != aCount || aRxs.Length() != aCount || aRys.Length() != aCount || aRotationAngles.Length() != aCount || aForces.Length() != aCount) { aRv.Throw(NS_ERROR_DOM_INVALID_ACCESS_ERR); return; } nsresult rv = mBrowserElementAPI->SendTouchEvent(aType, aIdentifiers.Elements(), aXs.Elements(), aYs.Elements(), aRxs.Elements(), aRys.Elements(), aRotationAngles.Elements(), aForces.Elements(), aCount, aModifiers); if (NS_WARN_IF(NS_FAILED(rv))) { aRv.Throw(NS_ERROR_DOM_INVALID_STATE_ERR); } }
void nsBrowserElement::FindNext(BrowserFindDirection aDirection, ErrorResult& aRv) { NS_ENSURE_TRUE_VOID(IsBrowserElementOrThrow(aRv)); NS_ENSURE_TRUE_VOID(IsNotWidgetOrThrow(aRv)); uint32_t direction; if (aDirection == BrowserFindDirection::Backward) { direction = nsIBrowserElementAPI::FIND_BACKWARD; } else { direction = nsIBrowserElementAPI::FIND_FORWARD; } nsresult rv = mBrowserElementAPI->FindNext(direction); if (NS_FAILED(rv)) { aRv.Throw(rv); } }
void nsBrowserElement::FindAll(const nsAString& aSearchString, BrowserFindCaseSensitivity aCaseSensitivity, ErrorResult& aRv) { NS_ENSURE_TRUE_VOID(IsBrowserElementOrThrow(aRv)); NS_ENSURE_TRUE_VOID(IsNotWidgetOrThrow(aRv)); uint32_t caseSensitivity; if (aCaseSensitivity == BrowserFindCaseSensitivity::Case_insensitive) { caseSensitivity = nsIBrowserElementAPI::FIND_CASE_INSENSITIVE; } else { caseSensitivity = nsIBrowserElementAPI::FIND_CASE_SENSITIVE; } nsresult rv = mBrowserElementAPI->FindAll(aSearchString, caseSensitivity); if (NS_FAILED(rv)) { aRv.Throw(rv); } }
void nsBrowserElement::SendMouseEvent(const nsAString& aType, uint32_t aX, uint32_t aY, uint32_t aButton, uint32_t aClickCount, uint32_t aModifiers, ErrorResult& aRv) { NS_ENSURE_TRUE_VOID(IsBrowserElementOrThrow(aRv)); NS_ENSURE_TRUE_VOID(IsNotWidgetOrThrow(aRv)); nsresult rv = mBrowserElementAPI->SendMouseEvent(aType, aX, aY, aButton, aClickCount, aModifiers); if (NS_WARN_IF(NS_FAILED(rv))) { aRv.Throw(NS_ERROR_DOM_INVALID_STATE_ERR); } }
already_AddRefed<DOMRequest> nsBrowserElement::GetScreenshot(uint32_t aWidth, uint32_t aHeight, const nsAString& aMimeType, ErrorResult& aRv) { NS_ENSURE_TRUE(IsBrowserElementOrThrow(aRv), nullptr); NS_ENSURE_TRUE(IsNotWidgetOrThrow(aRv), nullptr); nsCOMPtr<nsIDOMDOMRequest> req; nsresult rv = mBrowserElementAPI->GetScreenshot(aWidth, aHeight, aMimeType, getter_AddRefs(req)); if (NS_WARN_IF(NS_FAILED(rv))) { if (rv == NS_ERROR_INVALID_ARG) { aRv.Throw(NS_ERROR_DOM_INVALID_ACCESS_ERR); } else { aRv.Throw(NS_ERROR_DOM_INVALID_STATE_ERR); } return nullptr; } return req.forget().downcast<DOMRequest>(); }