15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/* Copyright (C) 2006, 2007, 2008, 2009 Google Inc. All rights reserved.
25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Redistribution and use in source and binary forms, with or without
45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * modification, are permitted provided that the following conditions are
55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * met:
65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *     * Redistributions of source code must retain the above copyright
85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * notice, this list of conditions and the following disclaimer.
95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *     * Redistributions in binary form must reproduce the above
105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * copyright notice, this list of conditions and the following disclaimer
115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * in the documentation and/or other materials provided with the
125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * distribution.
135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *     * Neither the name of Google Inc. nor the names of its
145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * contributors may be used to endorse or promote products derived from
155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * this software without specific prior written permission.
165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#ifndef V8NPUtils_h
315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#define V8NPUtils_h
325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include <bindings/npruntime.h>
345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include <v8.h>
355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)namespace WebCore {
375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// Convert a V8 Value of any type (string, bool, object, etc) to a NPVariant.
39e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdochvoid convertV8ObjectToNPVariant(v8::Local<v8::Value>, NPObject*, NPVariant*);
405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
41e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch// Convert a NPVariant (string, bool, object, etc) back to a V8 Value.  The owner object is the NPObject which relates to the
42e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch// object, if the object is an Object.  The created NPObject will be tied to the lifetime of the owner.
43e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdochv8::Handle<v8::Value> convertNPVariantToV8Object(const NPVariant*, NPObject*, v8::Isolate*);
445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// Helper function to create an NPN String Identifier from a v8 string.
465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)NPIdentifier getStringIdentifier(v8::Handle<v8::String>);
475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// The ExceptionHandler will be notified of any exceptions thrown while
495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// operating on a NPObject.
505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)typedef void (*ExceptionHandler)(void* data, const NPUTF8* message);
515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void pushExceptionHandler(ExceptionHandler, void* data);
525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void popExceptionHandler();
535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// Upon destruction, an ExceptionCatcher will pass a caught exception to the
555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// current ExceptionHandler.
565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class ExceptionCatcher {
575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)public:
585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    ExceptionCatcher();
595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    ~ExceptionCatcher();
605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)private:
615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    v8::TryCatch m_tryCatch;
625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)};
635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} // namespace WebCore
655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#endif // V8NPUtils_h
67