mirror of
https://github.com/servo/servo.git
synced 2025-06-06 16:45:39 +00:00
Fixed conflict Fixed merge issue Finished implementation Disable tinyfiledialogs on Windows addressed comments Use ancestor's SubpageId Move display alert from method to function Add extra test for nested iframes Addressed comments Updated tinyfiledialogs
166 lines
4.2 KiB
Rust
166 lines
4.2 KiB
Rust
/* 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/. */
|
|
|
|
#![feature(as_unsafe_cell)]
|
|
#![feature(borrow_state)]
|
|
#![feature(box_syntax)]
|
|
#![feature(const_fn)]
|
|
#![feature(core_intrinsics)]
|
|
#![feature(custom_attribute)]
|
|
#![feature(custom_derive)]
|
|
#![feature(fnbox)]
|
|
#![feature(iter_arith)]
|
|
#![feature(mpsc_select)]
|
|
#![feature(nonzero)]
|
|
#![feature(on_unimplemented)]
|
|
#![feature(peekable_is_empty)]
|
|
#![feature(plugin)]
|
|
#![feature(slice_patterns)]
|
|
|
|
#![deny(unsafe_code)]
|
|
#![allow(non_snake_case)]
|
|
|
|
#![doc = "The script crate contains all matters DOM."]
|
|
|
|
#![plugin(heapsize_plugin)]
|
|
#![plugin(phf_macros)]
|
|
#![plugin(plugins)]
|
|
|
|
extern crate angle;
|
|
extern crate app_units;
|
|
#[allow(unused_extern_crates)]
|
|
#[macro_use]
|
|
extern crate bitflags;
|
|
extern crate canvas;
|
|
extern crate canvas_traits;
|
|
extern crate caseless;
|
|
extern crate core;
|
|
extern crate cssparser;
|
|
extern crate devtools_traits;
|
|
extern crate encoding;
|
|
extern crate euclid;
|
|
extern crate fnv;
|
|
extern crate gfx_traits;
|
|
extern crate heapsize;
|
|
extern crate html5ever;
|
|
extern crate hyper;
|
|
extern crate image;
|
|
extern crate ipc_channel;
|
|
extern crate js;
|
|
extern crate libc;
|
|
#[macro_use]
|
|
extern crate log;
|
|
#[macro_use]
|
|
extern crate mime;
|
|
extern crate msg;
|
|
extern crate net_traits;
|
|
extern crate num_traits;
|
|
extern crate offscreen_gl_context;
|
|
extern crate phf;
|
|
#[macro_use]
|
|
extern crate profile_traits;
|
|
extern crate rand;
|
|
extern crate ref_filter_map;
|
|
extern crate ref_slice;
|
|
extern crate regex;
|
|
extern crate rustc_serialize;
|
|
extern crate script_traits;
|
|
extern crate selectors;
|
|
extern crate serde;
|
|
extern crate smallvec;
|
|
#[macro_use(atom, ns)] extern crate string_cache;
|
|
#[macro_use]
|
|
extern crate style;
|
|
extern crate time;
|
|
#[cfg(any(target_os = "macos", target_os = "linux"))]
|
|
extern crate tinyfiledialogs;
|
|
extern crate unicase;
|
|
extern crate url;
|
|
#[macro_use]
|
|
extern crate util;
|
|
extern crate uuid;
|
|
extern crate webrender_traits;
|
|
extern crate websocket;
|
|
extern crate xml5ever;
|
|
|
|
pub mod clipboard_provider;
|
|
pub mod cors;
|
|
mod devtools;
|
|
pub mod document_loader;
|
|
#[macro_use]
|
|
pub mod dom;
|
|
pub mod layout_interface;
|
|
mod mem;
|
|
mod network_listener;
|
|
pub mod origin;
|
|
pub mod page;
|
|
pub mod parse;
|
|
pub mod reporter;
|
|
pub mod script_runtime;
|
|
#[allow(unsafe_code)]
|
|
pub mod script_thread;
|
|
mod task_source;
|
|
pub mod textinput;
|
|
mod timers;
|
|
mod unpremultiplytable;
|
|
mod webdriver_handlers;
|
|
|
|
use dom::bindings::codegen::RegisterBindings;
|
|
use js::jsapi::SetDOMProxyInformation;
|
|
use std::ptr;
|
|
|
|
#[cfg(target_os = "linux")]
|
|
#[allow(unsafe_code)]
|
|
fn perform_platform_specific_initialization() {
|
|
use std::mem;
|
|
// 4096 is default max on many linux systems
|
|
const MAX_FILE_LIMIT: libc::rlim_t = 4096;
|
|
|
|
// Bump up our number of file descriptors to save us from impending doom caused by an onslaught
|
|
// of iframes.
|
|
unsafe {
|
|
let mut rlim: libc::rlimit = mem::uninitialized();
|
|
match libc::getrlimit(libc::RLIMIT_NOFILE, &mut rlim) {
|
|
0 => {
|
|
if rlim.rlim_cur >= MAX_FILE_LIMIT {
|
|
// we have more than enough
|
|
return;
|
|
}
|
|
|
|
rlim.rlim_cur = match rlim.rlim_max {
|
|
libc::RLIM_INFINITY => MAX_FILE_LIMIT,
|
|
_ => {
|
|
if rlim.rlim_max < MAX_FILE_LIMIT {
|
|
rlim.rlim_max
|
|
} else {
|
|
MAX_FILE_LIMIT
|
|
}
|
|
}
|
|
};
|
|
match libc::setrlimit(libc::RLIMIT_NOFILE, &rlim) {
|
|
0 => (),
|
|
_ => warn!("Failed to set file count limit"),
|
|
};
|
|
},
|
|
_ => warn!("Failed to get file count limit"),
|
|
};
|
|
}
|
|
}
|
|
|
|
#[cfg(not(target_os = "linux"))]
|
|
fn perform_platform_specific_initialization() {}
|
|
|
|
#[allow(unsafe_code)]
|
|
pub fn init() {
|
|
unsafe {
|
|
assert_eq!(js::jsapi::JS_Init(), true);
|
|
SetDOMProxyInformation(ptr::null(), 0, Some(script_thread::shadow_check_callback));
|
|
}
|
|
|
|
// Create the global vtables used by the (generated) DOM
|
|
// bindings to implement JS proxies.
|
|
RegisterBindings::RegisterProxyHandlers();
|
|
|
|
perform_platform_specific_initialization();
|
|
}
|