diff --git a/components/devtools/actors/source.rs b/components/devtools/actors/source.rs index fb31af49156..8e519c14dfb 100644 --- a/components/devtools/actors/source.rs +++ b/components/devtools/actors/source.rs @@ -71,6 +71,12 @@ struct SourceContentReply { source: String, } +#[derive(Serialize)] +struct GetBreakableLinesReply { + from: String, + lines: Vec, +} + impl SourceManager { pub fn new() -> Self { Self { @@ -181,6 +187,23 @@ impl Actor for SourceActor { }; request.reply_final(&reply)? }, + // Client wants to know which lines can have breakpoints. + // Sent when opening a source in the Sources panel, and controls whether the line numbers can be clicked. + "getBreakableLines" => { + // Tell the client that every line is breakable. + // TODO: determine which lines are actually breakable. + let line_count = self + .content + .as_ref() + .map_or(0, |content| content.lines().count()); + let reply = GetBreakableLinesReply { + from: self.name(), + // Line numbers are one-based. + // + lines: (1..=line_count).collect(), + }; + request.reply_final(&reply)? + }, _ => return Err(ActorError::UnrecognizedPacketType), }; Ok(())