Chromium Code Reviews| Index: chrome/browser/notifications/notification_platform_bridge_android.cc |
| diff --git a/chrome/browser/notifications/notification_platform_bridge_android.cc b/chrome/browser/notifications/notification_platform_bridge_android.cc |
| index 7e928f279298e93015e0d898ff4596204b01869a..67aac1eec82be608e78be1b2bf793662358c8bb5 100644 |
| --- a/chrome/browser/notifications/notification_platform_bridge_android.cc |
| +++ b/chrome/browser/notifications/notification_platform_bridge_android.cc |
| @@ -9,6 +9,7 @@ |
| #include "base/android/jni_array.h" |
| #include "base/android/jni_string.h" |
| +#include "base/bind.h" |
| #include "base/command_line.h" |
| #include "base/files/file_path.h" |
| #include "base/logging.h" |
| @@ -43,6 +44,10 @@ using base::android::ScopedJavaLocalRef; |
| namespace { |
| +// Callback to call after querying WebAPK package name is done. |
| +// The parameter is the package name of the WebAPK that matches the query. |
| +using QueryWebApkPackageCallback = base::Callback<void(const std::string&)>; |
| + |
| // A Java counterpart will be generated for this enum. |
| // GENERATED_JAVA_ENUM_PACKAGE: org.chromium.chrome.browser.notifications |
| enum NotificationActionType { |
| @@ -139,7 +144,8 @@ NotificationPlatformBridge* NotificationPlatformBridge::Create() { |
| return new NotificationPlatformBridgeAndroid(); |
| } |
| -NotificationPlatformBridgeAndroid::NotificationPlatformBridgeAndroid() { |
| +NotificationPlatformBridgeAndroid::NotificationPlatformBridgeAndroid() |
| + : weak_ptr_factory_(this) { |
| java_object_.Reset(Java_NotificationPlatformBridge_create( |
| AttachCurrentThread(), reinterpret_cast<intptr_t>(this))); |
| } |
| @@ -212,6 +218,20 @@ void NotificationPlatformBridgeAndroid::OnNotificationClosed( |
| -1 /* action index */, base::NullableString16() /* reply */)); |
| } |
| +void NotificationPlatformBridgeAndroid::OnQueryWebApkPackage( |
| + JNIEnv* env, |
| + const JavaParamRef<jobject>& java_object, |
| + const JavaParamRef<jstring>& java_webapk_package, |
| + const jlong jcallback_pointer) { |
| + DCHECK(jcallback_pointer); |
| + std::string webapk_package = |
| + ConvertJavaStringToUTF8(env, java_webapk_package); |
| + QueryWebApkPackageCallback* callback = |
| + reinterpret_cast<QueryWebApkPackageCallback*>(jcallback_pointer); |
| + callback->Run(webapk_package); |
| + delete callback; |
| +} |
| + |
| void NotificationPlatformBridgeAndroid::Display( |
| NotificationCommon::Type notification_type, |
| const std::string& notification_id, |
| @@ -224,19 +244,31 @@ void NotificationPlatformBridgeAndroid::Display( |
| // Android. |
| DCHECK_EQ(notification_type, NotificationCommon::PERSISTENT); |
| - GURL origin_url(notification.origin_url().GetOrigin()); |
| - |
| GURL scope_url(notification.service_worker_scope()); |
| if (!scope_url.is_valid()) |
| - scope_url = origin_url; |
| + scope_url = GURL(notification.origin_url().GetOrigin()); |
| ScopedJavaLocalRef<jstring> j_scope_url = |
| ConvertUTF8ToJavaString(env, scope_url.spec()); |
| - ScopedJavaLocalRef<jstring> webapk_package = |
| - Java_NotificationPlatformBridge_queryWebApkPackage( |
| - env, java_object_, j_scope_url); |
| + uintptr_t callback_pointer = |
| + reinterpret_cast<uintptr_t>(new QueryWebApkPackageCallback( |
| + base::Bind(&NotificationPlatformBridgeAndroid::DisplayInternal, |
| + weak_ptr_factory_.GetWeakPtr(), notification_id, |
| + profile_id, incognito, notification))); |
| + Java_NotificationPlatformBridge_queryWebApkPackage( |
| + env, java_object_, j_scope_url, callback_pointer); |
| +} |
| +void NotificationPlatformBridgeAndroid::DisplayInternal( |
|
pkotwicz
2017/07/20 01:32:05
.cc and .h order applies to DisplayInternal() too
Xi Han
2017/07/21 20:36:35
Done.
|
| + const std::string& notification_id, |
| + const std::string& profile_id, |
| + bool incognito, |
| + const Notification& notification, |
| + const std::string& webapk_package) { |
| + JNIEnv* env = AttachCurrentThread(); |
| ScopedJavaLocalRef<jstring> j_notification_id = |
| ConvertUTF8ToJavaString(env, notification_id); |
| + |
| + GURL origin_url(notification.origin_url().GetOrigin()); |
| ScopedJavaLocalRef<jstring> j_origin = |
| ConvertUTF8ToJavaString(env, origin_url.spec()); |
| ScopedJavaLocalRef<jstring> tag = |
| @@ -269,16 +301,18 @@ void NotificationPlatformBridgeAndroid::Display( |
| ScopedJavaLocalRef<jstring> j_profile_id = |
| ConvertUTF8ToJavaString(env, profile_id); |
| + ScopedJavaLocalRef<jstring> j_webapk_package = |
| + ConvertUTF8ToJavaString(env, webapk_package); |
| Java_NotificationPlatformBridge_displayNotification( |
| env, java_object_, j_notification_id, j_origin, j_profile_id, incognito, |
| - tag, webapk_package, title, body, image, notification_icon, badge, |
| + tag, j_webapk_package, title, body, image, notification_icon, badge, |
| vibration_pattern, notification.timestamp().ToJavaTime(), |
| notification.renotify(), notification.silent(), actions); |
| regenerated_notification_infos_[notification_id] = |
| RegeneratedNotificationInfo(origin_url.spec(), notification.tag(), |
| - ConvertJavaStringToUTF8(env, webapk_package)); |
| + webapk_package); |
| } |
| void NotificationPlatformBridgeAndroid::Close( |