Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3533)

Unified Diff: chrome/browser/ui/views/outdated_upgrade_bubble_view.cc

Issue 211543008: Show a modified outdated upgrade Bubble for non-enterprise users without auto-update (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Shot in the dark to try and prevent Mac crashes... Created 6 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/ui/views/outdated_upgrade_bubble_view.cc
diff --git a/chrome/browser/ui/views/outdated_upgrade_bubble_view.cc b/chrome/browser/ui/views/outdated_upgrade_bubble_view.cc
index 5c741b9040d4f3f6eea2abf3f81a77bb92cd88d5..fcb1ebb162241af85ccf64be749a00a8525e2fbc 100644
--- a/chrome/browser/ui/views/outdated_upgrade_bubble_view.cc
+++ b/chrome/browser/ui/views/outdated_upgrade_bubble_view.cc
@@ -4,8 +4,16 @@
#include "chrome/browser/ui/views/outdated_upgrade_bubble_view.h"
+#if defined(OS_WIN)
+#include <shellapi.h>
+#endif
+
#include "base/metrics/histogram.h"
+#include "base/path_service.h"
+#include "base/prefs/pref_service.h"
+#include "chrome/browser/browser_process.h"
#include "chrome/browser/upgrade_detector.h"
+#include "chrome/common/pref_names.h"
#include "content/public/browser/page_navigator.h"
#include "content/public/browser/user_metrics.h"
#include "grit/chromium_strings.h"
@@ -21,6 +29,13 @@
#include "ui/views/widget/widget.h"
#include "url/gurl.h"
+#if defined(OS_WIN)
+#include "base/win/win_util.h"
+#include "base/win/windows_version.h"
+#include "chrome/installer/util/install_util.h"
+#include "ui/gfx/icon_util.h"
+#endif
+
using views::GridLayout;
namespace {
@@ -44,6 +59,41 @@ const int kMaxIgnored = 50;
// The number of buckets we want the NumLaterPerReinstall histogram to use.
const int kNumIgnoredBuckets = 5;
+// Adds an elevation icon to |button| when running a system level install.
+void AddElevationIconIfNeeded(views::LabelButton* button) {
+#if defined(OS_WIN)
+ if ((base::win::GetVersion() >= base::win::VERSION_VISTA) &&
+ base::win::UserAccountControlIsEnabled()) {
+ base::FilePath exe_path;
+ PathService::Get(base::FILE_EXE, &exe_path);
+ if (InstallUtil::IsPerUserInstall(exe_path.value().c_str()))
+ return;
+
+ // This code was lifted from chrome/browser/ui/views/infobars/infobar_view.
+ // TODO(mad): Investigate the possibility of moving it to a common place.
+ SHSTOCKICONINFO icon_info = { sizeof(SHSTOCKICONINFO) };
+ // Even with the runtime guard above, we have to use GetProcAddress() here,
+ // because otherwise the loader will try to resolve the function address on
+ // startup, which will break on XP.
+ typedef HRESULT (STDAPICALLTYPE *GetStockIconInfo)(SHSTOCKICONID, UINT,
+ SHSTOCKICONINFO*);
+ GetStockIconInfo func = reinterpret_cast<GetStockIconInfo>(
+ GetProcAddress(GetModuleHandle(L"shell32.dll"), "SHGetStockIconInfo"));
+ if (SUCCEEDED((*func)(SIID_SHIELD, SHGSI_ICON | SHGSI_SMALLICON,
+ &icon_info))) {
+ scoped_ptr<SkBitmap> icon(IconUtil::CreateSkBitmapFromHICON(
+ icon_info.hIcon, gfx::Size(GetSystemMetrics(SM_CXSMICON),
+ GetSystemMetrics(SM_CYSMICON))));
+ if (icon.get()) {
+ button->SetImage(views::Button::STATE_NORMAL,
+ gfx::ImageSkia::CreateFrom1xBitmap(*icon));
+ }
+ DestroyIcon(icon_info.hIcon);
+ }
+ }
+#endif
+}
+
} // namespace
// OutdatedUpgradeBubbleView ---------------------------------------------------
@@ -53,13 +103,16 @@ int OutdatedUpgradeBubbleView::num_ignored_bubbles_ = 0;
// static
void OutdatedUpgradeBubbleView::ShowBubble(views::View* anchor_view,
- content::PageNavigator* navigator) {
+ content::PageNavigator* navigator,
+ bool auto_update_enabled) {
if (IsShowing())
return;
- upgrade_bubble_ = new OutdatedUpgradeBubbleView(anchor_view, navigator);
+ upgrade_bubble_ = new OutdatedUpgradeBubbleView(
+ anchor_view, navigator, auto_update_enabled);
views::BubbleDelegateView::CreateBubble(upgrade_bubble_)->Show();
- content::RecordAction(
- base::UserMetricsAction("OutdatedUpgradeBubble.Show"));
+ content::RecordAction(base::UserMetricsAction(
+ auto_update_enabled ? "OutdatedUpgradeBubble.Show"
+ : "OutdatedUpgradeBubble.ShowNoAU"));
}
bool OutdatedUpgradeBubbleView::IsAvailable() {
@@ -73,12 +126,12 @@ bool OutdatedUpgradeBubbleView::IsAvailable() {
}
OutdatedUpgradeBubbleView::~OutdatedUpgradeBubbleView() {
- if (!chose_to_reinstall_ && num_ignored_bubbles_ < kMaxIgnored)
+ if (!accepted_ && num_ignored_bubbles_ < kMaxIgnored)
++num_ignored_bubbles_;
}
views::View* OutdatedUpgradeBubbleView::GetInitiallyFocusedView() {
- return reinstall_button_;
+ return accept_button_;
}
void OutdatedUpgradeBubbleView::WindowClosing() {
@@ -90,26 +143,27 @@ void OutdatedUpgradeBubbleView::WindowClosing() {
}
void OutdatedUpgradeBubbleView::Init() {
- base::string16 product_name(
- l10n_util::GetStringUTF16(IDS_SHORT_PRODUCT_NAME));
ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance();
- reinstall_button_ = new views::LabelButton(
- this, l10n_util::GetStringFUTF16(IDS_REINSTALL_APP, product_name));
- reinstall_button_->SetStyle(views::Button::STYLE_BUTTON);
- reinstall_button_->SetIsDefault(true);
- reinstall_button_->SetFontList(rb.GetFontList(ui::ResourceBundle::BoldFont));
+ accept_button_ = new views::LabelButton(
+ this, l10n_util::GetStringUTF16(
+ auto_update_enabled_ ? IDS_REINSTALL_APP : IDS_REENABLE_UPDATES));
+ accept_button_->SetStyle(views::Button::STYLE_BUTTON);
+ accept_button_->SetIsDefault(true);
+ accept_button_->SetFontList(rb.GetFontList(ui::ResourceBundle::BoldFont));
+ AddElevationIconIfNeeded(accept_button_);
later_button_ = new views::LabelButton(
this, l10n_util::GetStringUTF16(IDS_LATER));
later_button_->SetStyle(views::Button::STYLE_BUTTON);
views::Label* title_label = new views::Label(
- l10n_util::GetStringFUTF16(IDS_UPGRADE_BUBBLE_TITLE, product_name));
+ l10n_util::GetStringUTF16(IDS_UPGRADE_BUBBLE_TITLE));
title_label->SetFontList(rb.GetFontList(ui::ResourceBundle::MediumFont));
title_label->SetHorizontalAlignment(gfx::ALIGN_LEFT);
- views::Label* text_label = new views::Label(
- l10n_util::GetStringFUTF16(IDS_UPGRADE_BUBBLE_TEXT, product_name));
+ views::Label* text_label = new views::Label(l10n_util::GetStringUTF16(
+ auto_update_enabled_ ? IDS_UPGRADE_BUBBLE_TEXT
+ : IDS_UPGRADE_BUBBLE_REENABLE_TEXT));
text_label->SetMultiLine(true);
text_label->SetHorizontalAlignment(gfx::ALIGN_LEFT);
@@ -157,17 +211,20 @@ void OutdatedUpgradeBubbleView::Init() {
layout->AddPaddingRow(0, views::kUnrelatedControlVerticalSpacing);
layout->StartRow(0, kButtonsColumnSetId);
- layout->AddView(reinstall_button_);
+ layout->AddView(accept_button_);
layout->AddView(later_button_);
AddAccelerator(ui::Accelerator(ui::VKEY_RETURN, ui::EF_NONE));
}
OutdatedUpgradeBubbleView::OutdatedUpgradeBubbleView(
- views::View* anchor_view, content::PageNavigator* navigator)
+ views::View* anchor_view,
+ content::PageNavigator* navigator,
+ bool auto_update_enabled)
: BubbleDelegateView(anchor_view, views::BubbleBorder::TOP_RIGHT),
- chose_to_reinstall_(false),
- reinstall_button_(NULL),
+ auto_update_enabled_(auto_update_enabled),
+ accepted_(false),
+ accept_button_(NULL),
later_button_(NULL),
navigator_(navigator) {
// Compensate for built-in vertical padding in the anchor view's image.
@@ -184,19 +241,34 @@ void OutdatedUpgradeBubbleView::ButtonPressed(
}
void OutdatedUpgradeBubbleView::HandleButtonPressed(views::Button* sender) {
- if (sender == reinstall_button_) {
- DCHECK(UpgradeDetector::GetInstance()->is_outdated_install());
- chose_to_reinstall_ = true;
- UMA_HISTOGRAM_CUSTOM_COUNTS(
- "OutdatedUpgradeBubble.NumLaterPerReinstall", num_ignored_bubbles_,
- 0, kMaxIgnored, kNumIgnoredBuckets);
- content::RecordAction(
- base::UserMetricsAction("OutdatedUpgradeBubble.Reinstall"));
- navigator_->OpenURL(content::OpenURLParams(GURL(kDownloadChromeUrl),
- content::Referrer(),
- NEW_FOREGROUND_TAB,
- content::PAGE_TRANSITION_LINK,
- false));
+ if (sender == accept_button_) {
+ accepted_ = true;
+ if (auto_update_enabled_) {
+ DCHECK(UpgradeDetector::GetInstance()->is_outdated_install());
+ UMA_HISTOGRAM_CUSTOM_COUNTS(
+ "OutdatedUpgradeBubble.NumLaterPerReinstall", num_ignored_bubbles_,
+ 0, kMaxIgnored, kNumIgnoredBuckets);
+ content::RecordAction(
+ base::UserMetricsAction("OutdatedUpgradeBubble.Reinstall"));
+ navigator_->OpenURL(content::OpenURLParams(GURL(kDownloadChromeUrl),
+ content::Referrer(),
+ NEW_FOREGROUND_TAB,
+ content::PAGE_TRANSITION_LINK,
+ false));
+ } else {
+ DCHECK(UpgradeDetector::GetInstance()->is_outdated_install_no_au());
+ UMA_HISTOGRAM_CUSTOM_COUNTS(
+ "OutdatedUpgradeBubble.NumLaterPerEnableAU", num_ignored_bubbles_,
+ 0, kMaxIgnored, kNumIgnoredBuckets);
+ content::RecordAction(
+ base::UserMetricsAction("OutdatedUpgradeBubble.EnableAU"));
+ // TODO(robertshield): Make a call to GoogleUpdateSettings to enable
+ // auto-update.
+ if (g_browser_process->local_state()) {
+ g_browser_process->local_state()->SetBoolean(
+ prefs::kAttemptedToEnableAutoupdate, true);
+ }
+ }
} else {
DCHECK_EQ(later_button_, sender);
content::RecordAction(
« no previous file with comments | « chrome/browser/ui/views/outdated_upgrade_bubble_view.h ('k') | chrome/browser/ui/views/toolbar/toolbar_view.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698