Source code

Revision control

Copy as Markdown

Other Tools

/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
//! This module contains definitions of interfaces which are used in idl files
//! as forward declarations, but are not actually defined in an idl file.
//!
//! NOTE: The IIDs in these files must be kept in sync with the IDL definitions
//! in the corresponding C++ files.
use crate::nsID;
// XXX: This macro should have an option for a custom base interface instead of
// nsISupports, such that Document can have nsINode as a base, etc. For now,
// query_interface should be sufficient.
macro_rules! nonidl {
($name:ident, $iid:expr) => {
/// This interface is referenced from idl files, but not defined in
/// them. It exports no methods to rust code.
#[repr(C)]
pub struct $name {
_vtable: *const $crate::interfaces::nsISupportsVTable,
}
unsafe impl $crate::XpCom for $name {
const IID: $crate::nsIID = $iid;
}
unsafe impl $crate::RefCounted for $name {
#[inline]
unsafe fn addref(&self) {
self.AddRef();
}
#[inline]
unsafe fn release(&self) {
self.Release();
}
}
impl ::std::ops::Deref for $name {
type Target = $crate::interfaces::nsISupports;
#[inline]
fn deref(&self) -> &$crate::interfaces::nsISupports {
unsafe { ::std::mem::transmute(self) }
}
}
};
}
// Must be kept in sync with Document.h
nonidl!(
Document,
nsID(
0xce1f7627,
0x7109,
0x4977,
[0xba, 0x77, 0x49, 0x0f, 0xfd, 0xe0, 0x7a, 0xaa]
)
);
// Must be kept in sync with nsINode.h
nonidl!(
nsINode,
nsID(
0x70ba4547,
0x7699,
0x44fc,
[0xb3, 0x20, 0x52, 0xdb, 0xe3, 0xd1, 0xf9, 0x0a]
)
);
// Must be kept in sync with nsIContent.h
nonidl!(
nsIContent,
nsID(
0x8e1bab9d,
0x8815,
0x4d2c,
[0xa2, 0x4d, 0x7a, 0xba, 0x52, 0x39, 0xdc, 0x22]
)
);
// Must be kept in sync with nsIConsoleReportCollector.h
nonidl!(
nsIConsoleReportCollector,
nsID(
0xdd98a481,
0xd2c4,
0x4203,
[0x8d, 0xfa, 0x85, 0xbf, 0xd7, 0xdc, 0xd7, 0x05]
)
);
// Must be kept in sync with nsIGlobalObject.h
nonidl!(
nsIGlobalObject,
nsID(
0x11afa8be,
0xd997,
0x4e07,
[0xa6, 0xa3, 0x6f, 0x87, 0x2e, 0xc3, 0xee, 0x7f]
)
);
// Must be kept in sync with nsIScriptElement.h
nonidl!(
nsIScriptElement,
nsID(
0xe60fca9b,
0x1b96,
0x4e4e,
[0xa9, 0xb4, 0xdc, 0x98, 0x4f, 0x88, 0x3f, 0x9c]
)
);
// Must be kept in sync with nsPIDOMWindow.h
nonidl!(
nsPIDOMWindowOuter,
nsID(
0x769693d4,
0xb009,
0x4fe2,
[0xaf, 0x18, 0x7d, 0xc8, 0xdf, 0x74, 0x96, 0xdf]
)
);
// Must be kept in sync with nsPIDOMWindow.h
nonidl!(
nsPIDOMWindowInner,
nsID(
0x775dabc9,
0x8f43,
0x4277,
[0x9a, 0xdb, 0xf1, 0x99, 0x0d, 0x77, 0xcf, 0xfb]
)
);
// Must be kept in sync with nsIScriptContext.h
nonidl!(
nsIScriptContext,
nsID(
0x54cbe9cf,
0x7282,
0x421a,
[0x91, 0x6f, 0xd0, 0x70, 0x73, 0xde, 0xb8, 0xc0]
)
);
// Must be kept in sync with nsIScriptGlobalObject.h
nonidl!(
nsIScriptGlobalObject,
nsID(
0x876f83bd,
0x6314,
0x460a,
[0xa0, 0x45, 0x1c, 0x8f, 0x46, 0x2f, 0xb8, 0xe1]
)
);
// Must be kept in sync with nsIScrollObserver.h
nonidl!(
nsIScrollObserver,
nsID(
0xaa5026eb,
0x2f88,
0x4026,
[0xa4, 0x6b, 0xf4, 0x59, 0x6b, 0x4e, 0xdf, 0x00]
)
);
// Must be kept in sync with nsIWidget.h
nonidl!(
nsIWidget,
nsID(
0x06396bf6,
0x2dd8,
0x45e5,
[0xac, 0x45, 0x75, 0x26, 0x53, 0xb1, 0xc9, 0x80]
)
);