diff options
author | slightlyoff@chromium.org <slightlyoff@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-09-24 05:11:58 +0000 |
---|---|---|
committer | slightlyoff@chromium.org <slightlyoff@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-09-24 05:11:58 +0000 |
commit | f781782dd67077478e117c61dca4ea5eefce3544 (patch) | |
tree | 4801f724123cfdcbb69c4e7fe40a565b331723ae /chrome_frame/np_browser_functions.h | |
parent | 63cf4759efa2373e33436fb5df6849f930081226 (diff) | |
download | chromium_src-f781782dd67077478e117c61dca4ea5eefce3544.zip chromium_src-f781782dd67077478e117c61dca4ea5eefce3544.tar.gz chromium_src-f781782dd67077478e117c61dca4ea5eefce3544.tar.bz2 |
Initial import of the Chrome Frame codebase. Integration in chrome.gyp coming in a separate CL.
BUG=None
TEST=None
Review URL: http://codereview.chromium.org/218019
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@27042 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome_frame/np_browser_functions.h')
-rw-r--r-- | chrome_frame/np_browser_functions.h | 246 |
1 files changed, 246 insertions, 0 deletions
diff --git a/chrome_frame/np_browser_functions.h b/chrome_frame/np_browser_functions.h new file mode 100644 index 0000000..ec29345 --- /dev/null +++ b/chrome_frame/np_browser_functions.h @@ -0,0 +1,246 @@ +// Copyright (c) 2009 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROME_FRAME_NP_BROWSER_FUNCTIONS_H_ +#define CHROME_FRAME_NP_BROWSER_FUNCTIONS_H_ + +#include "base/logging.h" +#include "third_party/WebKit/WebCore/bridge/npapi.h" +#include "third_party/WebKit/WebCore/plugins/npfunctions.h" + +namespace npapi { + +// Must be called prior to calling any of the browser functions below. +void InitializeBrowserFunctions(NPNetscapeFuncs* functions); +void UninitializeBrowserFunctions(); + +// Returns true iff InitializeBrowserFunctions has been called successully. +bool IsInitialized(); + +// Function stubs for functions that the host browser implements. + +uint8 VersionMinor(); +uint8 VersionMajor(); + +NPError GetURL(NPP instance, const char* URL, const char* window); + +NPError PostURL(NPP instance, const char* URL, const char* window, uint32 len, + const char* buf, NPBool file); + +NPError RequestRead(NPStream* stream, NPByteRange* rangeList); + +NPError NewStream(NPP instance, NPMIMEType type, const char* window, + NPStream** stream); + +int32 Write(NPP instance, NPStream* stream, int32 len, void* buffer); + +NPError DestroyStream(NPP instance, NPStream* stream, NPReason reason); + +void Status(NPP instance, const char* message); + +const char* UserAgent(NPP instance); + +void* MemAlloc(uint32 size); + +void MemFree(void* ptr); + +uint32 MemFlush(uint32 size); + +void ReloadPlugins(NPBool reloadPages); + +void* GetJavaEnv(); + +void* GetJavaPeer(NPP instance); + +NPError GetURLNotify(NPP instance, const char* URL, const char* window, + void* notifyData); + +NPError PostURLNotify(NPP instance, const char* URL, const char* window, + uint32 len, const char* buf, NPBool file, + void* notifyData); + +NPError GetValue(NPP instance, NPNVariable variable, void* ret_value); + +NPError SetValue(NPP instance, NPPVariable variable, void* value); + +void InvalidateRect(NPP instance, NPRect* rect); + +void InvalidateRegion(NPP instance, NPRegion region); + +void ForceRedraw(NPP instance); + +void ReleaseVariantValue(NPVariant* variant); + +NPIdentifier GetStringIdentifier(const NPUTF8* name); + +void GetStringIdentifiers(const NPUTF8** names, int32_t nameCount, + NPIdentifier* identifiers); + +NPIdentifier GetIntIdentifier(int32_t intid); + +int32_t IntFromIdentifier(NPIdentifier identifier); + +bool IdentifierIsString(NPIdentifier identifier); + +NPUTF8* UTF8FromIdentifier(NPIdentifier identifier); + +NPObject* CreateObject(NPP, NPClass* aClass); + +NPObject* RetainObject(NPObject* obj); + +void ReleaseObject(NPObject* obj); + +bool Invoke(NPP npp, NPObject* obj, NPIdentifier methodName, + const NPVariant* args, unsigned argCount, NPVariant* result); + +bool InvokeDefault(NPP npp, NPObject* obj, const NPVariant* args, + unsigned argCount, NPVariant* result); + +bool Evaluate(NPP npp, NPObject* obj, NPString* script, NPVariant* result); + +bool GetProperty(NPP npp, NPObject* obj, NPIdentifier propertyName, + NPVariant* result); + +bool SetProperty(NPP npp, NPObject* obj, NPIdentifier propertyName, + const NPVariant* value); + +bool HasProperty(NPP npp, NPObject* npobj, NPIdentifier propertyName); + +bool HasMethod(NPP npp, NPObject* npobj, NPIdentifier methodName); + +bool RemoveProperty(NPP npp, NPObject* obj, NPIdentifier propertyName); + +void SetException(NPObject* obj, const NPUTF8* message); + +void PushPopupsEnabledState(NPP npp, NPBool enabled); + +void PopPopupsEnabledState(NPP npp); + +bool Enumerate(NPP npp, NPObject* obj, NPIdentifier** identifier, + uint32_t* count); + +void PluginThreadAsyncCall(NPP instance, void (*func)(void*), void* userData); + +bool Construct(NPP npp, NPObject* obj, const NPVariant* args, uint32_t argCount, + NPVariant* result); + +NPError GetValueForURL(NPP instance, NPNURLVariable variable, const char* url, + char** value, uint32* len); +NPError SetValueForURL(NPP instance, NPNURLVariable variable, const char* url, + const char* value, uint32 len); +NPError GetAuthenticationInfo(NPP instance, const char* protocol, + const char* host, int32 port, const char* scheme, + const char *realm, char** username, uint32* ulen, + char** password, uint32* plen); +uint32 ScheduleTimer(NPP instance, uint32 interval, NPBool repeat, + void (*timerFunc)(NPP npp, uint32 timerID)); +void UnscheduleTimer(NPP instance, uint32 timerID); +NPError PopUpContextMenu(NPP instance, NPMenu* menu); +NPBool ConvertPoint(NPP instance, double sourceX, double sourceY, + NPCoordinateSpace sourceSpace, double *destX, + double *destY, NPCoordinateSpace destSpace); + +// Helper routine that wraps UTF8FromIdentifier to convert a string identifier +// to an STL string. It's not super efficient since it could possibly do two +// heap allocations (STL string has a stack based buffer for smaller strings). +// For debugging purposes it is useful. +std::string StringFromIdentifier(NPIdentifier identifier); + +} // namespace npapi + +// Simple helper class for freeing NPVariants at the end of a scope. +class ScopedNpVariant : public NPVariant { + public: + ScopedNpVariant() { + VOID_TO_NPVARIANT(*this); + } + + ~ScopedNpVariant() { + Free(); + } + + void Free() { + npapi::ReleaseVariantValue(this); + VOID_TO_NPVARIANT(*this); + } + + private: + DISALLOW_COPY_AND_ASSIGN(ScopedNpVariant); +}; + +// Simple helper class for freeing NPObjects at the end of a scope. +template <typename NpoType = NPObject> +class ScopedNpObject { + public: + ScopedNpObject() : npo_(NULL) { + } + + explicit ScopedNpObject(NpoType* npo) : npo_(npo) { + } + + ~ScopedNpObject() { + Free(); + } + + NpoType* get() const { + return npo_; + } + + operator NpoType*() const { + return npo_; + } + + NpoType* operator->() const { + return npo_; + } + + ScopedNpObject<NpoType>& operator=(NpoType* npo) { + if (npo != npo_) { + DCHECK(npo_ == NULL); + npapi::RetainObject(npo); + npo_ = npo; + } + return *this; + } + + void Free() { + if (npo_) { + npapi::ReleaseObject(npo_); + npo_ = NULL; + } + } + + NpoType** Receive() { + DCHECK(npo_ == NULL) << "Object leak. Pointer must be NULL"; + return &npo_; + } + + NpoType* Detach() { + NpoType* p = npo_; + npo_ = NULL; + return p; + } + + void Attach(NpoType* p) { + DCHECK(npo_ == NULL); + npo_ = p; + } + + NpoType* Copy() const { + if (npo_ != NULL) + npapi::RetainObject(npo_); + return npo_; + } + + private: + NpoType* npo_; + DISALLOW_COPY_AND_ASSIGN(ScopedNpObject); +}; + +// Allocates a new NPUTF8 string and assigns it to the variant. +// If memory allocation fails, the variant type will be set to NULL. +// The memory allocation is done via the npapi browser functions. +void AllocateStringVariant(const std::string& str, NPVariant* var); + +#endif // CHROME_FRAME_NP_BROWSER_FUNCTIONS_H_ |