Index: chrome/browser/gtk/external_protocol_dialog_gtk.cc |
=================================================================== |
--- chrome/browser/gtk/external_protocol_dialog_gtk.cc (revision 71352) |
+++ chrome/browser/gtk/external_protocol_dialog_gtk.cc (working copy) |
@@ -1,133 +0,0 @@ |
-// Copyright (c) 2010 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 "chrome/browser/gtk/external_protocol_dialog_gtk.h" |
- |
-#include <gtk/gtk.h> |
- |
-#include <string> |
- |
-#include "app/l10n_util.h" |
-#include "app/text_elider.h" |
-#include "base/metrics/histogram.h" |
-#include "base/message_loop.h" |
-#include "base/string_util.h" |
-#include "base/utf_string_conversions.h" |
-#include "chrome/browser/external_protocol_handler.h" |
-#include "chrome/browser/gtk/gtk_util.h" |
-#include "chrome/browser/tab_contents/tab_util.h" |
-#include "grit/chromium_strings.h" |
-#include "grit/generated_resources.h" |
- |
-namespace { |
- |
-const int kMessageWidth = 400; |
- |
-} // namespace |
- |
-/////////////////////////////////////////////////////////////////////////////// |
-// ExternalProtocolHandler |
- |
-// static |
-void ExternalProtocolHandler::RunExternalProtocolDialog( |
- const GURL& url, int render_process_host_id, int routing_id) { |
- new ExternalProtocolDialogGtk(url); |
-} |
- |
-/////////////////////////////////////////////////////////////////////////////// |
-// ExternalProtocolDialogGtk |
- |
-ExternalProtocolDialogGtk::ExternalProtocolDialogGtk(const GURL& url) |
- : url_(url), |
- creation_time_(base::TimeTicks::Now()) { |
- DCHECK_EQ(MessageLoop::TYPE_UI, MessageLoop::current()->type()); |
- |
- dialog_ = gtk_dialog_new_with_buttons( |
- l10n_util::GetStringUTF8(IDS_EXTERNAL_PROTOCOL_TITLE).c_str(), |
- NULL, |
- GTK_DIALOG_NO_SEPARATOR, |
- NULL); |
- |
- // Add the response buttons. |
- gtk_util::AddButtonToDialog(dialog_, |
- l10n_util::GetStringUTF8( |
- IDS_EXTERNAL_PROTOCOL_CANCEL_BUTTON_TEXT).c_str(), |
- GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT); |
- gtk_util::AddButtonToDialog(dialog_, |
- l10n_util::GetStringUTF8(IDS_EXTERNAL_PROTOCOL_OK_BUTTON_TEXT).c_str(), |
- GTK_STOCK_OK, GTK_RESPONSE_ACCEPT); |
- |
- // Construct the message text. |
- const int kMaxUrlWithoutSchemeSize = 256; |
- const int kMaxCommandSize = 256; |
- std::wstring elided_url_without_scheme; |
- std::wstring elided_command; |
- gfx::ElideString(ASCIIToWide(url.possibly_invalid_spec()), |
- kMaxUrlWithoutSchemeSize, &elided_url_without_scheme); |
- gfx::ElideString(ASCIIToWide(std::string("xdg-open ") + url.spec()), |
- kMaxCommandSize, &elided_command); |
- |
- std::string message_text = l10n_util::GetStringFUTF8( |
- IDS_EXTERNAL_PROTOCOL_INFORMATION, |
- ASCIIToUTF16(url.scheme() + ":"), |
- WideToUTF16(elided_url_without_scheme)) + "\n\n"; |
- |
- message_text += l10n_util::GetStringFUTF8( |
- IDS_EXTERNAL_PROTOCOL_APPLICATION_TO_LAUNCH, |
- WideToUTF16(elided_command)) + "\n\n"; |
- |
- message_text += l10n_util::GetStringUTF8(IDS_EXTERNAL_PROTOCOL_WARNING); |
- |
- // Create the content-holding vbox. |
- GtkWidget* vbox = gtk_vbox_new(FALSE, gtk_util::kControlSpacing); |
- gtk_container_set_border_width(GTK_CONTAINER(vbox), |
- gtk_util::kContentAreaBorder); |
- |
- // Add the message text. |
- GtkWidget* label = gtk_label_new(message_text.c_str()); |
- gtk_label_set_line_wrap(GTK_LABEL(label), TRUE); |
- gtk_widget_set_size_request(label, kMessageWidth, -1); |
- gtk_box_pack_start(GTK_BOX(vbox), label, TRUE, TRUE, 0); |
- |
- // Add the checkbox. |
- checkbox_ = gtk_check_button_new_with_label( |
- l10n_util::GetStringUTF8(IDS_EXTERNAL_PROTOCOL_CHECKBOX_TEXT).c_str()); |
- gtk_box_pack_start(GTK_BOX(vbox), checkbox_, |
- FALSE, FALSE, 0); |
- |
- // Add our vbox to the dialog. |
- gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog_)->vbox), vbox, |
- FALSE, FALSE, 0); |
- |
- g_signal_connect(dialog_, "response", |
- G_CALLBACK(OnDialogResponseThunk), this); |
- |
- gtk_window_set_resizable(GTK_WINDOW(dialog_), FALSE); |
- gtk_widget_show_all(dialog_); |
-} |
- |
-void ExternalProtocolDialogGtk::OnDialogResponse(GtkWidget* widget, |
- int response) { |
- if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(checkbox_))) { |
- if (response == GTK_RESPONSE_ACCEPT) { |
- ExternalProtocolHandler::SetBlockState( |
- url_.scheme(), ExternalProtocolHandler::DONT_BLOCK); |
- } else if (response == GTK_RESPONSE_REJECT) { |
- ExternalProtocolHandler::SetBlockState( |
- url_.scheme(), ExternalProtocolHandler::BLOCK); |
- } |
- // If the response is GTK_RESPONSE_DELETE, triggered by the user closing |
- // the dialog, do nothing. |
- } |
- |
- if (response == GTK_RESPONSE_ACCEPT) { |
- UMA_HISTOGRAM_LONG_TIMES("clickjacking.launch_url", |
- base::TimeTicks::Now() - creation_time_); |
- |
- ExternalProtocolHandler::LaunchUrlWithoutSecurityCheck(url_); |
- } |
- |
- gtk_widget_destroy(dialog_); |
- delete this; |
-} |