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

Unified Diff: shell/android/intent_receiver_manager_impl.cc

Issue 1116653002: Introduce authentication service. (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Follow review Created 5 years, 8 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « shell/android/intent_receiver_manager_impl.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: shell/android/intent_receiver_manager_impl.cc
diff --git a/shell/android/intent_receiver_manager_impl.cc b/shell/android/intent_receiver_manager_impl.cc
index 2012806235a55a7dbc47a3121c0b858b7448a565..03503a0b38b40f2f5095c01a96a285e272957e8b 100644
--- a/shell/android/intent_receiver_manager_impl.cc
+++ b/shell/android/intent_receiver_manager_impl.cc
@@ -21,8 +21,10 @@ mojo::Array<uint8_t> BufferToArray(JNIEnv* env, jobject buffer) {
class IntentDispatcher : public mojo::ErrorHandler {
public:
- IntentDispatcher(intent_receiver::IntentReceiverPtr intent_receiver)
- : intent_receiver_(intent_receiver.Pass()) {
+ enum LifeCycle { Persistent, OneShot };
+ IntentDispatcher(intent_receiver::IntentReceiverPtr intent_receiver,
+ LifeCycle life_cycle)
+ : intent_receiver_(intent_receiver.Pass()), life_cycle_(life_cycle) {
intent_receiver_.set_error_handler(this);
}
@@ -34,6 +36,8 @@ class IntentDispatcher : public mojo::ErrorHandler {
void OnIntentReceived(JNIEnv* env, jobject intent) {
intent_receiver_->OnIntent(BufferToArray(env, intent));
+ if (life_cycle_ == OneShot)
+ delete this;
}
private:
@@ -44,6 +48,7 @@ class IntentDispatcher : public mojo::ErrorHandler {
}
intent_receiver::IntentReceiverPtr intent_receiver_;
+ LifeCycle life_cycle_;
};
} // namespace
@@ -53,14 +58,25 @@ void IntentReceiverManagerImpl::Bind(
bindings_.AddBinding(this, request.Pass());
}
-void IntentReceiverManagerImpl::RegisterReceiver(
+void IntentReceiverManagerImpl::RegisterIntentReceiver(
intent_receiver::IntentReceiverPtr receiver,
- const RegisterReceiverCallback& callback) {
+ const RegisterIntentReceiverCallback& callback) {
JNIEnv* env = base::android::AttachCurrentThread();
base::android::ScopedJavaLocalRef<jobject> buffer =
- Java_IntentReceiverRegistry_registerReceiver(
- env,
- reinterpret_cast<uintptr_t>(new IntentDispatcher(receiver.Pass())));
+ Java_IntentReceiverRegistry_registerIntentReceiver(
+ env, reinterpret_cast<uintptr_t>(new IntentDispatcher(
+ receiver.Pass(), IntentDispatcher::Persistent)));
+ callback.Run(BufferToArray(env, buffer.obj()));
+}
+
+void IntentReceiverManagerImpl::RegisterActivityResultReceiver(
+ intent_receiver::IntentReceiverPtr receiver,
+ const RegisterActivityResultReceiverCallback& callback) {
+ JNIEnv* env = base::android::AttachCurrentThread();
+ base::android::ScopedJavaLocalRef<jobject> buffer =
+ Java_IntentReceiverRegistry_registerActivityResultReceiver(
+ env, reinterpret_cast<uintptr_t>(new IntentDispatcher(
+ receiver.Pass(), IntentDispatcher::Persistent)));
callback.Run(BufferToArray(env, buffer.obj()));
}
@@ -71,10 +87,15 @@ bool RegisterIntentReceiverRegistry(JNIEnv* env) {
void OnIntentReceived(JNIEnv* env,
jclass jcaller,
jlong intent_dispatcher_ptr,
+ jboolean success,
jobject intent) {
IntentDispatcher* intent_dispatcher =
reinterpret_cast<IntentDispatcher*>(intent_dispatcher_ptr);
+ if (success) {
intent_dispatcher->OnIntentReceived(env, intent);
+ } else {
+ delete intent_dispatcher;
+ }
}
} // namespace shell
« no previous file with comments | « shell/android/intent_receiver_manager_impl.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698