-

-
Video Chat
-
Status: Ready
-
-
+
+
diff --git a/extension/popup.js b/extension/popup.js
index 517d761..b6d5bc9 100644
--- a/extension/popup.js
+++ b/extension/popup.js
@@ -1,13 +1,68 @@
document.addEventListener('DOMContentLoaded', () => {
console.log('Rust Video Chat Popup Initialized');
- document.getElementById('startRoom').addEventListener('click', () => {
- console.log('Creating new room...');
- // Future logic for room creation
+ const toggleMic = document.getElementById('toggleMic');
+ const toggleCam = document.getElementById('toggleCam');
+ const sendBtn = document.getElementById('sendBtn');
+ const messageInput = document.getElementById('messageInput');
+ const chatArea = document.getElementById('chatArea');
+ const statusEl = document.getElementById('connectionStatus');
+
+ let micOn = true;
+ let camOn = true;
+
+ toggleMic.addEventListener('click', () => {
+ micOn = !micOn;
+ toggleMic.classList.toggle('active', micOn);
+ chrome.runtime.sendMessage({ action: "toggleMic", enabled: micOn });
+ });
+
+ toggleCam.addEventListener('click', () => {
+ camOn = !camOn;
+ toggleCam.classList.toggle('active', camOn);
+ chrome.runtime.sendMessage({ action: "toggleCam", enabled: camOn });
+ });
+
+ const addMessage = (text, type = 'sent') => {
+ const msgDiv = document.createElement('div');
+ msgDiv.className = `message ${type}`;
+ msgDiv.textContent = text;
+ chatArea.appendChild(msgDiv);
+ chatArea.scrollTop = chatArea.scrollHeight;
+ };
+
+ sendBtn.addEventListener('click', () => {
+ const text = messageInput.value.trim();
+ if (text) {
+ chrome.runtime.sendMessage({ action: "sendMessage", text: text }, (response) => {
+ if (response && response.status === "success") {
+ addMessage(text, 'sent');
+ messageInput.value = '';
+ }
+ });
+ }
});
- document.getElementById('joinRoom').addEventListener('click', () => {
- console.log('Joining room...');
- // Future logic for joining room
+ messageInput.addEventListener('keypress', (e) => {
+ if (e.key === 'Enter' && !e.shiftKey) {
+ e.preventDefault();
+ sendBtn.click();
+ }
});
+
+ // Listen for events from background/WASM
+ chrome.runtime.onMessage.addListener((request, sender, sendResponse) => {
+ if (request.event === "roomJoined") {
+ statusEl.textContent = "Connected";
+ statusEl.style.color = "#10b981";
+ } else if (request.event === "messageSent") {
+ // Confirm message sent or handle incoming
+ console.log("WASM confirmed message sent:", request.data);
+ } else if (request.event === "mediaStatus") {
+ console.log("WASM media status update:", request.data);
+ }
+ });
+
+ // Initial check for room
+ chrome.runtime.sendMessage({ action: "joinRoom", roomId: "default-room" });
});
diff --git a/tests/e2e/extension_tests.rs b/tests/e2e/extension_tests.rs
new file mode 100644
index 0000000..01c631f
--- /dev/null
+++ b/tests/e2e/extension_tests.rs
@@ -0,0 +1,35 @@
+// E2E Tests for the Video Chat Extension
+// These tests are designed to run in a headless browser environment.
+
+#[cfg(target_arch = "wasm32")]
+mod e2e_wasm_tests {
+ use wasm_bindgen_test::*;
+ wasm_bindgen_test_configure!(run_in_browser);
+
+ #[wasm_bindgen_test]
+ async fn test_extension_initialization() {
+ // Verify that we can call the initialization logic
+ video_chat_wasm::init();
+ // Since we are running in a browser, we can check for globals if we want
+ // but wasm-pack test might not have the extension environment
+ }
+
+ #[wasm_bindgen_test]
+ async fn test_room_lifecycle() {
+ // Test room creation and joining simulation
+ video_chat_wasm::create_room("test-e2e-room".into());
+ video_chat_wasm::join_room("test-e2e-room".into());
+ }
+}
+
+// For native testing, these might be placeholders or use a driver like 'thirtyfour'
+// if integrated in the future.
+#[cfg(not(target_arch = "wasm32"))]
+#[cfg(test)]
+mod e2e_native_tests {
+ #[test]
+ fn test_stub() {
+ // Placeholder for native E2E driver integration
+ assert!(true);
+ }
+}