diff --git a/components/devtools/actors/source.rs b/components/devtools/actors/source.rs new file mode 100644 index 00000000000..9d29bc1d3ef --- /dev/null +++ b/components/devtools/actors/source.rs @@ -0,0 +1,50 @@ +/* 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 https://mozilla.org/MPL/2.0/. */ + +use std::cell::{Ref, RefCell}; +use std::collections::BTreeSet; + +use serde::Serialize; +use servo_url::ServoUrl; + +#[derive(Clone, Debug, Eq, Ord, PartialEq, PartialOrd, Serialize)] +#[serde(rename_all = "camelCase")] +pub(crate) struct SourceData { + pub actor: String, + /// URL of the script, or URL of the page for inline scripts. + pub url: String, + pub is_black_boxed: bool, +} + +#[derive(Serialize)] +pub(crate) struct SourcesReply { + pub from: String, + pub sources: Vec, +} + +pub(crate) struct Source { + actor_name: String, + source_urls: RefCell>, +} + +impl Source { + pub fn new(actor_name: String) -> Self { + Self { + actor_name, + source_urls: RefCell::new(BTreeSet::default()), + } + } + + pub fn add_source(&self, url: ServoUrl) { + self.source_urls.borrow_mut().insert(SourceData { + actor: self.actor_name.clone(), + url: url.to_string(), + is_black_boxed: false, + }); + } + + pub fn sources(&self) -> Ref> { + self.source_urls.borrow() + } +} diff --git a/components/devtools/actors/thread.rs b/components/devtools/actors/thread.rs index 85ff2b732eb..7ff11dff675 100644 --- a/components/devtools/actors/thread.rs +++ b/components/devtools/actors/thread.rs @@ -2,14 +2,12 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -use std::cell::{Ref, RefCell}; -use std::collections::BTreeSet; use std::net::TcpStream; use serde::Serialize; use serde_json::{Map, Value}; -use servo_url::ServoUrl; +use super::source::{Source, SourcesReply}; use crate::actor::{Actor, ActorMessageStatus, ActorRegistry}; use crate::protocol::JsonPacketStream; use crate::{EmptyReplyMsg, StreamId}; @@ -52,45 +50,18 @@ struct ThreadInterruptedReply { type_: String, } -#[derive(Serialize)] -struct SourcesReply { - from: String, - sources: Vec, -} - -#[derive(Eq, Ord, PartialEq, PartialOrd, Serialize)] -#[serde(rename_all = "camelCase")] -pub struct Source { - pub actor: String, - /// URL of the script, or URL of the page for inline scripts. - pub url: String, - pub is_black_boxed: bool, -} - pub struct ThreadActor { - name: String, - source_urls: RefCell>, + pub name: String, + pub source_manager: Source, } impl ThreadActor { pub fn new(name: String) -> ThreadActor { ThreadActor { - name, - source_urls: RefCell::new(BTreeSet::default()), + name: name.clone(), + source_manager: Source::new(name), } } - - pub fn add_source(&self, url: ServoUrl) { - self.source_urls.borrow_mut().insert(Source { - actor: self.name.clone(), - url: url.to_string(), - is_black_boxed: false, - }); - } - - pub fn sources(&self) -> Ref> { - self.source_urls.borrow() - } } impl Actor for ThreadActor { diff --git a/components/devtools/actors/watcher.rs b/components/devtools/actors/watcher.rs index d48374fc523..6a84499b6dd 100644 --- a/components/devtools/actors/watcher.rs +++ b/components/devtools/actors/watcher.rs @@ -265,7 +265,7 @@ impl Actor for WatcherActor { }, "source" => { let thread_actor = registry.find::(&target.thread); - let sources = thread_actor.sources(); + let sources = thread_actor.source_manager.sources(); target.resources_available(sources.iter().collect(), "source".into()); }, "console-message" | "error-message" => {}, diff --git a/components/devtools/lib.rs b/components/devtools/lib.rs index d4c3095b025..4d1e0222177 100644 --- a/components/devtools/lib.rs +++ b/components/devtools/lib.rs @@ -19,7 +19,7 @@ use std::net::{Shutdown, TcpListener, TcpStream}; use std::sync::{Arc, Mutex}; use std::thread; -use actors::thread::Source; +use actors::source::SourceData; use base::id::{BrowsingContextId, PipelineId, WebViewId}; use crossbeam_channel::{Receiver, Sender, unbounded}; use devtools_traits::{ @@ -66,6 +66,7 @@ mod actors { pub mod process; pub mod reflow; pub mod root; + pub mod source; pub mod stylesheets; pub mod tab; pub mod thread; @@ -525,9 +526,11 @@ impl DevtoolsInstance { .clone(); let thread_actor = actors.find_mut::(&thread_actor_name); - thread_actor.add_source(source_info.url.clone()); + thread_actor + .source_manager + .add_source(source_info.url.clone()); - let source = Source { + let source = SourceData { actor: thread_actor_name.clone(), url: source_info.url.to_string(), is_black_boxed: false,