| Index: chrome_frame/np_browser_functions.h
|
| ===================================================================
|
| --- chrome_frame/np_browser_functions.h (revision 0)
|
| +++ chrome_frame/np_browser_functions.h (revision 0)
|
| @@ -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_
|
|
|