From 2bc0862f47a937eaf96aec929e884bddd23c6447 Mon Sep 17 00:00:00 2001 From: Anthony Ramine Date: Tue, 6 Sep 2016 15:47:53 +0200 Subject: [PATCH] Make console a namespace (fixes #13010) --- components/script/dom/console.rs | 65 ++++++------------- components/script/dom/webidls/Console.webidl | 6 +- components/script/dom/webidls/Window.webidl | 1 - .../dom/webidls/WorkerGlobalScope.webidl | 7 -- components/script/dom/window.rs | 9 +-- components/script/dom/workerglobalscope.rs | 9 +-- .../wpt/mozilla/tests/mozilla/interfaces.html | 2 +- tests/wpt/mozilla/tests/mozilla/interfaces.js | 2 +- .../tests/mozilla/interfaces.worker.js | 2 +- 9 files changed, 30 insertions(+), 73 deletions(-) diff --git a/components/script/dom/console.rs b/components/script/dom/console.rs index 252cf2435b8b..37d549befd91 100644 --- a/components/script/dom/console.rs +++ b/components/script/dom/console.rs @@ -4,38 +4,17 @@ use devtools_traits::{ConsoleMessage, LogLevel, ScriptToDevtoolsControlMsg}; use dom::bindings::cell::DOMRefCell; -use dom::bindings::codegen::Bindings::ConsoleBinding; -use dom::bindings::codegen::Bindings::ConsoleBinding::ConsoleMethods; use dom::bindings::global::GlobalRef; -use dom::bindings::js::Root; -use dom::bindings::reflector::{Reflectable, Reflector, reflect_dom_object}; use dom::bindings::str::DOMString; use std::collections::HashMap; use std::collections::hash_map::Entry; use time::{Timespec, get_time}; // https://developer.mozilla.org/en-US/docs/Web/API/Console -#[dom_struct] -pub struct Console { - reflector_: Reflector, -} +pub struct Console(()); impl Console { - fn new_inherited() -> Console { - Console { - reflector_: Reflector::new(), - } - } - - pub fn new(global: GlobalRef) -> Root { - reflect_dom_object(box Console::new_inherited(), - global, - ConsoleBinding::Wrap) - } - - fn send_to_devtools(&self, level: LogLevel, message: DOMString) { - let global = self.global(); - let global = global.r(); + fn send_to_devtools(global: GlobalRef, level: LogLevel, message: DOMString) { if let Some(chan) = global.devtools_chan() { let console_message = prepare_message(level, message); let devtools_message = ScriptToDevtoolsControlMsg::ConsoleAPI( @@ -47,75 +26,73 @@ impl Console { } } -impl ConsoleMethods for Console { +impl Console { // https://developer.mozilla.org/en-US/docs/Web/API/Console/log - fn Log(&self, messages: Vec) { + pub fn Log(global: GlobalRef, messages: Vec) { for message in messages { println!("{}", message); - self.send_to_devtools(LogLevel::Log, message); + Self::send_to_devtools(global, LogLevel::Log, message); } } // https://developer.mozilla.org/en-US/docs/Web/API/Console - fn Debug(&self, messages: Vec) { + pub fn Debug(global: GlobalRef, messages: Vec) { for message in messages { println!("{}", message); - self.send_to_devtools(LogLevel::Debug, message); + Self::send_to_devtools(global, LogLevel::Debug, message); } } // https://developer.mozilla.org/en-US/docs/Web/API/Console/info - fn Info(&self, messages: Vec) { + pub fn Info(global: GlobalRef, messages: Vec) { for message in messages { println!("{}", message); - self.send_to_devtools(LogLevel::Info, message); + Self::send_to_devtools(global, LogLevel::Info, message); } } // https://developer.mozilla.org/en-US/docs/Web/API/Console/warn - fn Warn(&self, messages: Vec) { + pub fn Warn(global: GlobalRef, messages: Vec) { for message in messages { println!("{}", message); - self.send_to_devtools(LogLevel::Warn, message); + Self::send_to_devtools(global, LogLevel::Warn, message); } } // https://developer.mozilla.org/en-US/docs/Web/API/Console/error - fn Error(&self, messages: Vec) { + pub fn Error(global: GlobalRef, messages: Vec) { for message in messages { println!("{}", message); - self.send_to_devtools(LogLevel::Error, message); + Self::send_to_devtools(global, LogLevel::Error, message); } } // https://developer.mozilla.org/en-US/docs/Web/API/Console/assert - fn Assert(&self, condition: bool, message: Option) { + pub fn Assert(global: GlobalRef, condition: bool, message: Option) { if !condition { let message = message.unwrap_or_else(|| DOMString::from("no message")); println!("Assertion failed: {}", message); - self.send_to_devtools(LogLevel::Error, message); + Self::send_to_devtools(global, LogLevel::Error, message); } } // https://developer.mozilla.org/en-US/docs/Web/API/Console/time - fn Time(&self, label: DOMString) { - let global = self.global(); - if let Ok(()) = global.r().console_timers().time(label.clone()) { + pub fn Time(global: GlobalRef, label: DOMString) { + if let Ok(()) = global.console_timers().time(label.clone()) { let message = DOMString::from(format!("{}: timer started", label)); println!("{}", message); - self.send_to_devtools(LogLevel::Log, message); + Self::send_to_devtools(global, LogLevel::Log, message); } } // https://developer.mozilla.org/en-US/docs/Web/API/Console/timeEnd - fn TimeEnd(&self, label: DOMString) { - let global = self.global(); - if let Ok(delta) = global.r().console_timers().time_end(&label) { + pub fn TimeEnd(global: GlobalRef, label: DOMString) { + if let Ok(delta) = global.console_timers().time_end(&label) { let message = DOMString::from( format!("{}: {}ms", label, delta) ); println!("{}", message); - self.send_to_devtools(LogLevel::Log, message); + Self::send_to_devtools(global, LogLevel::Log, message); }; } } diff --git a/components/script/dom/webidls/Console.webidl b/components/script/dom/webidls/Console.webidl index 09273db78b89..90f9bb9f58ee 100644 --- a/components/script/dom/webidls/Console.webidl +++ b/components/script/dom/webidls/Console.webidl @@ -9,8 +9,10 @@ * © Copyright 2014 Mozilla Foundation. */ -[Exposed=(Window,Worker)] -interface Console { +[ClassString="Console", + Exposed=(Window,Worker), + ProtoObjectHack] +namespace console { // These should be DOMString message, DOMString message2, ... void log(DOMString... messages); void debug(DOMString... messages); diff --git a/components/script/dom/webidls/Window.webidl b/components/script/dom/webidls/Window.webidl index dcf79a61c7ec..dbe73ca48314 100644 --- a/components/script/dom/webidls/Window.webidl +++ b/components/script/dom/webidls/Window.webidl @@ -161,7 +161,6 @@ partial interface Window { // Proprietary extensions. partial interface Window { - readonly attribute Console console; void debug(DOMString arg); void gc(); void trap(); diff --git a/components/script/dom/webidls/WorkerGlobalScope.webidl b/components/script/dom/webidls/WorkerGlobalScope.webidl index ec65bcb09a65..d7c403e51760 100644 --- a/components/script/dom/webidls/WorkerGlobalScope.webidl +++ b/components/script/dom/webidls/WorkerGlobalScope.webidl @@ -24,10 +24,3 @@ partial interface WorkerGlobalScope { // not obsolete }; WorkerGlobalScope implements WindowTimers; WorkerGlobalScope implements WindowBase64; - -// Proprietary -[Exposed=Worker] -partial interface WorkerGlobalScope { - [Replaceable] - readonly attribute Console console; -}; diff --git a/components/script/dom/window.rs b/components/script/dom/window.rs index 5d57cd679af9..fa2bd072910a 100644 --- a/components/script/dom/window.rs +++ b/components/script/dom/window.rs @@ -25,7 +25,7 @@ use dom::bindings::str::DOMString; use dom::bindings::structuredclone::StructuredCloneData; use dom::bindings::utils::{GlobalStaticData, WindowProxyHandler}; use dom::browsingcontext::BrowsingContext; -use dom::console::{Console, TimerSet}; +use dom::console::TimerSet; use dom::crypto::Crypto; use dom::cssstyledeclaration::{CSSModificationAccess, CSSStyleDeclaration}; use dom::document::Document; @@ -157,7 +157,6 @@ pub struct Window { history_traversal_task_source: HistoryTraversalTaskSource, #[ignore_heap_size_of = "task sources are hard"] file_reading_task_source: FileReadingTaskSource, - console: MutNullableHeap>, crypto: MutNullableHeap>, navigator: MutNullableHeap>, #[ignore_heap_size_of = "channels are hard"] @@ -511,11 +510,6 @@ impl WindowMethods for Window { self.local_storage.or_init(|| Storage::new(&GlobalRef::Window(self), StorageType::Local)) } - // https://developer.mozilla.org/en-US/docs/Web/API/Console - fn Console(&self) -> Root { - self.console.or_init(|| Console::new(GlobalRef::Window(self))) - } - // https://dvcs.w3.org/hg/webcrypto-api/raw-file/tip/spec/Overview.html#dfn-GlobalCrypto fn Crypto(&self) -> Root { self.crypto.or_init(|| Crypto::new(GlobalRef::Window(self))) @@ -1704,7 +1698,6 @@ impl Window { history_traversal_task_source: history_task_source, file_reading_task_source: file_task_source, image_cache_chan: image_cache_chan, - console: Default::default(), crypto: Default::default(), navigator: Default::default(), image_cache_thread: image_cache_thread, diff --git a/components/script/dom/workerglobalscope.rs b/components/script/dom/workerglobalscope.rs index 78fea9b50c8f..2bd8a0b083b2 100644 --- a/components/script/dom/workerglobalscope.rs +++ b/components/script/dom/workerglobalscope.rs @@ -11,7 +11,7 @@ use dom::bindings::inheritance::Castable; use dom::bindings::js::{JS, MutNullableHeap, Root}; use dom::bindings::reflector::Reflectable; use dom::bindings::str::DOMString; -use dom::console::{Console, TimerSet}; +use dom::console::TimerSet; use dom::crypto::Crypto; use dom::dedicatedworkerglobalscope::DedicatedWorkerGlobalScope; use dom::eventtarget::EventTarget; @@ -79,7 +79,6 @@ pub struct WorkerGlobalScope { resource_threads: ResourceThreads, location: MutNullableHeap>, navigator: MutNullableHeap>, - console: MutNullableHeap>, crypto: MutNullableHeap>, timers: OneshotTimers, @@ -132,7 +131,6 @@ impl WorkerGlobalScope { resource_threads: init.resource_threads, location: Default::default(), navigator: Default::default(), - console: Default::default(), crypto: Default::default(), timers: OneshotTimers::new(timer_event_chan, init.scheduler_chan.clone()), mem_profiler_chan: init.mem_profiler_chan, @@ -303,11 +301,6 @@ impl WorkerGlobalScopeMethods for WorkerGlobalScope { self.navigator.or_init(|| WorkerNavigator::new(self)) } - // https://developer.mozilla.org/en-US/docs/Web/API/WorkerGlobalScope/console - fn Console(&self) -> Root { - self.console.or_init(|| Console::new(GlobalRef::Worker(self))) - } - // https://html.spec.whatwg.org/multipage/#dfn-Crypto fn Crypto(&self) -> Root { self.crypto.or_init(|| Crypto::new(GlobalRef::Worker(self))) diff --git a/tests/wpt/mozilla/tests/mozilla/interfaces.html b/tests/wpt/mozilla/tests/mozilla/interfaces.html index 89f844292898..de27752caaff 100644 --- a/tests/wpt/mozilla/tests/mozilla/interfaces.html +++ b/tests/wpt/mozilla/tests/mozilla/interfaces.html @@ -27,7 +27,6 @@ "DOMRect", "DOMRectReadOnly", "Comment", - "Console", "CustomEvent", "Document", "DocumentFragment", @@ -183,5 +182,6 @@ "XMLHttpRequest", "XMLHttpRequestEventTarget", "XMLHttpRequestUpload", + "console", ]); diff --git a/tests/wpt/mozilla/tests/mozilla/interfaces.js b/tests/wpt/mozilla/tests/mozilla/interfaces.js index 4e1ecf8b9183..7501325dd94d 100644 --- a/tests/wpt/mozilla/tests/mozilla/interfaces.js +++ b/tests/wpt/mozilla/tests/mozilla/interfaces.js @@ -65,7 +65,7 @@ function test_interfaces(interfaceNamesInGlobalScope) { } for (var name of Object.getOwnPropertyNames(self)) { - if (!/^[A-Z]/.test(name)) { + if (!/^[A-Z]/.test(name) && name != 'console') { continue; } assert_true(name in interfaceMap, diff --git a/tests/wpt/mozilla/tests/mozilla/interfaces.worker.js b/tests/wpt/mozilla/tests/mozilla/interfaces.worker.js index cd70470a1204..c8ee191bc7b0 100644 --- a/tests/wpt/mozilla/tests/mozilla/interfaces.worker.js +++ b/tests/wpt/mozilla/tests/mozilla/interfaces.worker.js @@ -23,7 +23,6 @@ test_interfaces([ "DOMRect", "DOMRectReadOnly", "Comment", - "Console", "CustomEvent", "DedicatedWorkerGlobalScope", "Document", @@ -128,6 +127,7 @@ test_interfaces([ "XMLHttpRequest", "XMLHttpRequestEventTarget", "XMLHttpRequestUpload", + "console", ]); done();