diff options
Diffstat (limited to 'chrome/browser/tab_contents')
-rw-r--r-- | chrome/browser/tab_contents/tab_contents.cc | 70 | ||||
-rw-r--r-- | chrome/browser/tab_contents/tab_contents.h | 20 |
2 files changed, 68 insertions, 22 deletions
diff --git a/chrome/browser/tab_contents/tab_contents.cc b/chrome/browser/tab_contents/tab_contents.cc index e72df68..831b13c 100644 --- a/chrome/browser/tab_contents/tab_contents.cc +++ b/chrome/browser/tab_contents/tab_contents.cc @@ -4,6 +4,7 @@ #include "chrome/browser/tab_contents/tab_contents.h" +#include "app/gfx/text_elider.h" #include "app/l10n_util.h" #include "app/resource_bundle.h" #include "base/file_version_info.h" @@ -1114,21 +1115,6 @@ void TabContents::GetPageLanguage() { render_view_host()->GetPageLanguage(); } -void TabContents::OnJavaScriptMessageBoxClosed(IPC::Message* reply_msg, - bool success, - const std::wstring& prompt) { - last_javascript_message_dismissal_ = base::TimeTicks::Now(); - if (is_showing_before_unload_dialog_ && !success) { - // If a beforeunload dialog is canceled, we need to stop the throbber from - // spinning, since we forced it to start spinning in Navigate. - DidStopLoading(); - - tab_close_start_time_ = base::TimeTicks(); - } - is_showing_before_unload_dialog_ = false; - render_view_host()->JavaScriptMessageBoxClosed(reply_msg, success, prompt); -} - void TabContents::OnSavePage() { // If we can not save the page, try to download it. if (!SavePackage::IsSavableContents(contents_mime_type())) { @@ -2333,7 +2319,7 @@ void TabContents::RunJavaScriptMessage( } else { // If we are suppressing messages, just reply as is if the user immediately // pressed "Cancel". - OnJavaScriptMessageBoxClosed(reply_msg, false, std::wstring()); + OnMessageBoxClosed(reply_msg, false, std::wstring()); } } @@ -2648,6 +2634,58 @@ void TabContents::Observe(NotificationType type, } } +std::wstring TabContents::GetMessageBoxTitle(const GURL& frame_url, + bool is_alert) { + if (!frame_url.has_host()) + return l10n_util::GetString( + is_alert ? IDS_JAVASCRIPT_ALERT_DEFAULT_TITLE + : IDS_JAVASCRIPT_MESSAGEBOX_DEFAULT_TITLE); + + // We really only want the scheme, hostname, and port. + GURL::Replacements replacements; + replacements.ClearUsername(); + replacements.ClearPassword(); + replacements.ClearPath(); + replacements.ClearQuery(); + replacements.ClearRef(); + GURL clean_url = frame_url.ReplaceComponents(replacements); + + // TODO(brettw) it should be easier than this to do the correct language + // handling without getting the accept language from the profile. + std::wstring base_address = gfx::ElideUrl(clean_url, gfx::Font(), 0, + profile()->GetPrefs()->GetString(prefs::kAcceptLanguages)); + // Force URL to have LTR directionality. + if (l10n_util::GetTextDirection() == l10n_util::RIGHT_TO_LEFT) + l10n_util::WrapStringWithLTRFormatting(&base_address); + + return l10n_util::GetStringF( + is_alert ? IDS_JAVASCRIPT_ALERT_TITLE : IDS_JAVASCRIPT_MESSAGEBOX_TITLE, + base_address); +} + +gfx::NativeWindow TabContents::GetMessageBoxRootWindow() { + return view_->GetTopLevelNativeWindow(); +} + +void TabContents::OnMessageBoxClosed(IPC::Message* reply_msg, + bool success, + const std::wstring& prompt) { + last_javascript_message_dismissal_ = base::TimeTicks::Now(); + if (is_showing_before_unload_dialog_ && !success) { + // If a beforeunload dialog is canceled, we need to stop the throbber from + // spinning, since we forced it to start spinning in Navigate. + DidStopLoading(); + + tab_close_start_time_ = base::TimeTicks(); + } + is_showing_before_unload_dialog_ = false; + render_view_host()->JavaScriptMessageBoxClosed(reply_msg, success, prompt); +} + +void TabContents::SetSuppressMessageBoxes(bool suppress_message_boxes) { + set_suppress_javascript_messages(suppress_message_boxes); +} + void TabContents::set_encoding(const std::string& encoding) { encoding_ = CharacterEncoding::GetCanonicalEncodingNameByAliasName(encoding); } diff --git a/chrome/browser/tab_contents/tab_contents.h b/chrome/browser/tab_contents/tab_contents.h index c33fcc5..7cdb549 100644 --- a/chrome/browser/tab_contents/tab_contents.h +++ b/chrome/browser/tab_contents/tab_contents.h @@ -22,6 +22,7 @@ #include "chrome/browser/download/save_package.h" #include "chrome/browser/fav_icon_helper.h" #include "chrome/browser/find_notification_details.h" +#include "chrome/browser/jsmessage_box_client.h" #include "chrome/browser/shell_dialogs.h" #include "chrome/browser/renderer_host/render_view_host_delegate.h" #include "chrome/browser/tab_contents/constrained_window.h" @@ -97,7 +98,8 @@ class TabContents : public PageNavigator, public RenderViewHostDelegate::BrowserIntegration, public RenderViewHostDelegate::Resource, public RenderViewHostManager::Delegate, - public SelectFileDialog::Listener { + public SelectFileDialog::Listener, + public JavaScriptMessageBoxClient { public: // Flags passed to the TabContentsDelegate.NavigationStateChanged to tell it // what has changed. Combine them to update more than one thing. @@ -533,11 +535,6 @@ class TabContents : public PageNavigator, suppress_javascript_messages_ = suppress_javascript_messages; } - // AppModalDialog calls this when the dialog is closed. - void OnJavaScriptMessageBoxClosed(IPC::Message* reply_msg, - bool success, - const std::wstring& prompt); - // Prepare for saving the current web page to disk. void OnSavePage(); @@ -958,6 +955,17 @@ class TabContents : public PageNavigator, const NotificationSource& source, const NotificationDetails& details); + + // JavaScriptMessageBoxClient ------------------------------------------------ + virtual std::wstring GetMessageBoxTitle(const GURL& frame_url, + bool is_alert); + virtual gfx::NativeWindow GetMessageBoxRootWindow(); + virtual void OnMessageBoxClosed(IPC::Message* reply_msg, + bool success, + const std::wstring& prompt); + virtual void SetSuppressMessageBoxes(bool suppress_message_boxes); + virtual TabContents* AsTabContents() { return this; } + // Data for core operation --------------------------------------------------- // Delegate for notifying our owner about stuff. Not owned by us. |