Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(322)

Side by Side Diff: content/browser/android/java/gin_java_bridge_message_filter.cc

Issue 1547043002: [Android] Fix GinJavaBridgeMessageFilter registration issue in Java Bridge. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 12 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/browser/android/java/gin_java_bridge_message_filter.h" 5 #include "content/browser/android/java/gin_java_bridge_message_filter.h"
6 6
7 #include "base/auto_reset.h" 7 #include "base/auto_reset.h"
8 #include "content/browser/android/java/gin_java_bridge_dispatcher_host.h" 8 #include "content/browser/android/java/gin_java_bridge_dispatcher_host.h"
9 #include "content/browser/android/java/java_bridge_thread.h" 9 #include "content/browser/android/java/java_bridge_thread.h"
10 #include "content/common/gin_java_bridge_messages.h" 10 #include "content/common/gin_java_bridge_messages.h"
11 #include "content/public/browser/render_frame_host.h" 11 #include "content/public/browser/render_frame_host.h"
12 #include "content/public/browser/render_process_host.h" 12 #include "content/public/browser/render_process_host.h"
13 #include "content/public/browser/web_contents.h" 13 #include "content/public/browser/web_contents.h"
14 14
15 #if !defined(OS_ANDROID) 15 #if !defined(OS_ANDROID)
16 #error "JavaBridge only supports OS_ANDROID" 16 #error "JavaBridge only supports OS_ANDROID"
17 #endif 17 #endif
18 18
19 namespace { 19 namespace {
20 20
21 const char kGinJavaBridgeMessageFilterKey[] = "GinJavaBridgeMessageFilter"; 21 const char kGinJavaBridgeMessageFilterKey[] = "GinJavaBridgeMessageFilter";
22 22
23 } // namespace 23 } // namespace
24 24
25 namespace content { 25 namespace content {
26 26
27 GinJavaBridgeMessageFilter::GinJavaBridgeMessageFilter() 27 GinJavaBridgeMessageFilter::GinJavaBridgeMessageFilter()
28 : BrowserMessageFilter(GinJavaBridgeMsgStart), 28 : BrowserMessageFilter(GinJavaBridgeMsgStart),
29 current_routing_id_(MSG_ROUTING_NONE) { 29 current_routing_id_(MSG_ROUTING_NONE),
30 needs_to_add_filter_for_new_ipc_channel_(false) {
30 } 31 }
31 32
32 GinJavaBridgeMessageFilter::~GinJavaBridgeMessageFilter() { 33 GinJavaBridgeMessageFilter::~GinJavaBridgeMessageFilter() {
33 } 34 }
34 35
35 void GinJavaBridgeMessageFilter::OnDestruct() const { 36 void GinJavaBridgeMessageFilter::OnDestruct() const {
36 if (BrowserThread::CurrentlyOn(BrowserThread::UI)) { 37 if (BrowserThread::CurrentlyOn(BrowserThread::UI)) {
37 delete this; 38 delete this;
38 } else { 39 } else {
39 BrowserThread::DeleteSoon(BrowserThread::UI, FROM_HERE, this); 40 BrowserThread::DeleteSoon(BrowserThread::UI, FROM_HERE, this);
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
88 scoped_refptr<GinJavaBridgeMessageFilter> filter = 89 scoped_refptr<GinJavaBridgeMessageFilter> filter =
89 base::UserDataAdapter<GinJavaBridgeMessageFilter>::Get( 90 base::UserDataAdapter<GinJavaBridgeMessageFilter>::Get(
90 rph, kGinJavaBridgeMessageFilterKey); 91 rph, kGinJavaBridgeMessageFilterKey);
91 if (!filter && create_if_not_exists) { 92 if (!filter && create_if_not_exists) {
92 filter = new GinJavaBridgeMessageFilter(); 93 filter = new GinJavaBridgeMessageFilter();
93 rph->AddFilter(filter.get()); 94 rph->AddFilter(filter.get());
94 rph->SetUserData(kGinJavaBridgeMessageFilterKey, 95 rph->SetUserData(kGinJavaBridgeMessageFilterKey,
95 new base::UserDataAdapter<GinJavaBridgeMessageFilter>( 96 new base::UserDataAdapter<GinJavaBridgeMessageFilter>(
96 filter.get())); 97 filter.get()));
97 } 98 }
99
100 if (filter.get() && filter->NeedsToAddFilterForNewIpcChannel()) {
101 rph->AddFilter(filter.get());
102 filter->SetNeedsToAddFilterForNewIpcChannel(false);
103 }
104
98 return filter; 105 return filter;
99 } 106 }
100 107
101 GinJavaBridgeDispatcherHost* GinJavaBridgeMessageFilter::FindHost() { 108 GinJavaBridgeDispatcherHost* GinJavaBridgeMessageFilter::FindHost() {
102 base::AutoLock locker(hosts_lock_); 109 base::AutoLock locker(hosts_lock_);
103 auto iter = hosts_.find(current_routing_id_); 110 auto iter = hosts_.find(current_routing_id_);
104 if (iter != hosts_.end()) 111 if (iter != hosts_.end())
105 return iter->second; 112 return iter->second;
106 // Not being able to find a host is OK -- we can receive messages from 113 // Not being able to find a host is OK -- we can receive messages from
107 // RenderFrames for which the corresponding host part has already been 114 // RenderFrames for which the corresponding host part has already been
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
160 167
161 void GinJavaBridgeMessageFilter::OnObjectWrapperDeleted( 168 void GinJavaBridgeMessageFilter::OnObjectWrapperDeleted(
162 GinJavaBoundObject::ObjectID object_id) { 169 GinJavaBoundObject::ObjectID object_id) {
163 DCHECK(JavaBridgeThread::CurrentlyOn()); 170 DCHECK(JavaBridgeThread::CurrentlyOn());
164 GinJavaBridgeDispatcherHost* host = FindHost(); 171 GinJavaBridgeDispatcherHost* host = FindHost();
165 if (host) 172 if (host)
166 host->OnObjectWrapperDeleted(current_routing_id_, object_id); 173 host->OnObjectWrapperDeleted(current_routing_id_, object_id);
167 } 174 }
168 175
169 } // namespace content 176 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698