diff options
Diffstat (limited to 'chromium/content/renderer/java/java_bridge_dispatcher.h')
-rw-r--r-- | chromium/content/renderer/java/java_bridge_dispatcher.h | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/chromium/content/renderer/java/java_bridge_dispatcher.h b/chromium/content/renderer/java/java_bridge_dispatcher.h new file mode 100644 index 00000000000..29a10374590 --- /dev/null +++ b/chromium/content/renderer/java/java_bridge_dispatcher.h @@ -0,0 +1,51 @@ +// 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_JAVA_JAVA_BRIDGE_DISPATCHER_H_ +#define CONTENT_RENDERER_JAVA_JAVA_BRIDGE_DISPATCHER_H_ + +#include <map> + +#include "base/memory/ref_counted.h" +#include "content/public/renderer/render_view_observer.h" +#include "ipc/ipc_channel_handle.h" +#include "third_party/npapi/bindings/npruntime.h" + +namespace content { +class JavaBridgeChannel; +struct NPVariant_Param; + +// This class handles injecting Java objects into the main frame of a +// RenderView. The 'add' and 'remove' messages received from the browser +// process modify the entries in a map of 'pending' objects. These objects are +// bound to the window object of the main frame when that window object is next +// cleared. These objects remain bound until the window object is cleared +// again. +class JavaBridgeDispatcher : public RenderViewObserver { + public: + JavaBridgeDispatcher(RenderView* render_view); + virtual ~JavaBridgeDispatcher(); + + private: + // RenderViewObserver override: + virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE; + virtual void DidClearWindowObject(WebKit::WebFrame* frame) OVERRIDE; + + // Message handlers + void OnAddNamedObject(const string16& name, + const NPVariant_Param& variant_param); + void OnRemoveNamedObject(const string16& name); + + void EnsureChannelIsSetUp(); + + // Objects that will be bound to the window when the window object is next + // cleared. We hold a ref to these. + typedef std::map<string16, NPVariant> ObjectMap; + ObjectMap objects_; + scoped_refptr<JavaBridgeChannel> channel_; +}; + +} // namespace content + +#endif // CONTENT_RENDERER_JAVA_JAVA_BRIDGE_DISPATCHER_H_ |