Toolbar icon! Simplify file defns! Pretty cool!

This commit is contained in:
Omar Rizwan 2018-11-28 21:43:00 -08:00
parent e734173e6f
commit ed5419ae41
3 changed files with 54 additions and 47 deletions

View file

@ -1,4 +1,24 @@
const ws = new WebSocket("ws://localhost:8888");
let ws;
function tryConnect() {
ws = new WebSocket("ws://localhost:8888");
updateToolbarIcon();
ws.onopen = ws.onclose = updateToolbarIcon;
}
function updateToolbarIcon() {
if (ws && ws.readyState == 1) { // OPEN
chrome.browserAction.setBadgeBackgroundColor({color: 'blue'});
chrome.browserAction.setBadgeText({text: 'f'});
} else {
chrome.browserAction.setBadgeBackgroundColor({color: 'red'});
chrome.browserAction.setBadgeText({text: '!'});
}
}
tryConnect();
chrome.browserAction.onClicked.addListener(function() {
tryConnect();
});
const unix = {
EPERM: 1,
@ -61,6 +81,7 @@ const fhManager = (function() {
// tabs/by-id/ID/mem (?)
// tabs/by-id/ID/cpu (?)
// tabs/by-id/ID/screenshot.png
// tabs/by-id/ID/text.txt
// tabs/by-id/ID/printed.pdf
// tabs/by-id/ID/control
// tabs/by-id/ID/sources/
@ -80,38 +101,16 @@ const router = {
"*": {
"url": {
async getattr() {
return {
st_mode: unix.S_IFREG | 0444,
st_nlink: 1,
st_size: 100 // FIXME
};
},
async open(path) {
return 0;
},
async read(path, fh, size, offset) {
const tab = await getTab(parseInt(pathComponent(path, -2)));
return (tab.url + "\n").substr(offset, size);
},
async release(path, fh) {}
}
},
"title": {
async getattr() {
return {
st_mode: unix.S_IFREG | 0444,
st_nlink: 1,
st_size: 1000 // FIXME
};
},
async open(path) {
return 0;
},
async read(path, fh, size, offset) {
const tab = await getTab(parseInt(pathComponent(path, -2)));
return (tab.title + "\n").substr(offset, size);
},
async release(path, fh) {}
}
},
}
}
@ -133,7 +132,15 @@ async function getattr(path) {
let route = findRoute(path);
if (route.getattr) {
return route.getattr(path);
} else if (route.read) {
// default file attrs
return {
st_mode: unix.S_IFREG | 0444,
st_nlink: 1,
st_size: 100 // FIXME
};
} else {
// default dir attrs
return {
st_mode: unix.S_IFDIR | 0755,
st_nlink: 3
@ -150,6 +157,7 @@ async function readdir(path) {
async function open(path) {
let route = findRoute(path);
if (route.open) return route.open(path);
else return 0; // empty fd
}
async function read(path, fh, size, offset) {
@ -159,7 +167,7 @@ async function read(path, fh, size, offset) {
async function release(path, fh) {
let route = findRoute(path);
if (route.read) return route.release(path, fh);
if (route.release) return route.release(path, fh);
}
ws.onmessage = async function(event) {
@ -192,8 +200,7 @@ ws.onmessage = async function(event) {
const buf = await read(req.path, req.fh, req.size, req.offset)
response = {
op: 'read',
buf,
size: buf.length
buf
};
} else if (req.op === 'release') {

View file

@ -7,6 +7,8 @@
"permissions": ["tabs", "debugger"],
"browser_action": {},
"background": {
"scripts": ["background.js"],
"persistent": true

View file

@ -14,6 +14,8 @@
#include "cJSON/cJSON.h"
#include "cJSON/cJSON.c"
#define DEBUG(...)
struct wby_server server;
struct wby_con *con = NULL;
@ -205,10 +207,6 @@ hello_read(const char *path, char *buf, size_t size, off_t offset,
cJSON_AddNumberToObject(req, "fh", fi->fh);
cJSON_AddNumberToObject(req, "flags", fi->flags);
}, {
size_t resp_size;
JSON_GET_PROP_INT(resp_size, "size");
size = resp_size < size ? resp_size : size;
cJSON *resp_buf_item = cJSON_GetObjectItemCaseSensitive(resp, "buf");
char *resp_buf = cJSON_GetStringValue(resp_buf_item);
size_t resp_buf_len = strlen(resp_buf);
@ -266,11 +264,11 @@ websocket_frame(struct wby_con *connection, const struct wby_frame *frame, void
unsigned char data[131072] = {0};
int i = 0;
/* printf("WebSocket frame incoming\n"); */
/* printf(" Frame OpCode: %d\n", frame->opcode); */
/* printf(" Final frame?: %s\n", (frame->flags & WBY_WSF_FIN) ? "yes" : "no"); */
/* printf(" Masked? : %s\n", (frame->flags & WBY_WSF_MASKED) ? "yes" : "no"); */
/* printf(" Data Length : %d\n", (int) frame->payload_length); */
DEBUG("WebSocket frame incoming\n");
DEBUG(" Frame OpCode: %d\n", frame->opcode);
DEBUG(" Final frame?: %s\n", (frame->flags & WBY_WSF_FIN) ? "yes" : "no");
DEBUG(" Masked? : %s\n", (frame->flags & WBY_WSF_MASKED) ? "yes" : "no");
DEBUG(" Data Length : %d\n", (int) frame->payload_length);
if ((unsigned long) frame->payload_length > sizeof(data)) {
printf("Data too long!\n");
@ -283,17 +281,17 @@ websocket_frame(struct wby_con *connection, const struct wby_frame *frame, void
size_t read_size = remain > (int) sizeof buffer ? sizeof buffer : (size_t) remain;
size_t k;
/* printf("%08x ", (int) i); */
DEBUG("%08x ", (int) i);
if (0 != wby_read(connection, buffer, read_size))
break;
/* for (k = 0; k < read_size; ++k) */
/* printf("%02x ", buffer[k]); */
/* for (k = read_size; k < 16; ++k) */
/* printf(" "); */
/* printf(" | "); */
/* for (k = 0; k < read_size; ++k) */
/* printf("%c", isprint(buffer[k]) ? buffer[k] : '?'); */
/* printf("\n"); */
for (k = 0; k < read_size; ++k)
DEBUG("%02x ", buffer[k]);
for (k = read_size; k < 16; ++k)
DEBUG(" ");
DEBUG(" | ");
for (k = 0; k < read_size; ++k)
DEBUG("%c", isprint(buffer[k]) ? buffer[k] : '?');
DEBUG("\n");
for (k = 0; k < read_size; ++k)
data[i + k] = buffer[k];
i += (int)read_size;
@ -338,7 +336,7 @@ websocket_closed(struct wby_con *connection, void *userdata)
static void
test_log(const char* text)
{
/* printf("[debug] %s\n", text); */
DEBUG("[debug] %s\n", text);
}
void *websocket_main(void *threadid)