Chromium Code Reviews
[email protected] (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(239)

Unified Diff: components/gcm_driver/instance_id/instance_id_android.cc

Issue 1899753002: Make InstanceIDBridge fully async to fix strict mode violations (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@iid3test
Patch Set: |this| Created 4 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 | « components/gcm_driver/instance_id/instance_id_android.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: components/gcm_driver/instance_id/instance_id_android.cc
diff --git a/components/gcm_driver/instance_id/instance_id_android.cc b/components/gcm_driver/instance_id/instance_id_android.cc
index 8300b2e2c865bf5d14783a2289344cdc1f86586b..40b333041c4ed192a99da514178b6ca67504bc62 100644
--- a/components/gcm_driver/instance_id/instance_id_android.cc
+++ b/components/gcm_driver/instance_id/instance_id_android.cc
@@ -77,29 +77,21 @@ InstanceIDAndroid::~InstanceIDAndroid() {
void InstanceIDAndroid::GetID(const GetIDCallback& callback) {
DCHECK(thread_checker_.CalledOnValidThread());
+ int32_t request_id = get_id_callbacks_.Add(new GetIDCallback(callback));
+
JNIEnv* env = AttachCurrentThread();
- std::string id = ConvertJavaStringToUTF8(
- Java_InstanceIDBridge_getId(env, java_ref_.obj()));
- base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE,
- base::Bind(callback, id));
+ Java_InstanceIDBridge_getId(env, java_ref_.obj(), request_id);
}
void InstanceIDAndroid::GetCreationTime(
const GetCreationTimeCallback& callback) {
DCHECK(thread_checker_.CalledOnValidThread());
+ int32_t request_id =
+ get_creation_time_callbacks_.Add(new GetCreationTimeCallback(callback));
+
JNIEnv* env = AttachCurrentThread();
- int64_t creation_time_unix_ms =
- Java_InstanceIDBridge_getCreationTime(env, java_ref_.obj());
- base::Time creation_time;
- // If the InstanceID's getId, getToken and deleteToken methods have never been
- // called, or deleteInstanceID has cleared it since, creation time will be 0.
- if (creation_time_unix_ms) {
- creation_time = base::Time::UnixEpoch() +
- base::TimeDelta::FromMilliseconds(creation_time_unix_ms);
- }
- base::ThreadTaskRunnerHandle::Get()->PostTask(
- FROM_HERE, base::Bind(callback, creation_time));
+ Java_InstanceIDBridge_getCreationTime(env, java_ref_.obj(), request_id);
}
void InstanceIDAndroid::GetToken(
@@ -149,6 +141,41 @@ void InstanceIDAndroid::DeleteID(const DeleteIDCallback& callback) {
Java_InstanceIDBridge_deleteInstanceID(env, java_ref_.obj(), request_id);
}
+void InstanceIDAndroid::DidGetID(
+ JNIEnv* env,
+ const base::android::JavaParamRef<jobject>& obj,
+ jint request_id,
+ const base::android::JavaParamRef<jstring>& jid) {
+ DCHECK(thread_checker_.CalledOnValidThread());
+
+ GetIDCallback* callback = get_id_callbacks_.Lookup(request_id);
+ DCHECK(callback);
+ callback->Run(ConvertJavaStringToUTF8(jid));
+ get_id_callbacks_.Remove(request_id);
+}
+
+void InstanceIDAndroid::DidGetCreationTime(
+ JNIEnv* env,
+ const base::android::JavaParamRef<jobject>& obj,
+ jint request_id,
+ jlong creation_time_unix_ms) {
+ DCHECK(thread_checker_.CalledOnValidThread());
+
+ base::Time creation_time;
+ // If the InstanceID's getId, getToken and deleteToken methods have never been
+ // called, or deleteInstanceID has cleared it since, creation time will be 0.
+ if (creation_time_unix_ms) {
+ creation_time = base::Time::UnixEpoch() +
+ base::TimeDelta::FromMilliseconds(creation_time_unix_ms);
+ }
+
+ GetCreationTimeCallback* callback =
+ get_creation_time_callbacks_.Lookup(request_id);
+ DCHECK(callback);
+ callback->Run(creation_time);
+ get_creation_time_callbacks_.Remove(request_id);
+}
+
void InstanceIDAndroid::DidGetToken(
JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj,
« no previous file with comments | « components/gcm_driver/instance_id/instance_id_android.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698