Commit 74b96bc1 authored by Luke Seunghoe Gu's avatar Luke Seunghoe Gu Committed by Commit Bot

Check window before its usage

In order to prevent crashes due to unchecked uses of GetWindowAndroid(),
this CL creates dialog instance only if window is successfully
retrieved. Plus, null-checks for dialog instance are needed before
using it.

Bug: 1051035, 1049090
Change-Id: Icae3747474398b09c73372a0879f3df7a2afa978
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2294761
Commit-Queue: Vasilii Sukhanov <vasilii@chromium.org>
Reviewed-by: default avatarVasilii Sukhanov <vasilii@chromium.org>
Cr-Commit-Position: refs/heads/master@{#789443}
parent ce7b73a1
...@@ -612,6 +612,7 @@ Luiz Von Dentz <luiz.von.dentz@intel.com> ...@@ -612,6 +612,7 @@ Luiz Von Dentz <luiz.von.dentz@intel.com>
Luka Dojcilovic <l.dojcilovic@gmail.com> Luka Dojcilovic <l.dojcilovic@gmail.com>
Lukasz Krakowiak <lukasz.krakowiak@mobica.com> Lukasz Krakowiak <lukasz.krakowiak@mobica.com>
Luke Inman-Semerau <luke.semerau@gmail.com> Luke Inman-Semerau <luke.semerau@gmail.com>
Luke Seunghoe Gu <gulukesh@gmail.com>
Luke Zarko <lukezarko@gmail.com> Luke Zarko <lukezarko@gmail.com>
Luoxi Pan <l.panpax@gmail.com> Luoxi Pan <l.panpax@gmail.com>
Maarten Lankhorst <m.b.lankhorst@gmail.com> Maarten Lankhorst <m.b.lankhorst@gmail.com>
......
...@@ -42,15 +42,17 @@ AutoSigninFirstRunDialogAndroid::AutoSigninFirstRunDialogAndroid( ...@@ -42,15 +42,17 @@ AutoSigninFirstRunDialogAndroid::AutoSigninFirstRunDialogAndroid(
AutoSigninFirstRunDialogAndroid::~AutoSigninFirstRunDialogAndroid() {} AutoSigninFirstRunDialogAndroid::~AutoSigninFirstRunDialogAndroid() {}
void AutoSigninFirstRunDialogAndroid::ShowDialog() { void AutoSigninFirstRunDialogAndroid::ShowDialog() {
gfx::NativeWindow native_window = web_contents_->GetTopLevelNativeWindow();
if (!native_window) {
return;
}
JNIEnv* env = AttachCurrentThread(); JNIEnv* env = AttachCurrentThread();
Profile* profile = Profile* profile =
Profile::FromBrowserContext(web_contents_->GetBrowserContext()); Profile::FromBrowserContext(web_contents_->GetBrowserContext());
base::string16 explanation = l10n_util::GetStringFUTF16( base::string16 explanation = l10n_util::GetStringFUTF16(
IDS_AUTO_SIGNIN_FIRST_RUN_TEXT, IDS_AUTO_SIGNIN_FIRST_RUN_TEXT,
l10n_util::GetStringUTF16(IDS_PASSWORD_MANAGER_TITLE_BRAND)); l10n_util::GetStringUTF16(IDS_PASSWORD_MANAGER_TITLE_BRAND));
gfx::NativeWindow native_window = web_contents_->GetTopLevelNativeWindow();
base::android::ScopedJavaGlobalRef<jobject> java_dialog_global;
base::string16 message = l10n_util::GetStringUTF16( base::string16 message = l10n_util::GetStringUTF16(
IsSyncingAutosignSetting(profile) IsSyncingAutosignSetting(profile)
? IDS_AUTO_SIGNIN_FIRST_RUN_TITLE_MANY_DEVICES ? IDS_AUTO_SIGNIN_FIRST_RUN_TITLE_MANY_DEVICES
...@@ -59,12 +61,16 @@ void AutoSigninFirstRunDialogAndroid::ShowDialog() { ...@@ -59,12 +61,16 @@ void AutoSigninFirstRunDialogAndroid::ShowDialog() {
l10n_util::GetStringUTF16(IDS_AUTO_SIGNIN_FIRST_RUN_OK); l10n_util::GetStringUTF16(IDS_AUTO_SIGNIN_FIRST_RUN_OK);
base::string16 turn_off_button_text = l10n_util::GetStringUTF16(IDS_TURN_OFF); base::string16 turn_off_button_text = l10n_util::GetStringUTF16(IDS_TURN_OFF);
dialog_jobject_.Reset(Java_AutoSigninFirstRunDialog_createAndShowDialog( base::android::ScopedJavaLocalRef<jobject> java_dialog =
env, native_window->GetJavaObject(), reinterpret_cast<intptr_t>(this), native_window->GetJavaObject();
base::android::ConvertUTF16ToJavaString(env, message), if (java_dialog) {
base::android::ConvertUTF16ToJavaString(env, explanation), 0, 0, dialog_jobject_.Reset(Java_AutoSigninFirstRunDialog_createAndShowDialog(
base::android::ConvertUTF16ToJavaString(env, ok_button_text), env, java_dialog, reinterpret_cast<intptr_t>(this),
base::android::ConvertUTF16ToJavaString(env, turn_off_button_text))); base::android::ConvertUTF16ToJavaString(env, message),
base::android::ConvertUTF16ToJavaString(env, explanation), 0, 0,
base::android::ConvertUTF16ToJavaString(env, ok_button_text),
base::android::ConvertUTF16ToJavaString(env, turn_off_button_text)));
}
} }
void AutoSigninFirstRunDialogAndroid::Destroy(JNIEnv* env, jobject obj) { void AutoSigninFirstRunDialogAndroid::Destroy(JNIEnv* env, jobject obj) {
...@@ -97,13 +103,15 @@ void AutoSigninFirstRunDialogAndroid::OnLinkClicked(JNIEnv* env, jobject obj) { ...@@ -97,13 +103,15 @@ void AutoSigninFirstRunDialogAndroid::OnLinkClicked(JNIEnv* env, jobject obj) {
} }
void AutoSigninFirstRunDialogAndroid::WebContentsDestroyed() { void AutoSigninFirstRunDialogAndroid::WebContentsDestroyed() {
JNIEnv* env = AttachCurrentThread(); if (dialog_jobject_) {
Java_AutoSigninFirstRunDialog_dismissDialog(env, dialog_jobject_); JNIEnv* env = AttachCurrentThread();
Java_AutoSigninFirstRunDialog_dismissDialog(env, dialog_jobject_);
}
} }
void AutoSigninFirstRunDialogAndroid::OnVisibilityChanged( void AutoSigninFirstRunDialogAndroid::OnVisibilityChanged(
content::Visibility visibility) { content::Visibility visibility) {
if (visibility == content::Visibility::HIDDEN) { if (dialog_jobject_ && visibility == content::Visibility::HIDDEN) {
// TODO(https://crbug.com/610700): once bug is fixed, this code should be // TODO(https://crbug.com/610700): once bug is fixed, this code should be
// gone. // gone.
JNIEnv* env = AttachCurrentThread(); JNIEnv* env = AttachCurrentThread();
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment