summaryrefslogtreecommitdiff
path: root/chromium/content/browser/renderer_host/java
diff options
context:
space:
mode:
authorAndras Becsi <andras.becsi@digia.com>2014-03-18 13:16:26 +0100
committerFrederik Gladhorn <frederik.gladhorn@digia.com>2014-03-20 15:55:39 +0100
commit3f0f86b0caed75241fa71c95a5d73bc0164348c5 (patch)
tree92b9fb00f2e9e90b0be2262093876d4f43b6cd13 /chromium/content/browser/renderer_host/java
parente90d7c4b152c56919d963987e2503f9909a666d2 (diff)
downloadqtwebengine-chromium-3f0f86b0caed75241fa71c95a5d73bc0164348c5.tar.gz
Update to new stable branch 1750
This also includes an updated ninja and chromium dependencies needed on Windows. Change-Id: Icd597d80ed3fa4425933c9f1334c3c2e31291c42 Reviewed-by: Zoltan Arvai <zarvai@inf.u-szeged.hu> Reviewed-by: Zeno Albisser <zeno.albisser@digia.com>
Diffstat (limited to 'chromium/content/browser/renderer_host/java')
-rw-r--r--chromium/content/browser/renderer_host/java/OWNERS2
-rw-r--r--chromium/content/browser/renderer_host/java/java_bound_object.cc4
-rw-r--r--chromium/content/browser/renderer_host/java/java_bridge_dispatcher_host.cc64
-rw-r--r--chromium/content/browser/renderer_host/java/java_bridge_dispatcher_host.h33
-rw-r--r--chromium/content/browser/renderer_host/java/java_bridge_dispatcher_host_manager.cc27
-rw-r--r--chromium/content/browser/renderer_host/java/java_bridge_dispatcher_host_manager.h10
-rw-r--r--chromium/content/browser/renderer_host/java/java_method.cc4
7 files changed, 69 insertions, 75 deletions
diff --git a/chromium/content/browser/renderer_host/java/OWNERS b/chromium/content/browser/renderer_host/java/OWNERS
index 4b297c43ee6..d378671071d 100644
--- a/chromium/content/browser/renderer_host/java/OWNERS
+++ b/chromium/content/browser/renderer_host/java/OWNERS
@@ -1,2 +1,2 @@
-joth@chromium.org
steveblock@chromium.org
+torne@chromium.org
diff --git a/chromium/content/browser/renderer_host/java/java_bound_object.cc b/chromium/content/browser/renderer_host/java/java_bound_object.cc
index 4199cca77b8..e2ad87a15c3 100644
--- a/chromium/content/browser/renderer_host/java/java_bound_object.cc
+++ b/chromium/content/browser/renderer_host/java/java_bound_object.cc
@@ -11,6 +11,7 @@
#include "base/strings/stringprintf.h"
#include "content/browser/renderer_host/java/java_bridge_dispatcher_host_manager.h"
#include "content/browser/renderer_host/java/java_type.h"
+#include "content/browser/renderer_host/java/jni_helper.h"
#include "content/public/browser/browser_thread.h"
#include "third_party/WebKit/public/web/WebBindings.h"
@@ -18,11 +19,10 @@ using base::StringPrintf;
using base::android::AttachCurrentThread;
using base::android::ConvertUTF8ToJavaString;
using base::android::GetClass;
-using base::android::GetMethodIDFromClassName;
using base::android::JavaRef;
using base::android::ScopedJavaGlobalRef;
using base::android::ScopedJavaLocalRef;
-using WebKit::WebBindings;
+using blink::WebBindings;
// The conversion between JavaScript and Java types is based on the Live
// Connect 2 spec. See
diff --git a/chromium/content/browser/renderer_host/java/java_bridge_dispatcher_host.cc b/chromium/content/browser/renderer_host/java/java_bridge_dispatcher_host.cc
index 95a1c6aefe4..562517a1140 100644
--- a/chromium/content/browser/renderer_host/java/java_bridge_dispatcher_host.cc
+++ b/chromium/content/browser/renderer_host/java/java_bridge_dispatcher_host.cc
@@ -18,7 +18,7 @@
#include "third_party/WebKit/public/web/WebBindings.h"
#if !defined(OS_ANDROID)
-#error "JavaBridge currently only supports OS_ANDROID"
+#error "JavaBridge only supports OS_ANDROID"
#endif
namespace content {
@@ -50,8 +50,7 @@ base::LazyInstance<JavaBridgeThread> g_background_thread =
JavaBridgeDispatcherHost::JavaBridgeDispatcherHost(
RenderViewHost* render_view_host)
- : RenderViewHostObserver(render_view_host),
- is_renderer_initialized_(false) {
+ : render_view_host_(render_view_host) {
}
JavaBridgeDispatcherHost::~JavaBridgeDispatcherHost() {
@@ -60,46 +59,27 @@ JavaBridgeDispatcherHost::~JavaBridgeDispatcherHost() {
base::Bind(&CleanUpStubs, stubs_));
}
-void JavaBridgeDispatcherHost::AddNamedObject(const string16& name,
+void JavaBridgeDispatcherHost::AddNamedObject(const base::string16& name,
NPObject* object) {
NPVariant_Param variant_param;
CreateNPVariantParam(object, &variant_param);
- if (!is_renderer_initialized_) {
- is_renderer_initialized_ = true;
- Send(new JavaBridgeMsg_Init(routing_id()));
- }
- Send(new JavaBridgeMsg_AddNamedObject(routing_id(), name, variant_param));
+ Send(new JavaBridgeMsg_AddNamedObject(
+ render_view_host_->GetRoutingID(), name, variant_param));
}
-void JavaBridgeDispatcherHost::RemoveNamedObject(const string16& name) {
+void JavaBridgeDispatcherHost::RemoveNamedObject(const base::string16& name) {
// On receipt of this message, the JavaBridgeDispatcher will drop its
// reference to the corresponding proxy object. When the last reference is
// removed, the proxy object will delete its NPObjectProxy, which will cause
// the NPObjectStub to be deleted, which will drop its reference to the
// original NPObject.
- Send(new JavaBridgeMsg_RemoveNamedObject(routing_id(), name));
-}
-
-bool JavaBridgeDispatcherHost::Send(IPC::Message* msg) {
- return RenderViewHostObserver::Send(msg);
+ Send(new JavaBridgeMsg_RemoveNamedObject(
+ render_view_host_->GetRoutingID(), name));
}
-void JavaBridgeDispatcherHost::RenderViewHostDestroyed(
- RenderViewHost* render_view_host) {
- // Base implementation deletes the object. This class is ref counted, with
- // refs held by the JavaBridgeDispatcherHostManager and base::Bind, so that
- // behavior is unwanted.
-}
-
-bool JavaBridgeDispatcherHost::OnMessageReceived(const IPC::Message& msg) {
- bool handled = true;
- IPC_BEGIN_MESSAGE_MAP(JavaBridgeDispatcherHost, msg)
- IPC_MESSAGE_HANDLER_DELAY_REPLY(JavaBridgeHostMsg_GetChannelHandle,
- OnGetChannelHandle)
- IPC_MESSAGE_UNHANDLED(handled = false)
- IPC_END_MESSAGE_MAP()
- return handled;
+void JavaBridgeDispatcherHost::RenderViewDeleted() {
+ render_view_host_ = NULL;
}
void JavaBridgeDispatcherHost::OnGetChannelHandle(IPC::Message* reply_msg) {
@@ -108,6 +88,15 @@ void JavaBridgeDispatcherHost::OnGetChannelHandle(IPC::Message* reply_msg) {
base::Bind(&JavaBridgeDispatcherHost::GetChannelHandle, this, reply_msg));
}
+void JavaBridgeDispatcherHost::Send(IPC::Message* msg) {
+ if (render_view_host_) {
+ render_view_host_->Send(msg);
+ return;
+ }
+
+ delete msg;
+}
+
void JavaBridgeDispatcherHost::GetChannelHandle(IPC::Message* reply_msg) {
// The channel creates the channel handle based on the renderer ID we passed
// to GetJavaBridgeChannelHost() and, on POSIX, the file descriptor used by
@@ -115,7 +104,11 @@ void JavaBridgeDispatcherHost::GetChannelHandle(IPC::Message* reply_msg) {
JavaBridgeHostMsg_GetChannelHandle::WriteReplyParams(
reply_msg,
channel_->channel_handle());
- Send(reply_msg);
+
+ BrowserThread::PostTask(
+ BrowserThread::UI,
+ FROM_HERE,
+ base::Bind(&JavaBridgeDispatcherHost::Send, this, reply_msg));
}
void JavaBridgeDispatcherHost::CreateNPVariantParam(NPObject* object,
@@ -135,20 +128,21 @@ void JavaBridgeDispatcherHost::CreateNPVariantParam(NPObject* object,
int route_id = JavaBridgeChannelHost::ThreadsafeGenerateRouteID();
param->npobject_routing_id = route_id;
- WebKit::WebBindings::retainObject(object);
+ blink::WebBindings::retainObject(object);
g_background_thread.Get().message_loop()->PostTask(
FROM_HERE,
base::Bind(&JavaBridgeDispatcherHost::CreateObjectStub, this, object,
- route_id));
+ render_view_host_->GetProcess()->GetID(), route_id));
}
void JavaBridgeDispatcherHost::CreateObjectStub(NPObject* object,
+ int render_process_id,
int route_id) {
DCHECK_EQ(g_background_thread.Get().message_loop(),
base::MessageLoop::current());
if (!channel_.get()) {
channel_ = JavaBridgeChannelHost::GetJavaBridgeChannelHost(
- render_view_host()->GetProcess()->GetID(),
+ render_process_id,
BrowserThread::GetMessageLoopProxyForThread(BrowserThread::IO));
}
@@ -167,7 +161,7 @@ void JavaBridgeDispatcherHost::CreateObjectStub(NPObject* object,
// The NPObjectStub takes a reference to the NPObject. Release the ref added
// in CreateNPVariantParam().
- WebKit::WebBindings::releaseObject(object);
+ blink::WebBindings::releaseObject(object);
}
} // namespace content
diff --git a/chromium/content/browser/renderer_host/java/java_bridge_dispatcher_host.h b/chromium/content/browser/renderer_host/java/java_bridge_dispatcher_host.h
index 6d44c39d22a..21e47c0d3b7 100644
--- a/chromium/content/browser/renderer_host/java/java_bridge_dispatcher_host.h
+++ b/chromium/content/browser/renderer_host/java/java_bridge_dispatcher_host.h
@@ -10,11 +10,14 @@
#include "base/memory/weak_ptr.h"
#include "base/strings/string16.h"
#include "content/child/npapi/npobject_stub.h"
-#include "content/public/browser/render_view_host_observer.h"
class RouteIDGenerator;
struct NPObject;
+namespace IPC {
+class Message;
+}
+
namespace content {
class NPChannelBase;
class RenderViewHost;
@@ -25,11 +28,10 @@ struct NPVariant_Param;
// proxy object is created in the renderer. An instance of this class exists
// for each RenderViewHost.
class JavaBridgeDispatcherHost
- : public base::RefCountedThreadSafe<JavaBridgeDispatcherHost>,
- public RenderViewHostObserver {
+ : public base::RefCountedThreadSafe<JavaBridgeDispatcherHost> {
public:
// We hold a weak pointer to the RenderViewhost. It must outlive this object.
- JavaBridgeDispatcherHost(RenderViewHost* render_view_host);
+ explicit JavaBridgeDispatcherHost(RenderViewHost* render_view_host);
// Injects |object| into the main frame of the corresponding RenderView. A
// proxy object is created in the renderer and when the main frame's window
@@ -40,31 +42,26 @@ class JavaBridgeDispatcherHost
// to |object|, which is manipulated on the background thread. This class
// holds a reference to |object| for the time that the proxy object is bound
// to the window object.
- void AddNamedObject(const string16& name, NPObject* object);
- void RemoveNamedObject(const string16& name);
+ void AddNamedObject(const base::string16& name, NPObject* object);
+ void RemoveNamedObject(const base::string16& name);
+
+ // Since this object is ref-counted, it might outlive render_view_host_.
+ void RenderViewDeleted();
- // RenderViewHostObserver overrides:
- // The IPC macros require this to be public.
- virtual bool Send(IPC::Message* msg) OVERRIDE;
- virtual void RenderViewHostDestroyed(
- RenderViewHost* render_view_host) OVERRIDE;
+ void OnGetChannelHandle(IPC::Message* reply_msg);
private:
friend class base::RefCountedThreadSafe<JavaBridgeDispatcherHost>;
virtual ~JavaBridgeDispatcherHost();
- // RenderViewHostObserver override:
- virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
-
- // Message handlers
- void OnGetChannelHandle(IPC::Message* reply_msg);
+ void Send(IPC::Message* msg);
void GetChannelHandle(IPC::Message* reply_msg);
void CreateNPVariantParam(NPObject* object, NPVariant_Param* param);
- void CreateObjectStub(NPObject* object, int route_id);
+ void CreateObjectStub(NPObject* object, int render_process_id, int route_id);
scoped_refptr<NPChannelBase> channel_;
- bool is_renderer_initialized_;
+ RenderViewHost* render_view_host_;
std::vector<base::WeakPtr<NPObjectStub> > stubs_;
DISALLOW_COPY_AND_ASSIGN(JavaBridgeDispatcherHost);
diff --git a/chromium/content/browser/renderer_host/java/java_bridge_dispatcher_host_manager.cc b/chromium/content/browser/renderer_host/java/java_bridge_dispatcher_host_manager.cc
index bac38564e79..02cf4dcc060 100644
--- a/chromium/content/browser/renderer_host/java/java_bridge_dispatcher_host_manager.cc
+++ b/chromium/content/browser/renderer_host/java/java_bridge_dispatcher_host_manager.cc
@@ -26,18 +26,18 @@ JavaBridgeDispatcherHostManager::JavaBridgeDispatcherHostManager(
JavaBridgeDispatcherHostManager::~JavaBridgeDispatcherHostManager() {
for (ObjectMap::iterator iter = objects_.begin(); iter != objects_.end();
++iter) {
- WebKit::WebBindings::releaseObject(iter->second);
+ blink::WebBindings::releaseObject(iter->second);
}
DCHECK_EQ(0U, instances_.size());
}
-void JavaBridgeDispatcherHostManager::AddNamedObject(const string16& name,
+void JavaBridgeDispatcherHostManager::AddNamedObject(const base::string16& name,
NPObject* object) {
// Record this object in a map so that we can add it into RenderViewHosts
// created later. The JavaBridgeDispatcherHost instances will take a
// reference to the object, but we take one too, because this method can be
// called before there are any such instances.
- WebKit::WebBindings::retainObject(object);
+ blink::WebBindings::retainObject(object);
objects_[name] = object;
for (InstanceMap::iterator iter = instances_.begin();
@@ -67,13 +67,14 @@ void JavaBridgeDispatcherHostManager::SetRetainedObjectSet(
}
}
-void JavaBridgeDispatcherHostManager::RemoveNamedObject(const string16& name) {
+void JavaBridgeDispatcherHostManager::RemoveNamedObject(
+ const base::string16& name) {
ObjectMap::iterator iter = objects_.find(name);
if (iter == objects_.end()) {
return;
}
- WebKit::WebBindings::releaseObject(iter->second);
+ blink::WebBindings::releaseObject(iter->second);
objects_.erase(iter);
for (InstanceMap::iterator iter = instances_.begin();
@@ -82,6 +83,11 @@ void JavaBridgeDispatcherHostManager::RemoveNamedObject(const string16& name) {
}
}
+void JavaBridgeDispatcherHostManager::OnGetChannelHandle(
+ RenderViewHost* render_view_host, IPC::Message* reply_msg) {
+ instances_[render_view_host]->OnGetChannelHandle(reply_msg);
+}
+
void JavaBridgeDispatcherHostManager::RenderViewCreated(
RenderViewHost* render_view_host) {
// Creates a JavaBridgeDispatcherHost for the specified RenderViewHost and
@@ -99,17 +105,12 @@ void JavaBridgeDispatcherHostManager::RenderViewCreated(
void JavaBridgeDispatcherHostManager::RenderViewDeleted(
RenderViewHost* render_view_host) {
+ if (!instances_.count(render_view_host)) // Needed for tests.
+ return;
+ instances_[render_view_host]->RenderViewDeleted();
instances_.erase(render_view_host);
}
-void JavaBridgeDispatcherHostManager::WebContentsDestroyed(
- WebContents* web_contents) {
- // When a WebContents is shutting down, it clears its observers before
- // it kills all of its RenderViewHosts, so we won't get a call to
- // RenderViewDeleted() for all RenderViewHosts.
- instances_.clear();
-}
-
void JavaBridgeDispatcherHostManager::DocumentAvailableInMainFrame() {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
// Called when the window object has been cleared in the main frame.
diff --git a/chromium/content/browser/renderer_host/java/java_bridge_dispatcher_host_manager.h b/chromium/content/browser/renderer_host/java/java_bridge_dispatcher_host_manager.h
index 6fb7aab7cfb..29523b57396 100644
--- a/chromium/content/browser/renderer_host/java/java_bridge_dispatcher_host_manager.h
+++ b/chromium/content/browser/renderer_host/java/java_bridge_dispatcher_host_manager.h
@@ -34,8 +34,11 @@ class JavaBridgeDispatcherHostManager
// These methods add or remove the object to each JavaBridgeDispatcherHost.
// Each one holds a reference to the NPObject while the object is bound to
// the corresponding RenderView. See JavaBridgeDispatcherHost for details.
- void AddNamedObject(const string16& name, NPObject* object);
- void RemoveNamedObject(const string16& name);
+ void AddNamedObject(const base::string16& name, NPObject* object);
+ void RemoveNamedObject(const base::string16& name);
+
+ void OnGetChannelHandle(RenderViewHost* render_view_host,
+ IPC::Message* reply_msg);
// Every time a JavaBoundObject backed by a real Java object is
// created/destroyed, we insert/remove a strong ref to that Java object into
@@ -48,7 +51,6 @@ class JavaBridgeDispatcherHostManager
// WebContentsObserver overrides
virtual void RenderViewCreated(RenderViewHost* render_view_host) OVERRIDE;
virtual void RenderViewDeleted(RenderViewHost* render_view_host) OVERRIDE;
- virtual void WebContentsDestroyed(WebContents* web_contents) OVERRIDE;
virtual void DocumentAvailableInMainFrame() OVERRIDE;
void JavaBoundObjectCreated(const base::android::JavaRef<jobject>& object);
@@ -58,7 +60,7 @@ class JavaBridgeDispatcherHostManager
typedef std::map<RenderViewHost*, scoped_refptr<JavaBridgeDispatcherHost> >
InstanceMap;
InstanceMap instances_;
- typedef std::map<string16, NPObject*> ObjectMap;
+ typedef std::map<base::string16, NPObject*> ObjectMap;
ObjectMap objects_;
JavaObjectWeakGlobalRef retained_object_set_;
diff --git a/chromium/content/browser/renderer_host/java/java_method.cc b/chromium/content/browser/renderer_host/java/java_method.cc
index 3cc569fbcae..5a654fe1300 100644
--- a/chromium/content/browser/renderer_host/java/java_method.cc
+++ b/chromium/content/browser/renderer_host/java/java_method.cc
@@ -9,11 +9,11 @@
#include "base/lazy_instance.h"
#include "base/memory/singleton.h"
#include "base/strings/string_util.h" // For ReplaceSubstringsAfterOffset
+#include "content/browser/renderer_host/java/jni_helper.h"
using base::android::AttachCurrentThread;
using base::android::ConvertJavaStringToUTF8;
using base::android::GetClass;
-using base::android::GetMethodIDFromClassName;
using base::android::MethodID;
using base::android::ScopedJavaGlobalRef;
using base::android::ScopedJavaLocalRef;
@@ -86,7 +86,7 @@ std::string BinaryNameToJNIName(const std::string& binary_name,
return jni_name;
}
NOTREACHED();
- return EmptyString();
+ return std::string();
}
} // namespace