1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
//
// DO NOT EDIT.  THIS FILE IS GENERATED FROM ../../../dist/idl/nsIRefreshURI.idl
//


/// `interface nsIRefreshURI : nsISupports`
///


// The actual type definition for the interface. This struct has methods
// declared on it which will call through its vtable. You never want to pass
// this type around by value, always pass it behind a reference.

#[repr(C)]
pub struct nsIRefreshURI {
    vtable: *const nsIRefreshURIVTable,

    /// This field is a phantomdata to ensure that the VTable type and any
    /// struct containing it is not safe to send across threads, as XPCOM is
    /// generally not threadsafe.
    ///
    /// XPCOM interfaces in general are not safe to send across threads.
    __nosync: ::std::marker::PhantomData<::std::rc::Rc<u8>>,
}

// Implementing XpCom for an interface exposes its IID, which allows for easy
// use of the `.query_interface<T>` helper method. This also defines that
// method for nsIRefreshURI.
unsafe impl XpCom for nsIRefreshURI {
    const IID: nsIID = nsID(0xa5e61a3c, 0x51bd, 0x45be,
        [0xac, 0x0c, 0xe8, 0x7b, 0x71, 0x86, 0x06, 0x56]);
}

// We need to implement the RefCounted trait so we can be used with `RefPtr`.
// This trait teaches `RefPtr` how to manage our memory.
unsafe impl RefCounted for nsIRefreshURI {
    #[inline]
    unsafe fn addref(&self) {
        self.AddRef();
    }
    #[inline]
    unsafe fn release(&self) {
        self.Release();
    }
}

// This trait is implemented on all types which can be coerced to from nsIRefreshURI.
// It is used in the implementation of `fn coerce<T>`. We hide it from the
// documentation, because it clutters it up a lot.
#[doc(hidden)]
pub trait nsIRefreshURICoerce {
    /// Cheaply cast a value of this type from a `nsIRefreshURI`.
    fn coerce_from(v: &nsIRefreshURI) -> &Self;
}

// The trivial implementation: We can obviously coerce ourselves to ourselves.
impl nsIRefreshURICoerce for nsIRefreshURI {
    #[inline]
    fn coerce_from(v: &nsIRefreshURI) -> &Self {
        v
    }
}

impl nsIRefreshURI {
    /// Cast this `nsIRefreshURI` to one of its base interfaces.
    #[inline]
    pub fn coerce<T: nsIRefreshURICoerce>(&self) -> &T {
        T::coerce_from(self)
    }
}

// Every interface struct type implements `Deref` to its base interface. This
// causes methods on the base interfaces to be directly avaliable on the
// object. For example, you can call `.AddRef` or `.QueryInterface` directly
// on any interface which inherits from `nsISupports`.
impl ::std::ops::Deref for nsIRefreshURI {
    type Target = nsISupports;
    #[inline]
    fn deref(&self) -> &nsISupports {
        unsafe {
            ::std::mem::transmute(self)
        }
    }
}

// Ensure we can use .coerce() to cast to our base types as well. Any type which
// our base interface can coerce from should be coercable from us as well.
impl<T: nsISupportsCoerce> nsIRefreshURICoerce for T {
    #[inline]
    fn coerce_from(v: &nsIRefreshURI) -> &Self {
        T::coerce_from(v)
    }
}

// This struct represents the interface's VTable. A pointer to a statically
// allocated version of this struct is at the beginning of every nsIRefreshURI
// object. It contains one pointer field for each method in the interface. In
// the case where we can't generate a binding for a method, we include a void
// pointer.
#[doc(hidden)]
#[repr(C)]
pub struct nsIRefreshURIVTable {
    /// We need to include the members from the base interface's vtable at the start
    /// of the VTable definition.
    pub __base: nsISupportsVTable,

    /* void refreshURI (in nsIURI aURI, in nsIPrincipal aPrincipal, in long aMillis, in boolean aRepeat, in boolean aMetaRefresh); */
    pub RefreshURI: unsafe extern "system" fn (this: *const nsIRefreshURI, aURI: *const nsIURI, aPrincipal: *const nsIPrincipal, aMillis: libc::int32_t, aRepeat: bool, aMetaRefresh: bool) -> nsresult,

    /* void forceRefreshURI (in nsIURI aURI, in nsIPrincipal aPrincipal, in long aMillis, in boolean aMetaRefresh); */
    pub ForceRefreshURI: unsafe extern "system" fn (this: *const nsIRefreshURI, aURI: *const nsIURI, aPrincipal: *const nsIPrincipal, aMillis: libc::int32_t, aMetaRefresh: bool) -> nsresult,

    /* void setupRefreshURI (in nsIChannel aChannel); */
    pub SetupRefreshURI: unsafe extern "system" fn (this: *const nsIRefreshURI, aChannel: *const nsIChannel) -> nsresult,

    /* void setupRefreshURIFromHeader (in nsIURI aBaseURI, in nsIPrincipal principal, in ACString aHeader); */
    pub SetupRefreshURIFromHeader: unsafe extern "system" fn (this: *const nsIRefreshURI, aBaseURI: *const nsIURI, principal: *const nsIPrincipal, aHeader: &::nsstring::nsACString) -> nsresult,

    /* void cancelRefreshURITimers (); */
    pub CancelRefreshURITimers: unsafe extern "system" fn (this: *const nsIRefreshURI) -> nsresult,

    /* readonly attribute boolean refreshPending; */
    pub GetRefreshPending: unsafe extern "system" fn (this: *const nsIRefreshURI, aRefreshPending: *mut bool) -> nsresult,
}


// The implementations of the function wrappers which are exposed to rust code.
// Call these methods rather than manually calling through the VTable struct.
impl nsIRefreshURI {

    /// ```text
    /// /**
    ///       * Load a uri after waiting for aMillis milliseconds. If the docshell
    ///       * is busy loading a page currently, the refresh request will be
    ///       * queued and executed when the current load finishes.
    ///       *
    ///       * @param aUri The uri to refresh.
    ///       * @param aPrincipal The triggeringPrincipal for the refresh load
    ///       *   May be null, in which case a principal will be built based on the
    ///       *   referrer URI of the previous docshell load, or will use the system
    ///       *   principal when there is no referrer.
    ///       * @param aMillis The number of milliseconds to wait.
    ///       * @param aRepeat Flag to indicate if the uri is to be
    ///       *                repeatedly refreshed every aMillis milliseconds.
    ///       * @param aMetaRefresh Flag to indicate if this is a Meta refresh.
    ///       */
    /// ```
    ///

    /// `void refreshURI (in nsIURI aURI, in nsIPrincipal aPrincipal, in long aMillis, in boolean aRepeat, in boolean aMetaRefresh);`
    #[inline]
    pub unsafe fn RefreshURI(&self, aURI: *const nsIURI, aPrincipal: *const nsIPrincipal, aMillis: libc::int32_t, aRepeat: bool, aMetaRefresh: bool) -> nsresult {
        ((*self.vtable).RefreshURI)(self, aURI, aPrincipal, aMillis, aRepeat, aMetaRefresh)
    }


    /// ```text
    /// /**
    ///       * Loads a URI immediately as if it were a refresh.
    ///       *
    ///       * @param aURI The URI to refresh.
    ///       * @param aPrincipal The triggeringPrincipal for the refresh load
    ///       *   May be null, in which case a principal will be built based on the
    ///       *   referrer URI of the previous docshell load, or will use the system
    ///       *   principal when there is no referrer.
    ///       * @param aMillis The number of milliseconds by which this refresh would
    ///       *                be delayed if it were not being forced.
    ///       * @param aMetaRefresh Flag to indicate if this is a meta refresh.
    ///       */
    /// ```
    ///

    /// `void forceRefreshURI (in nsIURI aURI, in nsIPrincipal aPrincipal, in long aMillis, in boolean aMetaRefresh);`
    #[inline]
    pub unsafe fn ForceRefreshURI(&self, aURI: *const nsIURI, aPrincipal: *const nsIPrincipal, aMillis: libc::int32_t, aMetaRefresh: bool) -> nsresult {
        ((*self.vtable).ForceRefreshURI)(self, aURI, aPrincipal, aMillis, aMetaRefresh)
    }


    /// ```text
    /// /**
    ///       * Checks the passed in channel to see if there is a refresh header,
    ///       * if there is, will setup a timer to refresh the uri found
    ///       * in the header. If docshell is busy loading a page currently, the
    ///       * request will be queued and executed when the current page
    ///       * finishes loading.
    ///       *
    ///       * Returns the NS_REFRESHURI_HEADER_FOUND success code if a refresh
    ///       * header was found and successfully setup.
    ///       *
    ///       * @param aChannel The channel to be parsed.
    ///       */
    /// ```
    ///

    /// `void setupRefreshURI (in nsIChannel aChannel);`
    #[inline]
    pub unsafe fn SetupRefreshURI(&self, aChannel: *const nsIChannel) -> nsresult {
        ((*self.vtable).SetupRefreshURI)(self, aChannel)
    }


    /// ```text
    /// /**
    ///       * Parses the passed in header string and sets up a refreshURI if
    ///       * a "refresh" header is found. If docshell is busy loading a page
    ///       * currently, the request will be queued and executed when
    ///       * the current page finishes loading.
    ///       *
    ///       * @param aBaseURI base URI to resolve refresh uri with.
    ///       * @param aPrincipal The triggeringPrincipal for the refresh load
    ///       *   May be null, in which case a principal will be built based on the
    ///       *   referrer URI of the previous docshell load, or will use the system
    ///       *   principal when there is no referrer.
    ///       * @param aHeader  The meta refresh header string.
    ///       */
    /// ```
    ///

    /// `void setupRefreshURIFromHeader (in nsIURI aBaseURI, in nsIPrincipal principal, in ACString aHeader);`
    #[inline]
    pub unsafe fn SetupRefreshURIFromHeader(&self, aBaseURI: *const nsIURI, principal: *const nsIPrincipal, aHeader: &::nsstring::nsACString) -> nsresult {
        ((*self.vtable).SetupRefreshURIFromHeader)(self, aBaseURI, principal, aHeader)
    }


    /// ```text
    /// /**
    ///       * Cancels all timer loads.
    ///       */
    /// ```
    ///

    /// `void cancelRefreshURITimers ();`
    #[inline]
    pub unsafe fn CancelRefreshURITimers(&self, ) -> nsresult {
        ((*self.vtable).CancelRefreshURITimers)(self, )
    }


    /// ```text
    /// /**
    ///      * True when there are pending refreshes, false otherwise.
    ///      */
    /// ```
    ///

    /// `readonly attribute boolean refreshPending;`
    #[inline]
    pub unsafe fn GetRefreshPending(&self, aRefreshPending: *mut bool) -> nsresult {
        ((*self.vtable).GetRefreshPending)(self, aRefreshPending)
    }


}