Line data Source code
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/. */
6 :
7 : #ifndef mozilla_dom_DOMImplementation_h
8 : #define mozilla_dom_DOMImplementation_h
9 :
10 : #include "nsIDOMDOMImplementation.h"
11 : #include "nsWrapperCache.h"
12 :
13 : #include "mozilla/Attributes.h"
14 : #include "mozilla/ErrorResult.h"
15 : #include "nsCOMPtr.h"
16 : #include "nsCycleCollectionParticipant.h"
17 : #include "nsIDocument.h"
18 : #include "nsIScriptGlobalObject.h"
19 : #include "nsIURI.h"
20 : #include "nsIWeakReferenceUtils.h"
21 : #include "nsString.h"
22 :
23 : class nsIDOMDocument;
24 :
25 : namespace mozilla {
26 : namespace dom {
27 : class DocumentType;
28 :
29 : class DOMImplementation final : public nsIDOMDOMImplementation
30 : , public nsWrapperCache
31 : {
32 0 : ~DOMImplementation()
33 0 : {
34 0 : }
35 :
36 : public:
37 0 : DOMImplementation(nsIDocument* aOwner,
38 : nsIGlobalObject* aScriptObject,
39 : nsIURI* aDocumentURI,
40 : nsIURI* aBaseURI)
41 0 : : mOwner(aOwner)
42 0 : , mScriptObject(do_GetWeakReference(aScriptObject))
43 : , mDocumentURI(aDocumentURI)
44 0 : , mBaseURI(aBaseURI)
45 : {
46 0 : MOZ_ASSERT(aOwner);
47 0 : }
48 :
49 : NS_DECL_CYCLE_COLLECTING_ISUPPORTS
50 15 : NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(DOMImplementation)
51 :
52 0 : nsIDocument* GetParentObject() const
53 : {
54 0 : return mOwner;
55 : }
56 :
57 : virtual JSObject* WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto) override;
58 :
59 : // nsIDOMDOMImplementation
60 : NS_DECL_NSIDOMDOMIMPLEMENTATION
61 :
62 0 : bool HasFeature()
63 : {
64 0 : return true;
65 : }
66 :
67 : already_AddRefed<DocumentType>
68 : CreateDocumentType(const nsAString& aQualifiedName,
69 : const nsAString& aPublicId,
70 : const nsAString& aSystemId,
71 : ErrorResult& aRv);
72 :
73 : already_AddRefed<nsIDocument>
74 : CreateDocument(const nsAString& aNamespaceURI,
75 : const nsAString& aQualifiedName,
76 : nsIDOMDocumentType* aDoctype,
77 : ErrorResult& aRv);
78 :
79 : already_AddRefed<nsIDocument>
80 : CreateHTMLDocument(const Optional<nsAString>& aTitle, ErrorResult& aRv);
81 :
82 : private:
83 : nsresult CreateDocument(const nsAString& aNamespaceURI,
84 : const nsAString& aQualifiedName,
85 : nsIDOMDocumentType* aDoctype,
86 : nsIDocument** aDocument,
87 : nsIDOMDocument** aDOMDocument);
88 : nsresult CreateHTMLDocument(const nsAString& aTitle,
89 : nsIDocument** aDocument,
90 : nsIDOMDocument** aDOMDocument);
91 :
92 : nsCOMPtr<nsIDocument> mOwner;
93 : nsWeakPtr mScriptObject;
94 : nsCOMPtr<nsIURI> mDocumentURI;
95 : nsCOMPtr<nsIURI> mBaseURI;
96 : };
97 :
98 : } // namespace dom
99 : } // namespace mozilla
100 :
101 : #endif // mozilla_dom_DOMImplementation_h
|