diff options
Diffstat (limited to 'chrome/browser/message_box_handler.cc')
-rw-r--r-- | chrome/browser/message_box_handler.cc | 59 |
1 files changed, 55 insertions, 4 deletions
diff --git a/chrome/browser/message_box_handler.cc b/chrome/browser/message_box_handler.cc index 1350c5c..be21323 100644 --- a/chrome/browser/message_box_handler.cc +++ b/chrome/browser/message_box_handler.cc @@ -6,26 +6,77 @@ #include "app/l10n_util.h" #include "app/message_box_flags.h" +#include "app/text_elider.h" +#include "base/i18n/rtl.h" +#include "base/utf_string_conversions.h" #include "build/build_config.h" #include "chrome/browser/app_modal_dialog_queue.h" +#include "chrome/browser/browser_process.h" #include "chrome/browser/browsing_data_local_storage_helper.h" #include "chrome/browser/cookie_modal_dialog.h" #include "chrome/browser/cookie_prompt_modal_dialog_delegate.h" -#include "chrome/browser/browser_process.h" +#include "chrome/browser/extensions/extensions_service.h" #include "chrome/browser/js_modal_dialog.h" +#include "chrome/browser/profile.h" #include "chrome/browser/tab_contents/tab_contents.h" +#include "chrome/common/pref_names.h" +#include "chrome/common/url_constants.h" +#include "gfx/font.h" #include "googleurl/src/gurl.h" #include "grit/generated_resources.h" +#include "grit/chromium_strings.h" + +static std::wstring GetTitle(Profile* profile, + ExtensionsService* extensions_service, + bool is_alert, + const GURL& frame_url) { + Extension* extension = extensions_service->GetExtensionByURL(frame_url); + if (!extension) + extension = extensions_service->GetExtensionByWebExtent(frame_url); + + if (extension && (extension->location() == Extension::COMPONENT)) { + return l10n_util::GetString(IDS_PRODUCT_NAME); + } else if (extension && !extension->name().empty()) { + return UTF8ToWide(extension->name()); + } else { + if (!frame_url.has_host()) + return l10n_util::GetString( + is_alert ? IDS_JAVASCRIPT_ALERT_DEFAULT_TITLE + : IDS_JAVASCRIPT_MESSAGEBOX_DEFAULT_TITLE); + + // TODO(brettw) it should be easier than this to do the correct language + // handling without getting the accept language from the profile. + string16 base_address = WideToUTF16(gfx::ElideUrl(frame_url.GetOrigin(), + gfx::Font(), 0, + UTF8ToWide( + profile->GetPrefs()->GetString(prefs::kAcceptLanguages)))); -void RunJavascriptMessageBox(JavaScriptMessageBoxClient* client, + // Force URL to have LTR directionality. + base_address = base::i18n::GetDisplayStringInLTRDirectionality( + base_address); + + return UTF16ToWide(l10n_util::GetStringFUTF16( + is_alert ? IDS_JAVASCRIPT_ALERT_TITLE : + IDS_JAVASCRIPT_MESSAGEBOX_TITLE, + base_address)); + } +} + +void RunJavascriptMessageBox(Profile* profile, + JavaScriptMessageBoxClient* client, const GURL& frame_url, int dialog_flags, const std::wstring& message_text, const std::wstring& default_prompt_text, bool display_suppress_checkbox, IPC::Message* reply_msg) { - std::wstring title = client->GetMessageBoxTitle(frame_url, - (dialog_flags == MessageBoxFlags::kIsJavascriptAlert)); + ExtensionsService* extensions_service = profile->GetExtensionsService(); + if (!extensions_service) + return; + + bool is_alert = dialog_flags == MessageBoxFlags::kIsJavascriptAlert; + std::wstring title = GetTitle(profile, extensions_service, + is_alert, frame_url); Singleton<AppModalDialogQueue>()->AddDialog(new JavaScriptAppModalDialog( client, title, dialog_flags, message_text, default_prompt_text, display_suppress_checkbox, false, reply_msg)); |