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_ChannelInfo_h 8 #define mozilla_dom_ChannelInfo_h 9 10 #include "nsString.h" 11 #include "nsCOMPtr.h" 12 13 class nsIChannel; 14 class nsIDocument; 15 class nsIGlobalObject; 16 class nsIURI; 17 18 namespace mozilla { 19 namespace ipc { 20 class IPCChannelInfo; 21 } // namespace ipc 22 23 namespace dom { 24 25 // This class represents the information related to a Response that we 26 // retrieve from the corresponding channel that is used to perform the fetch. 27 // 28 // When adding new members to this object, the following code needs to be 29 // updated: 30 // * IPCChannelInfo 31 // * InitFromChannel and InitFromIPCChannelInfo members 32 // * ResurrectInfoOnChannel member 33 // * AsIPCChannelInfo member 34 // * constructors and assignment operators for this class. 35 // * DOM Cache schema code (in dom/cache/DBSchema.cpp) to ensure that the newly 36 // added member is saved into the DB and loaded from it properly. 37 // 38 // Care must be taken when initializing this object, or when calling 39 // ResurrectInfoOnChannel(). This object cannot be initialized twice, and 40 // ResurrectInfoOnChannel() cannot be called on it before it has been 41 // initialized. There are assertions ensuring these invariants. 42 class ChannelInfo final 43 { 44 public: 45 typedef mozilla::ipc::IPCChannelInfo IPCChannelInfo; 46 ChannelInfo()47 ChannelInfo() 48 : mInited(false) 49 { 50 } 51 ChannelInfo(const ChannelInfo & aRHS)52 ChannelInfo(const ChannelInfo& aRHS) 53 : mSecurityInfo(aRHS.mSecurityInfo) 54 , mInited(aRHS.mInited) 55 { 56 } 57 58 ChannelInfo& 59 operator=(const ChannelInfo& aRHS) 60 { 61 mSecurityInfo = aRHS.mSecurityInfo; 62 mInited = aRHS.mInited; 63 return *this; 64 } 65 66 void InitFromDocument(nsIDocument* aDoc); 67 void InitFromChannel(nsIChannel* aChannel); 68 void InitFromChromeGlobal(nsIGlobalObject* aGlobal); 69 void InitFromIPCChannelInfo(const IPCChannelInfo& aChannelInfo); 70 71 // This restores every possible information stored from a previous channel 72 // object on a new one. 73 nsresult ResurrectInfoOnChannel(nsIChannel* aChannel); 74 IsInitialized()75 bool IsInitialized() const 76 { 77 return mInited; 78 } 79 80 IPCChannelInfo AsIPCChannelInfo() const; 81 82 private: 83 void SetSecurityInfo(nsISupports* aSecurityInfo); 84 85 private: 86 nsCString mSecurityInfo; 87 bool mInited; 88 }; 89 90 } // namespace dom 91 } // namespace mozilla 92 93 #endif // mozilla_dom_ChannelInfo_h 94