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 "nsDOMOfflineResourceList.h"
9 #include "mozilla/Components.h"
10 #include "mozilla/dom/DOMStringList.h"
12 #include "nsNetUtil.h"
14 #include "nsServiceManagerUtils.h"
15 #include "nsICookieJarSettings.h"
16 #include "nsIInterfaceRequestorUtils.h"
17 #include "nsContentUtils.h"
18 #include "nsILoadContext.h"
19 #include "nsIObserverService.h"
20 #include "nsIScriptGlobalObject.h"
21 #include "nsIWebNavigation.h"
22 #include "mozilla/dom/Document.h"
23 #include "mozilla/dom/Event.h"
24 #include "mozilla/dom/OfflineResourceListBinding.h"
25 #include "mozilla/EventDispatcher.h"
26 #include "mozilla/EventListenerManager.h"
27 #include "mozilla/Preferences.h"
28 #include "mozilla/BasePrincipal.h"
29 #include "mozilla/StaticPrefs_browser.h"
31 #include "nsXULAppAPI.h"
32 #define IS_CHILD_PROCESS() (GeckoProcessType_Default != XRE_GetProcessType())
34 using namespace mozilla
;
35 using namespace mozilla::dom
;
38 // nsDOMOfflineResourceList
41 NS_IMPL_CYCLE_COLLECTION_WEAK_INHERITED(nsDOMOfflineResourceList
,
44 NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(nsDOMOfflineResourceList
)
45 NS_INTERFACE_MAP_ENTRY(nsIObserver
)
46 NS_INTERFACE_MAP_ENTRY(nsISupportsWeakReference
)
47 NS_INTERFACE_MAP_END_INHERITING(DOMEventTargetHelper
)
49 NS_IMPL_ADDREF_INHERITED(nsDOMOfflineResourceList
, DOMEventTargetHelper
)
50 NS_IMPL_RELEASE_INHERITED(nsDOMOfflineResourceList
, DOMEventTargetHelper
)
52 nsDOMOfflineResourceList::nsDOMOfflineResourceList(
53 nsIURI
* aManifestURI
, nsIURI
* aDocumentURI
, nsIPrincipal
* aLoadingPrincipal
,
54 nsPIDOMWindowInner
* aWindow
)
55 : DOMEventTargetHelper(aWindow
) {}
57 nsDOMOfflineResourceList::~nsDOMOfflineResourceList() { ClearCachedKeys(); }
59 JSObject
* nsDOMOfflineResourceList::WrapObject(
60 JSContext
* aCx
, JS::Handle
<JSObject
*> aGivenProto
) {
61 return OfflineResourceList_Binding::Wrap(aCx
, this, aGivenProto
);
64 void nsDOMOfflineResourceList::Disconnect() {}
66 already_AddRefed
<DOMStringList
> nsDOMOfflineResourceList::GetMozItems(
68 if (IS_CHILD_PROCESS()) {
69 aRv
.Throw(NS_ERROR_NOT_IMPLEMENTED
);
73 RefPtr
<DOMStringList
> items
= new DOMStringList();
74 return items
.forget();
77 bool nsDOMOfflineResourceList::MozHasItem(const nsAString
& aURI
,
82 uint32_t nsDOMOfflineResourceList::GetMozLength(ErrorResult
& aRv
) {
83 if (IS_CHILD_PROCESS()) {
84 aRv
.Throw(NS_ERROR_NOT_IMPLEMENTED
);
91 void nsDOMOfflineResourceList::MozItem(uint32_t aIndex
, nsAString
& aURI
,
93 aRv
.Throw(NS_ERROR_NOT_AVAILABLE
);
96 void nsDOMOfflineResourceList::IndexedGetter(uint32_t aIndex
, bool& aFound
,
99 if (IS_CHILD_PROCESS()) {
100 aRv
.Throw(NS_ERROR_NOT_IMPLEMENTED
);
107 void nsDOMOfflineResourceList::MozAdd(const nsAString
& aURI
, ErrorResult
& aRv
) {
110 void nsDOMOfflineResourceList::MozRemove(const nsAString
& aURI
,
113 uint16_t nsDOMOfflineResourceList::GetStatus(ErrorResult
& aRv
) {
114 return OfflineResourceList_Binding::UNCACHED
;
117 void nsDOMOfflineResourceList::Update(ErrorResult
& aRv
) {}
119 void nsDOMOfflineResourceList::SwapCache(ErrorResult
& aRv
) {}
121 void nsDOMOfflineResourceList::FirePendingEvents() {}
123 void nsDOMOfflineResourceList::SendEvent(const nsAString
& aEventName
) {}
126 // nsDOMOfflineResourceList::nsIObserver
129 nsDOMOfflineResourceList::Observe(nsISupports
* aSubject
, const char* aTopic
,
130 const char16_t
* aData
) {
134 nsresult
nsDOMOfflineResourceList::GetCacheKey(const nsAString
& aURI
,
136 nsCOMPtr
<nsIURI
> requestedURI
;
137 nsresult rv
= NS_NewURI(getter_AddRefs(requestedURI
), aURI
);
138 NS_ENSURE_SUCCESS(rv
, rv
);
140 return GetCacheKey(requestedURI
, aKey
);
143 nsresult
nsDOMOfflineResourceList::GetCacheKey(nsIURI
* aURI
, nsCString
& aKey
) {
144 nsresult rv
= aURI
->GetAsciiSpec(aKey
);
145 NS_ENSURE_SUCCESS(rv
, rv
);
147 // url fragments aren't used in cache keys
148 nsAutoCString::const_iterator specStart
, specEnd
;
149 aKey
.BeginReading(specStart
);
150 aKey
.EndReading(specEnd
);
151 if (FindCharInReadable('#', specStart
, specEnd
)) {
152 aKey
.BeginReading(specEnd
);
153 aKey
= Substring(specEnd
, specStart
);
159 nsresult
nsDOMOfflineResourceList::CacheKeys() { return NS_OK
; }
161 void nsDOMOfflineResourceList::ClearCachedKeys() {}