mirror of
https://github.com/servo/servo.git
synced 2025-06-25 09:34:32 +01:00
UWP: Add console input
This commit is contained in:
parent
9de955f2cc
commit
c722b5fdca
5 changed files with 89 additions and 29 deletions
|
@ -335,6 +335,15 @@ void BrowserPage::OnDevtoolsButtonClicked(IInspectable const &,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void BrowserPage::OnJSInputEdited(IInspectable const &,
|
||||||
|
Input::KeyRoutedEventArgs const &e) {
|
||||||
|
if (e.Key() == Windows::System::VirtualKey::Enter) {
|
||||||
|
auto input = JSInput().Text();
|
||||||
|
JSInput().Text(L"");
|
||||||
|
mDevtoolsClient->Evaluate(input);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void BrowserPage::OnURLEdited(IInspectable const &,
|
void BrowserPage::OnURLEdited(IInspectable const &,
|
||||||
Input::KeyRoutedEventArgs const &e) {
|
Input::KeyRoutedEventArgs const &e) {
|
||||||
if (e.Key() == Windows::System::VirtualKey::Enter) {
|
if (e.Key() == Windows::System::VirtualKey::Enter) {
|
||||||
|
|
|
@ -30,6 +30,7 @@ public:
|
||||||
void OnStopButtonClicked(IInspectable const &, RoutedEventArgs const &);
|
void OnStopButtonClicked(IInspectable const &, RoutedEventArgs const &);
|
||||||
void OnHomeButtonClicked(IInspectable const &, RoutedEventArgs const &);
|
void OnHomeButtonClicked(IInspectable const &, RoutedEventArgs const &);
|
||||||
void OnDevtoolsButtonClicked(IInspectable const &, RoutedEventArgs const &);
|
void OnDevtoolsButtonClicked(IInspectable const &, RoutedEventArgs const &);
|
||||||
|
void OnJSInputEdited(IInspectable const &, Input::KeyRoutedEventArgs const &);
|
||||||
void OnURLEdited(IInspectable const &, Input::KeyRoutedEventArgs const &);
|
void OnURLEdited(IInspectable const &, Input::KeyRoutedEventArgs const &);
|
||||||
void OnURLFocused(IInspectable const &);
|
void OnURLFocused(IInspectable const &);
|
||||||
void
|
void
|
||||||
|
|
|
@ -150,6 +150,11 @@
|
||||||
</Grid>
|
</Grid>
|
||||||
</muxc:TabView.TabStripFooter>
|
</muxc:TabView.TabStripFooter>
|
||||||
<muxc:TabViewItem x:Uid="devtoolsTabConsole" IsClosable="False">
|
<muxc:TabViewItem x:Uid="devtoolsTabConsole" IsClosable="False">
|
||||||
|
<Grid>
|
||||||
|
<Grid.RowDefinitions>
|
||||||
|
<RowDefinition Height="*"/>
|
||||||
|
<RowDefinition Height="Auto"/>
|
||||||
|
</Grid.RowDefinitions>
|
||||||
<ListView ItemsSource="{x:Bind ConsoleLogs}">
|
<ListView ItemsSource="{x:Bind ConsoleLogs}">
|
||||||
<ListView.ItemsPanel>
|
<ListView.ItemsPanel>
|
||||||
<ItemsPanelTemplate>
|
<ItemsPanelTemplate>
|
||||||
|
@ -165,8 +170,8 @@
|
||||||
<ColumnDefinition Width="Auto"/>
|
<ColumnDefinition Width="Auto"/>
|
||||||
</Grid.ColumnDefinitions>
|
</Grid.ColumnDefinitions>
|
||||||
<Ellipse Width="8" Height="8" Fill="{x:Bind FgColor}" Grid.Column="0" Margin="10,0"/>
|
<Ellipse Width="8" Height="8" Fill="{x:Bind FgColor}" Grid.Column="0" Margin="10,0"/>
|
||||||
<TextBlock FontSize="12" Text="{x:Bind Body}" Grid.Column="1"/>
|
<TextBlock FontFamily="Consolas" FontSize="12" Text="{x:Bind Body}" Grid.Column="1"/>
|
||||||
<TextBlock FontSize="12" Text="{x:Bind Source}" Foreground="Gray" Grid.Column="2" Margin="10,0"/>
|
<TextBlock FontFamily="Consolas" FontSize="12" Text="{x:Bind Source}" Foreground="Gray" Grid.Column="2" Margin="10,0"/>
|
||||||
</Grid>
|
</Grid>
|
||||||
</DataTemplate>
|
</DataTemplate>
|
||||||
</ListView.ItemTemplate>
|
</ListView.ItemTemplate>
|
||||||
|
@ -178,6 +183,8 @@
|
||||||
</Style>
|
</Style>
|
||||||
</ListView.ItemContainerStyle>
|
</ListView.ItemContainerStyle>
|
||||||
</ListView>
|
</ListView>
|
||||||
|
<TextBox MinHeight="12" FontFamily="Consolas" FontSize="12" Grid.Row="1" IsTabStop="true" x:Name="JSInput" VerticalAlignment="Center" KeyUp="OnJSInputEdited" IsSpellCheckEnabled="False"/>
|
||||||
|
</Grid>
|
||||||
</muxc:TabViewItem>
|
</muxc:TabViewItem>
|
||||||
<muxc:TabViewItem x:Uid="devtoolsTabServer" IsClosable="False">
|
<muxc:TabViewItem x:Uid="devtoolsTabServer" IsClosable="False">
|
||||||
<TextBlock x:Name="DevtoolsStatusMessage" Margin="10"></TextBlock>
|
<TextBlock x:Name="DevtoolsStatusMessage" Margin="10"></TextBlock>
|
||||||
|
|
|
@ -42,6 +42,16 @@ void DevtoolsClient::Run() {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void DevtoolsClient::Evaluate(hstring code) {
|
||||||
|
if (!code.empty() && mConsoleActor.has_value()) {
|
||||||
|
JsonObject out;
|
||||||
|
out.Insert(L"to", *mConsoleActor);
|
||||||
|
out.Insert(L"type", JsonValue::CreateStringValue(L"evaluateJSAsync"));
|
||||||
|
out.Insert(L"text", JsonValue::CreateStringValue(code));
|
||||||
|
Send(out);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
IAsyncAction DevtoolsClient::Loop() {
|
IAsyncAction DevtoolsClient::Loop() {
|
||||||
auto cancellation = co_await winrt::get_cancellation_token();
|
auto cancellation = co_await winrt::get_cancellation_token();
|
||||||
cancellation.callback([=] {
|
cancellation.callback([=] {
|
||||||
|
@ -101,11 +111,12 @@ void DevtoolsClient::HandleMessage(JsonObject obj) {
|
||||||
if (tab.HasKey(L"actor")) {
|
if (tab.HasKey(L"actor")) {
|
||||||
// Attach to tab, and ask for cached messaged
|
// Attach to tab, and ask for cached messaged
|
||||||
JsonObject msg1;
|
JsonObject msg1;
|
||||||
|
mConsoleActor = tab.GetNamedValue(L"consoleActor");
|
||||||
msg1.Insert(L"to", tab.GetNamedValue(L"actor"));
|
msg1.Insert(L"to", tab.GetNamedValue(L"actor"));
|
||||||
msg1.Insert(L"type", JsonValue::CreateStringValue(L"attach"));
|
msg1.Insert(L"type", JsonValue::CreateStringValue(L"attach"));
|
||||||
Send(msg1);
|
Send(msg1);
|
||||||
JsonObject msg2;
|
JsonObject msg2;
|
||||||
msg2.Insert(L"to", tab.GetNamedValue(L"consoleActor"));
|
msg2.Insert(L"to", *mConsoleActor);
|
||||||
msg2.Insert(L"type",
|
msg2.Insert(L"type",
|
||||||
JsonValue::CreateStringValue(L"getCachedMessages"));
|
JsonValue::CreateStringValue(L"getCachedMessages"));
|
||||||
JsonArray types;
|
JsonArray types;
|
||||||
|
@ -116,6 +127,12 @@ void DevtoolsClient::HandleMessage(JsonObject obj) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} else if (obj.HasKey(L"resultID")) {
|
||||||
|
// evaluateJSAsync response.
|
||||||
|
if (obj.GetNamedString(L"type", L"") == L"evaluationResult") {
|
||||||
|
HandleEvaluationResult(obj);
|
||||||
|
}
|
||||||
|
return;
|
||||||
} else if (obj.HasKey(L"type")) { // Not from root
|
} else if (obj.HasKey(L"type")) { // Not from root
|
||||||
if (obj.GetNamedString(L"type") == L"pageError") {
|
if (obj.GetNamedString(L"type") == L"pageError") {
|
||||||
// Got a page error
|
// Got a page error
|
||||||
|
@ -196,6 +213,29 @@ void DevtoolsClient::HandlePageError(JsonObject message) {
|
||||||
mDelegate.OnDevtoolsMessage(level, source, body);
|
mDelegate.OnDevtoolsMessage(level, source, body);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void DevtoolsClient::HandleEvaluationResult(JsonObject message) {
|
||||||
|
auto level = DevtoolsMessageLevel::None;
|
||||||
|
hstring body = L"";
|
||||||
|
if (message.HasKey(L"result")) {
|
||||||
|
auto value = message.GetNamedValue(L"result");
|
||||||
|
if (value.ValueType() == JsonValueType::Object) {
|
||||||
|
auto type = value.GetObject().GetNamedString(L"type");
|
||||||
|
if (type == L"undefined") {
|
||||||
|
body = L"undefined";
|
||||||
|
} else {
|
||||||
|
body = L"<object>";
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
body = value.Stringify();
|
||||||
|
}
|
||||||
|
} else if (message.GetNamedValue(L"exception").ValueType() !=
|
||||||
|
JsonValueType::Null) {
|
||||||
|
level = DevtoolsMessageLevel::Error;
|
||||||
|
body = message.GetNamedString(L"exceptionMessage", L"");
|
||||||
|
}
|
||||||
|
mDelegate.OnDevtoolsMessage(level, L"", body);
|
||||||
|
}
|
||||||
|
|
||||||
void DevtoolsClient::HandleConsoleMessage(JsonObject message) {
|
void DevtoolsClient::HandleConsoleMessage(JsonObject message) {
|
||||||
auto source = ParseSource(message);
|
auto source = ParseSource(message);
|
||||||
auto level = ParseLevel(message);
|
auto level = ParseLevel(message);
|
||||||
|
|
|
@ -26,6 +26,7 @@ public:
|
||||||
void Run();
|
void Run();
|
||||||
void Stop();
|
void Stop();
|
||||||
void Send(JsonObject);
|
void Send(JsonObject);
|
||||||
|
void Evaluate(hstring);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
hstring mPort;
|
hstring mPort;
|
||||||
|
@ -46,6 +47,8 @@ private:
|
||||||
void HandlePageError(JsonObject);
|
void HandlePageError(JsonObject);
|
||||||
void HandleConsoleMessage(JsonObject);
|
void HandleConsoleMessage(JsonObject);
|
||||||
void HandleNonHandledMessage(JsonObject);
|
void HandleNonHandledMessage(JsonObject);
|
||||||
|
void HandleEvaluationResult(JsonObject);
|
||||||
|
std::optional<JsonValue> mConsoleActor;
|
||||||
};
|
};
|
||||||
|
|
||||||
class DevtoolsDelegate {
|
class DevtoolsDelegate {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue