How do I build an installer for my plugin?
The group you are posting to is a
Usenet group . Messages posted to this group will make your email address visible to anyone on the Internet.
Your reply message has not been sent.
Your post was successful
Newsgroups: mozilla.dev.tech.plugins
From:
edburns <edbu... @gmail.com>
Date: Fri, 12 Sep 2008 06:50:16 -0700 (PDT)
Local: Fri, Sep 12 2008 9:50 am
Subject: How do I build an installer for my plugin?
Hello, I have a native .dll plugin for Win32 that works with Firefox 2 [1]. For someone to use this plugin, they currently have to go through a lot of nonsense including configuring a .properties file and running a "build" command from inside of NetBeans. I want the experience to be much easier. Ideally I'd like to use the addon manager to do this. Can someone please help direct me?
Requirements
* The installer must put at least three binary files in the plugins directory that is a sibling of the firefox.exe
nppluglet.dll jmfplayer.jar SimplePluglet.jar
* The installer must append some content to the "prefs.js" file for the currently active profile. This content is:
user_pref("plugin.allow_alien_star_handler", true); user_pref("plugin.default_plugin_disabled", false); user_pref("plugin.override_internal_types", true);
* The installer must require the user to restart firefox.
Any help is greatly apprecaited.
Sincerely,
Ed Burns
[1] http://www.mozilla.org/projects/blackwood/java-plugins/
You must
Sign in before you can post messages.
You do not have the permission required to post.
Newsgroups: mozilla.dev.tech.plugins
From:
edburns <edbu... @gmail.com>
Date: Sat, 13 Sep 2008 18:07:34 -0700 (PDT)
Local: Sat, Sep 13 2008 9:07 pm
Subject: Re: How do I build an installer for my plugin?
You must
Sign in before you can post messages.
You do not have the permission required to post.
Newsgroups: mozilla.dev.tech.plugins
From:
edburns <edbu... @gmail.com>
Date: Mon, 6 Oct 2008 06:12:22 -0700 (PDT)
Local: Mon, Oct 6 2008 9:12 am
Subject: xpi with npapi plugin *and* XPCOM component (was: Re: How do I build an installer for my plugin?)
Hello, I'm building an xpi called pluglet.xpi. Here is the structure of pluglet.xpi
$ zip -r ../pluglet.xpi * adding: components/pluglet.xpt (deflated 34%) adding: install.rdf (deflated 48%) adding: platform/WINNT_x86-msvc/components/pluglet.dll (deflated 77%) adding: platform/WINNT_x86-msvc/plugins/nppluglet.dll (deflated 86%)
In my nppluglet.dll, I want to do a do_GetService() on a contract id declared in pluglet.xpt.
The pluglet.xpt is built with this line:
/cygdrive/f/Projects/mozilla/FIREFOX_2_0_0_3_RELEASE_A/mozilla/firefox- win32_d.obj/../build/cygwin-wrapper ../../../dist/bin/xpt_link.exe _xpidlgen/pluglet.xpt _xpidlgen/nsIPluglet.xpt _xpidlgen/ iPlugletEngine.xpt _xpidlgen/iPlugletManager.xpt
The iPlugletEngine.xpt is built from iPlugletEngine.idl, which declares the contractID:
%{C++ #ifndef JNI_H #include "jni.h" #endif
#define PLUGLETENGINE_CID \ { /* C1E694F3-9BE1-11d3-837C-0004AC56C49E */ \ 0xc1e694f3, \ 0x9be1, \ 0x11d3, \ { 0x83, 0x7c, 0x0, 0x4, 0xac, 0x56, 0xc4, 0x9e } \
}
#define PLUGLETENGINE_ContractID \ "@mozilla.org/blackwood/pluglet-engine;1" %}
When I install the xpt and view a page calling for nppluglet.dll, this code gets executed:
nsCOMPtr<nsISupports> plugletEngine = nsnull; nsresult rv;
plugletEngine = do_GetService(PLUGLETENGINE_ContractID, &rv); if (NS_SUCCEEDED(rv)) { // success code here }
I find that the do_GetService fails.
If I replace PLUGLETENGINE_ContractID with, say, NS_IOSERVICE_CONTRACTID, I find the do_GetService() succeeds.
This leads me to believe that my pluglet.xpt is not getting inspected for its contents.
Can someone please tell me how to test this assertion?
Thanks,
Ed
You must
Sign in before you can post messages.
You do not have the permission required to post.
Newsgroups: mozilla.dev.tech.plugins
From:
edburns <edbu... @gmail.com>
Date: Mon, 6 Oct 2008 06:39:33 -0700 (PDT)
Local: Mon, Oct 6 2008 9:39 am
Subject: Re: xpi with npapi plugin *and* XPCOM component (was: Re: How do I build an installer for my plugin?)
> Can someone please tell me how to test this assertion?
I should add that the xpcom component I'm trying to call from my npapi plugin uses this apporach to register itself: NS_GENERIC_FACTORY_CONSTRUCTOR(PlugletEngine)
static const nsModuleComponentInfo components[] = { { "PlugletEngine", PLUGLETENGINE_CID, PLUGLETENGINE_ContractID, PlugletEngineConstructor, PlugletEngineRegistration, PlugletEngineUnregistration }
};
NS_IMPL_NSGETMODULE(PlugletEngineModule, components) Where PlugletEngineRegistration contains:
rv = catman->AddCategoryEntry("xpcom-startup", "PlugletEngine", PLUGLETENGINE_ContractID, PR_TRUE, PR_TRUE, &previous);
Perhaps the xpcom-startup trick doesn't work for xpcom components in an extension?
Ed
You must
Sign in before you can post messages.
You do not have the permission required to post.
Newsgroups: mozilla.dev.tech.plugins
From:
Mook <mook.moz+nntp.news.mozilla.... @gmail.com.please-avoid-direct-mail>
Date: Mon, 06 Oct 2008 07:08:01 -0700
Local: Mon, Oct 6 2008 10:08 am
Subject: Re: xpi with npapi plugin *and* XPCOM component
You must
Sign in before you can post messages.
You do not have the permission required to post.
Newsgroups: mozilla.dev.tech.plugins
From:
edburns <edbu... @gmail.com>
Date: Wed, 8 Oct 2008 08:19:19 -0700 (PDT)
Local: Wed, Oct 8 2008 11:19 am
Subject: Re: xpi with npapi plugin *and* XPCOM component
Thanks Mook, turns out I had a linker problem. My XPCOM component was packaged in a DLL. This DLL was created with a link line that included jvm.lib, an import library from the JDK. When firefox tried to load my DLL, and the OS could not load the jvm.dll on which my DLL depends (through its inclusion of jvm.lib): due to the directory containing jvm.dll not being in the PATH, the XPCOM component DLL failed to load, but there was no error message to that effect. On #developers, biesi helped me eliminate my link time dependency on jvm.lib by using GetProcAddress. Now I have the following challenges:
From the function that uses GetProcAddress to load the functions from jvm.dll, call some code that:
1. Sets the following preferences in a way that they will take effect on the currently running browser instance:
user_pref("plugin.allow_alien_star_handler", true); user_pref("plugin.default_plugin_disabled", false); user_pref("plugin.override_internal_types", true);
2. Sets the following environment variables:
SET PATH=C:\PROGRA~1\Java\jdk1.6.0\jre\bin\client SET Path=C:\PROGRA~1\Java\jdk1.6.0\jre\bin\client SET path=C:\PROGRA~1\Java\jdk1.6.0\jre\bin\client SET CLASSPATH=F:\Projects\chaff\PLUGLET_DIST\pluglet_workarea\lib \pluglet-1_1_a2.jar;C:\JMF2.1.1e\lib\jmf.jar;F:\Projects\chaff \PLUGLET_DIST\pluglet_workarea\netbeans\build\classes
This should take me a long way to having an XPI install of pluglet.
You must
Sign in before you can post messages.
You do not have the permission required to post.
Newsgroups: mozilla.dev.tech.plugins
From:
edburns <edbu... @gmail.com>
Date: Fri, 10 Oct 2008 17:55:42 -0700 (PDT)
Local: Fri, Oct 10 2008 8:55 pm
Subject: Call to do_GetService(NS_PROFILE_CONTRACTID) fails from within Plugin
Why would this call nsCOMPtr<nsIProfileInternal> profileMgr (do_GetService(NS_PROFILE_CONTRACTID, &rv));
return rv == 2147746132 (NS_ERROR_FACTORY_NOT_REGISTERED)
When invoked at the top of this callstack:
PlugletEngine::PopulateClasspath() line 138 PlugletEngine::SatisfyJavaPreconditions() line 150 PlugletEngine::StartJVM() line 281 PlugletEngine::GetJNIEnv(PlugletEngine * const 0x00bf166c, JNIEnv_ * * 0x00125ea4) line 361 PlugletLoader::Initialize() line 62 + 27 bytes NS_PluginInitialize() line 152 NP_Initialize(_NPNetscapeFuncs * 0x075a1c10 struct _NPNetscapeFuncs ns4xPlugin::CALLBACKS) line 164 ns4xPlugin::CreatePlugin(nsIServiceManagerObsolete * 0x003fd1d4, const char * 0x03711570, const char * 0x00000000, PRLibrary * 0x0459fda0, nsIPlugin * * 0x0371146c) line 780 + 8 bytes nsPluginHostImpl::GetPluginFactory(nsPluginHostImpl * const 0x0360346c, const char * 0x0759a364, nsIPlugin * * 0x001260b4) line 4674 + 40 bytes nsPluginHostImpl::SetUpDefaultPluginInstance(const char * 0x045378e8, nsIURI * 0x03848378, nsIPluginInstanceOwner * 0x036688e8) line 4014 + 65 bytes nsPluginHostImpl::InstantiateEmbeddedPlugin(nsPluginHostImpl * const 0x0360346c, const char * 0x045378e8, nsIURI * 0x03848378, nsIPluginInstanceOwner * 0x036688e8) line 3482 + 23 bytes nsObjectFrame::InstantiatePlugin(nsPresContext * 0x0377ed40, nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, nsIPluginHost * 0x0360346c, const char * 0x045378e8, nsIURI * 0x03848378) line 1366 + 27 bytes nsObjectFrame::Reflow(nsObjectFrame * const 0x0385d5d8, nsPresContext * 0x0377ed40, nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, unsigned int & 0) line 1239 + 51 bytes nsLineLayout::ReflowFrame(nsIFrame * 0x0385d5d8, unsigned int & 0,
[Rest of callstack included below]
I tried having nsIProfile be the nsCOMPtr type and got the same result.
Any ideas?
nsHTMLReflowMetrics * 0x00000000, int & 0) line 995 + 43 bytes nsBlockFrame::ReflowInlineFrame(nsBlockReflowState & {...}, nsLineLayout & {...}, nsLineList_iterator {...}, nsIFrame * 0x0385d5d8, unsigned char * 0x00126aeb) line 4058 + 22 bytes nsBlockFrame::DoReflowInlineFrames(nsBlockReflowState & {...}, nsLineLayout & {...}, nsLineList_iterator {...}, int * 0x00126eb0, unsigned char * 0x00126bf3, int 0, int 0, int 1) line 3897 + 32 bytes nsBlockFrame::ReflowInlineFrames(nsBlockReflowState & {...}, nsLineList_iterator {...}, int 1, int * 0x00126eb0, int 0, int 0) line 3778 + 50 bytes nsBlockFrame::ReflowLine(nsBlockReflowState & {...}, nsLineList_iterator {...}, int 1, int * 0x00126eb0, int 0) line 2771 + 37 bytes nsBlockFrame::ReflowDirtyLines(nsBlockReflowState & {...}, int 1) line 2301 + 35 bytes nsBlockFrame::Reflow(nsBlockFrame * const 0x0385d480, nsPresContext * 0x0377ed40, nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, unsigned int & 0) line 903 + 17 bytes nsBlockReflowContext::ReflowBlock(const nsRect & {...}, int 1, nsCollapsingMargin & {...}, int 0, int 0, nsMargin & {...}, nsHTMLReflowState & {...}, unsigned int & 0) line 605 + 42 bytes nsBlockFrame::ReflowBlockFrame(nsBlockReflowState & {...}, nsLineList_iterator {...}, int * 0x00127b18) line 3492 + 66 bytes nsBlockFrame::ReflowLine(nsBlockReflowState & {...}, nsLineList_iterator {...}, int 1, int * 0x00127b18, int 0) line 2651 + 27 bytes nsBlockFrame::ReflowDirtyLines(nsBlockReflowState & {...}, int 1) line 2301 + 35 bytes nsBlockFrame::Reflow(nsBlockFrame * const 0x0385d050, nsPresContext * 0x0377ed40, nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, unsigned int & 0) line 903 + 17 bytes nsBlockReflowContext::ReflowBlock(const nsRect & {...}, int 1, nsCollapsingMargin & {...}, int 0, int 0, nsMargin & {...}, nsHTMLReflowState & {...}, unsigned int & 0) line 605 + 42 bytes nsBlockFrame::ReflowFloat(nsBlockReflowState & {...}, nsPlaceholderFrame * 0x0385d0a4, nsFloatCache * 0x03668850, unsigned int & 0) line 6029 + 54 bytes nsBlockReflowState::FlowAndPlaceFloat(nsFloatCache * 0x03668850, int * 0x001285f4, unsigned int & 0, int 0) line 853 nsBlockReflowState::AddFloat(nsLineLayout & {...}, nsPlaceholderFrame * 0x0385d0a4, int 0, unsigned int & 0) line 634 + 24 bytes nsLineLayout::AddFloat(nsPlaceholderFrame * 0x0385d0a4, unsigned int & 0) line 261 nsLineLayout::ReflowFrame(nsIFrame * 0x0385d0a4, unsigned int & 0, nsHTMLReflowMetrics * 0x00000000, int & 0) line 1017 + 22 bytes nsBlockFrame::ReflowInlineFrame(nsBlockReflowState & {...}, nsLineLayout & {...}, nsLineList_iterator {...}, nsIFrame * 0x0385d0a4, unsigned char * 0x0012889f) line 4058 + 22 bytes nsBlockFrame::DoReflowInlineFrames(nsBlockReflowState & {...}, nsLineLayout & {...}, nsLineList_iterator {...}, int * 0x00128c64, unsigned char * 0x001289a7, int 0, int 0, int 1) line 3897 + 32 bytes nsBlockFrame::ReflowInlineFrames(nsBlockReflowState & {...}, nsLineList_iterator {...}, int 1, int * 0x00128c64, int 0, int 0) line 3778 + 50 bytes nsBlockFrame::ReflowLine(nsBlockReflowState & {...}, nsLineList_iterator {...}, int 1, int * 0x00128c64, int 0) line 2771 + 37 bytes nsBlockFrame::ReflowDirtyLines(nsBlockReflowState & {...}, int 1) line 2301 + 35 bytes nsBlockFrame::Reflow(nsBlockFrame * const 0x044bea88, nsPresContext * 0x0377ed40, nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, unsigned int & 0) line 903 + 17 bytes nsBlockReflowContext::ReflowBlock(const nsRect & {...}, int 1, nsCollapsingMargin & {...}, int 0, int 0, nsMargin & {...}, nsHTMLReflowState & {...}, unsigned int & 0) line 605 + 42 bytes nsBlockFrame::ReflowFloat(nsBlockReflowState & {...}, nsPlaceholderFrame * 0x044beadc, nsFloatCache * 0x036687b8, unsigned int & 0) line 6029 + 54 bytes nsBlockReflowState::FlowAndPlaceFloat(nsFloatCache * 0x036687b8, int * 0x00129740, unsigned int & 0, int 0) line 853 nsBlockReflowState::AddFloat(nsLineLayout & {...}, nsPlaceholderFrame * 0x044beadc, int 0, unsigned int & 0) line 634 + 24 bytes nsLineLayout::AddFloat(nsPlaceholderFrame * 0x044beadc, unsigned int & 0) line 261 nsLineLayout::ReflowFrame(nsIFrame * 0x044beadc, unsigned int & 0, nsHTMLReflowMetrics * 0x00000000, int & 0) line 1017 + 22 bytes nsBlockFrame::ReflowInlineFrame(nsBlockReflowState & {...}, nsLineLayout & {...}, nsLineList_iterator {...}, nsIFrame * 0x044beadc, unsigned char * 0x001299eb) line 4058 + 22 bytes nsBlockFrame::DoReflowInlineFrames(nsBlockReflowState & {...}, nsLineLayout & {...}, nsLineList_iterator {...}, int * 0x00129db0, unsigned char * 0x00129af3, int 0, int 0, int 1) line 3897 + 32 bytes nsBlockFrame::ReflowInlineFrames(nsBlockReflowState & {...}, nsLineList_iterator {...}, int 1, int * 0x00129db0, int 0, int 0) line 3778 + 50 bytes nsBlockFrame::ReflowLine(nsBlockReflowState & {...}, nsLineList_iterator {...}, int 1, int * 0x00129db0, int 0) line 2771 + 37 bytes nsBlockFrame::ReflowDirtyLines(nsBlockReflowState & {...}, int 1) line 2301 + 35 bytes nsBlockFrame::Reflow(nsBlockFrame * const 0x044be2a0, nsPresContext * 0x0377ed40, nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, unsigned int & 0) line 903 + 17 bytes nsBlockReflowContext::ReflowBlock(const nsRect & {...}, int 1, nsCollapsingMargin & {...}, int 0, int 0, nsMargin & {...}, nsHTMLReflowState & {...}, unsigned int & 0) line 605 + 42 bytes nsBlockFrame::ReflowBlockFrame(nsBlockReflowState & {...}, nsLineList_iterator {...}, int * 0x0012aa18) line 3492 + 66 bytes nsBlockFrame::ReflowLine(nsBlockReflowState & {...}, nsLineList_iterator {...}, int 1, int * 0x0012aa18, int 0) line 2651 + 27 bytes nsBlockFrame::ReflowDirtyLines(nsBlockReflowState & {...}, int 1) line 2301 + 35 bytes nsBlockFrame::Reflow(nsBlockFrame * const 0x036ae214, nsPresContext * 0x0377ed40, nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, unsigned int & 0) line 903 + 17 bytes nsBlockReflowContext::ReflowBlock(const nsRect & {...}, int 1, nsCollapsingMargin & {...}, int 0, int 1, nsMargin & {...}, nsHTMLReflowState & {...}, unsigned int & 0) line 605 + 42 bytes nsBlockFrame::ReflowFloat(nsBlockReflowState & {...}, nsPlaceholderFrame * 0x036ae268, nsFloatCache * 0x037bc5d8, unsigned int & 0) line 6029 + 54 bytes nsBlockReflowState::FlowAndPlaceFloat(nsFloatCache * 0x037bc5d8, int * 0x0012b4f4, unsigned int & 0, int 0) line 853 nsBlockReflowState::AddFloat(nsLineLayout & {...}, nsPlaceholderFrame * 0x036ae268, int 0, unsigned int & 0) line 634 + 24 bytes nsLineLayout::AddFloat(nsPlaceholderFrame * 0x036ae268, unsigned int & 0) line 261 nsLineLayout::ReflowFrame(nsIFrame * 0x036ae268, unsigned int & 0, nsHTMLReflowMetrics * 0x00000000, int & 0) line 1017 + 22 bytes nsBlockFrame::ReflowInlineFrame(nsBlockReflowState & {...}, nsLineLayout & {...}, nsLineList_iterator {...}, nsIFrame * 0x036ae268, unsigned char * 0x0012b79f) line 4058 + 22 bytes nsBlockFrame::DoReflowInlineFrames(nsBlockReflowState & {...}, nsLineLayout & {...}, nsLineList_iterator {...}, int * 0x0012bb64, unsigned char * 0x0012b8a7, int 0, int 1, int 1) line 3897 + 32 bytes nsBlockFrame::ReflowInlineFrames(nsBlockReflowState & {...}, nsLineList_iterator {...}, int 1, int * 0x0012bb64, int 1, int 0) line 3778 + 50 bytes nsBlockFrame::ReflowLine(nsBlockReflowState & {...}, nsLineList_iterator {...}, int 1, int * 0x0012bb64, int 1) line 2771 + 37 bytes nsBlockFrame::ReflowDirtyLines(nsBlockReflowState & {...}, int 1) line 2301 + 35 bytes nsBlockFrame::Reflow(nsBlockFrame * const 0x036ad454, nsPresContext * 0x0377ed40, nsHTMLReflowMetrics & {...}, const nsHTMLReflowState & {...}, unsigned int & 0) line 903 + 17 bytes nsBlockReflowContext::ReflowBlock(const nsRect & {...}, int 1, nsCollapsingMargin & {...}, int 0, int 1, nsMargin & {...}, nsHTMLReflowState & {...}, unsigned int & 0) line 605 + 42 bytes nsBlockFrame::ReflowBlockFrame(nsBlockReflowState & {...}, nsLineList_iterator {...}, int * 0x0012c7cc) line 3492 + 66 bytes nsBlockFrame::ReflowLine(nsBlockReflowState & {...}, nsLineList_iterator {...}, int 1, int * 0x0012c7cc, int 1) line 2651 + 27 bytes nsBlockFrame::ReflowDirtyLines(nsBlockReflowState &
...
read more »
You must
Sign in before you can post messages.
You do not have the permission required to post.
Newsgroups: mozilla.dev.tech.plugins
From:
Benjamin Smedberg <benja... @smedbergs.us>
Date: Mon, 20 Oct 2008 08:46:21 -0400
Local: Mon, Oct 20 2008 8:46 am
Subject: Re: Call to do_GetService(NS_PROFILE_CONTRACTID) fails from within Plugin
edburns wrote:
> Why would this call
> nsCOMPtr<nsIProfileInternal> profileMgr > (do_GetService(NS_PROFILE_CONTRACTID, &rv));
> return rv == 2147746132 (NS_ERROR_FACTORY_NOT_REGISTERED)
> When invoked at the top of this callstack:
Because nsIProfile/nsIProfileInternal are not implemented in Firefox (and are in fact removed from the codebase). They haven't worked since well before Firefox 1.0 --BDS
You must
Sign in before you can post messages.
You do not have the permission required to post.