Copy as Markdown
Other Tools
//
// DO NOT EDIT. THIS FILE IS GENERATED FROM $SRCDIR/toolkit/components/places/nsIFaviconService.idl
//
/// `interface nsIFaviconService : 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 nsIFaviconService {
vtable: &'static nsIFaviconServiceVTable,
/// This field is a phantomdata to ensure that the VTable type and any
/// struct containing it is not safe to send across threads by default, as
/// XPCOM is generally not threadsafe.
///
/// If this type is marked as [rust_sync], there will be explicit `Send` and
/// `Sync` implementations on this type, which will override the inherited
/// negative impls from `Rc`.
__nosync: ::std::marker::PhantomData<::std::rc::Rc<u8>>,
// Make the rust compiler aware that there might be interior mutability
// in what actually implements the interface. This works around UB
// introduced by https://github.com/llvm/llvm-project/commit/01859da84bad95fd51d6a03b08b60c660e642a4f
// that a rust lint would make blatantly obvious, but doesn't exist.
// This prevents optimizations, but those optimizations weren't available
// before rustc switched to LLVM 16, and they now cause problems because
// of the UB.
// Until there's a lint available to find all our UB, it's simpler to
// avoid the UB in the first place, at the cost of preventing optimizations
// in places that don't cause UB. But again, those optimizations weren't
// available before.
__maybe_interior_mutability: ::std::cell::UnsafeCell<[u8; 0]>,
}
// 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 nsIFaviconService.
unsafe impl XpCom for nsIFaviconService {
const IID: nsIID = nsID(0xe81e0b0c, 0xb9f1, 0x4c2e,
[0x8f, 0x3c, 0xb8, 0x09, 0x93, 0x3c, 0xf7, 0x3c]);
}
// 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 nsIFaviconService {
#[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 nsIFaviconService.
// 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 nsIFaviconServiceCoerce {
/// Cheaply cast a value of this type from a `nsIFaviconService`.
fn coerce_from(v: &nsIFaviconService) -> &Self;
}
// The trivial implementation: We can obviously coerce ourselves to ourselves.
impl nsIFaviconServiceCoerce for nsIFaviconService {
#[inline]
fn coerce_from(v: &nsIFaviconService) -> &Self {
v
}
}
impl nsIFaviconService {
/// Cast this `nsIFaviconService` to one of its base interfaces.
#[inline]
pub fn coerce<T: nsIFaviconServiceCoerce>(&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 nsIFaviconService {
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> nsIFaviconServiceCoerce for T {
#[inline]
fn coerce_from(v: &nsIFaviconService) -> &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 nsIFaviconService
// 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 nsIFaviconServiceVTable {
/// We need to include the members from the base interface's vtable at the start
/// of the VTable definition.
pub __base: nsISupportsVTable,
/* nsIURI getFaviconLinkForIcon (in nsIURI aFaviconURI); */
pub GetFaviconLinkForIcon: unsafe extern "system" fn (this: *const nsIFaviconService, aFaviconURI: *const nsIURI, _retval: *mut*const nsIURI) -> ::nserror::nsresult,
/* void expireAllFavicons (); */
pub ExpireAllFavicons: unsafe extern "system" fn (this: *const nsIFaviconService) -> ::nserror::nsresult,
/* void setDefaultIconURIPreferredSize (in unsigned short aDefaultSize); */
pub SetDefaultIconURIPreferredSize: unsafe extern "system" fn (this: *const nsIFaviconService, aDefaultSize: u16) -> ::nserror::nsresult,
/* unsigned short preferredSizeFromURI (in nsIURI aURI); */
pub PreferredSizeFromURI: unsafe extern "system" fn (this: *const nsIFaviconService, aURI: *const nsIURI, _retval: *mut u16) -> ::nserror::nsresult,
/* readonly attribute nsIURI defaultFavicon; */
pub GetDefaultFavicon: unsafe extern "system" fn (this: *const nsIFaviconService, aDefaultFavicon: *mut*const nsIURI) -> ::nserror::nsresult,
/* readonly attribute AUTF8String defaultFaviconMimeType; */
pub GetDefaultFaviconMimeType: unsafe extern "system" fn (this: *const nsIFaviconService, aDefaultFaviconMimeType: *mut ::nsstring::nsACString) -> ::nserror::nsresult,
/* [implicit_jscontext,must_use] Promise setFaviconForPage (in nsIURI aPageURI, in nsIURI aFaviconURI, in nsIURI aDataURL, [optional] in PRTime aExpiration, [optional] in boolean isRichIcon); */
/// Unable to generate binding because `jscontext is unsupported`
pub SetFaviconForPage: *const ::libc::c_void,
/* void getFaviconURLForPage (in nsIURI aPageURI, in nsIFaviconDataCallback aCallback, [optional] in unsigned short aPreferredWidth); */
pub GetFaviconURLForPage: unsafe extern "system" fn (this: *const nsIFaviconService, aPageURI: *const nsIURI, aCallback: *const nsIFaviconDataCallback, aPreferredWidth: u16) -> ::nserror::nsresult,
/* void getFaviconDataForPage (in nsIURI aPageURI, in nsIFaviconDataCallback aCallback, [optional] in unsigned short aPreferredWidth); */
pub GetFaviconDataForPage: unsafe extern "system" fn (this: *const nsIFaviconService, aPageURI: *const nsIURI, aCallback: *const nsIFaviconDataCallback, aPreferredWidth: u16) -> ::nserror::nsresult,
/* void copyFavicons (in nsIURI aFromPageURI, in nsIURI aToPageURI, in unsigned long aFaviconLoadType, [optional] in nsIFaviconDataCallback aCallback); */
pub CopyFavicons: unsafe extern "system" fn (this: *const nsIFaviconService, aFromPageURI: *const nsIURI, aToPageURI: *const nsIURI, aFaviconLoadType: u32, aCallback: *const nsIFaviconDataCallback) -> ::nserror::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 nsIFaviconService {
pub const FAVICON_LOAD_PRIVATE: u32 = 1;
pub const FAVICON_LOAD_NON_PRIVATE: u32 = 2;
pub const ICONDATA_FLAGS_RICH: u16 = 1;
/// ```text
/// /**
/// * The limit in bytes of the size of favicons in memory and passed via the
/// * favicon protocol.
/// */
/// ```
///
pub const MAX_FAVICON_BUFFER_SIZE: u32 = 65536;
/// ```text
/// /**
/// * For a given icon URI, this will return a URI that will result in the image.
/// * In most cases, this is an annotation URI. For chrome URIs, this will do
/// * nothing but returning the input URI.
/// *
/// * No validity checking is done. If you pass an icon URI that we've never
/// * seen, you'll get back a URI that references an invalid icon. The
/// * cached-favicon protocol handler's special case for cached favicon will
/// * resolve invalid icons to the default icon, although without caching.
/// * For invalid chrome URIs, you'll get a broken image.
/// *
/// * @param aFaviconURI
/// * The URI of an icon in the favicon service.
/// * @return A URI that will give you the icon image. This is NOT the URI of
/// * the icon as set on the page, but a URI that will give you the
/// * data out of the favicon service. For a normal page with a
/// * favicon we've stored, this will be an annotation URI which will
/// * then cause the corresponding favicon data to be loaded async from
/// * this service. For pages where we don't have a favicon, this will
/// * be a chrome URI of the default icon. For chrome URIs, the
/// * output will be the same as the input.
/// */
/// ```
///
/// `nsIURI getFaviconLinkForIcon (in nsIURI aFaviconURI);`
#[inline]
pub unsafe fn GetFaviconLinkForIcon(&self, aFaviconURI: *const nsIURI, _retval: *mut*const nsIURI) -> ::nserror::nsresult {
((*self.vtable).GetFaviconLinkForIcon)(self, aFaviconURI, _retval)
}
/// ```text
/// /**
/// * Expire all known favicons from the database.
/// *
/// * @note This is an async method.
/// * On successful completion a "places-favicons-expired" notification is
/// * dispatched through observer's service.
/// */
/// ```
///
/// `void expireAllFavicons ();`
#[inline]
pub unsafe fn ExpireAllFavicons(&self, ) -> ::nserror::nsresult {
((*self.vtable).ExpireAllFavicons)(self, )
}
/// ```text
/// /**
/// * Sets the default size returned by preferredSizeFromURI when the uri doesn't
/// * specify a size ref. If this is not invoked first, or 0 is passed to it,
/// * preferredSizeFromURI() will return UINT16_MAX, that matches the biggest
/// * icon available.
/// */
/// ```
///
/// `void setDefaultIconURIPreferredSize (in unsigned short aDefaultSize);`
#[inline]
pub unsafe fn SetDefaultIconURIPreferredSize(&self, aDefaultSize: u16) -> ::nserror::nsresult {
((*self.vtable).SetDefaultIconURIPreferredSize)(self, aDefaultSize)
}
/// ```text
/// /**
/// * Tries to extract the preferred size from an icon uri ref fragment.
/// *
/// * @param aURI
/// * The URI to parse.
/// * @return The preferred size, or a default size set through
/// * setDefaultIconURIPreferredSize, or UINT16_MAX if neither are set.
/// */
/// ```
///
/// `unsigned short preferredSizeFromURI (in nsIURI aURI);`
#[inline]
pub unsafe fn PreferredSizeFromURI(&self, aURI: *const nsIURI, _retval: *mut u16) -> ::nserror::nsresult {
((*self.vtable).PreferredSizeFromURI)(self, aURI, _retval)
}
/// ```text
/// /**
/// * The default favicon URI
/// */
/// ```
///
/// `readonly attribute nsIURI defaultFavicon;`
#[inline]
pub unsafe fn GetDefaultFavicon(&self, aDefaultFavicon: *mut*const nsIURI) -> ::nserror::nsresult {
((*self.vtable).GetDefaultFavicon)(self, aDefaultFavicon)
}
/// ```text
/// /**
/// * The default favicon mimeType
/// */
/// ```
///
/// `readonly attribute AUTF8String defaultFaviconMimeType;`
#[inline]
pub unsafe fn GetDefaultFaviconMimeType(&self, aDefaultFaviconMimeType: *mut ::nsstring::nsACString) -> ::nserror::nsresult {
((*self.vtable).GetDefaultFaviconMimeType)(self, aDefaultFaviconMimeType)
}
/// ```text
/// /**
/// * Stores the relation between a page URI and a favicon URI, whose icon data
/// * is provided through a data URL.
/// * The process is asynchronous and a callback with the status of the operation
/// * will be invoked at the end of it.
/// *
/// * @param aPageURI
/// * URI of the page whose favicon is being set.
/// * @param aFaviconURI
/// * URI of the favicon to associate with the page.
/// * @param aDataURL
/// * String that represents a data URL to replace as the favicon content.
/// * @param [optional] aExpiration
/// * Time in microseconds since the epoch when this favicon expires.
/// * Until this time, we won't try to load it again.
/// * If this argument is omitted, the expiration defaults to
/// * 7 days (FaviconHelpers::MAX_FAVICON_EXPIRATION) from now.
/// *
/// * @return Promise that is resolved/rejected when finishing the process.
/// *
/// * @throws NS_ERROR_FILE_TOO_BIG if the icon is excessively large and can not
/// * be optimized internally.
/// */
/// ```
///
/// `[implicit_jscontext,must_use] Promise setFaviconForPage (in nsIURI aPageURI, in nsIURI aFaviconURI, in nsIURI aDataURL, [optional] in PRTime aExpiration, [optional] in boolean isRichIcon);`
const _SetFaviconForPage: () = ();
/// ```text
/// /**
/// * Retrieves the favicon URI associated to the given page, if any.
/// *
/// * @param aPageURI
/// * URI of the page whose favicon URI we're looking up.
/// * @param aCallback
/// * This callback is always invoked to notify the result of the lookup.
/// * The aURI parameter will be the favicon URI, or null when no favicon
/// * is associated with the page or an error occurred while fetching it.
/// * aDataLen will be always 0, aData will be an empty array, and
/// * aMimeType will be an empty string, regardless of whether a favicon
/// * was found.
/// * @param [optional] aPreferredWidth
/// * The preferred icon width, skip or pass 0 for the default value,
/// * set through setDefaultIconURIPreferredSize.
/// *
/// * @note If a favicon specific to this page cannot be found, this will try to
/// * fallback to the /favicon.ico for the root domain.
/// *
/// * @see nsIFaviconDataCallback in nsIFaviconService.idl.
/// */
/// ```
///
/// `void getFaviconURLForPage (in nsIURI aPageURI, in nsIFaviconDataCallback aCallback, [optional] in unsigned short aPreferredWidth);`
#[inline]
pub unsafe fn GetFaviconURLForPage(&self, aPageURI: *const nsIURI, aCallback: *const nsIFaviconDataCallback, aPreferredWidth: u16) -> ::nserror::nsresult {
((*self.vtable).GetFaviconURLForPage)(self, aPageURI, aCallback, aPreferredWidth)
}
/// ```text
/// /**
/// * Retrieves the favicon URI and data associated to the given page, if any.
/// * If the page icon is not available, it will try to return the root domain
/// * icon data, when it's known.
/// *
/// * @param aPageURI
/// * URI of the page whose favicon URI and data we're looking up.
/// * @param aCallback
/// * This callback is always invoked to notify the result of the lookup. The aURI
/// * parameter will be the favicon URI, or null when no favicon is
/// * associated with the page or an error occurred while fetching it. If
/// * aURI is not null, the other parameters may contain the favicon data.
/// * However, if no favicon data is currently associated with the favicon
/// * URI, aDataLen will be 0, aData will be an empty array, and aMimeType
/// * will be an empty string.
/// * @param [optional] aPreferredWidth
/// * The preferred icon width, skip or pass 0 for the default value,
/// * set through setDefaultIconURIPreferredSize.
/// * @note If a favicon specific to this page cannot be found, this will try to
/// * fallback to the /favicon.ico for the root domain.
/// *
/// * @see nsIFaviconDataCallback in nsIFaviconService.idl.
/// */
/// ```
///
/// `void getFaviconDataForPage (in nsIURI aPageURI, in nsIFaviconDataCallback aCallback, [optional] in unsigned short aPreferredWidth);`
#[inline]
pub unsafe fn GetFaviconDataForPage(&self, aPageURI: *const nsIURI, aCallback: *const nsIFaviconDataCallback, aPreferredWidth: u16) -> ::nserror::nsresult {
((*self.vtable).GetFaviconDataForPage)(self, aPageURI, aCallback, aPreferredWidth)
}
/// ```text
/// /**
/// * Copies cached favicons from a page to another one.
/// *
/// * @param aFromPageURI
/// * URI of the originating page.
/// * @param aToPageURI
/// * URI of the destination page.
/// * @param aFaviconLoadType
/// * Set to FAVICON_LOAD_PRIVATE if the copy is started from a private
/// * browsing window. Set to FAVICON_LOAD_NON_PRIVATE otherwise.
/// * @param [optional] aCallback
/// * Once we're done copying the favicon, we invoke this callback.
/// * If a copy has been done, the callback will report one of the
/// * favicons uri as aFaviconURI, otherwise all the params will be null.
/// */
/// ```
///
/// `void copyFavicons (in nsIURI aFromPageURI, in nsIURI aToPageURI, in unsigned long aFaviconLoadType, [optional] in nsIFaviconDataCallback aCallback);`
#[inline]
pub unsafe fn CopyFavicons(&self, aFromPageURI: *const nsIURI, aToPageURI: *const nsIURI, aFaviconLoadType: u32, aCallback: *const nsIFaviconDataCallback) -> ::nserror::nsresult {
((*self.vtable).CopyFavicons)(self, aFromPageURI, aToPageURI, aFaviconLoadType, aCallback)
}
}
/// `interface nsIFaviconDataCallback : 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 nsIFaviconDataCallback {
vtable: &'static nsIFaviconDataCallbackVTable,
/// This field is a phantomdata to ensure that the VTable type and any
/// struct containing it is not safe to send across threads by default, as
/// XPCOM is generally not threadsafe.
///
/// If this type is marked as [rust_sync], there will be explicit `Send` and
/// `Sync` implementations on this type, which will override the inherited
/// negative impls from `Rc`.
__nosync: ::std::marker::PhantomData<::std::rc::Rc<u8>>,
// Make the rust compiler aware that there might be interior mutability
// in what actually implements the interface. This works around UB
// introduced by https://github.com/llvm/llvm-project/commit/01859da84bad95fd51d6a03b08b60c660e642a4f
// that a rust lint would make blatantly obvious, but doesn't exist.
// This prevents optimizations, but those optimizations weren't available
// before rustc switched to LLVM 16, and they now cause problems because
// of the UB.
// Until there's a lint available to find all our UB, it's simpler to
// avoid the UB in the first place, at the cost of preventing optimizations
// in places that don't cause UB. But again, those optimizations weren't
// available before.
__maybe_interior_mutability: ::std::cell::UnsafeCell<[u8; 0]>,
}
// 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 nsIFaviconDataCallback.
unsafe impl XpCom for nsIFaviconDataCallback {
const IID: nsIID = nsID(0xc85e5c82, 0xb70f, 0x4621,
[0x95, 0x28, 0xbe, 0xb2, 0xaa, 0x47, 0xfb, 0x44]);
}
// 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 nsIFaviconDataCallback {
#[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 nsIFaviconDataCallback.
// 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 nsIFaviconDataCallbackCoerce {
/// Cheaply cast a value of this type from a `nsIFaviconDataCallback`.
fn coerce_from(v: &nsIFaviconDataCallback) -> &Self;
}
// The trivial implementation: We can obviously coerce ourselves to ourselves.
impl nsIFaviconDataCallbackCoerce for nsIFaviconDataCallback {
#[inline]
fn coerce_from(v: &nsIFaviconDataCallback) -> &Self {
v
}
}
impl nsIFaviconDataCallback {
/// Cast this `nsIFaviconDataCallback` to one of its base interfaces.
#[inline]
pub fn coerce<T: nsIFaviconDataCallbackCoerce>(&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 nsIFaviconDataCallback {
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> nsIFaviconDataCallbackCoerce for T {
#[inline]
fn coerce_from(v: &nsIFaviconDataCallback) -> &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 nsIFaviconDataCallback
// 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 nsIFaviconDataCallbackVTable {
/// We need to include the members from the base interface's vtable at the start
/// of the VTable definition.
pub __base: nsISupportsVTable,
/* void onComplete (in nsIURI aFaviconURI, in unsigned long aDataLen, [array, size_is (aDataLen), const] in octet aData, in AUTF8String aMimeType, in unsigned short aWidth); */
pub OnComplete: unsafe extern "system" fn (this: *const nsIFaviconDataCallback, aFaviconURI: *const nsIURI, aDataLen: u32, aData: *const u8, aMimeType: *const ::nsstring::nsACString, aWidth: u16) -> ::nserror::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 nsIFaviconDataCallback {
/// ```text
/// /**
/// * Called when the required favicon's information is available.
/// *
/// * It's up to the invoking method to state if the callback is always invoked,
/// * or called on success only. Check the method documentation to ensure that.
/// *
/// * The caller will receive the most information we can gather on the icon,
/// * but it's not guaranteed that all of them will be set. For some method
/// * we could not know the favicon's data (it could just be too expensive to
/// * get it, or the method does not require we actually have any data).
/// * It's up to the caller to check aDataLen > 0 before using any data-related
/// * information like mime-type or data itself.
/// *
/// * @param aFaviconURI
/// * Receives the "favicon URI" (not the "favicon link URI") associated
/// * to the requested page. This can be null if there is no associated
/// * favicon URI, or the callback is notifying a failure.
/// * @param aDataLen
/// * Size of the icon data in bytes. Notice that a value of 0 does not
/// * necessarily mean that we don't have an icon.
/// * @param aData
/// * Icon data, or an empty array if aDataLen is 0.
/// * @param aMimeType
/// * Mime type of the icon, or an empty string if aDataLen is 0.
/// * @param aWidth
/// * Width of the icon. 0 if the width is unknown or if the icon is
/// * vectorial.
/// *
/// * @note If you want to open a network channel to access the favicon, it's
/// * recommended that you call the getFaviconLinkForIcon method to convert
/// * the "favicon URI" into a "favicon link URI".
/// */
/// ```
///
/// `void onComplete (in nsIURI aFaviconURI, in unsigned long aDataLen, [array, size_is (aDataLen), const] in octet aData, in AUTF8String aMimeType, in unsigned short aWidth);`
#[inline]
pub unsafe fn OnComplete(&self, aFaviconURI: *const nsIURI, aDataLen: u32, aData: *const u8, aMimeType: *const ::nsstring::nsACString, aWidth: u16) -> ::nserror::nsresult {
((*self.vtable).OnComplete)(self, aFaviconURI, aDataLen, aData, aMimeType, aWidth)
}
}