// Copyright 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

let port = null;
let curr_callback = null;

function sendNativeMessage(message) {
	port.postMessage(message);
}

function onNativeMessage(message) {
	/* INFO: 콜백함수가 지정된 경우 해당 콜백함수를 사용한다. */
	if(curr_callback != null){
		curr_callback(message);
		curr_callback = null;
	}
}

function onDisconnected() {
	port = null;
	if(curr_callback != null){
		curr_callback(null);
		curr_callback = null;
	}
}

function connect() {
	let hostName = "com.google.chrome.example.echo";
	port = chrome.runtime.connectNative(hostName);
	port.onMessage.addListener(onNativeMessage);
	/* INFO: native messaging 앱을 찾을 수 없는 경우 */
	port.onDisconnect.addListener(onDisconnected);
}

/* INFO: content-script로부터 작업 요청을 받으면 nativeMessaging을 통해 작업을 수행하고 결과를 콜백으로 반환한다. */
chrome.extension.onRequest.addListener(function(data, sender, callback){
	curr_callback = callback;
	connect();
	
	/* INFO: 연결 직후 바로 메시지를 처리하면 안될 수 있으므로 약간의 대기 후 작업을 진행한다. */
	setTimeout(()=>{
		/* INFO: native messaging 앱을 찾을 수 없을 경우 onDisconnected()에 의해 콜백함수가 호출된다. */
		if(curr_callback == null) return;
		sendNativeMessage(data);
	}, 200);
});

//"chrome-extension://bcffeaabpankpgikpifpailfcihmheno/"