summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--chrome/browser/download/download_exe.cc11
-rw-r--r--chrome/browser/download/download_manager.cc26
-rw-r--r--chrome/browser/download/download_util.h3
-rw-r--r--chrome/browser/gtk/download_item_gtk.cc183
-rw-r--r--chrome/browser/gtk/download_item_gtk.h23
-rw-r--r--chrome/browser/gtk/download_shelf_gtk.cc9
-rw-r--r--chrome/browser/gtk/find_bar_gtk.cc4
-rw-r--r--chrome/browser/gtk/infobar_gtk.cc4
-rw-r--r--chrome/browser/gtk/slide_animator_gtk.cc2
-rw-r--r--chrome/chrome.gyp1
10 files changed, 228 insertions, 38 deletions
diff --git a/chrome/browser/download/download_exe.cc b/chrome/browser/download/download_exe.cc
index 994f5f0..2663b54 100644
--- a/chrome/browser/download/download_exe.cc
+++ b/chrome/browser/download/download_exe.cc
@@ -55,6 +55,7 @@ namespace download_util {
* ***** END LICENSE BLOCK ***** */
static const char* const g_executables[] = {
+#if defined(OS_WIN)
"ad",
"ade",
"adp",
@@ -136,7 +137,15 @@ static const char* const g_executables[] = {
"wsh",
"xht",
"xhtm",
- "xhtml"
+ "xhtml",
+#elif defined(OS_LINUX)
+ // TODO(estade): lengthen this list.
+ "exe",
+ "pl",
+ "py",
+ "rb",
+ "sh",
+#endif // defined(OS_LINUX)
};
void InitializeExeTypes(std::set<std::string>* exe_extensions) {
diff --git a/chrome/browser/download/download_manager.cc b/chrome/browser/download/download_manager.cc
index 4fa4de3..248df33 100644
--- a/chrome/browser/download/download_manager.cc
+++ b/chrome/browser/download/download_manager.cc
@@ -43,9 +43,13 @@
#if defined(OS_WIN)
#include "app/win_util.h"
-// TODO(port): some of these need porting.
#include "base/registry.h"
#include "base/win_util.h"
+#endif
+
+#if !defined(OS_MACOSX)
+// Used for initializing the list of dangerous extensions. We don't support it
+// yet on mac.
#include "chrome/browser/download/download_util.h"
#endif
@@ -503,8 +507,8 @@ bool DownloadManager::Init(Profile* profile) {
file_loop_->PostTask(FROM_HERE, NewRunnableFunction(
CreateDirectoryPtr, download_path()));
-#if defined(OS_WIN)
- // We use this on windows to determine possibly dangerous downloads.
+#if defined(OS_WIN) || defined(OS_LINUX)
+ // We use this to determine possibly dangerous downloads.
download_util::InitializeExeTypes(&exe_types_);
#endif
@@ -1320,19 +1324,21 @@ bool DownloadManager::IsExecutableMimeType(const std::string& mime_type) {
}
bool DownloadManager::IsExecutable(const FilePath::StringType& extension) {
-#if defined(OS_WIN)
+#if defined(OS_MACOSX)
+ // We don't have dangerous download support on mac yet.
+ return false;
+#else
if (!IsStringASCII(extension))
return false;
+#if defined(OS_WIN)
std::string ascii_extension = WideToASCII(extension);
+#elif defined(OS_LINUX)
+ std::string ascii_extension = extension;
+#endif
StringToLowerASCII(&ascii_extension);
return exe_types_.find(ascii_extension) != exe_types_.end();
-#elif defined(OS_POSIX)
- // TODO(port): we misght not want to call this function on other platforms.
- // Figure it out.
- NOTIMPLEMENTED();
- return false;
-#endif
+#endif // !defined(OS_MACOSX)
}
void DownloadManager::ResetAutoOpenFiles() {
diff --git a/chrome/browser/download/download_util.h b/chrome/browser/download/download_util.h
index bd43e67..deb9468e 100644
--- a/chrome/browser/download/download_util.h
+++ b/chrome/browser/download/download_util.h
@@ -122,14 +122,13 @@ void PaintDownloadComplete(gfx::Canvas* canvas,
// Helper function for download views to use when acting as a drag source for a
// DownloadItem. If 'icon' is NULL, no image will be accompany the drag.
void DragDownload(const DownloadItem* download, SkBitmap* icon);
+#endif
// Executable file support -----------------------------------------------------
// Copy all executable file extensions.
void InitializeExeTypes(std::set<std::string>* exe_extensions);
-#endif
} // namespace download_util
-
#endif // CHROME_BROWSER_DOWNLOAD_DOWNLOAD_UTIL_H_
diff --git a/chrome/browser/gtk/download_item_gtk.cc b/chrome/browser/gtk/download_item_gtk.cc
index e8d7a26..580db74 100644
--- a/chrome/browser/gtk/download_item_gtk.cc
+++ b/chrome/browser/gtk/download_item_gtk.cc
@@ -4,9 +4,11 @@
#include "chrome/browser/gtk/download_item_gtk.h"
+#include "app/l10n_util.h"
#include "app/gfx/canvas.h"
#include "app/gfx/font.h"
#include "app/gfx/text_elider.h"
+#include "app/resource_bundle.h"
#include "app/slide_animation.h"
#include "base/basictypes.h"
#include "base/string_util.h"
@@ -30,6 +32,9 @@ namespace {
// bitmap that we use to draw it, i.e. 16, but can be more.
const int kMenuButtonWidth = 16;
+// Padding on left and right of items in dangerous download prompt.
+const int kDangerousElementPadding = 3;
+
// Amount of space we allot to showing the filename. If the filename is too wide
// it will be elided.
const int kTextWidth = 140;
@@ -39,6 +44,9 @@ const int kTextWidth = 140;
// make the download item.
const int kMinDownloadItemWidth = 13 + download_util::kSmallProgressIconSize;
+// As above, but for the dangerous download prompt.
+const int kMinDangerousDownloadWidth = 16;
+
const char* kLabelColorMarkup = "<span color='#%s'>%s</span>";
const char* kFilenameColor = "576C95"; // 87, 108, 149
const char* kStatusColor = "7B8DAE"; // 123, 141, 174
@@ -155,6 +163,8 @@ NineBox* DownloadItemGtk::menu_nine_box_normal_ = NULL;
NineBox* DownloadItemGtk::menu_nine_box_prelight_ = NULL;
NineBox* DownloadItemGtk::menu_nine_box_active_ = NULL;
+NineBox* DownloadItemGtk::dangerous_nine_box_ = NULL;
+
DownloadItemGtk::DownloadItemGtk(DownloadShelfGtk* parent_shelf,
BaseDownloadItemModel* download_model)
: parent_shelf_(parent_shelf),
@@ -162,6 +172,7 @@ DownloadItemGtk::DownloadItemGtk(DownloadShelfGtk* parent_shelf,
progress_angle_(download_util::kStartAngleDegrees),
download_model_(download_model),
bounding_widget_(parent_shelf->GetRightBoundingWidget()),
+ dangerous_prompt_(NULL),
icon_(NULL) {
InitNineBoxes();
LoadIcon();
@@ -185,7 +196,7 @@ DownloadItemGtk::DownloadItemGtk(DownloadShelfGtk* parent_shelf,
// much padding when we set the size request. We need to either use gfx::Font
// or somehow extend TextElider.
std::wstring elided_filename = gfx::ElideFilename(
- download_model_->download()->GetFileName(),
+ get_download()->GetFileName(),
gfx::Font(), kTextWidth);
gchar* label_markup =
g_markup_printf_escaped(kLabelColorMarkup, kFilenameColor,
@@ -198,8 +209,8 @@ DownloadItemGtk::DownloadItemGtk(DownloadShelfGtk* parent_shelf,
gtk_misc_set_alignment(GTK_MISC(name_label_), 0, 0.5);
gtk_misc_set_alignment(GTK_MISC(status_label_), 0, 0.5);
// Until we switch to vector graphics, force the font size.
- gtk_util::ForceFontSizePixels(name_label_, 13.4); // 13.4px == 10pt @ 96dpi
- gtk_util::ForceFontSizePixels(status_label_, 13.4); // 13.4px == 10pt @ 96dpi
+ gtk_util::ForceFontSizePixels(name_label_, 13.4); // 13.4px == 10pt @ 96dpi
+ gtk_util::ForceFontSizePixels(status_label_, 13.4); // 13.4px == 10pt @ 96dpi
// Stack the labels on top of one another.
GtkWidget* text_stack = gtk_vbox_new(FALSE, 0);
@@ -244,11 +255,92 @@ DownloadItemGtk::DownloadItemGtk(DownloadShelfGtk* parent_shelf,
resize_handler_id_ = g_signal_connect(G_OBJECT(shelf_hbox), "size-allocate",
G_CALLBACK(OnShelfResized), this);
- download_model_->download()->AddObserver(this);
+ get_download()->AddObserver(this);
new_item_animation_.reset(new SlideAnimation(this));
new_item_animation_->SetSlideDuration(kNewItemAnimationDurationMs);
gtk_widget_show_all(hbox_);
+
+ if (IsDangerous()) {
+ // Hide the download item components for now.
+ gtk_widget_hide(body_);
+ gtk_widget_hide(menu_button_);
+
+ // Create an hbox to hold it all.
+ dangerous_hbox_ = gtk_hbox_new(FALSE, kDangerousElementPadding);
+
+ // Add padding at the beginning and end. The hbox will add padding between
+ // the empty labels and the other elements.
+ GtkWidget* empty_label_a = gtk_label_new(NULL);
+ GtkWidget* empty_label_b = gtk_label_new(NULL);
+ gtk_box_pack_start(GTK_BOX(dangerous_hbox_), empty_label_a,
+ FALSE, FALSE, 0);
+ gtk_box_pack_end(GTK_BOX(dangerous_hbox_), empty_label_b,
+ FALSE, FALSE, 0);
+
+ // Create the warning icon.
+ ResourceBundle& rb = ResourceBundle::GetSharedInstance();
+ GdkPixbuf* download_pixbuf = rb.GetPixbufNamed(IDR_WARNING);
+ GtkWidget* dangerous_image = gtk_image_new_from_pixbuf(download_pixbuf);
+ gtk_box_pack_start(GTK_BOX(dangerous_hbox_), dangerous_image,
+ FALSE, FALSE, 0);
+
+ // Create the warning text.
+ // TODO(estade): the encoding might not be UTF8.
+ std::string dangerous_warning =
+ l10n_util::GetStringFUTF8(IDS_PROMPT_DANGEROUS_DOWNLOAD,
+ UTF8ToUTF16(get_download()->original_name().value()));
+ gchar* label_markup =
+ g_markup_printf_escaped(kLabelColorMarkup, kFilenameColor,
+ dangerous_warning.c_str());
+ GtkWidget* dangerous_label = gtk_label_new(NULL);
+ // Until we switch to vector graphics, force the font size.
+ // 13.4px == 10pt @ 96dpi
+ gtk_util::ForceFontSizePixels(dangerous_label, 13.4);
+ gtk_label_set_markup(GTK_LABEL(dangerous_label), label_markup);
+ gtk_label_set_line_wrap(GTK_LABEL(dangerous_label), TRUE);
+ gtk_box_pack_start(GTK_BOX(dangerous_hbox_), dangerous_label,
+ FALSE, FALSE, 0);
+ g_free(label_markup);
+
+ // Create the ok button.
+ GtkWidget* dangerous_accept = gtk_button_new_with_label(
+ l10n_util::GetStringUTF8(IDS_SAVE_DOWNLOAD).c_str());
+ g_signal_connect(dangerous_accept, "clicked",
+ G_CALLBACK(OnDangerousAccept), this);
+ GtkWidget* dangerous_accept_vbox = gtk_vbox_new(FALSE, 0);
+ gtk_box_pack_start(GTK_BOX(dangerous_accept_vbox), dangerous_accept,
+ TRUE, FALSE, 0);
+ gtk_box_pack_start(GTK_BOX(dangerous_hbox_), dangerous_accept_vbox,
+ FALSE, FALSE, 0);
+
+ // Create the nevermind button.
+ GtkWidget* dangerous_decline = gtk_button_new_with_label(
+ l10n_util::GetStringUTF8(IDS_DISCARD_DOWNLOAD).c_str());
+ g_signal_connect(dangerous_decline, "clicked",
+ G_CALLBACK(OnDangerousDecline), this);
+ GtkWidget* dangerous_decline_vbox = gtk_vbox_new(FALSE, 0);
+ gtk_box_pack_start(GTK_BOX(dangerous_decline_vbox), dangerous_decline,
+ TRUE, FALSE, 0);
+ gtk_box_pack_start(GTK_BOX(dangerous_hbox_), dangerous_decline_vbox,
+ FALSE, FALSE, 0);
+
+ // Put it in an alignment so that padding will be added on the left and
+ // right, and an event box so that drawing will be clipped correctly.
+ dangerous_prompt_ = gtk_util::CreateGtkBorderBin(dangerous_hbox_, NULL,
+ 0, 0, kDangerousElementPadding, kDangerousElementPadding);
+ gtk_box_pack_start(GTK_BOX(hbox_), dangerous_prompt_, FALSE, FALSE, 0);
+ gtk_widget_set_app_paintable(dangerous_prompt_, TRUE);
+ g_signal_connect(dangerous_prompt_, "expose-event",
+ G_CALLBACK(OnDangerousPromptExpose), this);
+ gtk_widget_show_all(dangerous_prompt_);
+
+ // The full width will depend on the text.
+ GtkRequisition req;
+ gtk_widget_size_request(dangerous_hbox_, &req);
+ dangerous_hbox_full_width_ = req.width;
+ }
+
new_item_animation_->Show();
}
@@ -256,11 +348,19 @@ DownloadItemGtk::~DownloadItemGtk() {
StopDownloadProgress();
g_signal_handler_disconnect(parent_shelf_->GetHBox(), resize_handler_id_);
gtk_widget_destroy(hbox_);
- download_model_->download()->RemoveObserver(this);
+ get_download()->RemoveObserver(this);
}
void DownloadItemGtk::OnDownloadUpdated(DownloadItem* download) {
- DCHECK_EQ(download, download_model_->download());
+ DCHECK_EQ(download, get_download());
+
+ if (dangerous_prompt_ != NULL &&
+ download->safety_state() == DownloadItem::DANGEROUS_BUT_VALIDATED) {
+ // We have been approved.
+ gtk_widget_show_all(hbox_);
+ gtk_widget_destroy(dangerous_prompt_);
+ dangerous_prompt_ = NULL;
+ }
switch (download->state()) {
case DownloadItem::REMOVING:
@@ -277,7 +377,7 @@ void DownloadItemGtk::OnDownloadUpdated(DownloadItem* download) {
complete_animation_->Show();
break;
case DownloadItem::IN_PROGRESS:
- download_model_->download()->is_paused() ?
+ get_download()->is_paused() ?
StopDownloadProgress() : StartDownloadProgress();
break;
default:
@@ -309,17 +409,32 @@ void DownloadItemGtk::AnimationProgressed(const Animation* animation) {
if (animation == complete_animation_.get()) {
gtk_widget_queue_draw(progress_area_);
} else {
- DCHECK(animation == new_item_animation_.get());
- // See above TODO for explanation of the extra 50.
- int showing_width = std::max(kMinDownloadItemWidth,
- static_cast<int>((kTextWidth + 50 +
- download_util::kSmallProgressIconSize) *
- new_item_animation_->GetCurrentValue()));
- showing_width = std::max(showing_width, kMinDownloadItemWidth);
- gtk_widget_set_size_request(body_, showing_width, -1);
+ if (IsDangerous()) {
+ int showing_width = std::max(kMinDangerousDownloadWidth,
+ static_cast<int>(dangerous_hbox_full_width_ *
+ new_item_animation_->GetCurrentValue()));
+ gtk_widget_set_size_request(dangerous_hbox_, showing_width, -1);
+ } else {
+ DCHECK(animation == new_item_animation_.get());
+ // See above TODO for explanation of the extra 50.
+ int showing_width = std::max(kMinDownloadItemWidth,
+ static_cast<int>((kTextWidth + 50 +
+ download_util::kSmallProgressIconSize) *
+ new_item_animation_->GetCurrentValue()));
+ showing_width = std::max(showing_width, kMinDownloadItemWidth);
+ gtk_widget_set_size_request(body_, showing_width, -1);
+ }
}
}
+DownloadItem* DownloadItemGtk::get_download() {
+ return download_model_->download();
+}
+
+bool DownloadItemGtk::IsDangerous() {
+ return get_download()->safety_state() == DownloadItem::DANGEROUS;
+}
+
// Download progress animation functions.
void DownloadItemGtk::UpdateDownloadProgress() {
@@ -351,7 +466,7 @@ void DownloadItemGtk::OnLoadIconComplete(IconManager::Handle handle,
void DownloadItemGtk::LoadIcon() {
IconManager* im = g_browser_process->icon_manager();
- im->LoadIcon(download_model_->download()->full_path(),
+ im->LoadIcon(get_download()->full_path(),
IconLoader::SMALL, &icon_consumer_,
NewCallback(this, &DownloadItemGtk::OnLoadIconComplete));
}
@@ -408,6 +523,17 @@ void DownloadItemGtk::InitNineBoxes() {
IDR_DOWNLOAD_BUTTON_MENU_TOP_P, 0, 0,
IDR_DOWNLOAD_BUTTON_MENU_MIDDLE_P, 0, 0,
IDR_DOWNLOAD_BUTTON_MENU_BOTTOM_P, 0, 0);
+
+ dangerous_nine_box_ = new NineBox(
+ IDR_DOWNLOAD_BUTTON_LEFT_TOP,
+ IDR_DOWNLOAD_BUTTON_CENTER_TOP,
+ IDR_DOWNLOAD_BUTTON_RIGHT_TOP_NO_DD,
+ IDR_DOWNLOAD_BUTTON_LEFT_MIDDLE,
+ IDR_DOWNLOAD_BUTTON_CENTER_MIDDLE,
+ IDR_DOWNLOAD_BUTTON_RIGHT_MIDDLE_NO_DD,
+ IDR_DOWNLOAD_BUTTON_LEFT_BOTTOM,
+ IDR_DOWNLOAD_BUTTON_CENTER_BOTTOM,
+ IDR_DOWNLOAD_BUTTON_RIGHT_BOTTOM_NO_DD);
}
// static
@@ -454,7 +580,7 @@ gboolean DownloadItemGtk::OnProgressAreaExpose(GtkWidget* widget,
download_util::PaintDownloadProgress(&canvas,
widget->allocation.x, widget->allocation.y,
download_item->progress_angle_,
- download_item->download_model_->download()->PercentComplete(),
+ download_item->get_download()->PercentComplete(),
download_util::SMALL);
}
@@ -506,3 +632,26 @@ void DownloadItemGtk::OnShelfResized(GtkWidget *widget,
else
gtk_widget_show(item->hbox_);
}
+
+// static
+gboolean DownloadItemGtk::OnDangerousPromptExpose(GtkWidget* widget,
+ GdkEventExpose* event, DownloadItemGtk* item) {
+ dangerous_nine_box_->RenderToWidget(widget);
+ return FALSE; // Continue propagation.
+}
+
+// static
+// TODO(estade): here and below, add clickjacking histogram code.
+void DownloadItemGtk::OnDangerousAccept(GtkWidget* button,
+ DownloadItemGtk* item) {
+ item->get_download()->manager()->DangerousDownloadValidated(
+ item->get_download());
+}
+
+// static
+void DownloadItemGtk::OnDangerousDecline(GtkWidget* button,
+ DownloadItemGtk* item) {
+ if (item->get_download()->state() == DownloadItem::IN_PROGRESS)
+ item->get_download()->Cancel(true);
+ item->get_download()->Remove(true);
+}
diff --git a/chrome/browser/gtk/download_item_gtk.h b/chrome/browser/gtk/download_item_gtk.h
index 0a8a09cd..fba3a8a 100644
--- a/chrome/browser/gtk/download_item_gtk.h
+++ b/chrome/browser/gtk/download_item_gtk.h
@@ -44,6 +44,11 @@ class DownloadItemGtk : public DownloadItem::Observer,
private:
friend class DownloadShelfContextMenuGtk;
+ DownloadItem* get_download();
+
+ // Returns true IFF the download is dangerous and unconfirmed.
+ bool IsDangerous();
+
// Functions for controlling the progress animation.
// Repaint the download progress.
void UpdateDownloadProgress();
@@ -76,6 +81,14 @@ class DownloadItemGtk : public DownloadItem::Observer,
GtkAllocation *allocation,
DownloadItemGtk* item);
+ // Dangerous download related. -----------------------------------------------
+ static gboolean OnDangerousPromptExpose(GtkWidget* widget,
+ GdkEventExpose* event,
+ DownloadItemGtk* item);
+
+ static void OnDangerousAccept(GtkWidget* button, DownloadItemGtk* item);
+ static void OnDangerousDecline(GtkWidget* button, DownloadItemGtk* item);
+
// Nineboxes for the body area.
static NineBox* body_nine_box_normal_;
static NineBox* body_nine_box_prelight_;
@@ -86,6 +99,9 @@ class DownloadItemGtk : public DownloadItem::Observer,
static NineBox* menu_nine_box_prelight_;
static NineBox* menu_nine_box_active_;
+ // Ninebox for the background of the dangerous download prompt.
+ static NineBox* dangerous_nine_box_;
+
// The shelf on which we are displayed.
DownloadShelfGtk* parent_shelf_;
@@ -127,6 +143,13 @@ class DownloadItemGtk : public DownloadItem::Observer,
// We do not want to overlap it.
GtkWidget* bounding_widget_;
+ // The dangerous download dialog. This will be null for safe downloads.
+ GtkWidget* dangerous_prompt_;
+
+ // An hbox for holding components of the dangerous download dialog.
+ GtkWidget* dangerous_hbox_;
+ int dangerous_hbox_full_width_;
+
// The ID of the handler for the parent shelf's "size-allocate" event. We save
// it so we can disconnect when we are destroyed.
gulong resize_handler_id_;
diff --git a/chrome/browser/gtk/download_shelf_gtk.cc b/chrome/browser/gtk/download_shelf_gtk.cc
index 00e81c8..999ab27 100644
--- a/chrome/browser/gtk/download_shelf_gtk.cc
+++ b/chrome/browser/gtk/download_shelf_gtk.cc
@@ -37,13 +37,13 @@ const int kLeftPadding = 2;
const int kRightPadding = 10;
// The background color of the shelf.
-static GdkColor kBackgroundColor = GDK_COLOR_RGB(230, 237, 244);
+const GdkColor kBackgroundColor = GDK_COLOR_RGB(230, 237, 244);
// Border color (the top pixel of the shelf).
-static GdkColor kBorderColor = GDK_COLOR_RGB(214, 214, 214);
+const GdkColor kBorderColor = GDK_COLOR_RGB(214, 214, 214);
// Speed of the shelf show/hide animation.
-static const int kShelfAnimationDurationMs = 120;
+const int kShelfAnimationDurationMs = 120;
} // namespace
@@ -117,6 +117,7 @@ DownloadShelfGtk::DownloadShelfGtk(TabContents* tab_contents)
SlideAnimatorGtk::UP,
kShelfAnimationDurationMs,
false, NULL));
+ gtk_widget_show_all(shelf_.get());
// Stick ourselves at the bottom of the parent tab contents.
GtkWidget* parent_contents = tab_contents->GetNativeView();
gtk_box_pack_end(GTK_BOX(parent_contents), slide_widget_->widget(),
@@ -127,7 +128,7 @@ DownloadShelfGtk::DownloadShelfGtk(TabContents* tab_contents)
DownloadShelfGtk::~DownloadShelfGtk() {
for (std::vector<DownloadItemGtk*>::iterator iter = download_items_.begin();
iter != download_items_.end(); ++iter) {
- delete *iter;
+ delete *iter;
}
shelf_.Destroy();
diff --git a/chrome/browser/gtk/find_bar_gtk.cc b/chrome/browser/gtk/find_bar_gtk.cc
index 73f5c11..7270b2a 100644
--- a/chrome/browser/gtk/find_bar_gtk.cc
+++ b/chrome/browser/gtk/find_bar_gtk.cc
@@ -185,10 +185,10 @@ void FindBarGtk::InitWidgets() {
gtk_box_pack_start(GTK_BOX(centering_vbox), border_bin_aa, TRUE, FALSE, 0);
gtk_box_pack_end(GTK_BOX(hbox), centering_vbox, FALSE, FALSE, 0);
- // We show just the GtkFixed and |border_| (but not the dialog).
+ // We take care to avoid showing the slide animator widget.
+ gtk_widget_show_all(container_);
gtk_widget_show(widget());
gtk_widget_show(border_);
- gtk_widget_show(match_count_label_);
}
GtkWidget* FindBarGtk::slide_widget() {
diff --git a/chrome/browser/gtk/infobar_gtk.cc b/chrome/browser/gtk/infobar_gtk.cc
index 60fa01d..10d6838 100644
--- a/chrome/browser/gtk/infobar_gtk.cc
+++ b/chrome/browser/gtk/infobar_gtk.cc
@@ -176,6 +176,8 @@ class LinkInfoBar : public InfoBar {
gtk_box_pack_start(GTK_BOX(hbox), trailing_label, FALSE, FALSE, 0);
gtk_box_pack_start(GTK_BOX(hbox_), hbox, FALSE, FALSE, 0);
}
+
+ gtk_widget_show_all(border_bin_.get());
}
private:
@@ -199,6 +201,8 @@ class ConfirmInfoBar : public AlertInfoBar {
: AlertInfoBar(delegate) {
AddConfirmButton(ConfirmInfoBarDelegate::BUTTON_CANCEL);
AddConfirmButton(ConfirmInfoBarDelegate::BUTTON_OK);
+
+ gtk_widget_show_all(border_bin_.get());
}
private:
diff --git a/chrome/browser/gtk/slide_animator_gtk.cc b/chrome/browser/gtk/slide_animator_gtk.cc
index 1f76457..dc2aa74 100644
--- a/chrome/browser/gtk/slide_animator_gtk.cc
+++ b/chrome/browser/gtk/slide_animator_gtk.cc
@@ -66,7 +66,7 @@ SlideAnimatorGtk::~SlideAnimatorGtk() {
void SlideAnimatorGtk::Open() {
is_closing_ = false;
- gtk_widget_show_all(widget_.get());
+ gtk_widget_show(widget_.get());
animation_->Show();
}
diff --git a/chrome/chrome.gyp b/chrome/chrome.gyp
index 762cbc4..6fab2db 100644
--- a/chrome/chrome.gyp
+++ b/chrome/chrome.gyp
@@ -1563,7 +1563,6 @@
'sources!': [
'browser/debugger/debugger_shell_stubs.cc',
# Windows-specific files.
- 'browser/download/download_exe.cc',
],
'conditions': [
['linux_breakpad==1', {