Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(24)

Side by Side Diff: content/browser/tab_contents/tab_contents.cc

Issue 6894009: Change NavigationEntry's title fields to carry the text direction. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 9 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « content/browser/tab_contents/tab_contents.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/browser/tab_contents/tab_contents.h" 5 #include "content/browser/tab_contents/tab_contents.h"
6 6
7 #include <cmath> 7 #include <cmath>
8 8
9 #include "base/auto_reset.h" 9 #include "base/auto_reset.h"
10 #include "base/command_line.h" 10 #include "base/command_line.h"
(...skipping 436 matching lines...) Expand 10 before | Expand all | Expand 10 after
447 // We may not have a navigation entry yet 447 // We may not have a navigation entry yet
448 NavigationEntry* entry = controller_.GetActiveEntry(); 448 NavigationEntry* entry = controller_.GetActiveEntry();
449 return entry ? entry->virtual_url() : GURL::EmptyGURL(); 449 return entry ? entry->virtual_url() : GURL::EmptyGURL();
450 } 450 }
451 451
452 const string16& TabContents::GetTitle() const { 452 const string16& TabContents::GetTitle() const {
453 // Transient entries take precedence. They are used for interstitial pages 453 // Transient entries take precedence. They are used for interstitial pages
454 // that are shown on top of existing pages. 454 // that are shown on top of existing pages.
455 NavigationEntry* entry = controller_.GetTransientEntry(); 455 NavigationEntry* entry = controller_.GetTransientEntry();
456 if (entry) { 456 if (entry) {
457 // TODO(evan): use directionality of title.
458 // http://code.google.com/p/chromium/issues/detail?id=27094
457 return entry->GetTitleForDisplay(profile()->GetPrefs()-> 459 return entry->GetTitleForDisplay(profile()->GetPrefs()->
458 GetString(prefs::kAcceptLanguages)); 460 GetString(prefs::kAcceptLanguages)).string();
459 } 461 }
460 WebUI* our_web_ui = render_manager_.pending_web_ui() ? 462 WebUI* our_web_ui = render_manager_.pending_web_ui() ?
461 render_manager_.pending_web_ui() : render_manager_.web_ui(); 463 render_manager_.pending_web_ui() : render_manager_.web_ui();
462 if (our_web_ui) { 464 if (our_web_ui) {
463 // Don't override the title in view source mode. 465 // Don't override the title in view source mode.
464 entry = controller_.GetActiveEntry(); 466 entry = controller_.GetActiveEntry();
465 if (!(entry && entry->IsViewSourceMode())) { 467 if (!(entry && entry->IsViewSourceMode())) {
466 // Give the Web UI the chance to override our title. 468 // Give the Web UI the chance to override our title.
469 // TODO(evan): use directionality of title.
470 // http://code.google.com/p/chromium/issues/detail?id=27094
467 const string16& title = our_web_ui->overridden_title(); 471 const string16& title = our_web_ui->overridden_title();
468 if (!title.empty()) 472 if (!title.empty())
469 return title; 473 return title;
470 } 474 }
471 } 475 }
472 476
473 // We use the title for the last committed entry rather than a pending 477 // We use the title for the last committed entry rather than a pending
474 // navigation entry. For example, when the user types in a URL, we want to 478 // navigation entry. For example, when the user types in a URL, we want to
475 // keep the old page's title until the new load has committed and we get a new 479 // keep the old page's title until the new load has committed and we get a new
476 // title. 480 // title.
477 entry = controller_.GetLastCommittedEntry(); 481 entry = controller_.GetLastCommittedEntry();
478 if (entry) { 482 if (entry) {
483 // TODO(evan): use directionality of title.
484 // http://code.google.com/p/chromium/issues/detail?id=27094
479 return entry->GetTitleForDisplay(profile()->GetPrefs()-> 485 return entry->GetTitleForDisplay(profile()->GetPrefs()->
480 GetString(prefs::kAcceptLanguages)); 486 GetString(prefs::kAcceptLanguages)).string();
481 } 487 }
482 return EmptyString16(); 488 return EmptyString16();
483 } 489 }
484 490
485 int32 TabContents::GetMaxPageID() { 491 int32 TabContents::GetMaxPageID() {
486 if (GetSiteInstance()) 492 if (GetSiteInstance())
487 return GetSiteInstance()->max_page_id(); 493 return GetSiteInstance()->max_page_id();
488 else 494 else
489 return max_page_id_; 495 return max_page_id_;
490 } 496 }
(...skipping 649 matching lines...) Expand 10 before | Expand all | Expand 10 after
1140 HistoryService* hs = profile()->GetHistoryService(Profile::IMPLICIT_ACCESS); 1146 HistoryService* hs = profile()->GetHistoryService(Profile::IMPLICIT_ACCESS);
1141 if (hs) 1147 if (hs)
1142 hs->AddPage(*add_page_args); 1148 hs->AddPage(*add_page_args);
1143 } 1149 }
1144 1150
1145 void TabContents::UpdateHistoryPageTitle(const NavigationEntry& entry) { 1151 void TabContents::UpdateHistoryPageTitle(const NavigationEntry& entry) {
1146 if (profile()->IsOffTheRecord()) 1152 if (profile()->IsOffTheRecord())
1147 return; 1153 return;
1148 1154
1149 HistoryService* hs = profile()->GetHistoryService(Profile::IMPLICIT_ACCESS); 1155 HistoryService* hs = profile()->GetHistoryService(Profile::IMPLICIT_ACCESS);
1150 if (hs) 1156 if (hs) {
1151 hs->SetPageTitle(entry.virtual_url(), entry.title()); 1157 // TODO(evan): use directionality of title.
1158 // http://code.google.com/p/chromium/issues/detail?id=27094
1159 hs->SetPageTitle(entry.virtual_url(), entry.title().string());
1160 }
1152 } 1161 }
1153 1162
1154 double TabContents::GetZoomLevel() const { 1163 double TabContents::GetZoomLevel() const {
1155 HostZoomMap* zoom_map = profile()->GetHostZoomMap(); 1164 HostZoomMap* zoom_map = profile()->GetHostZoomMap();
1156 if (!zoom_map) 1165 if (!zoom_map)
1157 return 0; 1166 return 0;
1158 1167
1159 double zoom_level; 1168 double zoom_level;
1160 if (temporary_zoom_settings_) { 1169 if (temporary_zoom_settings_) {
1161 zoom_level = zoom_map->GetTemporaryZoomLevel( 1170 zoom_level = zoom_map->GetTemporaryZoomLevel(
(...skipping 499 matching lines...) Expand 10 before | Expand all | Expand 10 after
1661 // they saw in the URL bar, so we add the virtual URL as a redirect. This 1670 // they saw in the URL bar, so we add the virtual URL as a redirect. This
1662 // only applies to the main frame, as the virtual URL doesn't apply to 1671 // only applies to the main frame, as the virtual URL doesn't apply to
1663 // sub-frames. 1672 // sub-frames.
1664 add_page_args->url = virtual_url; 1673 add_page_args->url = virtual_url;
1665 if (!add_page_args->redirects.empty()) 1674 if (!add_page_args->redirects.empty())
1666 add_page_args->redirects.back() = virtual_url; 1675 add_page_args->redirects.back() = virtual_url;
1667 } 1676 }
1668 return add_page_args; 1677 return add_page_args;
1669 } 1678 }
1670 1679
1671 bool TabContents::UpdateTitleForEntry(NavigationEntry* entry, 1680 bool TabContents::UpdateTitleForEntry(
1672 const std::wstring& title) { 1681 NavigationEntry* entry,
1682 const base::i18n::String16WithDirection& title) {
1673 // For file URLs without a title, use the pathname instead. In the case of a 1683 // For file URLs without a title, use the pathname instead. In the case of a
1674 // synthesized title, we don't want the update to count toward the "one set 1684 // synthesized title, we don't want the update to count toward the "one set
1675 // per page of the title to history." 1685 // per page of the title to history."
1676 string16 final_title; 1686 base::i18n::String16WithDirection final_title;
1677 bool explicit_set; 1687 bool explicit_set;
1678 if (entry->url().SchemeIsFile() && title.empty()) { 1688 if (entry->url().SchemeIsFile() && title.is_empty()) {
1679 final_title = UTF8ToUTF16(entry->url().ExtractFileName()); 1689 final_title = base::i18n::String16WithDirection(
1690 UTF8ToUTF16(entry->url().ExtractFileName()),
1691 base::i18n::LEFT_TO_RIGHT);
1680 explicit_set = false; // Don't count synthetic titles toward the set limit. 1692 explicit_set = false; // Don't count synthetic titles toward the set limit.
1681 } else { 1693 } else {
1682 TrimWhitespace(WideToUTF16Hack(title), TRIM_ALL, &final_title); 1694 string16 trimmed;
1695 TrimWhitespace(title.string(), TRIM_ALL, &trimmed);
1696 final_title = base::i18n::String16WithDirection(trimmed, title.direction());
1683 explicit_set = true; 1697 explicit_set = true;
1684 } 1698 }
1685 1699
1686 if (final_title == entry->title()) 1700 if (final_title == entry->title())
1687 return false; // Nothing changed, don't bother. 1701 return false; // Nothing changed, don't bother.
1688 1702
1689 entry->set_title(final_title); 1703 entry->set_title(final_title);
1690 1704
1691 if (!received_page_title_) { 1705 if (!received_page_title_) {
1692 UpdateHistoryPageTitle(*entry); 1706 UpdateHistoryPageTitle(*entry);
1693 received_page_title_ = explicit_set; 1707 received_page_title_ = explicit_set;
1694 } 1708 }
1695 1709
1696 // Lastly, set the title for the view. 1710 // Lastly, set the title for the view.
1697 view_->SetPageTitle(UTF16ToWideHack(final_title)); 1711 // TODO(evan): use directionality of title.
1712 // http://code.google.com/p/chromium/issues/detail?id=27094
1713 view_->SetPageTitle(UTF16ToWide(final_title.string()));
1698 1714
1699 NotificationService::current()->Notify( 1715 NotificationService::current()->Notify(
1700 NotificationType::TAB_CONTENTS_TITLE_UPDATED, 1716 NotificationType::TAB_CONTENTS_TITLE_UPDATED,
1701 Source<TabContents>(this), 1717 Source<TabContents>(this),
1702 NotificationService::NoDetails()); 1718 NotificationService::NoDetails());
1703 1719
1704 return true; 1720 return true;
1705 } 1721 }
1706 1722
1707 void TabContents::NotifySwapped() { 1723 void TabContents::NotifySwapped() {
(...skipping 285 matching lines...) Expand 10 before | Expand all | Expand 10 after
1993 void TabContents::UpdateTitle(RenderViewHost* rvh, 2009 void TabContents::UpdateTitle(RenderViewHost* rvh,
1994 int32 page_id, 2010 int32 page_id,
1995 const base::i18n::String16WithDirection& title) { 2011 const base::i18n::String16WithDirection& title) {
1996 // If we have a title, that's a pretty good indication that we've started 2012 // If we have a title, that's a pretty good indication that we've started
1997 // getting useful data. 2013 // getting useful data.
1998 SetNotWaitingForResponse(); 2014 SetNotWaitingForResponse();
1999 2015
2000 DCHECK(rvh == render_view_host()); 2016 DCHECK(rvh == render_view_host());
2001 NavigationEntry* entry = controller_.GetEntryWithPageID(rvh->site_instance(), 2017 NavigationEntry* entry = controller_.GetEntryWithPageID(rvh->site_instance(),
2002 page_id); 2018 page_id);
2003 // TODO(evan): use directionality of title. 2019 if (!entry || !UpdateTitleForEntry(entry, title))
2004 // http://code.google.com/p/chromium/issues/detail?id=27094
2005 if (!entry || !UpdateTitleForEntry(entry, UTF16ToWide(title.string())))
2006 return; 2020 return;
2007 2021
2008 // Broadcast notifications when the UI should be updated. 2022 // Broadcast notifications when the UI should be updated.
2009 if (entry == controller_.GetEntryAtOffset(0)) 2023 if (entry == controller_.GetEntryAtOffset(0))
2010 NotifyNavigationStateChanged(INVALIDATE_TITLE); 2024 NotifyNavigationStateChanged(INVALIDATE_TITLE);
2011 } 2025 }
2012 2026
2013 void TabContents::UpdateEncoding(RenderViewHost* render_view_host, 2027 void TabContents::UpdateEncoding(RenderViewHost* render_view_host,
2014 const std::string& encoding) { 2028 const std::string& encoding) {
2015 set_encoding(encoding); 2029 set_encoding(encoding);
(...skipping 527 matching lines...) Expand 10 before | Expand all | Expand 10 after
2543 2557
2544 void TabContents::CreateViewAndSetSizeForRVH(RenderViewHost* rvh) { 2558 void TabContents::CreateViewAndSetSizeForRVH(RenderViewHost* rvh) {
2545 RenderWidgetHostView* rwh_view = view()->CreateViewForWidget(rvh); 2559 RenderWidgetHostView* rwh_view = view()->CreateViewForWidget(rvh);
2546 rwh_view->SetSize(view()->GetContainerSize()); 2560 rwh_view->SetSize(view()->GetContainerSize());
2547 } 2561 }
2548 2562
2549 void TabContents::OnOnlineStateChanged(bool online) { 2563 void TabContents::OnOnlineStateChanged(bool online) {
2550 render_view_host()->Send(new ViewMsg_NetworkStateChanged( 2564 render_view_host()->Send(new ViewMsg_NetworkStateChanged(
2551 render_view_host()->routing_id(), online)); 2565 render_view_host()->routing_id(), online));
2552 } 2566 }
OLDNEW
« no previous file with comments | « content/browser/tab_contents/tab_contents.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698