Commit 8fd3c8e4 authored by Evan Stade's avatar Evan Stade Committed by Commit Bot

Port //chrome/browser/ui/sms to components for use by WebLayer

This re-uses Chrome's WebOTP infobar for WebLayer. To test, run

  run_weblayer_shell https://web-otp-demo.glitch.me/ \
      --args="--web-otp-backend=\"web-otp-backend-sms-verification\""

And send an SMS appended with ^zlUfAL9a4nJ

Bug: 1035836
Change-Id: Ib68bcfc71a05bf60a2619a0ef8f503ce4fb7796c
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2340112Reviewed-by: default avatarScott Violet <sky@chromium.org>
Reviewed-by: default avatarTed Choc <tedchoc@chromium.org>
Reviewed-by: default avatarMajid Valipour <majidvp@chromium.org>
Commit-Queue: Evan Stade <estade@chromium.org>
Cr-Commit-Position: refs/heads/master@{#796210}
parent f01c98a1
......@@ -361,6 +361,7 @@ android_library("chrome_java") {
"//components/browser_ui/settings/android:java",
"//components/browser_ui/share/android:java",
"//components/browser_ui/site_settings/android:java",
"//components/browser_ui/sms/android:java",
"//components/browser_ui/styles/android:java",
"//components/browser_ui/util/android:java",
"//components/browser_ui/webshare/android:java",
......@@ -738,6 +739,7 @@ java_cpp_template("resource_id_javagen") {
"//components/resources/android/blocked_content_resource_id.h",
"//components/resources/android/page_info_resource_id.h",
"//components/resources/android/permissions_resource_id.h",
"//components/resources/android/sms_resource_id.h",
]
}
......@@ -1029,6 +1031,7 @@ android_library("chrome_test_java") {
"//components/browser_ui/share/android:javatests",
"//components/browser_ui/site_settings/android:java",
"//components/browser_ui/site_settings/android:javatests",
"//components/browser_ui/sms/android:java",
"//components/browser_ui/styles/android:java",
"//components/browser_ui/util/android:java",
"//components/browser_ui/widget/android:java",
......@@ -3140,7 +3143,6 @@ generate_jni("chrome_jni_headers") {
"java/src/org/chromium/chrome/browser/signin/UnifiedConsentServiceBridge.java",
"java/src/org/chromium/chrome/browser/signin/WebSigninBridge.java",
"java/src/org/chromium/chrome/browser/site_settings/CookieControlsServiceBridge.java",
"java/src/org/chromium/chrome/browser/sms/SmsReceiverInfoBar.java",
"java/src/org/chromium/chrome/browser/status_indicator/StatusIndicatorSceneLayer.java",
"java/src/org/chromium/chrome/browser/suggestions/SuggestionsEventReporterBridge.java",
"java/src/org/chromium/chrome/browser/suggestions/mostvisited/MostVisitedSites.java",
......
......@@ -783,7 +783,6 @@ chrome_java_resources = [
"java/res/drawable/sharing_more.xml",
"java/res/drawable/sharing_print.xml",
"java/res/drawable/signin_header_animation.xml",
"java/res/drawable/smartphone_black_24dp.xml",
"java/res/drawable/store_locally_tooltip_background.xml",
"java/res/drawable/switch_to_tab.xml",
"java/res/drawable/tab_indicator.xml",
......
......@@ -1438,8 +1438,6 @@ chrome_java_sources = [
"java/src/org/chromium/chrome/browser/site_settings/ChromeWebappSettingsClient.java",
"java/src/org/chromium/chrome/browser/site_settings/CookieControlsServiceBridge.java",
"java/src/org/chromium/chrome/browser/site_settings/ManageSpaceActivity.java",
"java/src/org/chromium/chrome/browser/sms/SmsReceiverInfoBar.java",
"java/src/org/chromium/chrome/browser/sms/SmsReceiverUma.java",
"java/src/org/chromium/chrome/browser/status_indicator/StatusIndicatorCoordinator.java",
"java/src/org/chromium/chrome/browser/status_indicator/StatusIndicatorMediator.java",
"java/src/org/chromium/chrome/browser/status_indicator/StatusIndicatorProperties.java",
......
......@@ -15,6 +15,7 @@ class ResourceId {
#include "components/resources/android/blocked_content_resource_id.h"
#include "components/resources/android/page_info_resource_id.h"
#include "components/resources/android/permissions_resource_id.h"
#include "components/resources/android/sms_resource_id.h"
};
return resourceList;
}
......
......@@ -11,9 +11,6 @@
<color name="dark_action_bar_color">@color/google_blue_grey_900</color>
<color name="dark_status_bar_color">#161E21</color>
<!-- Infobar colors -->
<color name="infobar_icon_drawable_color">@color/default_icon_color_blue</color>
<!-- Tab Switcher Colors -->
<color name="tab_switcher_background">#14181C</color>
<color name="accessibility_tab_switcher_list_item">#252525</color>
......
......@@ -17,6 +17,7 @@ include_rules = [
"+components/bookmarks/common/android/java/src/org/chromium/components/bookmarks",
"+components/browser_ui/notifications/android",
"+components/browser_ui/settings/android",
"+components/browser_ui/sms/android",
"+components/browser_ui/styles/android",
"+components/browser_ui/widget/android",
"+components/crash/android",
......
......@@ -24,6 +24,8 @@ import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.test.ChromeActivityTestRule;
import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
import org.chromium.chrome.test.util.InfoBarUtil;
import org.chromium.components.browser_ui.sms.SmsReceiverInfoBar;
import org.chromium.components.browser_ui.sms.SmsReceiverUma;
import org.chromium.content_public.browser.test.util.CriteriaHelper;
import org.chromium.content_public.browser.test.util.TestThreadUtils;
import org.chromium.ui.KeyboardVisibilityDelegate;
......
......@@ -10632,20 +10632,6 @@ Please help our engineers fix this problem. Tell us what happened right before y
Open now
</message>
<!-- SMS strings -->
<message name="IDS_SMS_INFOBAR_TITLE" desc="Title shown when Chrome is waiting for an SMS on the user's behalf">
Verify your phone number
</message>
<message name="IDS_SMS_INFOBAR_STATUS_SMS_RECEIVED" desc="Message shown when Chrome has received an SMS on the user's behalf">
<ph name="ONE_TIME_CODE">$1<ex>123</ex></ph> is your code for <ph name="ORIGIN">$2<ex>example.com</ex></ph>
</message>
<message name="IDS_SMS_INFOBAR_BUTTON_OK" desc="Text for the button shown when Chrome has received an SMS on the user's behalf">
Verify
</message>
<!-- App uninstall prompt title -->
<message name="IDS_PROMPT_APP_UNINSTALL_TITLE" desc="Title text for uninstalling an app.">
Uninstall "<ph name="APP_NAME">$1<ex>Gmail Checker</ex></ph>"?
......
......@@ -2939,6 +2939,7 @@ static_library("browser") {
"//chrome/services/media_gallery_util/public/cpp",
"//components/autofill_assistant/browser",
"//components/browser_ui/site_settings/android",
"//components/browser_ui/sms/android",
"//components/browser_ui/util/android",
"//components/cbor",
"//components/cdm/browser",
......
......@@ -5,6 +5,7 @@ include_rules = [
"+chrome/android/test_support_jni_headers",
"+chrome_jni_registration/chrome_jni_registration.h",
"+components/browser_ui/site_settings/android",
"+components/browser_ui/sms/android",
"+components/browser_ui/util/android/url_constants.h",
"+components/infobars/android",
"+components/query_tiles",
......
......@@ -43,8 +43,6 @@ DECLARE_RESOURCE_ID(IDR_ANDROID_INFOBAR_SAFETYTIP_SHIELD,
DECLARE_RESOURCE_ID(IDR_ANDROID_INFOBAR_SAVE_PASSWORD,
R.drawable.ic_vpn_key_blue)
DECLARE_RESOURCE_ID(IDR_ANDROID_INFOBAR_TRANSLATE, R.drawable.infobar_translate)
DECLARE_RESOURCE_ID(IDR_ANDROID_INFOBAR_PHONE_ICON,
R.drawable.smartphone_black_24dp)
LINK_RESOURCE_ID(IDR_AUTOFILL_GOOGLE_PAY_WITH_DIVIDER,
R.drawable.google_pay_with_divider)
......
......@@ -57,6 +57,7 @@ void ResourceMapper::ConstructMap() {
#include "components/resources/android/blocked_content_resource_id.h"
#include "components/resources/android/page_info_resource_id.h"
#include "components/resources/android/permissions_resource_id.h"
#include "components/resources/android/sms_resource_id.h"
#undef LINK_RESOURCE_ID
#undef DECLARE_RESOURCE_ID
// Make sure ID list sizes match up.
......
......@@ -43,8 +43,8 @@
#include "chrome/browser/ssl/security_state_tab_helper.h"
#include "chrome/browser/ui/android/device_dialog/bluetooth_chooser_android.h"
#include "chrome/browser/ui/android/device_dialog/bluetooth_scanning_prompt_android.h"
#include "chrome/browser/ui/android/infobars/chrome_confirm_infobar.h"
#include "chrome/browser/ui/android/infobars/framebust_block_infobar.h"
#include "chrome/browser/ui/android/sms/sms_infobar.h"
#include "chrome/browser/ui/android/tab_model/tab_model_list.h"
#include "chrome/browser/ui/autofill/chrome_autofill_client.h"
#include "chrome/browser/ui/blocked_content/chrome_popup_navigation_delegate.h"
......@@ -58,6 +58,7 @@
#include "components/autofill/content/browser/content_autofill_driver_factory.h"
#include "components/blocked_content/popup_blocker.h"
#include "components/blocked_content/popup_tracker.h"
#include "components/browser_ui/sms/android/sms_infobar.h"
#include "components/browser_ui/util/android/url_constants.h"
#include "components/find_in_page/find_notification_details.h"
#include "components/find_in_page/find_tab_helper.h"
......@@ -212,8 +213,10 @@ void TabWebContentsDelegateAndroid::CreateSmsPrompt(
base::OnceClosure on_confirm,
base::OnceClosure on_cancel) {
auto* web_contents = content::WebContents::FromRenderFrameHost(host);
SmsInfoBar::Create(web_contents, origin, one_time_code, std::move(on_confirm),
std::move(on_cancel));
sms::SmsInfoBar::Create(
web_contents, InfoBarService::FromWebContents(web_contents),
ChromeConfirmInfoBar::GetResourceIdMapper(), origin, one_time_code,
std::move(on_confirm), std::move(on_cancel));
}
std::unique_ptr<content::BluetoothScanningPrompt>
......
......@@ -740,10 +740,6 @@ static_library("ui") {
"android/safe_browsing/password_reuse_dialog_view_android.cc",
"android/safe_browsing/password_reuse_dialog_view_android.h",
"android/simple_message_box_android.cc",
"android/sms/sms_infobar.cc",
"android/sms/sms_infobar.h",
"android/sms/sms_infobar_delegate.cc",
"android/sms/sms_infobar_delegate.h",
"android/ssl_client_certificate_selector.cc",
"android/status_tray_android.cc",
"android/tab_contents/chrome_web_contents_view_delegate_android.cc",
......
......@@ -25,12 +25,16 @@ std::unique_ptr<infobars::InfoBar> InfoBarService::CreateConfirmInfoBar(
ChromeConfirmInfoBar::ChromeConfirmInfoBar(
std::unique_ptr<ConfirmInfoBarDelegate> delegate)
: infobars::ConfirmInfoBar(
std::move(delegate),
base::BindRepeating(&ResourceMapper::MapToJavaDrawableId)) {}
: infobars::ConfirmInfoBar(std::move(delegate), GetResourceIdMapper()) {}
ChromeConfirmInfoBar::~ChromeConfirmInfoBar() {}
// static
infobars::InfoBarAndroid::ResourceIdMapper
ChromeConfirmInfoBar::GetResourceIdMapper() {
return base::BindRepeating(&ResourceMapper::MapToJavaDrawableId);
}
TabAndroid* ChromeConfirmInfoBar::GetTab() {
content::WebContents* web_contents =
InfoBarService::WebContentsFromInfoBar(this);
......
......@@ -20,6 +20,8 @@ class ChromeConfirmInfoBar : public infobars::ConfirmInfoBar {
ChromeConfirmInfoBar(const ChromeConfirmInfoBar&) = delete;
ChromeConfirmInfoBar& operator=(const ChromeConfirmInfoBar&) = delete;
static ResourceIdMapper GetResourceIdMapper();
protected:
TabAndroid* GetTab();
};
......
file://content/browser/sms/OWNERS
# COMPONENT: Blink>SMS
# TEAM: fugu-dev@chromium.org
# 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.
import("//build/config/android/rules.gni")
source_set("android") {
sources = [
"sms_infobar.cc",
"sms_infobar.h",
"sms_infobar_delegate.cc",
"sms_infobar_delegate.h",
]
deps = [
":jni_headers",
"//base",
"//components/infobars/android",
"//components/infobars/core",
"//components/resources:android_resources",
"//components/strings",
"//components/url_formatter",
"//content/public/browser",
"//ui/android",
"//url",
]
}
generate_jni("jni_headers") {
sources = [
"java/src/org/chromium/components/browser_ui/sms/SmsReceiverInfoBar.java",
]
}
android_library("java") {
sources = [
"java/src/org/chromium/components/browser_ui/sms/SmsReceiverInfoBar.java",
"java/src/org/chromium/components/browser_ui/sms/SmsReceiverUma.java",
]
deps = [
"//base:base_java",
"//components/browser_ui/styles/android:java_resources",
"//components/infobars/android:java",
"//third_party/android_deps:androidx_annotation_annotation_java",
"//ui/android:ui_java",
"//url:gurl_java",
]
}
include_rules = [
"+components/infobars/android",
"+components/infobars/core",
"+components/resources/android",
"+components/strings",
"+components/url_formatter",
"+content/public",
"+ui/android",
"+ui/base",
]
......@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.chrome.browser.sms;
package org.chromium.components.browser_ui.sms;
import android.app.Activity;
import android.content.Context;
......@@ -13,7 +13,7 @@ import androidx.annotation.VisibleForTesting;
import org.chromium.base.Log;
import org.chromium.base.annotations.CalledByNative;
import org.chromium.chrome.R;
import org.chromium.components.browser_ui.styles.R;
import org.chromium.components.infobars.ConfirmInfoBar;
import org.chromium.components.infobars.InfoBarControlLayout;
import org.chromium.components.infobars.InfoBarLayout;
......@@ -32,7 +32,7 @@ public class SmsReceiverInfoBar extends ConfirmInfoBar {
@VisibleForTesting
@CalledByNative
static SmsReceiverInfoBar create(WindowAndroid windowAndroid, int iconId, String title,
public static SmsReceiverInfoBar create(WindowAndroid windowAndroid, int iconId, String title,
String message, String okButtonLabel) {
if (DEBUG) Log.d(TAG, "SmsReceiverInfoBar.create()");
return new SmsReceiverInfoBar(windowAndroid, iconId, title, message, okButtonLabel);
......
......@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.chrome.browser.sms;
package org.chromium.components.browser_ui.sms;
import androidx.annotation.IntDef;
......@@ -14,7 +14,7 @@ import java.lang.annotation.RetentionPolicy;
/**
* Helper Class for Sms Receiver UMA Collection.
*/
final class SmsReceiverUma {
public final class SmsReceiverUma {
// Note: these values must match the SMSReceiverInfobar enum in enums.xml.
// Only add new values at the end, right before NUM_ENTRIES.
@IntDef({InfobarAction.SHOWN, InfobarAction.KEYBOARD_DISMISSED})
......
......@@ -2,12 +2,11 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/ui/android/sms/sms_infobar.h"
#include "components/browser_ui/sms/android/sms_infobar.h"
#include "base/android/jni_string.h"
#include "chrome/android/chrome_jni_headers/SmsReceiverInfoBar_jni.h"
#include "chrome/browser/infobars/infobar_service.h"
#include "chrome/browser/ui/android/sms/sms_infobar_delegate.h"
#include "components/browser_ui/sms/android/jni_headers/SmsReceiverInfoBar_jni.h"
#include "components/browser_ui/sms/android/sms_infobar_delegate.h"
#include "content/public/browser/web_contents.h"
#include "ui/android/window_android.h"
#include "url/origin.h"
......@@ -16,23 +15,28 @@ using base::android::ConvertUTF16ToJavaString;
using base::android::ScopedJavaLocalRef;
using infobars::InfoBarDelegate;
namespace sms {
// static
void SmsInfoBar::Create(content::WebContents* web_contents,
infobars::InfoBarManager* manager,
const ResourceIdMapper& resource_mapper,
const url::Origin& origin,
const std::string& one_time_code,
base::OnceClosure on_confirm,
base::OnceClosure on_cancel) {
auto delegate = std::make_unique<SmsInfoBarDelegate>(
origin, one_time_code, std::move(on_confirm), std::move(on_cancel));
auto infobar =
std::make_unique<SmsInfoBar>(web_contents, std::move(delegate));
auto* infobar_service = InfoBarService::FromWebContents(web_contents);
infobar_service->AddInfoBar(std::move(infobar));
auto infobar = std::make_unique<SmsInfoBar>(web_contents, resource_mapper,
std::move(delegate));
manager->AddInfoBar(std::move(infobar));
}
SmsInfoBar::SmsInfoBar(content::WebContents* web_contents,
const ResourceIdMapper& resource_mapper,
std::unique_ptr<SmsInfoBarDelegate> delegate)
: ChromeConfirmInfoBar(std::move(delegate)), web_contents_(web_contents) {}
: infobars::ConfirmInfoBar(std::move(delegate), resource_mapper),
web_contents_(web_contents) {}
SmsInfoBar::~SmsInfoBar() = default;
......@@ -51,3 +55,5 @@ ScopedJavaLocalRef<jobject> SmsInfoBar::CreateRenderInfoBar(JNIEnv* env) {
return Java_SmsReceiverInfoBar_create(env, window_android, GetJavaIconId(),
title, message, button);
}
} // namespace sms
......@@ -2,14 +2,14 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_UI_ANDROID_SMS_SMS_INFOBAR_H_
#define CHROME_BROWSER_UI_ANDROID_SMS_SMS_INFOBAR_H_
#ifndef COMPONENTS_BROWSER_UI_SMS_ANDROID_SMS_INFOBAR_H_
#define COMPONENTS_BROWSER_UI_SMS_ANDROID_SMS_INFOBAR_H_
#include <memory>
#include "base/callback_forward.h"
#include "base/macros.h"
#include "chrome/browser/ui/android/infobars/chrome_confirm_infobar.h"
#include "components/infobars/android/confirm_infobar.h"
namespace content {
class WebContents;
......@@ -19,17 +19,22 @@ namespace url {
class Origin;
} // namespace url
namespace sms {
class SmsInfoBarDelegate;
class SmsInfoBar : public ChromeConfirmInfoBar {
class SmsInfoBar : public infobars::ConfirmInfoBar {
public:
SmsInfoBar(content::WebContents* web_contents,
const ResourceIdMapper& resource_mapper,
std::unique_ptr<SmsInfoBarDelegate> delegate);
~SmsInfoBar() override;
// Creates an SMS receiver infobar and delegate and adds it to
// |infobar_service|.
static void Create(content::WebContents* web_contents,
infobars::InfoBarManager* manager,
const ResourceIdMapper& resource_mapper,
const url::Origin& origin,
const std::string& one_time_code,
base::OnceCallback<void()> on_confirm,
......@@ -45,4 +50,6 @@ class SmsInfoBar : public ChromeConfirmInfoBar {
DISALLOW_COPY_AND_ASSIGN(SmsInfoBar);
};
#endif // CHROME_BROWSER_UI_ANDROID_SMS_SMS_INFOBAR_H_
} // namespace sms
#endif // COMPONENTS_BROWSER_UI_SMS_ANDROID_SMS_INFOBAR_H_
......@@ -2,20 +2,21 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/ui/android/sms/sms_infobar_delegate.h"
#include "components/browser_ui/sms/android/sms_infobar_delegate.h"
#include "base/check_op.h"
#include "base/strings/utf_string_conversions.h"
#include "build/build_config.h"
#include "chrome/app/vector_icons/vector_icons.h"
#include "chrome/browser/android/android_theme_resources.h"
#include "chrome/grit/generated_resources.h"
#include "components/infobars/core/infobar.h"
#include "components/resources/android/theme_resources.h"
#include "components/strings/grit/components_strings.h"
#include "components/url_formatter/elide_url.h"
#include "content/public/browser/web_contents.h"
#include "ui/base/l10n/l10n_util.h"
#include "url/origin.h"
namespace sms {
SmsInfoBarDelegate::SmsInfoBarDelegate(const url::Origin& origin,
const std::string& one_time_code,
base::OnceClosure on_confirm,
......@@ -65,3 +66,5 @@ void SmsInfoBarDelegate::InfoBarDismissed() {
base::string16 SmsInfoBarDelegate::GetTitle() const {
return l10n_util::GetStringUTF16(IDS_SMS_INFOBAR_TITLE);
}
} // namespace sms
......@@ -2,17 +2,18 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_UI_ANDROID_SMS_SMS_INFOBAR_DELEGATE_H_
#define CHROME_BROWSER_UI_ANDROID_SMS_SMS_INFOBAR_DELEGATE_H_
#ifndef COMPONENTS_BROWSER_UI_SMS_ANDROID_SMS_INFOBAR_DELEGATE_H_
#define COMPONENTS_BROWSER_UI_SMS_ANDROID_SMS_INFOBAR_DELEGATE_H_
#include "base/callback.h"
#include "base/macros.h"
#include "components/infobars/core/confirm_infobar_delegate.h"
#include "url/origin.h"
namespace sms {
// This class configures an infobar shown when an SMS is received and the user
// is asked for confirmation that it should be shared with the site. Upon
// confirmation, the infobar calls back its caller.
// is asked for confirmation that it should be shared with the site (WebOTP).
class SmsInfoBarDelegate : public ConfirmInfoBarDelegate {
public:
SmsInfoBarDelegate(const url::Origin& origin,
......@@ -40,4 +41,6 @@ class SmsInfoBarDelegate : public ConfirmInfoBarDelegate {
DISALLOW_COPY_AND_ASSIGN(SmsInfoBarDelegate);
};
#endif // CHROME_BROWSER_UI_ANDROID_SMS_SMS_INFOBAR_DELEGATE_H_
} // namespace sms
#endif // COMPONENTS_BROWSER_UI_SMS_ANDROID_SMS_INFOBAR_DELEGATE_H_
......@@ -114,6 +114,7 @@ android_resources("java_resources") {
"java/res/drawable/ic_warning_red_16dp.xml",
"java/res/drawable/ic_warning_red_24dp.xml",
"java/res/drawable/permission_location.xml",
"java/res/drawable/smartphone_black_24dp.xml",
"java/res/values-night/colors.xml",
"java/res/values/colors.xml",
"java/res/values/dimens.xml",
......
......@@ -18,6 +18,9 @@
@color/default_bg_color_dark_elev_3
</color>
<!-- Infobar colors -->
<color name="infobar_icon_drawable_color">@color/default_icon_color_blue</color>
<!-- Control colors for toggles, checkboxes, ratio buttons, list item highlight, and accent.
Note that these should NOT be used for icon tint. -->
<color name="control_normal_color">@color/default_control_color_normal_light</color>
......
......@@ -312,6 +312,7 @@
<part file="security_interstitials_strings.grdp" />
<part file="security_state_strings.grdp" />
<part file="send_tab_to_self_strings.grdp" />
<part file="sms_strings.grdp" />
<part file="ssl_errors_strings.grdp" />
<part file="sync_ui_strings.grdp" />
<part file="translate_strings.grdp" />
......
......@@ -111,6 +111,7 @@ if (is_android) {
"android/blocked_content_resource_id.h",
"android/page_info_resource_id.h",
"android/permissions_resource_id.h",
"android/sms_resource_id.h",
"android/theme_resources.h",
]
}
......
// 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.
// This file maps resource IDs to Android resource IDs.
// Presence of regular include guards is checked by:
// 1. cpplint
// 2. a custom presubmit in src/PRESUBMIT.py
// 3. clang (but it only checks the guard is correct if present)
// Disable the first two with these magic comments:
// NOLINT(build/header_guard)
// no-include-guard-because-multiply-included
// LINK_RESOURCE_ID is used for IDs that come from a .grd file.
#ifndef LINK_RESOURCE_ID
#error "LINK_RESOURCE_ID should be defined before including this file"
#endif
// DECLARE_RESOURCE_ID is used for IDs that don't have .grd entries, and
// are only declared in this file.
#ifndef DECLARE_RESOURCE_ID
#error "DECLARE_RESOURCE_ID should be defined before including this file"
#endif
// InfoBar resources.
DECLARE_RESOURCE_ID(IDR_ANDROID_INFOBAR_PHONE_ICON,
R.drawable.smartphone_black_24dp)
......@@ -17,6 +17,7 @@ enum {
#include "components/resources/android/blocked_content_resource_id.h"
#include "components/resources/android/page_info_resource_id.h"
#include "components/resources/android/permissions_resource_id.h"
#include "components/resources/android/sms_resource_id.h"
ANDROID_COMPONENTS_RESOURCE_ID_MAX,
};
......
<?xml version="1.0" encoding="utf-8"?>
<grit-part>
<message name="IDS_SMS_INFOBAR_TITLE" desc="Title shown when the browser is waiting for an SMS on the user's behalf">
Verify your phone number
</message>
<message name="IDS_SMS_INFOBAR_STATUS_SMS_RECEIVED" desc="Message shown when the browser has received an SMS on the user's behalf">
<ph name="ONE_TIME_CODE">$1<ex>123</ex></ph> is your code for <ph name="ORIGIN">$2<ex>example.com</ex></ph>
</message>
<message name="IDS_SMS_INFOBAR_BUTTON_OK" desc="Text for the button shown when the browser has received an SMS on the user's behalf">
Verify
</message>
</grit-part>
......@@ -550,6 +550,7 @@ source_set("weblayer_lib_base") {
"//components/autofill/android/provider",
"//components/browser_ui/client_certificate/android",
"//components/browser_ui/site_settings/android",
"//components/browser_ui/sms/android",
"//components/cdm/browser",
"//components/content_settings/android",
"//components/crash/android:crash_android",
......
......@@ -172,6 +172,8 @@ bool ContentMainDelegateImpl::BasicStartupComplete(int* exit_code) {
media::kPictureInPictureAPI,
::features::kDisableDeJelly,
::features::kDynamicColorGamut,
#else
::features::kSmsReceiver,
#endif
};
......
......@@ -41,6 +41,7 @@ void ConstructMap() {
#include "components/resources/android/blocked_content_resource_id.h"
#include "components/resources/android/page_info_resource_id.h"
#include "components/resources/android/permissions_resource_id.h"
#include "components/resources/android/sms_resource_id.h"
#undef LINK_RESOURCE_ID
#undef DECLARE_RESOURCE_ID
// Make sure ID list sizes match up.
......
......@@ -22,8 +22,14 @@ InfoBarService::~InfoBarService() {}
#if defined(OS_ANDROID)
std::unique_ptr<infobars::InfoBar> InfoBarService::CreateConfirmInfoBar(
std::unique_ptr<ConfirmInfoBarDelegate> delegate) {
return std::make_unique<infobars::ConfirmInfoBar>(
std::move(delegate), base::BindRepeating(&MapToJavaDrawableId));
return std::make_unique<infobars::ConfirmInfoBar>(std::move(delegate),
GetResourceIdMapper());
}
// static
infobars::InfoBarAndroid::ResourceIdMapper
InfoBarService::GetResourceIdMapper() {
return base::BindRepeating(&MapToJavaDrawableId);
}
#endif // if defined(OS_ANDROID)
......
......@@ -13,6 +13,10 @@
#include "components/infobars/content/content_infobar_manager.h"
#include "content/public/browser/web_contents_user_data.h"
#if defined(OS_ANDROID)
#include "components/infobars/android/infobar_android.h"
#endif
namespace content {
class WebContents;
}
......@@ -33,6 +37,10 @@ class InfoBarService : public infobars::ContentInfoBarManager,
std::unique_ptr<infobars::InfoBar> CreateConfirmInfoBar(
std::unique_ptr<ConfirmInfoBarDelegate> delegate) override;
#if defined(OS_ANDROID)
static infobars::InfoBarAndroid::ResourceIdMapper GetResourceIdMapper();
#endif
protected:
explicit InfoBarService(content::WebContents* web_contents);
......
......@@ -47,6 +47,7 @@ java_cpp_template("resource_id_javagen") {
"//components/resources/android/blocked_content_resource_id.h",
"//components/resources/android/page_info_resource_id.h",
"//components/resources/android/permissions_resource_id.h",
"//components/resources/android/sms_resource_id.h",
]
}
......@@ -144,6 +145,7 @@ android_library("java") {
"//components/browser_ui/settings/android:java",
"//components/browser_ui/share/android:java",
"//components/browser_ui/site_settings/android:java",
"//components/browser_ui/sms/android:java",
"//components/browser_ui/styles/android:java",
"//components/browser_ui/util/android:java",
"//components/browser_ui/webshare/android:java",
......
......@@ -14,6 +14,7 @@ class ResourceId {
#include "components/resources/android/blocked_content_resource_id.h"
#include "components/resources/android/page_info_resource_id.h"
#include "components/resources/android/permissions_resource_id.h"
#include "components/resources/android/sms_resource_id.h"
};
return resourceList;
}
......
......@@ -89,6 +89,7 @@
#include "base/json/json_writer.h"
#include "base/trace_event/trace_event.h"
#include "components/autofill/android/provider/autofill_provider_android.h"
#include "components/browser_ui/sms/android/sms_infobar.h"
#include "components/embedder_support/android/contextmenu/context_menu_builder.h"
#include "components/embedder_support/android/delegate/color_chooser_android.h"
#include "components/javascript_dialogs/tab_modal_dialog_manager.h" // nogncheck
......@@ -880,6 +881,23 @@ content::ColorChooser* TabImpl::OpenColorChooser(
#endif
}
void TabImpl::CreateSmsPrompt(content::RenderFrameHost* render_frame_host,
const url::Origin& origin,
const std::string& one_time_code,
base::OnceClosure on_confirm,
base::OnceClosure on_cancel) {
#if defined(OS_ANDROID)
auto* web_contents =
content::WebContents::FromRenderFrameHost(render_frame_host);
sms::SmsInfoBar::Create(
web_contents, InfoBarService::FromWebContents(web_contents),
InfoBarService::GetResourceIdMapper(), origin, one_time_code,
std::move(on_confirm), std::move(on_cancel));
#else
NOTREACHED();
#endif
}
void TabImpl::RunFileChooser(
content::RenderFrameHost* render_frame_host,
scoped_refptr<content::FileSelectListener> listener,
......
......@@ -258,6 +258,11 @@ class TabImpl : public Tab,
void RunFileChooser(content::RenderFrameHost* render_frame_host,
scoped_refptr<content::FileSelectListener> listener,
const blink::mojom::FileChooserParams& params) override;
void CreateSmsPrompt(content::RenderFrameHost*,
const url::Origin&,
const std::string& one_time_code,
base::OnceClosure on_confirm,
base::OnceClosure on_cancel) override;
int GetTopControlsHeight() override;
int GetTopControlsMinHeight() override;
int GetBottomControlsHeight() override;
......
......@@ -3,6 +3,7 @@ IDS_ACCESSIBILITY_EVENTS_PERMISSION_FRAGMENT
IDS_AR_AND_MEDIA_CAPTURE_VIDEO_INFOBAR_TEXT
IDS_AR_INFOBAR_TEXT
IDS_AR_PERMISSION_FRAGMENT
IDS_AUTOMATIC_DOWNLOADS_TAB_LABEL
IDS_BEFORERELOAD_APP_MESSAGEBOX_TITLE
IDS_BEFORERELOAD_MESSAGEBOX_TITLE
IDS_BEFOREUNLOAD_APP_MESSAGEBOX_TITLE
......@@ -52,18 +53,18 @@ IDS_CERT_ERROR_WEAK_KEY_DESCRIPTION
IDS_CERT_ERROR_WEAK_KEY_DETAILS
IDS_CERT_ERROR_WEAK_SIGNATURE_ALGORITHM_DESCRIPTION
IDS_CERT_ERROR_WEAK_SIGNATURE_ALGORITHM_DETAILS
IDS_CERT_INFO_SUBJECT_GROUP
IDS_CERT_INFO_COMMON_NAME_LABEL
IDS_CERT_INFO_ORGANIZATION_LABEL
IDS_CERT_INFO_SERIAL_NUMBER_LABEL
IDS_CERT_INFO_ORGANIZATIONAL_UNIT_LABEL
IDS_CERT_INFO_ISSUER_GROUP
IDS_CERT_INFO_VALIDITY_GROUP
IDS_CERT_INFO_ISSUED_ON_LABEL
IDS_CERT_INFO_EXPIRES_ON_LABEL
IDS_CERT_INFO_FINGERPRINTS_GROUP
IDS_CERT_INFO_SHA256_FINGERPRINT_LABEL
IDS_CERT_INFO_ISSUED_ON_LABEL
IDS_CERT_INFO_ISSUER_GROUP
IDS_CERT_INFO_ORGANIZATIONAL_UNIT_LABEL
IDS_CERT_INFO_ORGANIZATION_LABEL
IDS_CERT_INFO_SERIAL_NUMBER_LABEL
IDS_CERT_INFO_SHA1_FINGERPRINT_LABEL
IDS_CERT_INFO_SHA256_FINGERPRINT_LABEL
IDS_CERT_INFO_SUBJECT_GROUP
IDS_CERT_INFO_VALIDITY_GROUP
IDS_CERT_X509_SUBJECT_ALT_NAME
IDS_CLIPBOARD_INFOBAR_TEXT
IDS_CLIPBOARD_PERMISSION_FRAGMENT
......@@ -81,10 +82,10 @@ IDS_DOWNLOAD_NOTIFICATION_PAUSED
IDS_DOWNLOAD_NOTIFICATION_PAUSE_BUTTON
IDS_DOWNLOAD_NOTIFICATION_RESUME_BUTTON
IDS_DOWNLOAD_UI_DETERMINATE_BYTES
IDS_DOWNLOAD_UI_GB
IDS_DOWNLOAD_UI_INDETERMINATE_BYTES
IDS_DOWNLOAD_UI_KB
IDS_DOWNLOAD_UI_MB
IDS_DOWNLOAD_UI_GB
IDS_FLASH_PERMISSION_FRAGMENT
IDS_FLASH_PERMISSION_WARNING_FRAGMENT
IDS_GEOLOCATION_INFOBAR_PERMISSION_FRAGMENT
......@@ -97,10 +98,10 @@ IDS_JAVASCRIPT_MESSAGEBOX_TITLE
IDS_JAVASCRIPT_MESSAGEBOX_TITLE_IFRAME
IDS_JAVASCRIPT_MESSAGEBOX_TITLE_NONSTANDARD_URL
IDS_JAVASCRIPT_MESSAGEBOX_TITLE_NONSTANDARD_URL_IFRAME
IDS_LOGIN_DIALOG_USERNAME_FIELD
IDS_LOGIN_DIALOG_OK_BUTTON_LABEL
IDS_LOGIN_DIALOG_PASSWORD_FIELD
IDS_LOGIN_DIALOG_TITLE
IDS_LOGIN_DIALOG_OK_BUTTON_LABEL
IDS_LOGIN_DIALOG_USERNAME_FIELD
IDS_MEDIA_CAPTURE_AUDIO_AND_VIDEO_INFOBAR_TEXT
IDS_MEDIA_CAPTURE_AUDIO_ONLY_INFOBAR_TEXT
IDS_MEDIA_CAPTURE_AUDIO_ONLY_PERMISSION_FRAGMENT
......@@ -182,12 +183,10 @@ IDS_PAGE_INFO_TYPE_BLUETOOTH_SCANNING
IDS_PAGE_INFO_TYPE_CAMERA
IDS_PAGE_INFO_TYPE_CAMERA_PAN_TILT_ZOOM
IDS_PAGE_INFO_TYPE_CLIPBOARD
IDS_AUTOMATIC_DOWNLOADS_TAB_LABEL
IDS_PAGE_INFO_TYPE_FLASH
IDS_PAGE_INFO_TYPE_IMAGES
IDS_PAGE_INFO_TYPE_JAVASCRIPT
IDS_PAGE_INFO_TYPE_LOCATION
IDS_PAGE_INFO_TYPE_PROTECTED_MEDIA_IDENTIFIER
IDS_PAGE_INFO_TYPE_MIC
IDS_PAGE_INFO_TYPE_MIDI_SYSEX
IDS_PAGE_INFO_TYPE_MOTION_SENSORS
......@@ -196,6 +195,7 @@ IDS_PAGE_INFO_TYPE_NFC
IDS_PAGE_INFO_TYPE_NOTIFICATIONS
IDS_PAGE_INFO_TYPE_POPUPS_REDIRECTS
IDS_PAGE_INFO_TYPE_PROTECTED_MEDIA_IDENTIFIER
IDS_PAGE_INFO_TYPE_PROTECTED_MEDIA_IDENTIFIER
IDS_PAGE_INFO_TYPE_SENSORS
IDS_PAGE_INFO_TYPE_SERIAL
IDS_PAGE_INFO_TYPE_SOUND
......@@ -216,6 +216,9 @@ IDS_PROTECTED_MEDIA_IDENTIFIER_PER_ORIGIN_PROVISIONING_INFOBAR_TEXT
IDS_REQUEST_LARGE_QUOTA_INFOBAR_TEXT
IDS_REQUEST_QUOTA_INFOBAR_TEXT
IDS_REQUEST_QUOTA_PERMISSION_FRAGMENT
IDS_SMS_INFOBAR_BUTTON_OK
IDS_SMS_INFOBAR_STATUS_SMS_RECEIVED
IDS_SMS_INFOBAR_TITLE
IDS_SSL_CLOSE_DETAILS_BUTTON
IDS_SSL_NONOVERRIDABLE_HSTS
IDS_SSL_NONOVERRIDABLE_INVALID
......@@ -232,12 +235,12 @@ IDS_SSL_V2_RECURRENT_ERROR_PARAGRAPH
IDS_SSL_V2_TITLE
IDS_STORAGE_ACCESS_INFOBAR_TEXT
IDS_STORAGE_ACCESS_PERMISSION_FRAGMENT
IDS_TRANSLATE_INFOBAR_ERROR
IDS_TRANSLATE_BUTTON
IDS_TRANSLATE_INFOBAR_ERROR
IDS_TRANSLATE_NEVER_TRANSLATE_SITE
IDS_TRANSLATE_OPTION_ALWAYS_TRANSLATE
IDS_TRANSLATE_OPTION_NEVER_TRANSLATE
IDS_TRANSLATE_OPTION_MORE_LANGUAGE
IDS_TRANSLATE_OPTION_NEVER_TRANSLATE
IDS_TRANSLATE_OPTION_NOT_SOURCE_LANGUAGE
IDS_VR_INFOBAR_TEXT
IDS_VR_PERMISSION_FRAGMENT
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