diff options
author | bors-servo <lbergstrom+bors@mozilla.com> | 2016-05-27 12:03:56 -0500 |
---|---|---|
committer | bors-servo <lbergstrom+bors@mozilla.com> | 2016-05-27 12:03:56 -0500 |
commit | 3052e4f478e660a60c01dcd2368607429d423e10 (patch) | |
tree | 3bd5ddd063db74f8766391bbc5d7b928f388fc87 /components/script | |
parent | c9534dffc8ff8f6388387f5d8b2ea9e0090b7441 (diff) | |
parent | 056bdc5514473af665067e3a228b77965973bbbc (diff) | |
download | servo-3052e4f478e660a60c01dcd2368607429d423e10.tar.gz servo-3052e4f478e660a60c01dcd2368607429d423e10.zip |
Auto merge of #11465 - nox:open, r=jdm
Implement window.openURLInDefaultBrowser() (fixes #11292)
<!-- Reviewable:start -->
This change is [<img src="https://reviewable.io/review_button.svg" height="35" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/11465)
<!-- Reviewable:end -->
Diffstat (limited to 'components/script')
-rw-r--r-- | components/script/Cargo.toml | 1 | ||||
-rw-r--r-- | components/script/dom/bindings/codegen/CodegenRust.py | 2 | ||||
-rw-r--r-- | components/script/dom/webidls/BrowserElement.webidl | 16 | ||||
-rw-r--r-- | components/script/dom/webidls/Window.webidl | 2 | ||||
-rw-r--r-- | components/script/dom/window.rs | 14 | ||||
-rw-r--r-- | components/script/lib.rs | 1 |
6 files changed, 22 insertions, 14 deletions
diff --git a/components/script/Cargo.toml b/components/script/Cargo.toml index ee0291429cc..c44f2448a48 100644 --- a/components/script/Cargo.toml +++ b/components/script/Cargo.toml @@ -43,6 +43,7 @@ msg = {path = "../msg"} net_traits = {path = "../net_traits"} num-traits = "0.1.32" offscreen_gl_context = "0.1.2" +open = "1.1.1" phf = "0.7.13" phf_macros = "0.7.13" plugins = {path = "../plugins"} diff --git a/components/script/dom/bindings/codegen/CodegenRust.py b/components/script/dom/bindings/codegen/CodegenRust.py index 73d9f7f3ed0..0caeddb3dfa 100644 --- a/components/script/dom/bindings/codegen/CodegenRust.py +++ b/components/script/dom/bindings/codegen/CodegenRust.py @@ -2390,6 +2390,7 @@ Root::from_ref(&*raw)""" % {'copyUnforgeable': unforgeable, 'createObject': crea create = CreateBindingJSObject(self.descriptor) return CGGeneric("""\ %(createObject)s +(*raw).init_reflector(obj.ptr); let _ac = JSAutoCompartment::new(cx, obj.ptr); let mut proto = RootedObject::new(cx, ptr::null_mut()); @@ -2397,7 +2398,6 @@ GetProtoObject(cx, obj.handle(), proto.handle_mut()); JS_SetPrototype(cx, obj.handle(), proto.handle()); %(copyUnforgeable)s -(*raw).init_reflector(obj.ptr); Root::from_ref(&*raw)\ """ % {'copyUnforgeable': unforgeable, 'createObject': create}) diff --git a/components/script/dom/webidls/BrowserElement.webidl b/components/script/dom/webidls/BrowserElement.webidl index 8ee6296bfe3..9bb34b90a95 100644 --- a/components/script/dom/webidls/BrowserElement.webidl +++ b/components/script/dom/webidls/BrowserElement.webidl @@ -146,24 +146,16 @@ interface BrowserElementPrivileged { // unsigned long count, // unsigned long modifiers); - [Throws, - Pref="dom.mozbrowser.enabled", - CheckAnyPermissions="browser"] + [Throws] void goBack(); - [Throws, - Pref="dom.mozbrowser.enabled", - CheckAnyPermissions="browser"] + [Throws] void goForward(); - [Throws, - Pref="dom.mozbrowser.enabled", - CheckAnyPermissions="browser"] + [Throws] void reload(optional boolean hardReload = false); - [Throws, - Pref="dom.mozbrowser.enabled", - CheckAnyPermissions="browser"] + [Throws] void stop(); //[Throws, diff --git a/components/script/dom/webidls/Window.webidl b/components/script/dom/webidls/Window.webidl index c75def477da..b263d53bb7b 100644 --- a/components/script/dom/webidls/Window.webidl +++ b/components/script/dom/webidls/Window.webidl @@ -159,6 +159,8 @@ partial interface Window { void debug(DOMString arg); void gc(); void trap(); + [Func="Window::global_is_mozbrowser", Throws] + void openURLInDefaultBrowser(DOMString href); }; // WebDriver extensions diff --git a/components/script/dom/window.rs b/components/script/dom/window.rs index a7d2dc608df..2ec36e2793c 100644 --- a/components/script/dom/window.rs +++ b/components/script/dom/window.rs @@ -13,7 +13,7 @@ use dom::bindings::codegen::Bindings::EventHandlerBinding::OnErrorEventHandlerNo use dom::bindings::codegen::Bindings::FunctionBinding::Function; use dom::bindings::codegen::Bindings::WindowBinding::{ScrollBehavior, ScrollToOptions}; use dom::bindings::codegen::Bindings::WindowBinding::{self, FrameRequestCallback, WindowMethods}; -use dom::bindings::error::{Error, Fallible, report_pending_exception}; +use dom::bindings::error::{Error, ErrorResult, Fallible, report_pending_exception}; use dom::bindings::global::{GlobalRef, global_root_from_object}; use dom::bindings::inheritance::Castable; use dom::bindings::js::{JS, MutNullableHeap, Root}; @@ -52,6 +52,7 @@ use net_traits::image_cache_thread::{ImageCacheChan, ImageCacheThread}; use net_traits::storage_thread::StorageType; use net_traits::{ResourceThreads, CustomResponseSender}; use num_traits::ToPrimitive; +use open; use profile_traits::mem; use profile_traits::time::{ProfilerCategory, TimerMetadata, TimerMetadataFrameType}; use profile_traits::time::{ProfilerChan, TimerMetadataReflowType, profile}; @@ -839,6 +840,17 @@ impl WindowMethods for Window { fn SetStatus(&self, status: DOMString) { *self.status.borrow_mut() = status } + + // check-tidy: no specs after this line + fn OpenURLInDefaultBrowser(&self, href: DOMString) -> ErrorResult { + let url = try!(Url::parse(&href).map_err(|e| { + Error::Type(format!("Couldn't parse URL: {}", e)) + })); + match open::that(url.as_str()) { + Ok(_) => Ok(()), + Err(e) => Err(Error::Type(format!("Couldn't open URL: {}", e))), + } + } } pub trait ScriptHelpers { diff --git a/components/script/lib.rs b/components/script/lib.rs index e647003e860..af6d3b2a9c0 100644 --- a/components/script/lib.rs +++ b/components/script/lib.rs @@ -59,6 +59,7 @@ extern crate msg; extern crate net_traits; extern crate num_traits; extern crate offscreen_gl_context; +extern crate open; extern crate phf; #[macro_use] extern crate profile_traits; |