Bug 1610775 [wpt PR 21336] - Update urllib3 to 1.25.8, a=testonly
[gecko.git] / dom / url / URLMainThread.cpp
blob5dcdc8697cb6cc139e8a8fb00ecd416d9f9d099f
1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* vim: set ts=8 sts=2 et sw=2 tw=80: */
3 /* This Source Code Form is subject to the terms of the Mozilla Public
4 * License, v. 2.0. If a copy of the MPL was not distributed with this
5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
7 #include "URLMainThread.h"
9 #include "mozilla/dom/BindingUtils.h"
10 #include "mozilla/dom/Blob.h"
11 #include "mozilla/dom/BlobURLProtocolHandler.h"
12 #include "mozilla/Unused.h"
13 #include "nsContentUtils.h"
14 #include "nsNetUtil.h"
16 namespace mozilla {
17 namespace dom {
19 /* static */
20 void URLMainThread::CreateObjectURL(const GlobalObject& aGlobal, Blob& aBlob,
21 nsAString& aResult, ErrorResult& aRv) {
22 MOZ_ASSERT(NS_IsMainThread());
24 nsCOMPtr<nsIGlobalObject> global = do_QueryInterface(aGlobal.GetAsSupports());
25 if (NS_WARN_IF(!global)) {
26 aRv.Throw(NS_ERROR_FAILURE);
27 return;
30 nsCOMPtr<nsIPrincipal> principal =
31 nsContentUtils::ObjectPrincipal(aGlobal.Get());
33 nsAutoCString url;
34 aRv = BlobURLProtocolHandler::AddDataEntry(aBlob.Impl(), principal, url);
35 if (NS_WARN_IF(aRv.Failed())) {
36 return;
39 global->RegisterHostObjectURI(url);
40 CopyASCIItoUTF16(url, aResult);
43 /* static */
44 void URLMainThread::CreateObjectURL(const GlobalObject& aGlobal,
45 MediaSource& aSource, nsAString& aResult,
46 ErrorResult& aRv) {
47 MOZ_ASSERT(NS_IsMainThread());
49 nsCOMPtr<nsIPrincipal> principal =
50 nsContentUtils::ObjectPrincipal(aGlobal.Get());
52 nsAutoCString url;
53 aRv = BlobURLProtocolHandler::AddDataEntry(&aSource, principal, url);
54 if (NS_WARN_IF(aRv.Failed())) {
55 return;
58 nsCOMPtr<nsIRunnable> revocation = NS_NewRunnableFunction(
59 "dom::URLMainThread::CreateObjectURL",
60 [url] { BlobURLProtocolHandler::RemoveDataEntry(url); });
62 nsContentUtils::RunInStableState(revocation.forget());
64 CopyASCIItoUTF16(url, aResult);
67 /* static */
68 void URLMainThread::RevokeObjectURL(const GlobalObject& aGlobal,
69 const nsAString& aURL, ErrorResult& aRv) {
70 MOZ_ASSERT(NS_IsMainThread());
71 nsCOMPtr<nsIGlobalObject> global = do_QueryInterface(aGlobal.GetAsSupports());
72 if (!global) {
73 aRv.Throw(NS_ERROR_FAILURE);
74 return;
77 nsIPrincipal* principal = nsContentUtils::ObjectPrincipal(aGlobal.Get());
79 NS_LossyConvertUTF16toASCII asciiurl(aURL);
81 nsIPrincipal* urlPrincipal =
82 BlobURLProtocolHandler::GetDataEntryPrincipal(asciiurl);
84 if (urlPrincipal && principal->Subsumes(urlPrincipal)) {
85 global->UnregisterHostObjectURI(asciiurl);
86 BlobURLProtocolHandler::RemoveDataEntry(asciiurl);
90 /* static */
91 bool URLMainThread::IsValidURL(const GlobalObject& aGlobal,
92 const nsAString& aURL, ErrorResult& aRv) {
93 MOZ_ASSERT(NS_IsMainThread());
94 NS_LossyConvertUTF16toASCII asciiurl(aURL);
95 return BlobURLProtocolHandler::HasDataEntry(asciiurl);
98 } // namespace dom
99 } // namespace mozilla