블로그 이미지
ssun++

카테고리

[전체] (73)
Android (7)
JavaScript (9)
CI (5)
Language (14)
ETC (38)
Total319,148
Today1
Yesterday16

'plugin'에 해당되는 글 4건

  1. 2011.08.31 NPAPI Plugin 로드하기 3 (2)
  2. 2011.08.30 NPAPI Plugin 로드하기 2
  3. 2011.08.28 NPAPI Plugin 로드하기
  4. 2009.09.11 [Eclipse] 괜춘한 이클립스 플러그인
[시작]
나머지 로드하는 과정입니다.
PluginView와 PluginStream 중심입니다.

[PluginView]
실제적으로 플러그인과 상호관계를 가지는 클래스입니다.
PluginPackage를 통해서 NPP 함수를 호출하고,
플러그인에서 NPN 함수를 호출하면 PluginView의 함수를 호출하게 됩니다.

이벤트 처리, 페인트와 관련된 소스는 포팅으로 분리되어 있습니다.
플러그인에서 데이터 로드를 요청하는 경우는 PluginStream이 처리하도록 합니다.

[PluginStream]
받은 데이터를 플러그인으로 넘겨줍니다.

대략적인 형태는 그림과 비슷할 것 같습니다.


[끝]
WebKit2에서 플러그인 관련 소스들이 바뀌었다고 하는데
기회가 되면 바뀐 소스도 확인해봐야 할 것 같습니다.
Posted by ssun++

댓글을 달아 주세요

  1. 2013.04.27 21:13 신고 Favicon of http://awesomejude.tistory.com AwesomeJude  댓글주소  수정/삭제  댓글쓰기

    NPRuntime과 NPAPI 관련 정보를 검색하다가 이곳까지 오게되었네요.
    위에 정리하신 NPAPI 호출 구조가 잘 나와 있어서 좀 퍼갈게요.. 출처도 꼭 밝힐게요.^^ NPAPI Plugin 로드하기 2 에 나온 그림도 같이요..

[시작]
지난번 포스팅에서는 dll 로드하는 환경 구성에 초점을 맞추었고,
이번에는 WebCore 소스에서 로드하는 과정을 확인하는 것이 목표입니다.

[WebCore]
WebCore 디렉토리 아래 plugins 디렉토리에 관련 소스들이 있으며
라이브러리 경로 찾기, 로드하기와 관련된 소스들은 포팅으로 빠져있습니다.
이중에서 PluginDatabase와 PluginPackage를 주로 살펴보겠습니다.

[PluginDatabase]
전체 플러그인에 대한 데이터베이스 역할을 합니다.
플러그인 디렉토리, 마임타입, 경로, PluginPackage를 관리합니다.

플러그인 디렉토리를 가져오는 코드는 포팅에서 구현되어 있습니다.
Windows 포팅의 경우 PluginDatabaseWin.cpp에 구현되어 있고,
파일 경로나 레지스트리 값을 이용해서 경로를 찾습니다.

[PluginPackage]
개별 플러그인을 관리하는 역할입니다.
라이브러리 로드, 함수 포인터 가져오기, 브라우저 함수 초기화 등을 수행합니다.

라이브러리 로드, 함수포인터 가져오는 코드는 포팅에서 구현되어 있습니다.
Windows 포팅의 경우 PluginPackageWin.cpp에 구현되어 있습니다.

라이브러리 로드 후 NP_Initialize, NP_GetEntryPoints, NP_Shutdown 함수 포인터를 가져옵니다.
NP_Initialize, NP_Shutdown은 플러그인 초기화, 종료 함수,
NP_GetEntryPoints는 NPP로 시작하는 플러그인 함수의 포인터를 가져오는 함수입니다.

지금까지 나타난 관계를 그림으로 나타내면 아래와 같은 형태가 될 것 같습니다.


[끝]
플러그인 로드하는 과정은 웬만큼 살펴본 것 같습니다.
다음은 브라우저에서 플러그인 사용하는 과정을 확인해보겠습니다.
Posted by ssun++

댓글을 달아 주세요

[시작]
웹킷에는 TestNetscapePlugin 프로젝트가 포함되어 있습니다.
이 프로젝트 빌드시 생성되는 dll을 사용가능하게 하는 것이 목표입니다.

소스의 위치 상 DumpRenderTree에서 사용하는 것일수도 있겠지만,
일단 DumpRenderTree는 고려하지 않도록 합니다.


[Plugin 로드 여부 확인]
WinLauncher에서 아래와 같은 테스트 페이지를 로드해서 아래의 결과와 비교해봅니다.
왼쪽의 빨간 박스처럼 'Missing Plugin-in'이라는 내용이 출력되면 플러그인이 로드되지 않은 것이고,
오른쪽의 파란 박스처럼 아무것도 출력되지 않으면 로드된 것입니다.

테스트 페이지

<embed width="200" height="200"

type="application/x-webkit-test-netscape" />


결과


 
[소스 분석]
WebCore에 PluginDatabase라는 class가 있고 singleton으로 생성됩니다.
생성시 플러그인 디렉토리를 set하고, 이 경로에서 type에 맞는 dll을 로드합니다.

플러그인 디렉토리는 PluginDatabase::defaultPluginDirectories() 함수에서 만듭니다.
플랫폼마다 경로가 다를수 있기때문에 포팅에서 구현합니다.

Windows 포팅은 PluginDatabaseWin.cpp에서 구현하고 있습니다.
윈도우 포팅의 PluginDatabase::defaultPluginDirectories() 함수를 보면
Safari, QuickTime, Acrobat, Mozilla, Windows Media Player, Macromedia 등의 플러그인 경로를 넣습니다.


[로드하기]
여기서 활용할 것은 Safari 플러그인 경로입니다.
Safari 플러그인 경로는 WinLauncher.exe 경로 아래 Plugins 디렉토리로 생성됩니다.
따라서 두가지 방법이 있을 수 있습니다.
  1. PluginDatabase::safariPluginsDirectory() 함수를 수정해서 다른 경로를 생성하도록 한다
  2. 플러그인이 Plugins 디렉토리에 들어가도록 한다 
1번을 선택하는 경우 빌드를 다시해야 하므로 2번을 선택하였습니다.

TestNetscapePlugin 프로젝트의 속성을 변경합니다.
속성 > 구성 속성> 링커 > 일반 > 출력 파일의 경로를 바꿉니다.
Before : $(OutDir)\$(ProjectName)$(WebKitConfigSuffix)\np$(ProjectName)$(WebKitConfigSuffix).dll
After : $(OutDir)\Plugins\np$(ProjectName)$(WebKitConfigSuffix).dll

TestNetscapePlugin만 다시 빌드합니다.


[Plugin 로드 여부 확인(2)]
테스트 페이지 로드해서 로드 여부 확인합니다.


[끝]
NPAPI 플러그인 로드하는 방식을 확인해보았습니다.
TestNetscapePlugin을 통해서 NPAPI 플러그인 동작하는 방식도 확인해야 할 것 같습니다. 
Posted by ssun++

댓글을 달아 주세요

- Aptatna Studio (javascript+α 에디터)
홈페이지 : http://www.aptana.com
Location : http://update.aptana.com/update/studio
※ javascript 코드 어시스트

- m2eclipse (maven2 연동)
홈페이지 : http://m2eclipse.sonatype.org/
Location : http://m2eclipse.sonatype.org/sites/m2e
※ eclipse.ini 파일에 내용추가 : -vm jdk경로/bin

- 플루토 서버 플러그인
홈페이지 : http://code.google.com/p/pluto-server-plugin/
Location : http://pluto-server-plugin.googlecode.com/svn/trunk/pluto.server.update
※ 플루토 1.1.x 버전 연동 (최신버전은 플루토 2.0.0)

- Veloeclipse (html/xml/jsp/velocity 에디터)
홈페이지 : http://veloeclipse.googlecode.com
Location : http://veloeclipse.googlecode.com/svn/trunk/update

- Freemarker Plugin
홈페이지 : http://www.freemarker.org
Location : http://www.freemarker.org/eclipse/update
Posted by ssun++

댓글을 달아 주세요

최근에 달린 댓글

최근에 받은 트랙백

글 보관함