diff options
Diffstat (limited to 'chrome/browser')
-rw-r--r-- | chrome/browser/bookmarks/bookmark_table_model.cc | 38 | ||||
-rw-r--r-- | chrome/browser/task_manager.cc | 38 | ||||
-rw-r--r-- | chrome/browser/task_manager.h | 6 | ||||
-rw-r--r-- | chrome/browser/task_manager_resource_providers.cc | 22 | ||||
-rw-r--r-- | chrome/browser/views/hung_renderer_view.cc | 4 | ||||
-rw-r--r-- | chrome/browser/views/keyword_editor_view.cc | 24 | ||||
-rw-r--r-- | chrome/browser/views/options/cookies_view.cc | 17 | ||||
-rw-r--r-- | chrome/browser/views/options/general_page_view.cc | 2 | ||||
-rw-r--r-- | chrome/browser/views/password_manager_view.cc | 19 | ||||
-rw-r--r-- | chrome/browser/views/shelf_item_dialog.cc | 20 |
10 files changed, 154 insertions, 36 deletions
diff --git a/chrome/browser/bookmarks/bookmark_table_model.cc b/chrome/browser/bookmarks/bookmark_table_model.cc index 2b31c72..c175217 100644 --- a/chrome/browser/bookmarks/bookmark_table_model.cc +++ b/chrome/browser/bookmarks/bookmark_table_model.cc @@ -275,16 +275,38 @@ BookmarkTableModel::~BookmarkTableModel() { std::wstring BookmarkTableModel::GetText(int row, int column_id) { BookmarkNode* node = GetNodeForRow(row); switch (column_id) { - case IDS_BOOKMARK_TABLE_TITLE: - return node->GetTitle(); + case IDS_BOOKMARK_TABLE_TITLE: { + std::wstring title = node->GetTitle(); + // Adjust the text as well, for example, put LRE-PDF pair around LTR text + // in RTL enviroment, so that the ending punctuation in the text will not + // be rendered incorrectly (such as rendered as the leftmost character, + // and/or rendered as a mirrored punctuation character). + // + // TODO(xji): Consider adding a special case if the title text is a URL, + // since those should always be displayed LTR. Please refer to + // http://crbug.com/6726 for more information. + l10n_util::AdjustStringForLocaleDirection(title, &title); + return title; + } - case IDS_BOOKMARK_TABLE_URL: - return node->is_url() ? UTF8ToWide(node->GetURL().spec()) : - std::wstring(); + case IDS_BOOKMARK_TABLE_URL: { + if (!node->is_url()) + return std::wstring(); + std::wstring url_text = UTF8ToWide(node->GetURL().spec()); + if (l10n_util::GetTextDirection() == l10n_util::RIGHT_TO_LEFT) + l10n_util::WrapStringWithLTRFormatting(&url_text); + return url_text; + } case IDS_BOOKMARK_TABLE_PATH: { std::wstring path; BuildPath(node->GetParent(), &path); + // Force path to have LTR directionality. The whole path needs to be + // marked with LRE-PDF, so that the path containing both LTR and RTL + // subfolder names (such as "CBA/FED/(xji)/.x.j.", in which, "CBA" and + // "FED" are subfolder names in Hebrew) can be displayed as LTR. + if (l10n_util::GetTextDirection() == l10n_util::RIGHT_TO_LEFT) + l10n_util::WrapStringWithLTRFormatting(&path); return path; } } @@ -336,5 +358,11 @@ void BookmarkTableModel::BuildPath(BookmarkNode* node, std::wstring* path) { } BuildPath(node->GetParent(), path); path->append(l10n_util::GetString(IDS_BOOKMARK_TABLE_PATH_SEPARATOR)); + // Force path to have LTR directionality. Otherwise, folder path "CBA/FED" + // (in which, "CBA" and "FED" stand for folder names in Hebrew, and "FED" is + // a subfolder of "CBA") will be displayed as "FED/CBA". + if (l10n_util::GetTextDirection() == l10n_util::RIGHT_TO_LEFT) { + path->append(l10n_util::kLeftToRightMark); + } path->append(node->GetTitle()); } diff --git a/chrome/browser/task_manager.cc b/chrome/browser/task_manager.cc index 878c734..14a3e14 100644 --- a/chrome/browser/task_manager.cc +++ b/chrome/browser/task_manager.cc @@ -114,7 +114,12 @@ std::wstring TaskManagerTableModel::GetText(int row, int col_id) { return l10n_util::GetString(IDS_TASK_MANAGER_NA_CELL_TEXT); if (net_usage == 0) return std::wstring(L"0"); - return FormatSpeed(net_usage, GetByteDisplayUnits(net_usage), true); + std::wstring net_byte = + FormatSpeed(net_usage, GetByteDisplayUnits(net_usage), true); + // Force number string to have LTR directionality. + if (l10n_util::GetTextDirection() == l10n_util::RIGHT_TO_LEFT) + l10n_util::WrapStringWithLTRFormatting(&net_byte); + return net_byte; } case IDS_TASK_MANAGER_CPU_COLUMN: // CPU @@ -122,28 +127,28 @@ std::wstring TaskManagerTableModel::GetText(int row, int col_id) { return std::wstring(); return IntToWString(GetCPUUsage(resource)); - case IDS_TASK_MANAGER_PRIVATE_MEM_COLUMN: // Memory + case IDS_TASK_MANAGER_PRIVATE_MEM_COLUMN: { // Memory // We report committed (working set + paged) private usage. This is NOT // going to match what Windows Task Manager shows (which is working set). if (!first_in_group) return std::wstring(); - return l10n_util::GetStringF( - IDS_TASK_MANAGER_MEM_CELL_TEXT, - FormatNumber(GetPrivateMemory(process_metrics))); + std::wstring number = FormatNumber(GetPrivateMemory(process_metrics)); + return GetMemCellText(&number); + } - case IDS_TASK_MANAGER_SHARED_MEM_COLUMN: // Memory + case IDS_TASK_MANAGER_SHARED_MEM_COLUMN: { // Memory if (!first_in_group) return std::wstring(); - return l10n_util::GetStringF( - IDS_TASK_MANAGER_MEM_CELL_TEXT, - FormatNumber(GetSharedMemory(process_metrics))); + std::wstring number = FormatNumber(GetSharedMemory(process_metrics)); + return GetMemCellText(&number); + } - case IDS_TASK_MANAGER_PHYSICAL_MEM_COLUMN: // Memory + case IDS_TASK_MANAGER_PHYSICAL_MEM_COLUMN: { // Memory if (!first_in_group) return std::wstring(); - return l10n_util::GetStringF( - IDS_TASK_MANAGER_MEM_CELL_TEXT, - FormatNumber(GetPhysicalMemory(process_metrics))); + std::wstring number = FormatNumber(GetPhysicalMemory(process_metrics)); + return GetMemCellText(&number); + } case IDS_TASK_MANAGER_PROCESS_ID_COLUMN: if (!first_in_group) @@ -212,6 +217,13 @@ int TaskManagerTableModel::GetStatsValue(TaskManager::Resource* resource, return 0; } +std::wstring TaskManagerTableModel::GetMemCellText( + std::wstring* number) const { + // Adjust number string if necessary. + l10n_util::AdjustStringForLocaleDirection(*number, number); + return l10n_util::GetStringF(IDS_TASK_MANAGER_MEM_CELL_TEXT, *number); +} + SkBitmap TaskManagerTableModel::GetIcon(int row) { DCHECK(row < RowCount()); SkBitmap icon = resources_[row]->GetIcon(); diff --git a/chrome/browser/task_manager.h b/chrome/browser/task_manager.h index 90111fc..7c6602b 100644 --- a/chrome/browser/task_manager.h +++ b/chrome/browser/task_manager.h @@ -267,7 +267,7 @@ class TaskManagerTableModel : public views::GroupTableModel, // Returns the stat value at the column |col_id| that should be displayed from // the passed |process_metrics|. int GetStatsValue(TaskManager::Resource* resource, int col_id); - + // Retrieves the ProcessMetrics for the resources at the specified rows. // Returns true if there was a ProcessMetrics available for both rows. bool GetProcessMetricsForRows(int row1, @@ -275,6 +275,10 @@ class TaskManagerTableModel : public views::GroupTableModel, base::ProcessMetrics** proc_metrics1, base::ProcessMetrics** proc_metrics2); + // Given a string containing a number, this function returns the formatted + // string that should be displayed in the task manager's memory cell. + std::wstring GetMemCellText(std::wstring* number) const; + // The list of providers to the task manager. They are ref counted. ResourceProviderList providers_; diff --git a/chrome/browser/task_manager_resource_providers.cc b/chrome/browser/task_manager_resource_providers.cc index 50b55ac..8576471 100644 --- a/chrome/browser/task_manager_resource_providers.cc +++ b/chrome/browser/task_manager_resource_providers.cc @@ -48,8 +48,23 @@ std::wstring TaskManagerWebContentsResource::GetTitle() const { // Fall back on the URL if there's no title. std::wstring tab_title(web_contents_->GetTitle()); - if (tab_title.empty()) + if (tab_title.empty()) { tab_title = UTF8ToWide(web_contents_->GetURL().spec()); + // Force URL to be LTR. + if (l10n_util::GetTextDirection() == l10n_util::RIGHT_TO_LEFT) + l10n_util::WrapStringWithLTRFormatting(&tab_title); + } else { + // Since the tab_title will be concatenated with + // IDS_TASK_MANAGER_TAB_PREFIX, we need to explicitly set the tab_title to + // be LTR format if there is no strong RTL charater in it. Otherwise, if + // IDS_TASK_MANAGER_TAB_PREFIX is an RTL word, the concatenated result + // might be wrong. For example, http://mail.yahoo.com, whose title is + // "Yahoo! Mail: The best web-based Email!", without setting it explicitly + // as LTR format, the concatenated result will be "!Yahoo! Mail: The best + // web-based Email :BAT", in which the capital letters "BAT" stands for + // the Hebrew word for "tab". + l10n_util::AdjustStringForLocaleDirection(tab_title, &tab_title); + } return l10n_util::GetStringF(IDS_TASK_MANAGER_TAB_PREFIX, tab_title); } @@ -253,6 +268,11 @@ std::wstring TaskManagerPluginProcessResource::GetTitle() const { plugin_name = info.name; else plugin_name = l10n_util::GetString(IDS_TASK_MANAGER_UNKNOWN_PLUGIN_NAME); + // Explicitly mark plugin_name as LTR if there is no strong RTL character, + // to avoid the wrong concatenation result similar to "!Yahoo! Mail: the + // best web-based Email: NIGULP", in which "NIGULP" stands for the Hebrew + // or Arabic word for "plugin". + l10n_util::AdjustStringForLocaleDirection(plugin_name, &plugin_name); title_ = l10n_util::GetStringF(IDS_TASK_MANAGER_PLUGIN_PREFIX, plugin_name); } diff --git a/chrome/browser/views/hung_renderer_view.cc b/chrome/browser/views/hung_renderer_view.cc index bf35e50..86b2d6b 100644 --- a/chrome/browser/views/hung_renderer_view.cc +++ b/chrome/browser/views/hung_renderer_view.cc @@ -85,6 +85,10 @@ std::wstring HungPagesTableModel::GetText(int row, int column_id) { std::wstring title = webcontentses_.at(row)->GetTitle(); if (title.empty()) title = l10n_util::GetString(IDS_TAB_UNTITLED_TITLE); + // TODO(xji): Consider adding a special case if the title text is a URL, + // since those should always have LTR directionality. Please refer to + // http://crbug.com/6726 for more information. + l10n_util::AdjustStringForLocaleDirection(title, &title); return title; } diff --git a/chrome/browser/views/keyword_editor_view.cc b/chrome/browser/views/keyword_editor_view.cc index 62063df..986ce09 100644 --- a/chrome/browser/views/keyword_editor_view.cc +++ b/chrome/browser/views/keyword_editor_view.cc @@ -191,15 +191,29 @@ std::wstring TemplateURLTableModel::GetText(int row, int col_id) { const TemplateURL& url = entries_[row]->template_url(); switch (col_id) { - case IDS_SEARCH_ENGINES_EDITOR_DESCRIPTION_COLUMN: + case IDS_SEARCH_ENGINES_EDITOR_DESCRIPTION_COLUMN: { + std::wstring url_short_name = url.short_name(); + // TODO(xji): Consider adding a special case if the short name is a URL, + // since those should always be displayed LTR. Please refer to + // http://crbug.com/6726 for more information. + l10n_util::AdjustStringForLocaleDirection(url_short_name, + &url_short_name); return (template_url_model_->GetDefaultSearchProvider() == &url) ? l10n_util::GetStringF(IDS_SEARCH_ENGINES_EDITOR_DEFAULT_ENGINE, - url.short_name()) : - url.short_name(); + url_short_name) : url_short_name; + } - case IDS_SEARCH_ENGINES_EDITOR_KEYWORD_COLUMN: - return url.keyword(); + case IDS_SEARCH_ENGINES_EDITOR_KEYWORD_COLUMN: { + const std::wstring& keyword = url.keyword(); + // Keyword should be domain name. Force it to have LTR directionality. + if (l10n_util::GetTextDirection() == l10n_util::RIGHT_TO_LEFT) { + std::wstring localized_keyword = keyword; + l10n_util::WrapStringWithLTRFormatting(&localized_keyword); + return localized_keyword; + } + return keyword; break; + } default: NOTREACHED(); diff --git a/chrome/browser/views/options/cookies_view.cc b/chrome/browser/views/options/cookies_view.cc index c019a9e..f1af2d8 100644 --- a/chrome/browser/views/options/cookies_view.cc +++ b/chrome/browser/views/options/cookies_view.cc @@ -149,14 +149,23 @@ std::wstring CookiesTableModel::GetText(int row, int column_id) { // Domain cookies start with a trailing dot, but we will show this // in the cookie details, show it without the dot in the list. std::string& domain = shown_cookies_.at(row)->first; + std::wstring wide_domain; if (!domain.empty() && domain[0] == '.') - return UTF8ToWide(domain.substr(1)); - return UTF8ToWide(domain); + wide_domain = UTF8ToWide(domain.substr(1)); + else + wide_domain = UTF8ToWide(domain); + // Force domain to be LTR + if (l10n_util::GetTextDirection() == l10n_util::RIGHT_TO_LEFT) + l10n_util::WrapStringWithLTRFormatting(&wide_domain); + return wide_domain; } break; - case IDS_COOKIES_NAME_COLUMN_HEADER: - return UTF8ToWide(shown_cookies_.at(row)->second.Name()); + case IDS_COOKIES_NAME_COLUMN_HEADER: { + std::wstring name = UTF8ToWide(shown_cookies_.at(row)->second.Name()); + l10n_util::AdjustStringForLocaleDirection(name, &name); + return name; break; + } } NOTREACHED(); return L""; diff --git a/chrome/browser/views/options/general_page_view.cc b/chrome/browser/views/options/general_page_view.cc index e819b1e..e8f19f5 100644 --- a/chrome/browser/views/options/general_page_view.cc +++ b/chrome/browser/views/options/general_page_view.cc @@ -300,6 +300,8 @@ int CustomHomePagesTableModel::RowCount() { std::wstring CustomHomePagesTableModel::GetText(int row, int column_id) { DCHECK(column_id == 0); DCHECK(row >= 0 && row < RowCount()); + // No need to force URL to have LTR directionality because the custom home + // pages control is created using LTR directionality. return UTF8ToWide(entries_[row].url.spec()); } diff --git a/chrome/browser/views/password_manager_view.cc b/chrome/browser/views/password_manager_view.cc index ab8c701..15e5771 100644 --- a/chrome/browser/views/password_manager_view.cc +++ b/chrome/browser/views/password_manager_view.cc @@ -73,10 +73,21 @@ int PasswordManagerTableModel::RowCount() { std::wstring PasswordManagerTableModel::GetText(int row, int col_id) { switch (col_id) { - case IDS_PASSWORD_MANAGER_VIEW_SITE_COLUMN: // Site. - return saved_signons_[row]->display_url.display_url(); - case IDS_PASSWORD_MANAGER_VIEW_USERNAME_COLUMN: // Username. - return GetPasswordFormAt(row)->username_value; + case IDS_PASSWORD_MANAGER_VIEW_SITE_COLUMN: { // Site. + const std::wstring& url = saved_signons_[row]->display_url.display_url(); + // Force URL to have LTR directionality. + if (l10n_util::GetTextDirection() == l10n_util::RIGHT_TO_LEFT) { + std::wstring localized_url = url; + l10n_util::WrapStringWithLTRFormatting(&localized_url); + return localized_url; + } + return url; + } + case IDS_PASSWORD_MANAGER_VIEW_USERNAME_COLUMN: { // Username. + std::wstring username = GetPasswordFormAt(row)->username_value; + l10n_util::AdjustStringForLocaleDirection(username, &username); + return username; + } default: NOTREACHED() << "Invalid column."; return std::wstring(); diff --git a/chrome/browser/views/shelf_item_dialog.cc b/chrome/browser/views/shelf_item_dialog.cc index 87b1b49..215e73b 100644 --- a/chrome/browser/views/shelf_item_dialog.cc +++ b/chrome/browser/views/shelf_item_dialog.cc @@ -131,12 +131,26 @@ class PossibleURLModel : public views::TableModel { return std::wstring(); } - if (col_id == IDS_ASI_PAGE_COLUMN) - return GetTitle(row); + if (col_id == IDS_ASI_PAGE_COLUMN) { + const std::wstring& title = GetTitle(row); + // TODO(xji): Consider adding a special case if the title text is a URL, + // since those should always have LTR directionality. Please refer to + // http://crbug.com/6726 for more information. + std::wstring localized_title; + if (l10n_util::AdjustStringForLocaleDirection(title, &localized_title)) + return localized_title; + return title; + } // TODO(brettw): this should probably pass the GURL up so the URL elider // can be used at a higher level when we know the width. - return results_[row].display_url.display_url(); + const std::wstring& url = results_[row].display_url.display_url(); + if (l10n_util::GetTextDirection() == l10n_util::LEFT_TO_RIGHT) + return url; + // Force URL to be LTR. + std::wstring localized_url = url; + l10n_util::WrapStringWithLTRFormatting(&localized_url); + return localized_url; } virtual SkBitmap GetIcon(int row) { |