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
3 // found in the LICENSE file.
5 #ifndef ANDROID_WEBVIEW_NATIVE_AW_MESSAGE_PORT_SERVICE_IMPL_H_
6 #define ANDROID_WEBVIEW_NATIVE_AW_MESSAGE_PORT_SERVICE_IMPL_H_
11 #include "android_webview/browser/aw_message_port_service.h"
12 #include "base/android/jni_weak_ref.h"
13 #include "base/basictypes.h"
14 #include "base/memory/ref_counted.h"
15 #include "base/strings/string16.h"
17 namespace android_webview
{
19 // This class is the native peer of AwMessagePortService.java. Please see the
20 // java class for an explanation of use, ownership and lifetime.
22 // Threading: Created and initialized on UI thread. For other methods, see
23 // the method level DCHECKS or documentation.
24 class AwMessagePortServiceImpl
: public AwMessagePortService
{
26 static AwMessagePortServiceImpl
* GetInstance();
28 AwMessagePortServiceImpl();
29 ~AwMessagePortServiceImpl() override
;
30 void Init(JNIEnv
* env
, jobject object
);
32 void CreateMessageChannel(JNIEnv
* env
, jobjectArray ports
,
33 scoped_refptr
<AwMessagePortMessageFilter
> filter
);
35 // AwMessagePortService implementation
36 void OnConvertedWebToAppMessage(
38 const base::ListValue
& message
,
39 const std::vector
<int>& sent_message_port_ids
) override
;
40 void OnMessagePortMessageFilterClosing(
41 AwMessagePortMessageFilter
* filter
) override
;
43 // Methods called from Java.
44 void PostAppToWebMessage(JNIEnv
* env
, jobject object
, int sender_id
,
45 jstring message
, jintArray sent_ports
);
47 void RemoveSentPorts(const std::vector
<int>& sent_ports
);
50 void PostAppToWebMessageOnIOThread(
52 base::string16
* message
,
53 std::vector
<int>* sent_ports
);
54 void CreateMessageChannelOnIOThread(
55 scoped_refptr
<AwMessagePortMessageFilter
> filter
,
58 void OnMessageChannelCreated(
59 base::android::ScopedJavaGlobalRef
<jobjectArray
>* ports
,
62 void AddPort(int message_port_id
, AwMessagePortMessageFilter
* filter
);
64 JavaObjectWeakGlobalRef java_ref_
;
65 typedef std::map
<int, AwMessagePortMessageFilter
*> MessagePorts
;
66 MessagePorts ports_
; // Access on IO thread
68 DISALLOW_COPY_AND_ASSIGN(AwMessagePortServiceImpl
);
71 bool RegisterAwMessagePortService(JNIEnv
* env
);
73 } // namespace android_webview
75 #endif // ANDROID_WEBVIEW_NATIVE_AW_MESSAGE_PORT_SERVICE_IMPL_H_