diff --git a/extras/browser plugins/How to build a browser plugin.txt b/extras/browser plugins/How to build a browser plugin.txt
new file mode 100644
index 0000000000..b85216e4e1
--- /dev/null
+++ b/extras/browser plugins/How to build a browser plugin.txt
@@ -0,0 +1,54 @@
+
+
+ Juce Browser Plugin Framework
+ =============================
+
+These classes let you easily turn a normal Juce component into a Mac/Windows NPAPI plugin
+for use in Firefox, Safari, Opera, etc.
+
+To create your plugin, your code just needs to implement the createBrowserPlugin() function
+to return a subclass of BrowserPluginComponent, and this acts as the plugin window.
+
+To communicate with javascript running in the host webpage, the 'var' and 'DynamicObject' juce
+classes emulate javascript objects, so you can create a javascript object that represents
+your plugin, and the webpage can invoke methods and access properties on this object. To
+get bi-directional communication between the plugin and webpage, your webpage can simply
+pass its own object to your plugin, and the plugin can call methods on this object to invoke
+javascript actions.
+
+In a similar style to audio plugins, your project has to contain a BrowserPluginCharacteristics.h
+file that defines various properties of the plugin.
+
+
+Building a Mac NPAPI Plugin with XCode
+--------------------------------------
+
+- Create a new "CFPlugin Bundle" project
+- Add the juce wrapper source files to the project (have a look at the demo project to
+ find out which files this includes).
+- Set up all the usual frameworks, etc, like you would for any other juce project.
+- In the project or target settings, change the "Wrapper Extension" to "plugin"
+- In your target, add a build phase "Build ResourceManager resources", and add the juce_NPAPI_MacResource.r file
+ to this step.
+- Check that your info.plist contains the same items as the demo plugin, because these needs to be set for the
+ browser to recognise it as a plugin. In particular, the "Bundle OS Type Code" should be set to BRPL.
+- The finished bundle needs to be copied into "/Library/Internet Plug-Ins", so you might want to set up a
+ post-build copy step to do this automatically
+
+
+Building a Windows NPAPI plugin in Visual Studio
+------------------------------------------------
+
+- Install the NPAPI framework and make sure that your include path is set up to include its headers
+- Create a new project to build a win32 DLL
+- Add the juce wrapper source files to the project (have a look at the demo project to
+ find out which files this includes).
+- Your compiled plugin DLL must begin with the letters 'np' (in lower case) for it to be recognised as
+ a plugin, so you should make sure your target settings reflect this.
+- To include the BrowserPluginCharacteristics.h file, you may need to add an include path to wherever this
+ file lives in your project. Don't use a global include path for this - just add it to the project's
+ search paths (both the c++ include paths and the resource include paths)
+- (Refer to the normal juce instructions for setting up other project settings such as which c++ libs to link to etc)
+- The finished plugin needs to be copied into "C:\Program Files\Mozilla Firefox\plugins", so you might want
+ to add a post-build step to copy it
+-
\ No newline at end of file
diff --git a/extras/browser plugins/demo/build/npapi_mac/English.lproj/InfoPlist.strings b/extras/browser plugins/demo/build/npapi_mac/English.lproj/InfoPlist.strings
new file mode 100644
index 0000000000..5e45963c38
Binary files /dev/null and b/extras/browser plugins/demo/build/npapi_mac/English.lproj/InfoPlist.strings differ
diff --git a/extras/browser plugins/demo/build/npapi_mac/Info.plist b/extras/browser plugins/demo/build/npapi_mac/Info.plist
new file mode 100644
index 0000000000..a57e13bec5
--- /dev/null
+++ b/extras/browser plugins/demo/build/npapi_mac/Info.plist
@@ -0,0 +1,28 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ English
+ CFBundleExecutable
+ ${EXECUTABLE_NAME}
+ CFBundleName
+ ${PRODUCT_NAME}
+ CFBundleIconFile
+
+ CFBundleIdentifier
+ com.yourcompany.${PRODUCT_NAME:identifier}
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundlePackageType
+ BRPL
+ CFBundleSignature
+ ????
+ CFBundleVersion
+ 1.0
+ CFBundleDisplayName
+ JuceBrowserPlugin_Desc
+ CFBundleShortVersionString
+ JuceBrowserPlugin_Name
+
+
diff --git a/extras/browser plugins/demo/build/npapi_mac/JuceBrowserPluginDemo.xcodeproj/TemplateIcon.tiff b/extras/browser plugins/demo/build/npapi_mac/JuceBrowserPluginDemo.xcodeproj/TemplateIcon.tiff
new file mode 100644
index 0000000000..82326a6c87
Binary files /dev/null and b/extras/browser plugins/demo/build/npapi_mac/JuceBrowserPluginDemo.xcodeproj/TemplateIcon.tiff differ
diff --git a/extras/browser plugins/demo/build/npapi_mac/JuceBrowserPluginDemo.xcodeproj/project.pbxproj b/extras/browser plugins/demo/build/npapi_mac/JuceBrowserPluginDemo.xcodeproj/project.pbxproj
new file mode 100644
index 0000000000..25d5335740
--- /dev/null
+++ b/extras/browser plugins/demo/build/npapi_mac/JuceBrowserPluginDemo.xcodeproj/project.pbxproj
@@ -0,0 +1,343 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 45;
+ objects = {
+
+/* Begin PBXBuildFile section */
+ 842CC42B0FA5BD3C008C7970 /* juce_NPAPI_GlueCode.mm in Sources */ = {isa = PBXBuildFile; fileRef = 842CC4290FA5BD3C008C7970 /* juce_NPAPI_GlueCode.mm */; };
+ 842CC4320FA5BD57008C7970 /* JuceBrowserPluginDemo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 842CC42E0FA5BD57008C7970 /* JuceBrowserPluginDemo.cpp */; };
+ 842CC4330FA5BD57008C7970 /* juce_LibrarySource.mm in Sources */ = {isa = PBXBuildFile; fileRef = 842CC42F0FA5BD57008C7970 /* juce_LibrarySource.mm */; };
+ 842CC8E20FA5D26A008C7970 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 842CC8D30FA5D26A008C7970 /* Carbon.framework */; };
+ 842CC8E30FA5D26A008C7970 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 842CC8D40FA5D26A008C7970 /* CoreFoundation.framework */; };
+ 842CC8E40FA5D26A008C7970 /* DiscRecording.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 842CC8D50FA5D26A008C7970 /* DiscRecording.framework */; };
+ 842CC8E50FA5D26A008C7970 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 842CC8D60FA5D26A008C7970 /* Cocoa.framework */; };
+ 842CC8E60FA5D26A008C7970 /* WebKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 842CC8D70FA5D26A008C7970 /* WebKit.framework */; };
+ 842CC8E70FA5D26A008C7970 /* AGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 842CC8D80FA5D26A008C7970 /* AGL.framework */; };
+ 842CC8E80FA5D26A008C7970 /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 842CC8D90FA5D26A008C7970 /* CoreAudio.framework */; };
+ 842CC8E90FA5D26A008C7970 /* CoreMIDI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 842CC8DA0FA5D26A008C7970 /* CoreMIDI.framework */; };
+ 842CC8EA0FA5D26A008C7970 /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 842CC8DB0FA5D26A008C7970 /* IOKit.framework */; };
+ 842CC8EB0FA5D26A008C7970 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 842CC8DC0FA5D26A008C7970 /* OpenGL.framework */; };
+ 842CC8EC0FA5D26A008C7970 /* QuickTime.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 842CC8DD0FA5D26A008C7970 /* QuickTime.framework */; };
+ 842CC8ED0FA5D26A008C7970 /* QTKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 842CC8DE0FA5D26A008C7970 /* QTKit.framework */; };
+ 842CC8EE0FA5D26A008C7970 /* CoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 842CC8DF0FA5D26A008C7970 /* CoreServices.framework */; };
+ 842CC8EF0FA5D26A008C7970 /* ApplicationServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 842CC8E00FA5D26A008C7970 /* ApplicationServices.framework */; };
+ 842CC8F00FA5D26A008C7970 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 842CC8E10FA5D26A008C7970 /* CoreFoundation.framework */; };
+ 842CC94A0FA5D934008C7970 /* juce_NPAPI_MacResource.r in Rez */ = {isa = PBXBuildFile; fileRef = 842CC42A0FA5BD3C008C7970 /* juce_NPAPI_MacResource.r */; };
+ 842CCB300FA5F201008C7970 /* JuceBrowserPluginDemo.bundle in CopyFiles */ = {isa = PBXBuildFile; fileRef = 842CC9360FA5D51F008C7970 /* JuceBrowserPluginDemo.bundle */; };
+ 8D5B49A804867FD3000E48DA /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 8D5B49A704867FD3000E48DA /* InfoPlist.strings */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXCopyFilesBuildPhase section */
+ 842CCB3F0FA5F204008C7970 /* CopyFiles */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "/Library/Internet Plug-Ins";
+ dstSubfolderSpec = 0;
+ files = (
+ 842CCB300FA5F201008C7970 /* JuceBrowserPluginDemo.bundle in CopyFiles */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXCopyFilesBuildPhase section */
+
+/* Begin PBXFileReference section */
+ 089C167EFE841241C02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = ""; };
+ 842CC4250FA5BD2D008C7970 /* How to build a browser plugin.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = "How to build a browser plugin.txt"; path = "../../../How to build a browser plugin.txt"; sourceTree = SOURCE_ROOT; };
+ 842CC4270FA5BD3C008C7970 /* juce_BrowserPluginComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_BrowserPluginComponent.h; path = ../../../wrapper/juce_BrowserPluginComponent.h; sourceTree = SOURCE_ROOT; };
+ 842CC4280FA5BD3C008C7970 /* juce_IncludeBrowserPluginInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_IncludeBrowserPluginInfo.h; path = ../../../wrapper/juce_IncludeBrowserPluginInfo.h; sourceTree = SOURCE_ROOT; };
+ 842CC4290FA5BD3C008C7970 /* juce_NPAPI_GlueCode.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = juce_NPAPI_GlueCode.mm; path = ../../../wrapper/juce_NPAPI_GlueCode.mm; sourceTree = SOURCE_ROOT; };
+ 842CC42A0FA5BD3C008C7970 /* juce_NPAPI_MacResource.r */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.rez; name = juce_NPAPI_MacResource.r; path = ../../../wrapper/juce_NPAPI_MacResource.r; sourceTree = SOURCE_ROOT; };
+ 842CC42E0FA5BD57008C7970 /* JuceBrowserPluginDemo.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = JuceBrowserPluginDemo.cpp; path = ../../src/JuceBrowserPluginDemo.cpp; sourceTree = SOURCE_ROOT; };
+ 842CC42F0FA5BD57008C7970 /* juce_LibrarySource.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = juce_LibrarySource.mm; path = ../../src/juce_LibrarySource.mm; sourceTree = SOURCE_ROOT; };
+ 842CC4310FA5BD57008C7970 /* BrowserPluginCharacteristics.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = BrowserPluginCharacteristics.h; path = ../../src/BrowserPluginCharacteristics.h; sourceTree = SOURCE_ROOT; };
+ 842CC8D30FA5D26A008C7970 /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = /System/Library/Frameworks/Carbon.framework; sourceTree = ""; };
+ 842CC8D40FA5D26A008C7970 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = /System/Library/Frameworks/CoreFoundation.framework; sourceTree = ""; };
+ 842CC8D50FA5D26A008C7970 /* DiscRecording.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = DiscRecording.framework; path = /System/Library/Frameworks/DiscRecording.framework; sourceTree = ""; };
+ 842CC8D60FA5D26A008C7970 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = ""; };
+ 842CC8D70FA5D26A008C7970 /* WebKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WebKit.framework; path = /System/Library/Frameworks/WebKit.framework; sourceTree = ""; };
+ 842CC8D80FA5D26A008C7970 /* AGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AGL.framework; path = /System/Library/Frameworks/AGL.framework; sourceTree = ""; };
+ 842CC8D90FA5D26A008C7970 /* CoreAudio.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudio.framework; path = /System/Library/Frameworks/CoreAudio.framework; sourceTree = ""; };
+ 842CC8DA0FA5D26A008C7970 /* CoreMIDI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMIDI.framework; path = /System/Library/Frameworks/CoreMIDI.framework; sourceTree = ""; };
+ 842CC8DB0FA5D26A008C7970 /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = /System/Library/Frameworks/IOKit.framework; sourceTree = ""; };
+ 842CC8DC0FA5D26A008C7970 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = /System/Library/Frameworks/OpenGL.framework; sourceTree = ""; };
+ 842CC8DD0FA5D26A008C7970 /* QuickTime.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuickTime.framework; path = /System/Library/Frameworks/QuickTime.framework; sourceTree = ""; };
+ 842CC8DE0FA5D26A008C7970 /* QTKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QTKit.framework; path = /System/Library/Frameworks/QTKit.framework; sourceTree = ""; };
+ 842CC8DF0FA5D26A008C7970 /* CoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreServices.framework; path = /System/Library/Frameworks/CoreServices.framework; sourceTree = ""; };
+ 842CC8E00FA5D26A008C7970 /* ApplicationServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ApplicationServices.framework; path = /System/Library/Frameworks/ApplicationServices.framework; sourceTree = ""; };
+ 842CC8E10FA5D26A008C7970 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = /System/Library/Frameworks/CoreFoundation.framework; sourceTree = ""; };
+ 842CC9360FA5D51F008C7970 /* JuceBrowserPluginDemo.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = JuceBrowserPluginDemo.bundle; sourceTree = BUILT_PRODUCTS_DIR; };
+ 842CC93B0FA5D5D1008C7970 /* test.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; name = test.html; path = ../../test.html; sourceTree = SOURCE_ROOT; };
+ 8D576317048677EA00EA77CD /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+ 8D576313048677EA00EA77CD /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 842CC8E20FA5D26A008C7970 /* Carbon.framework in Frameworks */,
+ 842CC8E30FA5D26A008C7970 /* CoreFoundation.framework in Frameworks */,
+ 842CC8E40FA5D26A008C7970 /* DiscRecording.framework in Frameworks */,
+ 842CC8E50FA5D26A008C7970 /* Cocoa.framework in Frameworks */,
+ 842CC8E60FA5D26A008C7970 /* WebKit.framework in Frameworks */,
+ 842CC8E70FA5D26A008C7970 /* AGL.framework in Frameworks */,
+ 842CC8E80FA5D26A008C7970 /* CoreAudio.framework in Frameworks */,
+ 842CC8E90FA5D26A008C7970 /* CoreMIDI.framework in Frameworks */,
+ 842CC8EA0FA5D26A008C7970 /* IOKit.framework in Frameworks */,
+ 842CC8EB0FA5D26A008C7970 /* OpenGL.framework in Frameworks */,
+ 842CC8EC0FA5D26A008C7970 /* QuickTime.framework in Frameworks */,
+ 842CC8ED0FA5D26A008C7970 /* QTKit.framework in Frameworks */,
+ 842CC8EE0FA5D26A008C7970 /* CoreServices.framework in Frameworks */,
+ 842CC8EF0FA5D26A008C7970 /* ApplicationServices.framework in Frameworks */,
+ 842CC8F00FA5D26A008C7970 /* CoreFoundation.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ 089C166AFE841209C02AAC07 /* JuceBrowserPluginDemo */ = {
+ isa = PBXGroup;
+ children = (
+ 08FB77AFFE84173DC02AAC07 /* Source */,
+ 089C167CFE841241C02AAC07 /* Resources */,
+ 089C1671FE841209C02AAC07 /* External Frameworks and Libraries */,
+ 842CC9370FA5D51F008C7970 /* Products */,
+ );
+ name = JuceBrowserPluginDemo;
+ sourceTree = "";
+ };
+ 089C1671FE841209C02AAC07 /* External Frameworks and Libraries */ = {
+ isa = PBXGroup;
+ children = (
+ 842CC8D30FA5D26A008C7970 /* Carbon.framework */,
+ 842CC8D40FA5D26A008C7970 /* CoreFoundation.framework */,
+ 842CC8D50FA5D26A008C7970 /* DiscRecording.framework */,
+ 842CC8D60FA5D26A008C7970 /* Cocoa.framework */,
+ 842CC8D70FA5D26A008C7970 /* WebKit.framework */,
+ 842CC8D80FA5D26A008C7970 /* AGL.framework */,
+ 842CC8D90FA5D26A008C7970 /* CoreAudio.framework */,
+ 842CC8DA0FA5D26A008C7970 /* CoreMIDI.framework */,
+ 842CC8DB0FA5D26A008C7970 /* IOKit.framework */,
+ 842CC8DC0FA5D26A008C7970 /* OpenGL.framework */,
+ 842CC8DD0FA5D26A008C7970 /* QuickTime.framework */,
+ 842CC8DE0FA5D26A008C7970 /* QTKit.framework */,
+ 842CC8DF0FA5D26A008C7970 /* CoreServices.framework */,
+ 842CC8E00FA5D26A008C7970 /* ApplicationServices.framework */,
+ 842CC8E10FA5D26A008C7970 /* CoreFoundation.framework */,
+ );
+ name = "External Frameworks and Libraries";
+ sourceTree = "";
+ };
+ 089C167CFE841241C02AAC07 /* Resources */ = {
+ isa = PBXGroup;
+ children = (
+ 8D576317048677EA00EA77CD /* Info.plist */,
+ 8D5B49A704867FD3000E48DA /* InfoPlist.strings */,
+ );
+ name = Resources;
+ sourceTree = "";
+ };
+ 08FB77AFFE84173DC02AAC07 /* Source */ = {
+ isa = PBXGroup;
+ children = (
+ 842CC4250FA5BD2D008C7970 /* How to build a browser plugin.txt */,
+ 842CC93B0FA5D5D1008C7970 /* test.html */,
+ 842CC4130FA5BB01008C7970 /* wrapper code */,
+ 842CC42E0FA5BD57008C7970 /* JuceBrowserPluginDemo.cpp */,
+ 842CC42F0FA5BD57008C7970 /* juce_LibrarySource.mm */,
+ 842CC4310FA5BD57008C7970 /* BrowserPluginCharacteristics.h */,
+ );
+ name = Source;
+ sourceTree = "";
+ };
+ 842CC4130FA5BB01008C7970 /* wrapper code */ = {
+ isa = PBXGroup;
+ children = (
+ 842CC4270FA5BD3C008C7970 /* juce_BrowserPluginComponent.h */,
+ 842CC4280FA5BD3C008C7970 /* juce_IncludeBrowserPluginInfo.h */,
+ 842CC4290FA5BD3C008C7970 /* juce_NPAPI_GlueCode.mm */,
+ 842CC42A0FA5BD3C008C7970 /* juce_NPAPI_MacResource.r */,
+ );
+ name = "wrapper code";
+ sourceTree = "";
+ };
+ 842CC9370FA5D51F008C7970 /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ 842CC9360FA5D51F008C7970 /* JuceBrowserPluginDemo.bundle */,
+ );
+ name = Products;
+ sourceTree = "";
+ };
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+ 8D57630D048677EA00EA77CD /* JuceBrowserPluginDemo */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 1DEB911A08733D790010E9CD /* Build configuration list for PBXNativeTarget "JuceBrowserPluginDemo" */;
+ buildPhases = (
+ 842CC9580FA5D939008C7970 /* Rez */,
+ 8D57630F048677EA00EA77CD /* Resources */,
+ 8D576311048677EA00EA77CD /* Sources */,
+ 8D576313048677EA00EA77CD /* Frameworks */,
+ 842CCB3F0FA5F204008C7970 /* CopyFiles */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = JuceBrowserPluginDemo;
+ productInstallPath = "$(HOME)/Library/Bundles";
+ productName = JuceBrowserPluginDemo;
+ productReference = 842CC9360FA5D51F008C7970 /* JuceBrowserPluginDemo.bundle */;
+ productType = "com.apple.product-type.bundle";
+ };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+ 089C1669FE841209C02AAC07 /* Project object */ = {
+ isa = PBXProject;
+ buildConfigurationList = 1DEB911E08733D790010E9CD /* Build configuration list for PBXProject "JuceBrowserPluginDemo" */;
+ compatibilityVersion = "Xcode 3.1";
+ hasScannedForEncodings = 1;
+ mainGroup = 089C166AFE841209C02AAC07 /* JuceBrowserPluginDemo */;
+ productRefGroup = 842CC9370FA5D51F008C7970 /* Products */;
+ projectDirPath = "";
+ projectRoot = "";
+ targets = (
+ 8D57630D048677EA00EA77CD /* JuceBrowserPluginDemo */,
+ );
+ };
+/* End PBXProject section */
+
+/* Begin PBXResourcesBuildPhase section */
+ 8D57630F048677EA00EA77CD /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 8D5B49A804867FD3000E48DA /* InfoPlist.strings in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXRezBuildPhase section */
+ 842CC9580FA5D939008C7970 /* Rez */ = {
+ isa = PBXRezBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 842CC94A0FA5D934008C7970 /* juce_NPAPI_MacResource.r in Rez */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXRezBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+ 8D576311048677EA00EA77CD /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 842CC42B0FA5BD3C008C7970 /* juce_NPAPI_GlueCode.mm in Sources */,
+ 842CC4320FA5BD57008C7970 /* JuceBrowserPluginDemo.cpp in Sources */,
+ 842CC4330FA5BD57008C7970 /* juce_LibrarySource.mm in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXVariantGroup section */
+ 8D5B49A704867FD3000E48DA /* InfoPlist.strings */ = {
+ isa = PBXVariantGroup;
+ children = (
+ 089C167EFE841241C02AAC07 /* English */,
+ );
+ name = InfoPlist.strings;
+ sourceTree = "";
+ };
+/* End PBXVariantGroup section */
+
+/* Begin XCBuildConfiguration section */
+ 1DEB911B08733D790010E9CD /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ COPY_PHASE_STRIP = NO;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_ENABLE_FIX_AND_CONTINUE = YES;
+ GCC_MODEL_TUNING = G5;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ INFOPLIST_FILE = Info.plist;
+ INSTALL_PATH = "$(HOME)/Library/Bundles";
+ PRODUCT_NAME = JuceBrowserPluginDemo;
+ WRAPPER_EXTENSION = plugin;
+ };
+ name = Debug;
+ };
+ 1DEB911C08733D790010E9CD /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+ GCC_MODEL_TUNING = G5;
+ INFOPLIST_FILE = Info.plist;
+ INSTALL_PATH = "$(HOME)/Library/Bundles";
+ PRODUCT_NAME = JuceBrowserPluginDemo;
+ WRAPPER_EXTENSION = bundle;
+ };
+ name = Release;
+ };
+ 1DEB911F08733D790010E9CD /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ARCHS = "$(ARCHS_STANDARD_32_BIT)";
+ GCC_C_LANGUAGE_STANDARD = c99;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ ONLY_ACTIVE_ARCH = YES;
+ PREBINDING = NO;
+ SDKROOT = macosx10.5;
+ };
+ name = Debug;
+ };
+ 1DEB912008733D790010E9CD /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ARCHS = "$(ARCHS_STANDARD_32_BIT)";
+ GCC_C_LANGUAGE_STANDARD = c99;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ PREBINDING = NO;
+ SDKROOT = macosx10.5;
+ };
+ name = Release;
+ };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+ 1DEB911A08733D790010E9CD /* Build configuration list for PBXNativeTarget "JuceBrowserPluginDemo" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 1DEB911B08733D790010E9CD /* Debug */,
+ 1DEB911C08733D790010E9CD /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 1DEB911E08733D790010E9CD /* Build configuration list for PBXProject "JuceBrowserPluginDemo" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 1DEB911F08733D790010E9CD /* Debug */,
+ 1DEB912008733D790010E9CD /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+/* End XCConfigurationList section */
+ };
+ rootObject = 089C1669FE841209C02AAC07 /* Project object */;
+}
diff --git a/extras/browser plugins/demo/build/npapi_win/JuceBrowserPluginDemo.sln b/extras/browser plugins/demo/build/npapi_win/JuceBrowserPluginDemo.sln
new file mode 100644
index 0000000000..c05fe8a99e
--- /dev/null
+++ b/extras/browser plugins/demo/build/npapi_win/JuceBrowserPluginDemo.sln
@@ -0,0 +1,20 @@
+
+Microsoft Visual Studio Solution File, Format Version 10.00
+# Visual C++ Express 2008
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "JuceBrowserPluginDemo", "JuceBrowserPluginDemo.vcproj", "{865C6463-5BC7-4F36-8667-FF9221C32797}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Release|Win32 = Release|Win32
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {865C6463-5BC7-4F36-8667-FF9221C32797}.Debug|Win32.ActiveCfg = Debug|Win32
+ {865C6463-5BC7-4F36-8667-FF9221C32797}.Debug|Win32.Build.0 = Debug|Win32
+ {865C6463-5BC7-4F36-8667-FF9221C32797}.Release|Win32.ActiveCfg = Release|Win32
+ {865C6463-5BC7-4F36-8667-FF9221C32797}.Release|Win32.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/extras/browser plugins/demo/build/npapi_win/JuceBrowserPluginDemo.vcproj b/extras/browser plugins/demo/build/npapi_win/JuceBrowserPluginDemo.vcproj
new file mode 100644
index 0000000000..80ab4ca13f
--- /dev/null
+++ b/extras/browser plugins/demo/build/npapi_win/JuceBrowserPluginDemo.vcproj
@@ -0,0 +1,216 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/extras/browser plugins/demo/src/BrowserPluginCharacteristics.h b/extras/browser plugins/demo/src/BrowserPluginCharacteristics.h
new file mode 100644
index 0000000000..1ef6f0399c
--- /dev/null
+++ b/extras/browser plugins/demo/src/BrowserPluginCharacteristics.h
@@ -0,0 +1,37 @@
+/*
+ ==============================================================================
+
+ This file contains values that describe your plugin's behaviour.
+
+ ==============================================================================
+*/
+
+
+//==============================================================================
+#define JuceBrowserPlugin_Company "Raw Material Software Ltd"
+#define JuceBrowserPlugin_Name "Juce Plugin Demo!"
+#define JuceBrowserPlugin_Desc "Juce Browser Plugin Demo!"
+
+//==============================================================================
+/** This should be the same version number, in different forms..
+*/
+#define JuceBrowserPlugin_Version "0.1"
+#define JuceBrowserPlugin_WinVersion 0, 0, 1, 0
+
+//==============================================================================
+/** This is the mime-type of the plugin.
+
+ In your HTML, this is the 'type' parameter of the embed tag, e.g.
+
+