1eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// Copyright 2013 The Chromium Authors. All rights reserved. 2eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// found in the LICENSE file. 4eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 57dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochvar port = null; 6eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 7eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochvar getKeys = function(obj){ 8eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch var keys = []; 9eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch for(var key in obj){ 107dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch keys.push(key); 117dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch } 124e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return keys; 137dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 144e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 15eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 16eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochfunction appendMessage(text) { 177dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch document.getElementById('response').innerHTML += "<p>" + text + "</p>"; 187dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 197dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 20eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochfunction updateUiState() { 21eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch if (port) { 22eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch document.getElementById('connect-button').style.display = 'none'; 23eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch document.getElementById('input-text').style.display = 'block'; 24eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch document.getElementById('send-message-button').style.display = 'block'; 25eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } else { 26eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch document.getElementById('connect-button').style.display = 'block'; 27eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch document.getElementById('input-text').style.display = 'none'; 28eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch document.getElementById('send-message-button').style.display = 'none'; 29eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 30eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 31eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 32eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochfunction sendNativeMessage() { 33eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch message = {"text": document.getElementById('input-text').value}; 34eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch port.postMessage(message); 35eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch appendMessage("Sent message: <b>" + JSON.stringify(message) + "</b>"); 36eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 37eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 38eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochfunction onNativeMessage(message) { 39eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch appendMessage("Received message: <b>" + JSON.stringify(message) + "</b>"); 40eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 417dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 42f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)function onDisconnected() { 434e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) appendMessage("Failed to connect: " + chrome.runtime.lastError.message); 447dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch port = null; 457dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch updateUiState(); 467dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 477dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 487dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochfunction connect() { 497dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch var hostName = "com.google.chrome.example.echo"; 507dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch appendMessage("Connecting to native messaging host <b>" + hostName + "</b>") 517dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch port = chrome.runtime.connectNative(hostName); 527dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch port.onMessage.addListener(onNativeMessage); 537dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch port.onDisconnect.addListener(onDisconnected); 547dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch updateUiState(); 557dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 567dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 577dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochdocument.addEventListener('DOMContentLoaded', function () { 587dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch document.getElementById('connect-button').addEventListener( 597dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 'click', connect); 607dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch document.getElementById('send-message-button').addEventListener( 617dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 'click', sendNativeMessage); 627dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch updateUiState(); 637dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch}); 647dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch