Not part of the build. Adding of files from the Layout-Debug object.

This commit is contained in:
dcone%netscape.com 2002-03-12 22:08:59 +00:00
Родитель aaba13d85c
Коммит 9b85211544
10 изменённых файлов: 979 добавлений и 0 удалений

Просмотреть файл

Просмотреть файл

@ -0,0 +1,83 @@
#!nmake
#
# The contents of this file are subject to the Netscape Public
# License Version 1.1 (the "License"); you may not use this file
# except in compliance with the License. You may obtain a copy of
# the License at http://www.mozilla.org/NPL/
#
# Software distributed under the License is distributed on an "AS
# IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
# implied. See the License for the specific language governing
# rights and limitations under the License.
#
# The Original Code is mozilla.org code.
#
# The Initial Developer of the Original Code is Netscape
# Communications Corporation. Portions created by Netscape are
# Copyright (C) 1998 Netscape Communications Corporation. All
# Rights Reserved.
#
# Contributor(s):
DEPTH=..\..\..
MODULE = npdebug
REQUIRES= xpcom \
dom \
necko\
string \
widget \
locale \
view \
pref \
gfx2 \
imglib2 \
unicharutil \
java \
debug \
$(NULL)
include <$(DEPTH)\config\config.mak>
XPIDLSRCS = \
.\nsIDebugPlugin.idl \
$(NULL)
MAKE_OBJ_TYPE = DLL
DLLNAME = npdebug
RESFILE = npdebug.res
DEFFILE = npdebug.def
DLL=.\$(OBJDIR)\$(DLLNAME).dll
CFLAGS = $(CFLAGS) -I.\include
OBJS = \
.\$(OBJDIR)\plugin.obj \
.\$(OBJDIR)\nsScriptablePeer.obj \
$(NULL)
LLIBS = \
.\common\$(OBJDIR)\plugingate.lib \
$(DIST)\lib\xpcom.lib \
$(NULL)
WIN_LIBS = version.lib
include <$(DEPTH)\config\rules.mak>
# don't forget to remove files exported by default
libs:: $(DLL)
$(RM) $(XPDIST)\idl\nsIDebugPlugin.idl
$(RM) $(XPDIST)\include\nsIDebugPlugin.h
# $(RM) $(DIST)\bin\components\$(DLLNAME).xpt
$(MAKE_INSTALL) .\$(OBJDIR)\$(DLLNAME).dll $(DIST)\bin\plugins
clobber::
$(RM) *.sbr
$(RM) $(XPDIST)\idl\nsIDebugPlugin.idl
$(RM) $(XPDIST)\include\nsIDebugPlugin.h
$(RM) $(DIST)\bin\components\$(DLLNAME).xpt
$(RM) $(DIST)\bin\plugins\$(DLLNAME).dll

Просмотреть файл

@ -0,0 +1,122 @@
/*
* DO NOT EDIT. THIS FILE IS GENERATED FROM nsIDebugPlugin.idl
*/
#ifndef __gen_nsIDebugPlugin_h__
#define __gen_nsIDebugPlugin_h__
#ifndef __gen_nsISupports_h__
#include "nsISupports.h"
#endif
/* For IDL files that don't want to include root IDL files. */
#ifndef NS_NO_VTABLE
#define NS_NO_VTABLE
#endif
/* starting interface: nsIDebugPlugin */
#define NS_IDEBUGPLUGIN_IID_STR "482e1890-1fe5-11d5-9cf8-0060b0fbd8ac"
#define NS_IDEBUGPLUGIN_IID \
{0x482e1890, 0x1fe5, 0x11d5, \
{ 0x9c, 0xf8, 0x00, 0x60, 0xb0, 0xfb, 0xd8, 0xac }}
class NS_NO_VTABLE nsIDebugPlugin : public nsISupports {
public:
NS_DEFINE_STATIC_IID_ACCESSOR(NS_IDEBUGPLUGIN_IID)
/* readonly attribute string version; */
NS_IMETHOD GetVersion(char * *aVersion) = 0;
/* void DumpLayout (in nsISupports aWindow, in wstring aFilePath, in wstring aFileName); */
NS_IMETHOD DumpLayout(nsISupports *aWindow, const PRUnichar *aFilePath, const PRUnichar *aFileName) = 0;
/* void StartDirectorySearch (in string aFilePath); */
NS_IMETHOD StartDirectorySearch(const char *aFilePath) = 0;
/* void GetNextFileInDirectory ([retval] out string aFileName); */
NS_IMETHOD GetNextFileInDirectory(char **aFileName) = 0;
};
/* Use this macro when declaring classes that implement this interface. */
#define NS_DECL_NSIDEBUGPLUGIN \
NS_IMETHOD GetVersion(char * *aVersion); \
NS_IMETHOD DumpLayout(nsISupports *aWindow, const PRUnichar *aFilePath, const PRUnichar *aFileName); \
NS_IMETHOD StartDirectorySearch(const char *aFilePath); \
NS_IMETHOD GetNextFileInDirectory(char **aFileName);
/* Use this macro to declare functions that forward the behavior of this interface to another object. */
#define NS_FORWARD_NSIDEBUGPLUGIN(_to) \
NS_IMETHOD GetVersion(char * *aVersion) { return _to GetVersion(aVersion); } \
NS_IMETHOD DumpLayout(nsISupports *aWindow, const PRUnichar *aFilePath, const PRUnichar *aFileName) { return _to DumpLayout(aWindow, aFilePath, aFileName); } \
NS_IMETHOD StartDirectorySearch(const char *aFilePath) { return _to StartDirectorySearch(aFilePath); } \
NS_IMETHOD GetNextFileInDirectory(char **aFileName) { return _to GetNextFileInDirectory(aFileName); }
/* Use this macro to declare functions that forward the behavior of this interface to another object in a safe way. */
#define NS_FORWARD_SAFE_NSIDEBUGPLUGIN(_to) \
NS_IMETHOD GetVersion(char * *aVersion) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetVersion(aVersion); } \
NS_IMETHOD DumpLayout(nsISupports *aWindow, const PRUnichar *aFilePath, const PRUnichar *aFileName) { return !_to ? NS_ERROR_NULL_POINTER : _to->DumpLayout(aWindow, aFilePath, aFileName); } \
NS_IMETHOD StartDirectorySearch(const char *aFilePath) { return !_to ? NS_ERROR_NULL_POINTER : _to->StartDirectorySearch(aFilePath); } \
NS_IMETHOD GetNextFileInDirectory(char **aFileName) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetNextFileInDirectory(aFileName); }
#if 0
/* Use the code below as a template for the implementation class for this interface. */
/* Header file */
class nsDebugPlugin : public nsIDebugPlugin
{
public:
NS_DECL_ISUPPORTS
NS_DECL_NSIDEBUGPLUGIN
nsDebugPlugin();
virtual ~nsDebugPlugin();
/* additional members */
};
/* Implementation file */
NS_IMPL_ISUPPORTS1(nsDebugPlugin, nsIDebugPlugin)
nsDebugPlugin::nsDebugPlugin()
{
NS_INIT_ISUPPORTS();
/* member initializers and constructor code */
}
nsDebugPlugin::~nsDebugPlugin()
{
/* destructor code */
}
/* readonly attribute string version; */
NS_IMETHODIMP nsDebugPlugin::GetVersion(char * *aVersion)
{
return NS_ERROR_NOT_IMPLEMENTED;
}
/* void DumpLayout (in nsISupports aWindow, in wstring aFilePath, in wstring aFileName); */
NS_IMETHODIMP nsDebugPlugin::DumpLayout(nsISupports *aWindow, const PRUnichar *aFilePath, const PRUnichar *aFileName)
{
return NS_ERROR_NOT_IMPLEMENTED;
}
/* void StartDirectorySearch (in string aFilePath); */
NS_IMETHODIMP nsDebugPlugin::StartDirectorySearch(const char *aFilePath)
{
return NS_ERROR_NOT_IMPLEMENTED;
}
/* void GetNextFileInDirectory ([retval] out string aFileName); */
NS_IMETHODIMP nsDebugPlugin::GetNextFileInDirectory(char **aFileName)
{
return NS_ERROR_NOT_IMPLEMENTED;
}
/* End of implementation class template. */
#endif
#endif /* __gen_nsIDebugPlugin_h__ */

Просмотреть файл

@ -0,0 +1,32 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Mozilla Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 2001 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
*/
#include "nsISupports.idl"
[scriptable, uuid(482e1890-1fe5-11d5-9cf8-0060b0fbd8ac)]
interface nsIDebugPlugin : nsISupports {
readonly attribute string version;
void DumpLayout(in nsISupports aWindow,in wstring aFilePath,in wstring aFileName);
void StartDirectorySearch(in string aFilePath);
void GetNextFileInDirectory([retval] out string aFileName);
};

Просмотреть файл

@ -0,0 +1,153 @@
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/* ***** BEGIN LICENSE BLOCK *****
* Version: NPL 1.1/GPL 2.0/LGPL 2.1
*
* The contents of this file are subject to the Netscape Public License
* Version 1.1 (the "License"); you may not use this file except in
* compliance with the License. You may obtain a copy of the License at
* http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
* for the specific language governing rights and limitations under the
* License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is
* Netscape Communications Corporation.
* Portions created by the Initial Developer are Copyright (C) 1998
* the Initial Developer. All Rights Reserved.
*
* Contributor(s):
*
* Alternatively, the contents of this file may be used under the terms of
* either the GNU General Public License Version 2 or later (the "GPL"), or
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
* in which case the provisions of the GPL or the LGPL are applicable instead
* of those above. If you wish to allow use of your version of this file only
* under the terms of either the GPL or the LGPL, and not to allow others to
* use your version of this file under the terms of the NPL, indicate your
* decision by deleting the provisions above and replace them with the notice
* and other provisions required by the GPL or the LGPL. If you do not delete
* the provisions above, a recipient may use your version of this file under
* the terms of any one of the NPL, the GPL or the LGPL.
*
* ***** END LICENSE BLOCK ***** */
// ==============================
// ! Scriptability related code !
// ==============================
/////////////////////////////////////////////////////
//
// This file implements the nsScriptablePeer object
// The native methods of this class are supposed to
// be callable from JavaScript
//
#include "plugin.h"
static NS_DEFINE_IID(kIDebugPluginIID, NS_IDEBUGPLUGIN_IID);
static NS_DEFINE_IID(kIClassInfoIID, NS_ICLASSINFO_IID);
static NS_DEFINE_IID(kISupportsIID, NS_ISUPPORTS_IID);
nsScriptablePeer::nsScriptablePeer(nsPluginInstance* aPlugin)
{
mPlugin = aPlugin;
mRefCnt = 0;
}
nsScriptablePeer::~nsScriptablePeer()
{
}
// AddRef, Release and QueryInterface are common methods and must
// be implemented for any interface
NS_IMETHODIMP_(nsrefcnt) nsScriptablePeer::AddRef()
{
++mRefCnt;
return mRefCnt;
}
NS_IMETHODIMP_(nsrefcnt) nsScriptablePeer::Release()
{
--mRefCnt;
if (mRefCnt == 0) {
delete this;
return 0;
}
return mRefCnt;
}
// here nsScriptablePeer should return three interfaces it can be asked for by their iid's
// static casts are necessary to ensure that correct pointer is returned
NS_IMETHODIMP nsScriptablePeer::QueryInterface(const nsIID& aIID, void** aInstancePtr)
{
if(!aInstancePtr)
return NS_ERROR_NULL_POINTER;
if(aIID.Equals(kIDebugPluginIID)) {
*aInstancePtr = static_cast<nsIDebugPlugin*>(this);
AddRef();
return NS_OK;
}
if(aIID.Equals(kIClassInfoIID)) {
*aInstancePtr = static_cast<nsIClassInfo*>(this);
AddRef();
return NS_OK;
}
if(aIID.Equals(kISupportsIID)) {
*aInstancePtr = static_cast<nsISupports*>(static_cast<nsIDebugPlugin*>(this));
AddRef();
return NS_OK;
}
return NS_NOINTERFACE;
}
//
// the following method will be callable from JavaScript
//
NS_IMETHODIMP nsScriptablePeer::GetVersion(char * *aVersion)
{
if (mPlugin)
mPlugin->getVersion(aVersion);
return NS_OK;
}
NS_IMETHODIMP nsScriptablePeer::DumpLayout(nsISupports *aWindow, const PRUnichar *aFilePath, const PRUnichar *aFileName)
{
if (mPlugin)
mPlugin->DumpLayout(aWindow,aFilePath,aFileName);
return NS_OK;
}
//
// the following method will be callable from JavaScript
//
NS_IMETHODIMP nsScriptablePeer::StartDirectorySearch(const char *aFilePath)
{
if (mPlugin)
mPlugin->StartDirectorySearch(aFilePath);
return NS_OK;
}
NS_IMETHODIMP nsScriptablePeer::GetNextFileInDirectory(char **aFilePath)
{
if (mPlugin)
mPlugin->GetNextFileInDirectory(aFilePath);
return NS_OK;
}

Просмотреть файл

@ -0,0 +1,105 @@
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/* ***** BEGIN LICENSE BLOCK *****
* Version: NPL 1.1/GPL 2.0/LGPL 2.1
*
* The contents of this file are subject to the Netscape Public License
* Version 1.1 (the "License"); you may not use this file except in
* compliance with the License. You may obtain a copy of the License at
* http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
* for the specific language governing rights and limitations under the
* License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is
* Netscape Communications Corporation.
* Portions created by the Initial Developer are Copyright (C) 1998
* the Initial Developer. All Rights Reserved.
*
* Contributor(s):
*
* Alternatively, the contents of this file may be used under the terms of
* either the GNU General Public License Version 2 or later (the "GPL"), or
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
* in which case the provisions of the GPL or the LGPL are applicable instead
* of those above. If you wish to allow use of your version of this file only
* under the terms of either the GPL or the LGPL, and not to allow others to
* use your version of this file under the terms of the NPL, indicate your
* decision by deleting the provisions above and replace them with the notice
* and other provisions required by the GPL or the LGPL. If you do not delete
* the provisions above, a recipient may use your version of this file under
* the terms of any one of the NPL, the GPL or the LGPL.
*
* ***** END LICENSE BLOCK ***** */
// ==============================
// ! Scriptability related code !
// ==============================
//
// nsScriptablePeer - xpconnect scriptable peer
//
#ifndef __nsScriptablePeer_h__
#define __nsScriptablePeer_h__
#include "nsIDebugPlugin.h"
#include "nsIClassInfo.h"
class nsPluginInstance;
// We must implement nsIClassInfo because it signals the
// Mozilla Security Manager to allow calls from JavaScript.
class nsClassInfoMixin : public nsIClassInfo
{
// These flags are used by the DOM and security systems to signal that
// JavaScript callers are allowed to call this object's scritable methods.
NS_IMETHOD GetFlags(PRUint32 *aFlags)
{*aFlags = nsIClassInfo::PLUGIN_OBJECT | nsIClassInfo::DOM_OBJECT;
return NS_OK;}
NS_IMETHOD GetImplementationLanguage(PRUint32 *aImplementationLanguage)
{*aImplementationLanguage = nsIProgrammingLanguage::CPLUSPLUS;
return NS_OK;}
// The rest of the methods can safely return error codes...
NS_IMETHOD GetInterfaces(PRUint32 *count, nsIID * **array)
{return NS_ERROR_NOT_IMPLEMENTED;}
NS_IMETHOD GetHelperForLanguage(PRUint32 language, nsISupports **_retval)
{return NS_ERROR_NOT_IMPLEMENTED;}
NS_IMETHOD GetContractID(char * *aContractID)
{return NS_ERROR_NOT_IMPLEMENTED;}
NS_IMETHOD GetClassDescription(char * *aClassDescription)
{return NS_ERROR_NOT_IMPLEMENTED;}
NS_IMETHOD GetClassID(nsCID * *aClassID)
{return NS_ERROR_NOT_IMPLEMENTED;}
NS_IMETHOD GetClassIDNoAlloc(nsCID *aClassIDNoAlloc)
{return NS_ERROR_NOT_IMPLEMENTED;}
};
class nsScriptablePeer : public nsIDebugPlugin,
public nsClassInfoMixin
{
public:
nsScriptablePeer(nsPluginInstance* plugin);
~nsScriptablePeer();
public:
// methods from nsISupports
NS_IMETHOD QueryInterface(const nsIID& aIID, void** aInstancePtr);
NS_IMETHOD_(nsrefcnt) AddRef();
NS_IMETHOD_(nsrefcnt) Release();
protected:
nsrefcnt mRefCnt;
public:
// native methods callable from JavaScript
NS_DECL_NSIDEBUGPLUGIN
protected:
nsPluginInstance* mPlugin;
};
#endif

Просмотреть файл

@ -0,0 +1,330 @@
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/* ***** BEGIN LICENSE BLOCK *****
* Version: NPL 1.1/GPL 2.0/LGPL 2.1
*
* The contents of this file are subject to the Netscape Public License
* Version 1.1 (the "License"); you may not use this file except in
* compliance with the License. You may obtain a copy of the License at
* http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
* for the specific language governing rights and limitations under the
* License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is
* Netscape Communications Corporation.
* Portions created by the Initial Developer are Copyright (C) 1998
* the Initial Developer. All Rights Reserved.
*
* Contributor(s):
*
* Alternatively, the contents of this file may be used under the terms of
* either the GNU General Public License Version 2 or later (the "GPL"), or
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
* in which case the provisions of the GPL or the LGPL are applicable instead
* of those above. If you wish to allow use of your version of this file only
* under the terms of either the GPL or the LGPL, and not to allow others to
* use your version of this file under the terms of the NPL, indicate your
* decision by deleting the provisions above and replace them with the notice
* and other provisions required by the GPL or the LGPL. If you do not delete
* the provisions above, a recipient may use your version of this file under
* the terms of any one of the NPL, the GPL or the LGPL.
*
* ***** END LICENSE BLOCK ***** */
#include "plugin.h"
#include "nsIServiceManager.h"
#include "nsIMemory.h"
#include "nsIDebugObject.h"
#include "nsXPIDLString.h"
#include "nsIFile.h"
#include "nsILocalFile.h"
#include "nsISimpleEnumerator.h"
#include "nsMemory.h"
#include "nsNetUtil.h"
// service manager which will give the access to all public browser services
// we will use memory service as an illustration
nsIServiceManager * gServiceManager = NULL;
//static NS_DEFINE_IID(kMemoryCID, NS_MEMORY_CID);
// Unix needs this
#ifdef XP_UNIX
#define MIME_TYPES_HANDLED "application/debug-plugin"
#define PLUGIN_NAME "Debug Plugin"
#define PLUGIN_DESCRIPTION "Debug Plugin"
char* NPP_GetMIMEDescription(void)
{
return(MIME_TYPES_HANDLED);
}
#endif //XP_UNIX
//////////////////////////////////////
//
// general initialization and shutdown
//
NPError NS_PluginInitialize()
{
// this is probably a good place to get the service manager
// note that Mozilla will add reference, so do not forget to release
nsISupports * sm = NULL;
NPN_GetValue(NULL, NPNVserviceManager, &sm);
// Mozilla returns nsIServiceManagerObsolete which can be queried for nsIServiceManager
if(sm) {
sm->QueryInterface(NS_GET_IID(nsIServiceManager), (void**)&gServiceManager);
NS_RELEASE(sm);
}
return NPERR_NO_ERROR;
}
void NS_PluginShutdown()
{
// we should release the service manager
NS_IF_RELEASE(gServiceManager);
gServiceManager = NULL;
}
/////////////////////////////////////////////////////////////
//
// construction and destruction of our plugin instance object
//
nsPluginInstanceBase * NS_NewPluginInstance(nsPluginCreateData * aCreateDataStruct)
{
if(!aCreateDataStruct)
return NULL;
nsPluginInstance * plugin = new nsPluginInstance(aCreateDataStruct->instance);
return plugin;
}
void NS_DestroyPluginInstance(nsPluginInstanceBase * aPlugin)
{
if(aPlugin)
delete aPlugin;
}
////////////////////////////////////////
//
// nsPluginInstance class implementation
//
nsPluginInstance::nsPluginInstance(NPP aInstance) : nsPluginInstanceBase(),
mInstance(aInstance),
mInitialized(FALSE),
mScriptablePeer(NULL)
{
mString[0] = '\0';
}
nsPluginInstance::~nsPluginInstance()
{
NS_IF_RELEASE(mScriptablePeer);
}
NPBool nsPluginInstance::init(NPWindow* aWindow)
{
if(aWindow == NULL)
return FALSE;
mInitialized = TRUE;
return TRUE;
}
void nsPluginInstance::shut()
{
mInitialized = FALSE;
}
NPBool nsPluginInstance::isInitialized()
{
return mInitialized;
}
void nsPluginInstance::getVersion(char* *aVersion)
{
const char *ua = NPN_UserAgent(mInstance);
char*& version = *aVersion;
// although we can use NPAPI NPN_MemAlloc call to allocate memory:
// version = (char*)NPN_MemAlloc(strlen(ua) + 1);
// for illustration purposed we use the service manager to access
// the memory service provided by Mozilla
nsIMemory * nsMemoryService = NULL;
if (gServiceManager) {
// get service using its contract id and use it to allocate the memory
gServiceManager->GetServiceByContractID("@mozilla.org/xpcom/memory-service;1", NS_GET_IID(nsIMemory), (void **)&nsMemoryService);
if(nsMemoryService)
version = (char *)nsMemoryService->Alloc(strlen(ua) + 1);
}
if (version)
strcpy(version, ua);
// release service
NS_IF_RELEASE(nsMemoryService);
}
//-----------------------------------------------------
void
nsPluginInstance::DumpLayout(nsISupports *aWindow, const PRUnichar *aFilePath, const PRUnichar *aFileName)
{
nsIDebugObject *theDebugObject=NULL;
if (gServiceManager) {
// get service using its contract id and use it to allocate the memory
gServiceManager->GetServiceByContractID("@mozilla.org/debug/debugobject;1", NS_GET_IID(nsIDebugObject), (void **)&theDebugObject);
if(theDebugObject){
theDebugObject->DumpContent(aWindow,aFilePath,aFileName);
}
}
}
//-----------------------------------------------------
void
nsPluginInstance::StartDirectorySearch(const char *aFilePath)
{
nsXPIDLCString dirPath;
nsresult rv;
nsCOMPtr<nsILocalFile> theDir = do_CreateInstance(NS_LOCAL_FILE_CONTRACTID);
rv = NS_InitFileFromURLSpec(theDir, aFilePath);
if (NS_FAILED(rv)){
mIter = 0;
return;
}
rv = theDir->GetDirectoryEntries(getter_AddRefs(mIter));
if (NS_FAILED(rv)){
mIter = 0;
return;
}
}
//-----------------------------------------------------
void
nsPluginInstance::GetNextFileInDirectory(char **aDirName)
{
PRBool hasMore;
nsresult rv;
nsCOMPtr<nsISupports> supports;
char* URLName;
*aDirName = 0;
if ( 0 ==mIter ){
return;
}
while ( NS_SUCCEEDED(mIter->HasMoreElements(&hasMore)) ){
rv = mIter->GetNext(getter_AddRefs(supports));
if (NS_FAILED(rv))
break;
nsCOMPtr<nsIFile> dirEntry(do_QueryInterface(supports, &rv));
if (NS_FAILED(rv))
break;
nsXPIDLCString filePath;
char* afilepath;
rv = dirEntry->GetPath(&afilepath);
if (NS_FAILED(rv))
continue;
if( strstr(afilepath,".html") != 0 ) {
*aDirName = afilepath;
NS_GetURLSpecFromFile(dirEntry,&URLName);
*aDirName = URLName;
break;
} else {
nsMemory::Free(afilepath);
}
}
}
//-----------------------------------------------------
// ==============================
// ! Scriptability related code !
// ==============================
//
// here the plugin is asked by Mozilla to tell if it is scriptable
// we should return a valid interface id and a pointer to
// nsScriptablePeer interface which we should have implemented
// and which should be defined in the corressponding *.xpt file
// in the bin/components folder
NPError nsPluginInstance::GetValue(NPPVariable aVariable, void *aValue)
{
NPError rv = NPERR_NO_ERROR;
switch (aVariable) {
case NPPVpluginScriptableInstance: {
// addref happens in getter, so we don't addref here
nsIDebugPlugin * scriptablePeer = getScriptablePeer();
if (scriptablePeer) {
*(nsISupports **)aValue = scriptablePeer;
} else
rv = NPERR_OUT_OF_MEMORY_ERROR;
}
break;
case NPPVpluginScriptableIID: {
static nsIID scriptableIID = NS_IDEBUGPLUGIN_IID;
nsIID* ptr = (nsIID *)NPN_MemAlloc(sizeof(nsIID));
if (ptr) {
*ptr = scriptableIID;
*(nsIID **)aValue = ptr;
} else
rv = NPERR_OUT_OF_MEMORY_ERROR;
}
break;
#ifdef XP_UNIX
// Unix needs some additional cases
case NPPVpluginNameString:
*((char **)aValue) = PLUGIN_NAME;
break;
case NPPVpluginDescriptionString:
*((char **)aValue) = PLUGIN_DESCRIPTION;
break;
#endif //XP_UNIX
default:
break;
}
return rv;
}
// ==============================
// ! Scriptability related code !
// ==============================
//
// this method will return the scriptable object (and create it if necessary)
nsIDebugPlugin* nsPluginInstance::getScriptablePeer()
{
if (!mScriptablePeer) {
mScriptablePeer = new nsScriptablePeer(this);
if(!mScriptablePeer)
return NULL;
NS_ADDREF(mScriptablePeer);
}
// add reference for the caller requesting the object
NS_ADDREF(mScriptablePeer);
return mScriptablePeer;
return NULL;
}

Просмотреть файл

@ -0,0 +1,80 @@
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/* ***** BEGIN LICENSE BLOCK *****
* Version: NPL 1.1/GPL 2.0/LGPL 2.1
*
* The contents of this file are subject to the Netscape Public License
* Version 1.1 (the "License"); you may not use this file except in
* compliance with the License. You may obtain a copy of the License at
* http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
* for the specific language governing rights and limitations under the
* License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is
* Netscape Communications Corporation.
* Portions created by the Initial Developer are Copyright (C) 1998
* the Initial Developer. All Rights Reserved.
*
* Contributor(s):
*
* Alternatively, the contents of this file may be used under the terms of
* either the GNU General Public License Version 2 or later (the "GPL"), or
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
* in which case the provisions of the GPL or the LGPL are applicable instead
* of those above. If you wish to allow use of your version of this file only
* under the terms of either the GPL or the LGPL, and not to allow others to
* use your version of this file under the terms of the NPL, indicate your
* decision by deleting the provisions above and replace them with the notice
* and other provisions required by the GPL or the LGPL. If you do not delete
* the provisions above, a recipient may use your version of this file under
* the terms of any one of the NPL, the GPL or the LGPL.
*
* ***** END LICENSE BLOCK ***** */
#ifndef __PLUGIN_H__
#define __PLUGIN_H__
#include "pluginbase.h"
#include "nsScriptablePeer.h"
#include "nsIFile.h"
#include "nsILocalFile.h"
#include "nsISimpleEnumerator.h"
class nsPluginInstance : public nsPluginInstanceBase
{
public:
nsPluginInstance(NPP aInstance);
~nsPluginInstance();
NPBool init(NPWindow* aWindow);
void shut();
NPBool isInitialized();
// we need to provide implementation of this method as it will be
// used by Mozilla to retrive the scriptable peer
// and couple of other things on Unix
NPError GetValue(NPPVariable variable, void *value);
// locals
void getVersion(char* *aVersion);
void DumpLayout(nsISupports *aWindow,const PRUnichar *aFilePath, const PRUnichar *aFileName);
void StartDirectorySearch(const char *aFilePath);
void GetNextFileInDirectory(char **aFilePath);
nsIDebugPlugin* getScriptablePeer();
private:
NPP mInstance;
NPBool mInitialized;
nsIDebugPlugin * mScriptablePeer;
nsCOMPtr<nsISimpleEnumerator> mIter;
public:
char mString[128];
};
#endif // __PLUGIN_H__

Просмотреть файл

@ -0,0 +1,20 @@
//{{NO_DEPENDENCIES}}
// Microsoft Developer Studio generated include file.
// Used by npDebug.rc
//
#define IDD_MAIN 101
#define IDC_BUTTON_GO 1002
#define IDC_STATIC_UA 1003
#define IDC_BUTTON1 1005
#define IDC_BUTTON_DONT 1005
// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 102
#define _APS_NEXT_COMMAND_VALUE 40001
#define _APS_NEXT_CONTROL_VALUE 1006
#define _APS_NEXT_SYMED_VALUE 101
#endif
#endif

Просмотреть файл

@ -0,0 +1,54 @@
<HTML>
<HEAD>
<TITLE>Debug Plug-in Test</TITLE>
</HEAD>
<BODY>
<center>
<h1> XPConnect Scriptable Debug Plug-in </h1>
</center>
This page contains a testcase which demonstrates the work of scriptable
plug-in with Mozilla. This example plug-in has no native GUI and does not
draw anything in the plugin window. Clicking on the button will result in calling
native plugin method from JavaScript. Show Version will instruct the plug-in
to retrieve the Mozilla user agent string and return it to JavaScript to show
in the alert box.
<br><br>
<center>
<embed type="application/debug-plugin" width=1 height=1 hidden="true"><br>
<script>
var embed = document.embeds[0];
function DumpFrames()
{
var filedirectory = "file:///S|/mozilla/layout/html/tests/block";
embed.StartDirectorySearch(filedirectory);
do {
filename=embed.GetNextFileInDirectory();
alert(filename);
outputfilename = filename.replace (".html",".tst");
alert(outputfilename);
//var thewindow = window.open(filetopen);
//embed.DumpLayout(thewindow,"s:/tests","filename");
} while (filename!=null)
}
</script>
<br>
<form name="formname">
<input type=button value="DumpFrames" onclick='DumpFrames()'>
</form>
</center>
</BODY>
</HTML>