summaryrefslogtreecommitdiff
path: root/chromium/content/renderer/java/java_bridge_dispatcher.h
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/content/renderer/java/java_bridge_dispatcher.h')
-rw-r--r--chromium/content/renderer/java/java_bridge_dispatcher.h51
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_