data_promo_notification.cc revision 3551c9c881056c480085172ff9840cab31610854
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/chromeos/status/data_promo_notification.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ash/shell.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ash/shell_window_ids.h"
93551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "ash/system/chromeos/network/network_connect.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ash/system/tray/system_tray.h"
112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/system/tray/system_tray_notifier.h"
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/pref_registry_simple.h"
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/pref_service.h"
14868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/browser_process.h"
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/chromeos/login/helper.h"
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/chromeos/mobile_config.h"
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile.h"
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile_manager.h"
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser.h"
213551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "chrome/browser/ui/browser_finder.h"
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser_list.h"
233551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "chrome/browser/ui/singleton_tabs.h"
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/pref_names.h"
25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chromeos/login/login_state.h"
263551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "chromeos/network/device_state.h"
273551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "chromeos/network/network_connection_handler.h"
283551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "chromeos/network/network_event_log.h"
293551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "chromeos/network/network_state.h"
303551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "chromeos/network/network_state_handler.h"
313551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "grit/ash_resources.h"
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "grit/generated_resources.h"
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "grit/theme_resources.h"
343551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "third_party/cros_system_api/dbus/service_constants.h"
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/l10n/l10n_util.h"
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/resource/resource_bundle.h"
373551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "ui/message_center/message_center.h"
383551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "ui/message_center/notification.h"
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/view.h"
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/widget/widget.h"
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
423551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)namespace chromeos {
433551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace {
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Time in milliseconds to delay showing of promo
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// notification when Chrome window is not on screen.
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const int kPromoShowDelayMs = 10000;
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const int kNotificationCountPrefDefault = -1;
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool GetBooleanPref(const char* pref_name) {
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Profile* profile = ProfileManager::GetDefaultProfileOrOffTheRecord();
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PrefService* prefs = profile->GetPrefs();
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return prefs->GetBoolean(pref_name);
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int GetIntegerLocalPref(const char* pref_name) {
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PrefService* prefs = g_browser_process->local_state();
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return prefs->GetInteger(pref_name);
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SetBooleanPref(const char* pref_name, bool value) {
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Profile* profile = ProfileManager::GetDefaultProfileOrOffTheRecord();
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PrefService* prefs = profile->GetPrefs();
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  prefs->SetBoolean(pref_name, value);
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SetIntegerLocalPref(const char* pref_name, int value) {
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PrefService* prefs = g_browser_process->local_state();
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  prefs->SetInteger(pref_name, value);
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
743551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// Returns prefs::kShow3gPromoNotification or false if no active browser.
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ShouldShow3gPromoNotification() {
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return GetBooleanPref(prefs::kShow3gPromoNotification);
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SetShow3gPromoNotification(bool value) {
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetBooleanPref(prefs::kShow3gPromoNotification, value);
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Returns prefs::kCarrierDealPromoShown which is number of times
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// carrier deal notification has been shown to users on this machine.
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int GetCarrierDealPromoShown() {
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return GetIntegerLocalPref(prefs::kCarrierDealPromoShown);
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SetCarrierDealPromoShown(int value) {
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetIntegerLocalPref(prefs::kCarrierDealPromoShown, value);
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const chromeos::MobileConfig::Carrier* GetCarrier(
943551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    const NetworkState* cellular) {
953551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  const DeviceState* device = NetworkHandler::Get()->network_state_handler()->
963551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      GetDeviceState(cellular->device_path());
973551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  std::string carrier_id = device ? device->home_provider_id() : "";
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (carrier_id.empty()) {
993551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    NET_LOG_ERROR("Empty carrier ID for cellular network",
1003551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)                  device ? device->path(): "No device");
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return NULL;
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  chromeos::MobileConfig* config = chromeos::MobileConfig::GetInstance();
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!config->IsReady())
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return NULL;
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return config->GetCarrier(carrier_id);
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const chromeos::MobileConfig::CarrierDeal* GetCarrierDeal(
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const chromeos::MobileConfig::Carrier* carrier) {
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const chromeos::MobileConfig::CarrierDeal* deal = carrier->GetDefaultDeal();
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (deal) {
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Check deal for validity.
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int carrier_deal_promo_pref = GetCarrierDealPromoShown();
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (carrier_deal_promo_pref >= deal->notification_count())
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return NULL;
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const std::string locale = g_browser_process->GetApplicationLocale();
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    std::string deal_text = deal->GetLocalizedString(locale,
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                                     "notification_text");
1223551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    NET_LOG_DEBUG("Carrier Deal Found", deal_text);
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (deal_text.empty())
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return NULL;
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return deal;
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1293551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)void NotificationClicked(const std::string& service_path,
1303551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)                         const std::string& info_url) {
1313551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  if (info_url.empty())
1323551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    ash::network_connect::ShowNetworkSettings(service_path);
1333551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
1343551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  Browser* browser = chrome::FindOrCreateTabbedBrowser(
1353551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      ProfileManager::GetDefaultProfileOrOffTheRecord(),
1363551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      chrome::HOST_DESKTOP_TYPE_ASH);
1373551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  if (!browser)
1383551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    return;
1393551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  chrome::ShowSingletonTab(browser, GURL(info_url));
1403551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)}
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1423551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)}  // namespace
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)////////////////////////////////////////////////////////////////////////////////
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// DataPromoNotification
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DataPromoNotification::DataPromoNotification()
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    : check_for_promo_(true),
149c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      weak_ptr_factory_(this) {
1503551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  NetworkHandler::Get()->network_state_handler()->AddObserver(this, FROM_HERE);
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DataPromoNotification::~DataPromoNotification() {
1543551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  if (NetworkHandler::IsInitialized()) {
1553551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    NetworkHandler::Get()->network_state_handler()->RemoveObserver(
1563551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)        this, FROM_HERE);
1573551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  }
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void DataPromoNotification::RegisterPrefs(PrefRegistrySimple* registry) {
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Carrier deal notification shown count defaults to 0.
1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  registry->RegisterIntegerPref(prefs::kCarrierDealPromoShown, 0);
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1653551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)void DataPromoNotification::NetworkPropertiesUpdated(
1663551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    const NetworkState* network) {
1673551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  if (!network || network->type() != flimflam::kTypeCellular)
1683551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    return;
1693551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  ShowOptionalMobileDataPromoNotification();
1703551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)}
1713551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
1723551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)void DataPromoNotification::DefaultNetworkChanged(const NetworkState* network) {
1733551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  // Call NetworkPropertiesUpdated in case the Cellular network became the
1743551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  // default network.
1753551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  NetworkPropertiesUpdated(network);
1763551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)}
1773551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
1783551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)void DataPromoNotification::ShowOptionalMobileDataPromoNotification() {
1793551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  // Display a one-time notification for authenticated users on first use
1803551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  // of Mobile Data connection or if there is a carrier deal defined
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // show that even if user has already seen generic promo.
1823551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  if (!check_for_promo_ || !LoginState::Get()->IsUserAuthenticated())
1833551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    return;
1843551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  const NetworkState* default_network =
1853551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      NetworkHandler::Get()->network_state_handler()->DefaultNetwork();
1863551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  if (!default_network || default_network->type() != flimflam::kTypeCellular)
1873551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    return;
1883551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  // When requesting a network connection, do not show the notification.
1893551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  if (NetworkHandler::Get()->network_connection_handler()->
1903551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      HasPendingConnectRequest())
1913551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    return;
1923551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
1933551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  int carrier_deal_promo_pref = kNotificationCountPrefDefault;
1943551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  const MobileConfig::CarrierDeal* deal = NULL;
1953551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  const MobileConfig::Carrier* carrier = GetCarrier(default_network);
1963551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  if (carrier)
1973551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    deal = GetCarrierDeal(carrier);
1983551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
1993551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  string16 message = l10n_util::GetStringUTF16(IDS_3G_NOTIFICATION_MESSAGE);
2003551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  std::string info_url;
2013551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  if (deal) {
2023551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    carrier_deal_promo_pref = GetCarrierDealPromoShown();
2033551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    const std::string locale = g_browser_process->GetApplicationLocale();
2043551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    std::string deal_text =
2053551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)        deal->GetLocalizedString(locale, "notification_text");
2063551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    message = UTF8ToUTF16(deal_text + "\n\n") + message;
2073551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    info_url = deal->info_url();
2083551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    if (info_url.empty() && carrier)
2093551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      info_url = carrier->top_up_url();
2103551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  } else if (!ShouldShow3gPromoNotification()) {
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    check_for_promo_ = false;
2123551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    return;
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2153551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  int icon_id;
2163551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  if (default_network->network_technology() == flimflam::kNetworkTechnologyLte)
2173551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    icon_id = IDR_AURA_UBER_TRAY_NOTIFICATION_LTE;
2183551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  else
2193551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    icon_id = IDR_AURA_UBER_TRAY_NOTIFICATION_3G;
2203551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  const gfx::Image& icon =
2213551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      ui::ResourceBundle::GetSharedInstance().GetImageNamed(icon_id);
2223551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
2233551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  message_center::MessageCenter::Get()->AddNotification(
2243551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      message_center::Notification::CreateSystemNotification(
2253551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)          ash::network_connect::kNetworkActivateNotificationId,
2263551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)          base::string16() /* title */,
2273551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)          message,
2283551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)          icon,
2293551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)          base::Bind(&NotificationClicked,
2303551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)                     default_network->path(), info_url)));
2313551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
2323551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  check_for_promo_ = false;
2333551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  SetShow3gPromoNotification(false);
2343551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  if (carrier_deal_promo_pref != kNotificationCountPrefDefault)
2353551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    SetCarrierDealPromoShown(carrier_deal_promo_pref + 1);
2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace chromeos
239