blob: 4187ad93e28808232b2dddb1d63e7fd20035f673 [file] [log] [blame]
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "content/browser/sms/sms_provider_gms_user_consent.h"
#include <string>
#include "base/bind.h"
#include "url/gurl.h"
#include "url/origin.h"
#include "content/public/android/content_jni_headers/SmsUserConsentReceiver_jni.h"
#include "content/public/browser/web_contents.h"
#include "ui/android/window_android.h"
using base::android::AttachCurrentThread;
using base::android::ConvertJavaStringToUTF8;
namespace content {
SmsProviderGmsUserConsent::SmsProviderGmsUserConsent() : SmsProvider() {
// This class is constructed a single time whenever the
// first web page uses the SMS Retriever API to wait for
// SMSes.
JNIEnv* env = AttachCurrentThread();
j_sms_receiver_.Reset(Java_SmsUserConsentReceiver_create(
env, reinterpret_cast<intptr_t>(this)));
}
SmsProviderGmsUserConsent::~SmsProviderGmsUserConsent() {
JNIEnv* env = AttachCurrentThread();
Java_SmsUserConsentReceiver_destroy(env, j_sms_receiver_);
}
void SmsProviderGmsUserConsent::Retrieve(RenderFrameHost* render_frame_host) {
DCHECK(render_frame_host);
WebContents* web_contents =
WebContents::FromRenderFrameHost(render_frame_host);
if (!web_contents || !web_contents->GetTopLevelNativeWindow())
return;
JNIEnv* env = AttachCurrentThread();
Java_SmsUserConsentReceiver_listen(
env, j_sms_receiver_,
web_contents->GetTopLevelNativeWindow()->GetJavaObject());
}
void SmsProviderGmsUserConsent::OnReceive(JNIEnv* env, jstring message) {
std::string sms = ConvertJavaStringToUTF8(env, message);
NotifyReceive(sms);
}
void SmsProviderGmsUserConsent::OnTimeout(JNIEnv* env) {}
base::android::ScopedJavaGlobalRef<jobject>
SmsProviderGmsUserConsent::GetSmsReceiverForTesting() const {
return j_sms_receiver_;
}
} // namespace content