'injected bundle'에 해당되는 글 1건

  1. 2014.09.23 [EFL] EWebKit Extension

ewebkit (WebKit/Efl)은 최근 WebKit1 포트를 제거했습니다. 옛날 코드를 사용하지 않는다면, WebKit2만 사용이 가능한 셈입니다.


이 둘의 가장 큰 차이는 이전에 적었던 글에서도 이야기한 것처럼 단일 프로세스를 통해 실행되느냐, 멀티 프로세스 환경에서 실행되는가입니다.

따라서 사용자의 요청(예를 들어 url을 로드해라, resize해라)등은 프로세스간 통신(IPC)을 거쳐 웹 컨텐츠를 담당하는 WebProcess에게 전달됩니다.

그러나 이러한 IPC 메커니즘을 통해 처리하기 어려운 것들이 있습니다. 대표적인 것이 JavaScript binding입니다. JavaScript binding은 native 코드를 javascript interface로 컨텐츠에 추가하여 web page에서 해당 interface를 통해 native code를 수행할 수 있게 하는 방법입니다.

WebKit2에서 이러한 것들을 수행하기 위해서는 WebProcess에서 사용자의 코드들을 수행할 수 있어야 합니다.


이를 위해 Injected Bundle이라는 것을 WebKit2에서는 제공하고 있습니다.

그러나 Injected Bundle은 WebKit2의 인터페이스를 사용하고 있기 때문에, ewebkit은 이를 한단계 감싼 ewk_extension 을 제공합니다.

그림으로 보면 위와 같습니다.

EWebKit2_Extension을 쓰려고 하는 사용자는 EWebKit2_Extension을 이용하여 extension을 만들어야 합니다.

이 때, 반드시 "void ewk_extension_init(Ewk_Extension *extension)" 을 구현하여야 합니다.


또, user application 에서는 ewk_context_new_with_extensions_path()를 사용하여 자신이 작성한 extension 라이브러리의 path를 건네주어야 합니다.


ewebkit은 WebProcess를 실행(fork)할 때, WebProcess가 호출할 injected bundle, 즉 ewebkit_extension_manager의 위치와 사용자 extension의 위치를 같이 넘겨줍니다.

WebProcess는 실행 직후 ewebkit_extension_manager를 로드(dlopen)하고 extension_manager가 extension을 로드하면 extension을 쓸 준비는 끝나게 됩니다.


extension은 이후 WebProcess에 자신이 원하는 타이밍에 WebProcess로부터 콜백들을 받고 적절한 일(javascript binding같은)을 수행할 것이며, message를 이용하여 user application과 서로 통신하게 될 것입니다.


간단한 extension의 예제는 아래에 있습니다.

https://github.com/ewebkit/samples/tree/master/devs/ryuan/extensions


저작자 표시
신고

'Open Source > EFL' 카테고리의 다른 글

[EFL] EWebKit Extension  (0) 2014.09.23
transparent ewebkit  (0) 2014.07.30
Hello ewebkit?  (2) 2014.03.14
WebKit/efl 하면서 쓸 ctags 만들기  (0) 2013.12.17
Elementary Dark theme  (0) 2013.10.17
[TIZEN][EFL] 타이젠 상에서 EFL 예제 실행하기  (9) 2013.08.02
Posted by 소혼
이전버튼 1 이전버튼

티스토리 툴바