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

Side by Side Diff: chrome/browser/ui/toolbar/back_forward_menu_model.cc

Issue 8956059: Rename NavigationController to NavigationControllerImpl and put it into the content namespace. Al... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 8 years, 12 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
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 "build/build_config.h" 5 #include "build/build_config.h"
6 6
7 #include "chrome/browser/ui/toolbar/back_forward_menu_model.h" 7 #include "chrome/browser/ui/toolbar/back_forward_menu_model.h"
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/bind_helpers.h" 10 #include "base/bind_helpers.h"
(...skipping 11 matching lines...) Expand all
22 #include "content/public/browser/user_metrics.h" 22 #include "content/public/browser/user_metrics.h"
23 #include "grit/generated_resources.h" 23 #include "grit/generated_resources.h"
24 #include "grit/theme_resources.h" 24 #include "grit/theme_resources.h"
25 #include "grit/theme_resources_standard.h" 25 #include "grit/theme_resources_standard.h"
26 #include "net/base/registry_controlled_domain.h" 26 #include "net/base/registry_controlled_domain.h"
27 #include "ui/base/l10n/l10n_util.h" 27 #include "ui/base/l10n/l10n_util.h"
28 #include "ui/base/resource/resource_bundle.h" 28 #include "ui/base/resource/resource_bundle.h"
29 #include "ui/base/text/text_elider.h" 29 #include "ui/base/text/text_elider.h"
30 #include "ui/gfx/codec/png_codec.h" 30 #include "ui/gfx/codec/png_codec.h"
31 31
32 using content::NavigationEntry;
32 using content::UserMetricsAction; 33 using content::UserMetricsAction;
33 34
34 const int BackForwardMenuModel::kMaxHistoryItems = 12; 35 const int BackForwardMenuModel::kMaxHistoryItems = 12;
35 const int BackForwardMenuModel::kMaxChapterStops = 5; 36 const int BackForwardMenuModel::kMaxChapterStops = 5;
36 static const int kMaxWidth = 700; 37 static const int kMaxWidth = 700;
37 38
38 BackForwardMenuModel::BackForwardMenuModel(Browser* browser, 39 BackForwardMenuModel::BackForwardMenuModel(Browser* browser,
39 ModelType model_type) 40 ModelType model_type)
40 : browser_(browser), 41 : browser_(browser),
41 test_tab_contents_(NULL), 42 test_tab_contents_(NULL),
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
83 // Return label "Show Full History" for the last item of the menu. 84 // Return label "Show Full History" for the last item of the menu.
84 if (index == GetItemCount() - 1) 85 if (index == GetItemCount() - 1)
85 return l10n_util::GetStringUTF16(IDS_SHOWFULLHISTORY_LINK); 86 return l10n_util::GetStringUTF16(IDS_SHOWFULLHISTORY_LINK);
86 87
87 // Return an empty string for a separator. 88 // Return an empty string for a separator.
88 if (IsSeparator(index)) 89 if (IsSeparator(index))
89 return string16(); 90 return string16();
90 91
91 // Return the entry title, escaping any '&' characters and eliding it if it's 92 // Return the entry title, escaping any '&' characters and eliding it if it's
92 // super long. 93 // super long.
93 content::NavigationEntry* entry = GetNavigationEntry(index); 94 NavigationEntry* entry = GetNavigationEntry(index);
94 Profile* profile = 95 Profile* profile =
95 Profile::FromBrowserContext(GetTabContents()->GetBrowserContext()); 96 Profile::FromBrowserContext(GetTabContents()->GetBrowserContext());
96 string16 menu_text(entry->GetTitleForDisplay( 97 string16 menu_text(entry->GetTitleForDisplay(
97 profile->GetPrefs()->GetString(prefs::kAcceptLanguages))); 98 profile->GetPrefs()->GetString(prefs::kAcceptLanguages)));
98 menu_text = 99 menu_text =
99 ui::ElideText(menu_text, gfx::Font(), kMaxWidth, ui::ELIDE_AT_END); 100 ui::ElideText(menu_text, gfx::Font(), kMaxWidth, ui::ELIDE_AT_END);
100 101
101 #if !defined(OS_MACOSX) 102 #if !defined(OS_MACOSX)
102 for (size_t i = menu_text.find('&'); i != string16::npos; 103 for (size_t i = menu_text.find('&'); i != string16::npos;
103 i = menu_text.find('&', i + 2)) { 104 i = menu_text.find('&', i + 2)) {
(...skipping 24 matching lines...) Expand all
128 } 129 }
129 130
130 bool BackForwardMenuModel::GetIconAt(int index, SkBitmap* icon) { 131 bool BackForwardMenuModel::GetIconAt(int index, SkBitmap* icon) {
131 if (!ItemHasIcon(index)) 132 if (!ItemHasIcon(index))
132 return false; 133 return false;
133 134
134 if (index == GetItemCount() - 1) { 135 if (index == GetItemCount() - 1) {
135 *icon = *ResourceBundle::GetSharedInstance().GetBitmapNamed( 136 *icon = *ResourceBundle::GetSharedInstance().GetBitmapNamed(
136 IDR_HISTORY_FAVICON); 137 IDR_HISTORY_FAVICON);
137 } else { 138 } else {
138 content::NavigationEntry* entry = GetNavigationEntry(index); 139 NavigationEntry* entry = GetNavigationEntry(index);
139 *icon = entry->GetFavicon().bitmap; 140 *icon = entry->GetFavicon().bitmap;
140 if (!entry->GetFavicon().valid && menu_model_delegate()) { 141 if (!entry->GetFavicon().valid && menu_model_delegate()) {
141 FetchFavicon(entry); 142 FetchFavicon(entry);
142 } 143 }
143 } 144 }
144 145
145 return true; 146 return true;
146 } 147 }
147 148
148 ui::ButtonMenuItemModel* BackForwardMenuModel::GetButtonMenuItemAt( 149 ui::ButtonMenuItemModel* BackForwardMenuModel::GetButtonMenuItemAt(
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
216 217
217 // Look to see if we have reached the separator for the history items. 218 // Look to see if we have reached the separator for the history items.
218 return index == history_items; 219 return index == history_items;
219 } 220 }
220 221
221 void BackForwardMenuModel::SetMenuModelDelegate( 222 void BackForwardMenuModel::SetMenuModelDelegate(
222 ui::MenuModelDelegate* menu_model_delegate) { 223 ui::MenuModelDelegate* menu_model_delegate) {
223 menu_model_delegate_ = menu_model_delegate; 224 menu_model_delegate_ = menu_model_delegate;
224 } 225 }
225 226
226 void BackForwardMenuModel::FetchFavicon(content::NavigationEntry* entry) { 227 void BackForwardMenuModel::FetchFavicon(NavigationEntry* entry) {
227 // If the favicon has already been requested for this menu, don't do 228 // If the favicon has already been requested for this menu, don't do
228 // anything. 229 // anything.
229 if (requested_favicons_.find(entry->GetUniqueID()) != 230 if (requested_favicons_.find(entry->GetUniqueID()) !=
230 requested_favicons_.end()) { 231 requested_favicons_.end()) {
231 return; 232 return;
232 } 233 }
233 requested_favicons_.insert(entry->GetUniqueID()); 234 requested_favicons_.insert(entry->GetUniqueID());
234 FaviconService* favicon_service = 235 FaviconService* favicon_service =
235 browser_->profile()->GetFaviconService(Profile::EXPLICIT_ACCESS); 236 browser_->profile()->GetFaviconService(Profile::EXPLICIT_ACCESS);
236 if (!favicon_service) 237 if (!favicon_service)
237 return; 238 return;
238 FaviconService::Handle handle = favicon_service->GetFaviconForURL( 239 FaviconService::Handle handle = favicon_service->GetFaviconForURL(
239 entry->GetURL(), history::FAVICON, &load_consumer_, 240 entry->GetURL(), history::FAVICON, &load_consumer_,
240 base::Bind(&BackForwardMenuModel::OnFavIconDataAvailable, 241 base::Bind(&BackForwardMenuModel::OnFavIconDataAvailable,
241 base::Unretained(this))); 242 base::Unretained(this)));
242 load_consumer_.SetClientData(favicon_service, handle, entry->GetUniqueID()); 243 load_consumer_.SetClientData(favicon_service, handle, entry->GetUniqueID());
243 } 244 }
244 245
245 void BackForwardMenuModel::OnFavIconDataAvailable( 246 void BackForwardMenuModel::OnFavIconDataAvailable(
246 FaviconService::Handle handle, 247 FaviconService::Handle handle,
247 history::FaviconData favicon) { 248 history::FaviconData favicon) {
248 if (favicon.is_valid()) { 249 if (favicon.is_valid()) {
249 int unique_id = load_consumer_.GetClientDataForCurrentRequest(); 250 int unique_id = load_consumer_.GetClientDataForCurrentRequest();
250 // Find the current model_index for the unique_id. 251 // Find the current model_index for the unique_id.
251 content::NavigationEntry* entry = NULL; 252 NavigationEntry* entry = NULL;
252 int model_index = -1; 253 int model_index = -1;
253 for (int i = 0; i < GetItemCount() - 1; i++) { 254 for (int i = 0; i < GetItemCount() - 1; i++) {
254 if (IsSeparator(i)) 255 if (IsSeparator(i))
255 continue; 256 continue;
256 if (GetNavigationEntry(i)->GetUniqueID() == unique_id) { 257 if (GetNavigationEntry(i)->GetUniqueID() == unique_id) {
257 model_index = i; 258 model_index = i;
258 entry = GetNavigationEntry(i); 259 entry = GetNavigationEntry(i);
259 break; 260 break;
260 } 261 }
261 } 262 }
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
341 if (forward) { 342 if (forward) {
342 if (start_from < max_count - 1) { 343 if (start_from < max_count - 1) {
343 // We want to advance over the current chapter stop, so we add one. 344 // We want to advance over the current chapter stop, so we add one.
344 // We don't need to do this when direction is backwards. 345 // We don't need to do this when direction is backwards.
345 start_from++; 346 start_from++;
346 } else { 347 } else {
347 return -1; 348 return -1;
348 } 349 }
349 } 350 }
350 351
351 content::NavigationEntry* start_entry = 352 NavigationEntry* start_entry = controller.GetEntryAtIndex(start_from);
352 controller.GetEntryAtIndex(start_from);
353 const GURL& url = start_entry->GetURL(); 353 const GURL& url = start_entry->GetURL();
354 354
355 if (!forward) { 355 if (!forward) {
356 // When going backwards we return the first entry we find that has a 356 // When going backwards we return the first entry we find that has a
357 // different domain. 357 // different domain.
358 for (int i = start_from - 1; i >= 0; --i) { 358 for (int i = start_from - 1; i >= 0; --i) {
359 if (!net::RegistryControlledDomainService::SameDomainOrHost(url, 359 if (!net::RegistryControlledDomainService::SameDomainOrHost(url,
360 controller.GetEntryAtIndex(i)->GetURL())) 360 controller.GetEntryAtIndex(i)->GetURL()))
361 return i; 361 return i;
362 } 362 }
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
433 return -1; // This is beyond the last chapter stop so we abort. 433 return -1; // This is beyond the last chapter stop so we abort.
434 434
435 // This menu item is a chapter stop located between the two separators. 435 // This menu item is a chapter stop located between the two separators.
436 index = FindChapterStop(history_items, 436 index = FindChapterStop(history_items,
437 model_type_ == FORWARD_MENU, 437 model_type_ == FORWARD_MENU,
438 index - history_items - 1); 438 index - history_items - 1);
439 439
440 return index; 440 return index;
441 } 441 }
442 442
443 content::NavigationEntry* BackForwardMenuModel::GetNavigationEntry( 443 NavigationEntry* BackForwardMenuModel::GetNavigationEntry(int index) const {
444 int index) const {
445 int controller_index = MenuIndexToNavEntryIndex(index); 444 int controller_index = MenuIndexToNavEntryIndex(index);
446 NavigationController& controller = GetTabContents()->GetController(); 445 NavigationController& controller = GetTabContents()->GetController();
447 if (controller_index >= 0 && controller_index < controller.entry_count()) 446 if (controller_index >= 0 && controller_index < controller.entry_count())
448 return controller.GetEntryAtIndex(controller_index); 447 return controller.GetEntryAtIndex(controller_index);
449 448
450 NOTREACHED(); 449 NOTREACHED();
451 return NULL; 450 return NULL;
452 } 451 }
453 452
454 std::string BackForwardMenuModel::BuildActionName( 453 std::string BackForwardMenuModel::BuildActionName(
455 const std::string& action, int index) const { 454 const std::string& action, int index) const {
456 DCHECK(!action.empty()); 455 DCHECK(!action.empty());
457 DCHECK(index >= -1); 456 DCHECK(index >= -1);
458 std::string metric_string; 457 std::string metric_string;
459 if (model_type_ == FORWARD_MENU) 458 if (model_type_ == FORWARD_MENU)
460 metric_string += "ForwardMenu_"; 459 metric_string += "ForwardMenu_";
461 else 460 else
462 metric_string += "BackMenu_"; 461 metric_string += "BackMenu_";
463 metric_string += action; 462 metric_string += action;
464 if (index != -1) { 463 if (index != -1) {
465 // +1 is for historical reasons (indices used to start at 1). 464 // +1 is for historical reasons (indices used to start at 1).
466 metric_string += base::IntToString(index + 1); 465 metric_string += base::IntToString(index + 1);
467 } 466 }
468 return metric_string; 467 return metric_string;
469 } 468 }
OLDNEW
« no previous file with comments | « chrome/browser/ui/sync/tab_contents_wrapper_synced_tab_delegate.cc ('k') | chrome/browser/ui/toolbar/toolbar_model.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698