data_promo_notification.cc revision 0f1bc08d4cfcc34181b0b5cbf065c40f687bf740
15716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet// Use of this source code is governed by a BSD-style license that can be
35716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet// found in the LICENSE file.
45716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet
55716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet#include "chrome/browser/chromeos/status/data_promo_notification.h"
65716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet
75716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet#include "ash/system/chromeos/network/network_connect.h"
85716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet#include "ash/system/system_notifier.h"
95716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet#include "base/prefs/pref_registry_simple.h"
105716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet#include "base/prefs/pref_service.h"
115716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet#include "base/strings/utf_string_conversions.h"
125716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet#include "chrome/browser/browser_process.h"
135716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet#include "chrome/browser/chromeos/login/helper.h"
145716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet#include "chrome/browser/chromeos/mobile_config.h"
155716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet#include "chrome/browser/profiles/profile.h"
165716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet#include "chrome/browser/profiles/profile_manager.h"
175716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet#include "chrome/browser/ui/browser.h"
185716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet#include "chrome/browser/ui/browser_list.h"
195716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet#include "chrome/browser/ui/scoped_tabbed_browser_displayer.h"
205716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet#include "chrome/browser/ui/singleton_tabs.h"
215716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet#include "chrome/common/pref_names.h"
225716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet#include "chromeos/login/login_state.h"
235716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet#include "chromeos/network/device_state.h"
245716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet#include "chromeos/network/network_connection_handler.h"
255716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet#include "chromeos/network/network_event_log.h"
265716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet#include "chromeos/network/network_state.h"
275716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet#include "chromeos/network/network_state_handler.h"
285716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet#include "grit/ash_resources.h"
295716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet#include "grit/generated_resources.h"
305716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet#include "grit/theme_resources.h"
315716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet#include "third_party/cros_system_api/dbus/service_constants.h"
325716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet#include "ui/base/l10n/l10n_util.h"
335716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet#include "ui/base/resource/resource_bundle.h"
345716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet#include "ui/message_center/message_center.h"
355716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet#include "ui/message_center/notification.h"
365716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet#include "ui/views/view.h"
375716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet#include "ui/views/widget/widget.h"
385716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet
395716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohetnamespace chromeos {
405716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet
415716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohetnamespace {
425716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet
435716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohetconst int kNotificationCountPrefDefault = -1;
445716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet
455716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohetbool GetBooleanPref(const char* pref_name) {
465716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet  Profile* profile = ProfileManager::GetDefaultProfileOrOffTheRecord();
475716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet  PrefService* prefs = profile->GetPrefs();
485716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet  return prefs->GetBoolean(pref_name);
495716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet}
505716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet
515716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohetint GetIntegerLocalPref(const char* pref_name) {
525716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet  PrefService* prefs = g_browser_process->local_state();
535716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet  return prefs->GetInteger(pref_name);
545716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet}
555716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet
565716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohetvoid SetBooleanPref(const char* pref_name, bool value) {
575716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet  Profile* profile = ProfileManager::GetDefaultProfileOrOffTheRecord();
585716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet  PrefService* prefs = profile->GetPrefs();
595716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet  prefs->SetBoolean(pref_name, value);
605716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet}
615716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet
625716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohetvoid SetIntegerLocalPref(const char* pref_name, int value) {
635716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet  PrefService* prefs = g_browser_process->local_state();
645716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet  prefs->SetInteger(pref_name, value);
655716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet}
665716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet
675716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet// Returns prefs::kShow3gPromoNotification or false if no active browser.
685716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohetbool ShouldShow3gPromoNotification() {
695716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet  return GetBooleanPref(prefs::kShow3gPromoNotification);
705716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet}
715716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet
725716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohetvoid SetShow3gPromoNotification(bool value) {
735716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet  SetBooleanPref(prefs::kShow3gPromoNotification, value);
745716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet}
755716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet
765716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet// Returns prefs::kCarrierDealPromoShown which is number of times
775716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet// carrier deal notification has been shown to users on this machine.
785716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohetint GetCarrierDealPromoShown() {
795716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet  return GetIntegerLocalPref(prefs::kCarrierDealPromoShown);
805716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet}
815716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet
825716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohetvoid SetCarrierDealPromoShown(int value) {
835716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet  SetIntegerLocalPref(prefs::kCarrierDealPromoShown, value);
845716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet}
855716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet
865716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohetconst chromeos::MobileConfig::Carrier* GetCarrier(
875716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet    const NetworkState* cellular) {
885716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet  const DeviceState* device = NetworkHandler::Get()->network_state_handler()->
895716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet      GetDeviceState(cellular->device_path());
905716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet  std::string carrier_id = device ? device->home_provider_id() : "";
915716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet  if (carrier_id.empty()) {
925716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet    NET_LOG_ERROR("Empty carrier ID for cellular network",
935716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet                  device ? device->path(): "No device");
945716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet    return NULL;
955716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet  }
965716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet
975716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet  chromeos::MobileConfig* config = chromeos::MobileConfig::GetInstance();
985716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet  if (!config->IsReady())
995716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet    return NULL;
1005716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet
1015716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet  return config->GetCarrier(carrier_id);
1025716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet}
1035716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet
1045716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohetconst chromeos::MobileConfig::CarrierDeal* GetCarrierDeal(
1055716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet    const chromeos::MobileConfig::Carrier* carrier) {
1065716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet  const chromeos::MobileConfig::CarrierDeal* deal = carrier->GetDefaultDeal();
1075716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet  if (deal) {
1085716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet    // Check deal for validity.
1095716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet    int carrier_deal_promo_pref = GetCarrierDealPromoShown();
1105716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet    if (carrier_deal_promo_pref >= deal->notification_count())
1115716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet      return NULL;
1125716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet    const std::string locale = g_browser_process->GetApplicationLocale();
1135716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet    std::string deal_text = deal->GetLocalizedString(locale,
1145716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet                                                     "notification_text");
1155716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet    NET_LOG_DEBUG("Carrier Deal Found", deal_text);
1165716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet    if (deal_text.empty())
1175716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet      return NULL;
1185716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet  }
1195716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet  return deal;
1205716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet}
1215716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet
1225716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohetvoid NotificationClicked(const std::string& service_path,
1235716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet                         const std::string& info_url) {
1245716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet  if (info_url.empty())
1255716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet    ash::network_connect::ShowNetworkSettings(service_path);
1265716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet
1275716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet  chrome::ScopedTabbedBrowserDisplayer displayer(
1285716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet      ProfileManager::GetDefaultProfileOrOffTheRecord(),
1295716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet      chrome::HOST_DESKTOP_TYPE_ASH);
1305716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet  chrome::ShowSingletonTab(displayer.browser(), GURL(info_url));
1315716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet}
1325716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet
1335716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet}  // namespace
1345716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet
1355716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet////////////////////////////////////////////////////////////////////////////////
1365716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet// DataPromoNotification
1375716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet
1385716c15248acdb7dba42d951cf8273ee87cc6846Xavier DucrohetDataPromoNotification::DataPromoNotification()
1395716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet    : check_for_promo_(true),
1405716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet      weak_ptr_factory_(this) {
1415716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet  NetworkHandler::Get()->network_state_handler()->AddObserver(this, FROM_HERE);
1425716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet}
1435716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet
1445716c15248acdb7dba42d951cf8273ee87cc6846Xavier DucrohetDataPromoNotification::~DataPromoNotification() {
1455716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet  if (NetworkHandler::IsInitialized()) {
1465716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet    NetworkHandler::Get()->network_state_handler()->RemoveObserver(
1475716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet        this, FROM_HERE);
1485716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet  }
1495716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet}
1505716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet
1515716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohetvoid DataPromoNotification::RegisterPrefs(PrefRegistrySimple* registry) {
1525716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet  // Carrier deal notification shown count defaults to 0.
1535716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet  registry->RegisterIntegerPref(prefs::kCarrierDealPromoShown, 0);
1545716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet}
1555716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet
1565716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohetvoid DataPromoNotification::NetworkPropertiesUpdated(
1575716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet    const NetworkState* network) {
1585716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet  if (!network || network->type() != shill::kTypeCellular)
1595716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet    return;
1605716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet  ShowOptionalMobileDataPromoNotification();
1615716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet}
1625716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet
1635716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohetvoid DataPromoNotification::DefaultNetworkChanged(const NetworkState* network) {
1645716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet  // Call NetworkPropertiesUpdated in case the Cellular network became the
1655716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet  // default network.
1665716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet  NetworkPropertiesUpdated(network);
1675716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet}
1685716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet
1695716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohetvoid DataPromoNotification::ShowOptionalMobileDataPromoNotification() {
1705716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet  // Display a one-time notification for authenticated users on first use
1715716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet  // of Mobile Data connection or if there is a carrier deal defined
1725716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet  // show that even if user has already seen generic promo.
1735716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet  if (!check_for_promo_ || !LoginState::Get()->IsUserAuthenticated())
1745716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet    return;
1755716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet  const NetworkState* default_network =
1765716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet      NetworkHandler::Get()->network_state_handler()->DefaultNetwork();
1775716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet  if (!default_network || default_network->type() != shill::kTypeCellular)
1785716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet    return;
1795716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet  // When requesting a network connection, do not show the notification.
1805716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet  if (NetworkHandler::Get()->network_connection_handler()->
1815716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet      HasPendingConnectRequest())
1825716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet    return;
1835716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet
1845716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet  int carrier_deal_promo_pref = kNotificationCountPrefDefault;
1855716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet  const MobileConfig::CarrierDeal* deal = NULL;
1865716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet  const MobileConfig::Carrier* carrier = GetCarrier(default_network);
1875716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet  if (carrier)
1885716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet    deal = GetCarrierDeal(carrier);
1895716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet
1905716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet  string16 message = l10n_util::GetStringUTF16(IDS_3G_NOTIFICATION_MESSAGE);
1915716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet  std::string info_url;
1925716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet  if (deal) {
1935716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet    carrier_deal_promo_pref = GetCarrierDealPromoShown();
1945716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet    const std::string locale = g_browser_process->GetApplicationLocale();
1955716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet    std::string deal_text =
1965716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet        deal->GetLocalizedString(locale, "notification_text");
1975716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet    message = UTF8ToUTF16(deal_text + "\n\n") + message;
1985716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet    info_url = deal->info_url();
1995716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet    if (info_url.empty() && carrier)
2005716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet      info_url = carrier->top_up_url();
2015716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet  } else if (!ShouldShow3gPromoNotification()) {
2025716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet    check_for_promo_ = false;
2035716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet    return;
2045716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet  }
2055716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet
2065716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet  int icon_id;
2075716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet  if (default_network->network_technology() == shill::kNetworkTechnologyLte)
2085716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet    icon_id = IDR_AURA_UBER_TRAY_NOTIFICATION_LTE;
2095716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet  else
2105716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet    icon_id = IDR_AURA_UBER_TRAY_NOTIFICATION_3G;
2115716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet  const gfx::Image& icon =
2125716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet      ui::ResourceBundle::GetSharedInstance().GetImageNamed(icon_id);
2135716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet
2145716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet  message_center::MessageCenter::Get()->AddNotification(
2155716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet      message_center::Notification::CreateSystemNotification(
2165716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet          ash::network_connect::kNetworkActivateNotificationId,
2175716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet          base::string16() /* title */,
2185716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet          message,
2195716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet          icon,
2205716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet          ash::system_notifier::NOTIFIER_NETWORK,
2215716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet          base::Bind(&NotificationClicked,
2225716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet                     default_network->path(), info_url)));
2235716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet
2245716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet  check_for_promo_ = false;
2255716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet  SetShow3gPromoNotification(false);
2265716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet  if (carrier_deal_promo_pref != kNotificationCountPrefDefault)
2275716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet    SetCarrierDealPromoShown(carrier_deal_promo_pref + 1);
2285716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet}
2295716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet
2305716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet}  // namespace chromeos
2315716c15248acdb7dba42d951cf8273ee87cc6846Xavier Ducrohet