Commit 5a793bc6 authored by Nohemi Fernandez's avatar Nohemi Fernandez Committed by Commit Bot

[iOS] Add notification infobar when cookies are re-generated.

Adds a notification showing the user's email and avatar when cookies
have been re-generated for their account.

Bug: 1145592
Change-Id: I4a74c38f15a17ef9ec8d85632ca8b95dbca3fed8
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2520996
Commit-Queue: Nohemi Fernandez <fernandex@chromium.org>
Reviewed-by: default avatarEugene But <eugenebut@chromium.org>
Reviewed-by: default avatarChris Lu <thegreenfrog@chromium.org>
Cr-Commit-Position: refs/heads/master@{#824602}
parent e1a056e6
......@@ -20,6 +20,8 @@ source_set("authentication") {
"resized_avatar_cache.mm",
"signed_in_accounts_view_controller.h",
"signed_in_accounts_view_controller.mm",
"signin_notification_infobar_delegate.h",
"signin_notification_infobar_delegate.mm",
"signin_promo_view_mediator.h",
"signin_promo_view_mediator.mm",
]
......
// 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.
#ifndef IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_NOTIFICATION_INFOBAR_DELEGATE_H_
#define IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_NOTIFICATION_INFOBAR_DELEGATE_H_
#include <memory>
#include "base/macros.h"
#include "base/strings/string16.h"
#include "components/infobars/core/confirm_infobar_delegate.h"
#include "components/sync/driver/sync_service_observer.h"
#include "ios/chrome/browser/sync/sync_setup_service.h"
#include "ui/gfx/image/image.h"
class ChromeBrowserState;
namespace gfx {
class Image;
}
namespace infobars {
class InfoBarManager;
}
// Shows a sign-in notification in an infobar.
class SigninNotificationInfoBarDelegate : public ConfirmInfoBarDelegate {
public:
SigninNotificationInfoBarDelegate(ChromeBrowserState* browser_state);
~SigninNotificationInfoBarDelegate() override;
// Creates a sign-in notification infobar and adds it to |infobar_manager|.
static bool Create(infobars::InfoBarManager* infobar_manager,
ChromeBrowserState* browser_state);
// InfoBarDelegate implementation.
InfoBarIdentifier GetIdentifier() const override;
// ConfirmInfoBarDelegate implementation.
base::string16 GetMessageText() const override;
int GetButtons() const override;
base::string16 GetButtonLabel(InfoBarButton button) const override;
gfx::Image GetIcon() const override;
bool Accept() override;
private:
gfx::Image icon_;
base::string16 message_;
base::string16 button_text_;
DISALLOW_COPY_AND_ASSIGN(SigninNotificationInfoBarDelegate);
};
#endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_NOTIFICATION_INFOBAR_DELEGATE_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.
#include "ios/chrome/browser/ui/authentication/signin_notification_infobar_delegate.h"
#import <UIKit/UIKit.h>
#include <utility>
#include "base/check.h"
#include "base/memory/ptr_util.h"
#include "base/strings/sys_string_conversions.h"
#include "components/infobars/core/infobar.h"
#include "components/infobars/core/infobar_delegate.h"
#include "components/infobars/core/infobar_manager.h"
#import "ios/chrome/browser/browser_state/chrome_browser_state.h"
#import "ios/chrome/browser/main/browser.h"
#import "ios/chrome/browser/signin/authentication_service.h"
#import "ios/chrome/browser/signin/authentication_service_factory.h"
#include "ios/chrome/grit/ios_chromium_strings.h"
#include "ios/chrome/grit/ios_strings.h"
#include "ios/public/provider/chrome/browser/chrome_browser_provider.h"
#import "ios/public/provider/chrome/browser/signin/chrome_identity.h"
#include "ui/base/l10n/l10n_util.h"
#if !defined(__has_feature) || !__has_feature(objc_arc)
#error "This file requires ARC support."
#endif
// static
bool SigninNotificationInfoBarDelegate::Create(
infobars::InfoBarManager* infobar_manager,
ChromeBrowserState* browser_state) {
DCHECK(infobar_manager);
std::unique_ptr<ConfirmInfoBarDelegate> delegate(
std::make_unique<SigninNotificationInfoBarDelegate>(browser_state));
return !!infobar_manager->AddInfoBar(
infobar_manager->CreateConfirmInfoBar(std::move(delegate)));
}
SigninNotificationInfoBarDelegate::SigninNotificationInfoBarDelegate(
ChromeBrowserState* browser_state) {
DCHECK(!browser_state->IsOffTheRecord());
AuthenticationService* auth_service =
AuthenticationServiceFactory::GetForBrowserState(browser_state);
DCHECK(auth_service);
ChromeIdentity* identity = auth_service->GetAuthenticatedIdentity();
message_ = base::SysNSStringToUTF16(l10n_util::GetNSStringF(
IDS_IOS_SIGNIN_ACCOUNT_NOTIFICATION_TITLE_WITH_USERNAME,
base::SysNSStringToUTF16(identity.userFullName)));
button_text_ =
base::SysNSStringToUTF16(l10n_util::GetNSString(IDS_IOS_SETTINGS_TITLE));
}
SigninNotificationInfoBarDelegate::~SigninNotificationInfoBarDelegate() {}
infobars::InfoBarDelegate::InfoBarIdentifier
SigninNotificationInfoBarDelegate::GetIdentifier() const {
return RE_SIGN_IN_INFOBAR_DELEGATE_IOS;
}
base::string16 SigninNotificationInfoBarDelegate::GetMessageText() const {
return message_;
}
int SigninNotificationInfoBarDelegate::GetButtons() const {
return BUTTON_OK;
}
base::string16 SigninNotificationInfoBarDelegate::GetButtonLabel(
InfoBarButton button) const {
DCHECK(button == BUTTON_OK);
return button_text_;
}
gfx::Image SigninNotificationInfoBarDelegate::GetIcon() const {
return icon_;
}
bool SigninNotificationInfoBarDelegate::Accept() {
// TODO(crbug.com/1145592): Add event to open Settings menu.
return false;
}
......@@ -65,6 +65,7 @@ source_set("scene") {
":main",
":scene_testing",
"//base",
"//components/infobars/core",
"//components/previous_session_info",
"//components/signin/public/identity_manager",
"//components/url_formatter",
......@@ -87,6 +88,7 @@ source_set("scene") {
"//ios/chrome/browser/crash_report/breadcrumbs:feature_flags",
"//ios/chrome/browser/first_run",
"//ios/chrome/browser/geolocation:geolocation_internal",
"//ios/chrome/browser/infobars",
"//ios/chrome/browser/main",
"//ios/chrome/browser/ntp:features",
"//ios/chrome/browser/screenshot",
......
......@@ -11,6 +11,7 @@
#include "base/metrics/histogram_macros.h"
#include "base/strings/sys_string_conversions.h"
#include "base/task/post_task.h"
#include "components/infobars/core/infobar_manager.h"
#include "components/prefs/pref_service.h"
#import "components/previous_session_info/previous_session_info.h"
#include "components/signin/public/identity_manager/identity_manager.h"
......@@ -43,6 +44,7 @@
#import "ios/chrome/browser/first_run/first_run.h"
#include "ios/chrome/browser/geolocation/omnibox_geolocation_controller.h"
#import "ios/chrome/browser/geolocation/omnibox_geolocation_controller.h"
#include "ios/chrome/browser/infobars/infobar_manager_impl.h"
#import "ios/chrome/browser/main/browser.h"
#import "ios/chrome/browser/main/browser_list.h"
#import "ios/chrome/browser/main/browser_list_factory.h"
......@@ -56,6 +58,7 @@
#import "ios/chrome/browser/ui/authentication/signed_in_accounts_view_controller.h"
#import "ios/chrome/browser/ui/authentication/signin/signin_coordinator.h"
#import "ios/chrome/browser/ui/authentication/signin/signin_utils.h"
#import "ios/chrome/browser/ui/authentication/signin_notification_infobar_delegate.h"
#import "ios/chrome/browser/ui/browser_view/browser_view_controller.h"
#import "ios/chrome/browser/ui/commands/browser_commands.h"
#import "ios/chrome/browser/ui/commands/browsing_data_commands.h"
......@@ -1188,7 +1191,14 @@ const char kMultiWindowOpenInNewWindowHistogram[] =
- (void)showSigninAccountNotificationFromViewController:
(UIViewController*)baseViewController {
// TODO(crbug.com/1145592): Add toast for sign-in reminder.
web::WebState* webState =
self.mainInterface.browser->GetWebStateList()->GetActiveWebState();
DCHECK(webState);
infobars::InfoBarManager* infoBarManager =
InfoBarManagerImpl::FromWebState(webState);
DCHECK(infoBarManager);
SigninNotificationInfoBarDelegate::Create(
infoBarManager, self.mainInterface.browser->GetBrowserState());
}
- (void)setIncognitoContentVisible:(BOOL)incognitoContentVisible {
......
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