This repository has been archived on 2023-02-02. You can view files and clone it, but cannot push or open issues or pull requests.
barkshark-web/webextension/webextension.vala

122 lines
3.5 KiB
Vala

private void handle_console_message_sent(WebKit.WebExtension extension, WebKit.ConsoleMessage message) {
var ext_message = new WebKit.UserMessage(
"console-message-sent",
new Variant("(ssi)", message.get_text(), message.get_level().to_string(), message.get_line())
);
extension.send_message_to_context.begin(ext_message, null);
}
// private void handle_form_controls(WebKit.WebExtension extension, WebKit.WebPage page, GenericArray<WebKit.DOM.Element> elements, WebKit.Frame frame) {
// var data = new Json.Builder();
// data.begin_array();
//
// elements.foreach((elem) => {
// data.begin_object();
//
// data.set_member_name("tag");data.add_string_value(elem.tag_name);
// data.set_member_name("id");data.add_string_value(elem.id);
// data.set_member_name("name");data.add_string_value(elem.attributes.name);
//
// data.end_object();
// })
//
// data.end_array();
//
// var ext_message = new WebKit.UserMessage(
// "context-menu",
// new Variant("",
// new Variant("()", )
// )
// )
// }
// private async bool handle_send_request(WebKit.WebExtension extension, WebKit.URIRequest request, WebKit.URIResponse redirected_response) {
// var ext_message = new WebKit.UserMessage(
// "send-request",
// new Variant("(s)", request.get_uri())
// );
//
// var result = yield extension.send_message_to_context(ext_message, null);
// return result.get_parameters().get_boolean();
// }
private void handle_form_submit(WebKit.WebExtension extension, WebKit.FormSubmissionStep stage, GenericArray<string> keys, GenericArray<string> values) {
var gen = new Json.Generator();
var data = new Json.Builder();
data.begin_object();
data.set_member_name("keys");
data.begin_array();
keys.foreach((key) => {
data.add_string_value(key);
});
data.end_array();
data.set_member_name("values");
data.begin_array();
values.foreach((value) => {
data.add_string_value(value);
});
data.end_array();
data.end_object();
gen.set_root(data.get_root());
var ext_message = new WebKit.UserMessage(
"form-sent",
new Variant("(ss)", stage.to_string(), gen.to_data(null))
);
extension.send_message_to_context.begin(ext_message, null);
}
private void handle_page_created(WebKit.WebExtension extension, WebKit.WebPage page) {
var ext_message = new WebKit.UserMessage(
"page-created",
new Variant("(t)", page.get_id())
);
extension.send_message_to_context.begin(ext_message, null);
page.console_message_sent.connect((message) => {
handle_console_message_sent(extension, message);
});
// page.context_menu.connect((ContextMenu menu, WebHitResult, hit_result) => {
// handle_context_menu(extension, menu, hit_result)
// });
// page.form_controls_associated_for_frame.connect((web_page, elements, frame) => {
// handle_form_controls(extension, web_page, elements, frame)
// });
// page.send_request.connect((request, redirected_response) => {
// return handle_send_request(extension, request, redirected_response);
// });
page.will_submit_form.connect((form, stage, source_frame, target_rame, field_names, field_values) => {
handle_form_submit(extension, stage, field_names, field_values);
});
}
private void handle_message_recv(WebKit.WebExtension extension, WebKit.UserMessage message) {
print(message.get_name());
}
[CCode (cname="G_MODULE_EXPORT webkit_web_extension_initialize", has_target = false)]
public static void webkit_web_extension_initialize(WebKit.WebExtension extension) {
extension.page_created.connect(handle_page_created);
extension.user_message_received.connect(handle_message_recv);
}