From 3f0f86b0caed75241fa71c95a5d73bc0164348c5 Mon Sep 17 00:00:00 2001 From: Andras Becsi Date: Tue, 18 Mar 2014 13:16:26 +0100 Subject: 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 Reviewed-by: Zeno Albisser --- chromium/content/browser/renderer_host/java/OWNERS | 2 +- .../renderer_host/java/java_bound_object.cc | 4 +- .../java/java_bridge_dispatcher_host.cc | 64 ++++++++++------------ .../java/java_bridge_dispatcher_host.h | 33 +++++------ .../java/java_bridge_dispatcher_host_manager.cc | 27 ++++----- .../java/java_bridge_dispatcher_host_manager.h | 10 ++-- .../browser/renderer_host/java/java_method.cc | 4 +- 7 files changed, 69 insertions(+), 75 deletions(-) (limited to 'chromium/content/browser/renderer_host/java') 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 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, - public RenderViewHostObserver { + : public base::RefCountedThreadSafe { 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; 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 channel_; - bool is_renderer_initialized_; + RenderViewHost* render_view_host_; std::vector > 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& object); @@ -58,7 +60,7 @@ class JavaBridgeDispatcherHostManager typedef std::map > InstanceMap; InstanceMap instances_; - typedef std::map ObjectMap; + typedef std::map 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 -- cgit v1.2.1