blob: 91e8ced84390c0a5f56263d455e2c2f8ab197bb9 [file] [log] [blame]
// Copyright (c) 2012 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 CONTENT_RENDERER_BROWSER_PLUGIN_BROWSER_PLUGIN_BINDINGS_H__
#define CONTENT_RENDERER_BROWSER_PLUGIN_BROWSER_PLUGIN_BINDINGS_H__
#include "base/memory/scoped_vector.h"
#include "base/memory/weak_ptr.h"
#include "ppapi/shared_impl/resource.h"
#include "third_party/npapi/bindings/npruntime.h"
namespace content {
class BrowserPlugin;
class BrowserPluginMethodBinding;
class BrowserPluginPropertyBinding;
class BrowserPluginBindings {
public:
// BrowserPluginNPObject is a simple struct that adds a pointer back to a
// BrowserPluginBindings instance. This way, we can use an NPObject to allow
// JavaScript interactions without forcing BrowserPluginBindings to inherit
// from NPObject.
struct BrowserPluginNPObject : public NPObject {
BrowserPluginNPObject();
~BrowserPluginNPObject();
base::WeakPtr<BrowserPluginBindings> message_channel;
};
explicit BrowserPluginBindings(BrowserPlugin* instance);
~BrowserPluginBindings();
NPObject* np_object() const { return np_object_; }
BrowserPlugin* instance() const { return instance_; }
bool HasMethod(NPIdentifier name) const;
bool InvokeMethod(NPIdentifier name,
const NPVariant* args,
uint32 arg_count,
NPVariant* result);
bool HasProperty(NPIdentifier name) const;
bool SetProperty(NPObject* np_obj,
NPIdentifier name,
const NPVariant* variant);
bool GetProperty(NPIdentifier name, NPVariant* result);
bool RemoveProperty(NPObject *np_obj, NPIdentifier name);
private:
BrowserPlugin* instance_;
// The NPObject we use to expose postMessage to JavaScript.
BrowserPluginNPObject* np_object_;
typedef ScopedVector<BrowserPluginMethodBinding> BindingList;
BindingList method_bindings_;
typedef ScopedVector<BrowserPluginPropertyBinding> PropertyBindingList;
PropertyBindingList property_bindings_;
// This is used to ensure pending tasks will not fire after this object is
// destroyed.
base::WeakPtrFactory<BrowserPluginBindings> weak_ptr_factory_;
DISALLOW_COPY_AND_ASSIGN(BrowserPluginBindings);
};
} // namespace content
#endif // CONTENT_RENDERER_BROWSER_PLUGIN_BROWSER_PLUGIN_BINDINGS_H__