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

Side by Side Diff: chrome/browser/dom_ui/new_tab_ui.cc

Issue 28104: Enable history and downloads by default, port NewTabUI from DOMUIHost to DOMU... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 years, 10 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 | « chrome/browser/dom_ui/new_tab_ui.h ('k') | chrome/browser/resources/history.html » ('j') | 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) 2006-2008 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2006-2008 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/dom_ui/new_tab_ui.h" 7 #include "chrome/browser/dom_ui/new_tab_ui.h"
8 8
9 #include "base/histogram.h" 9 #include "base/histogram.h"
10 #include "base/string_piece.h" 10 #include "base/string_piece.h"
11 #include "chrome/browser/bookmarks/bookmark_utils.h" 11 #include "chrome/browser/bookmarks/bookmark_utils.h"
12 #include "chrome/browser/browser.h" 12 #include "chrome/browser/browser.h"
13 #include "chrome/browser/browser_process.h" 13 #include "chrome/browser/browser_process.h"
14 #include "chrome/browser/dom_ui/dom_ui_contents.h" 14 #include "chrome/browser/dom_ui/dom_ui_contents.h"
15 #if defined(OS_WIN) 15 #if defined(OS_WIN)
16 // TODO(port): include this once history is converted to HTML 16 // TODO(port): include this once history is converted to HTML
17 #include "chrome/browser/history_tab_ui.h" 17 #include "chrome/browser/dom_ui/history_ui.h"
18 #endif 18 #endif
19 #include "chrome/browser/history/page_usage_data.h" 19 #include "chrome/browser/history/page_usage_data.h"
20 #include "chrome/browser/metrics/user_metrics.h" 20 #include "chrome/browser/metrics/user_metrics.h"
21 #include "chrome/browser/profile.h" 21 #include "chrome/browser/profile.h"
22 #include "chrome/browser/renderer_host/render_view_host.h" 22 #include "chrome/browser/renderer_host/render_view_host.h"
23 #include "chrome/browser/sessions/session_types.h" 23 #include "chrome/browser/sessions/session_types.h"
24 #include "chrome/browser/tab_contents/navigation_entry.h" 24 #include "chrome/browser/tab_contents/navigation_entry.h"
25 #include "chrome/browser/search_engines/template_url.h" 25 #include "chrome/browser/search_engines/template_url.h"
26 #include "chrome/browser/user_data_manager.h" 26 #include "chrome/browser/user_data_manager.h"
27 #include "chrome/common/jstemplate_builder.h" 27 #include "chrome/common/jstemplate_builder.h"
28 #include "chrome/common/l10n_util.h" 28 #include "chrome/common/l10n_util.h"
29 #include "chrome/common/notification_service.h" 29 #include "chrome/common/notification_service.h"
30 #include "chrome/common/pref_names.h" 30 #include "chrome/common/pref_names.h"
31 #include "chrome/common/pref_service.h" 31 #include "chrome/common/pref_service.h"
32 #include "chrome/common/resource_bundle.h" 32 #include "chrome/common/resource_bundle.h"
33 #ifdef CHROME_PERSONALIZATION 33 #ifdef CHROME_PERSONALIZATION
34 #include "chrome/personalization/personalization.h" 34 #include "chrome/personalization/personalization.h"
35 #endif 35 #endif
36 #include "grit/browser_resources.h" 36 #include "grit/browser_resources.h"
37 #include "grit/chromium_strings.h" 37 #include "grit/chromium_strings.h"
38 #include "grit/generated_resources.h" 38 #include "grit/generated_resources.h"
39 #include "grit/locale_settings.h" 39 #include "grit/locale_settings.h"
40 40
41 // The URL scheme used for the new tab. 41 // NewTabUI is accessible from chrome-ui://newtab.
42 static const char kNewTabUIScheme[] = "chrome-internal"; 42 static const char kNewTabHost[] = "newtab";
43 43
44 // The number of most visited pages we show. 44 // The number of most visited pages we show.
45 const int kMostVisitedPages = 9; 45 const int kMostVisitedPages = 9;
46 46
47 // The number of days of history we consider for most visited entries. 47 // The number of days of history we consider for most visited entries.
48 const int kMostVisitedScope = 90; 48 const int kMostVisitedScope = 90;
49 49
50 // The number of recent bookmarks we show. 50 // The number of recent bookmarks we show.
51 static const int kRecentBookmarks = 9; 51 static const int kRecentBookmarks = 9;
52 52
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
170 dictionary->SetString(L"title", title_to_set); 170 dictionary->SetString(L"title", title_to_set);
171 dictionary->SetString(L"direction", direction); 171 dictionary->SetString(L"direction", direction);
172 } 172 }
173 173
174 } // end anonymous namespace 174 } // end anonymous namespace
175 175
176 /////////////////////////////////////////////////////////////////////////////// 176 ///////////////////////////////////////////////////////////////////////////////
177 // NewTabHTMLSource 177 // NewTabHTMLSource
178 178
179 NewTabHTMLSource::NewTabHTMLSource() 179 NewTabHTMLSource::NewTabHTMLSource()
180 : DataSource("new-tab", MessageLoop::current()) { 180 : DataSource(kNewTabHost, MessageLoop::current()) {
181 } 181 }
182 182
183 void NewTabHTMLSource::StartDataRequest(const std::string& path, 183 void NewTabHTMLSource::StartDataRequest(const std::string& path,
184 int request_id) { 184 int request_id) {
185 if (!path.empty()) { 185 if (!path.empty()) {
186 // A path under new-tab was requested; it's likely a bad relative 186 // A path under new-tab was requested; it's likely a bad relative
187 // URL from the new tab page, but in any case it's an error. 187 // URL from the new tab page, but in any case it's an error.
188 NOTREACHED(); 188 NOTREACHED();
189 return; 189 return;
190 } 190 }
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
282 scoped_refptr<RefCountedBytes> html_bytes(new RefCountedBytes); 282 scoped_refptr<RefCountedBytes> html_bytes(new RefCountedBytes);
283 html_bytes->data.resize(full_html.size()); 283 html_bytes->data.resize(full_html.size());
284 std::copy(full_html.begin(), full_html.end(), html_bytes->data.begin()); 284 std::copy(full_html.begin(), full_html.end(), html_bytes->data.begin());
285 285
286 SendResponse(request_id, html_bytes); 286 SendResponse(request_id, html_bytes);
287 } 287 }
288 288
289 /////////////////////////////////////////////////////////////////////////////// 289 ///////////////////////////////////////////////////////////////////////////////
290 // MostVisitedHandler 290 // MostVisitedHandler
291 291
292 MostVisitedHandler::MostVisitedHandler(DOMUIHost* dom_ui_host) 292 MostVisitedHandler::MostVisitedHandler(DOMUI* dom_ui)
293 : dom_ui_host_(dom_ui_host) { 293 : DOMMessageHandler(dom_ui),
294 dom_ui_(dom_ui) {
294 // Register ourselves as the handler for the "mostvisited" message from 295 // Register ourselves as the handler for the "mostvisited" message from
295 // Javascript. 296 // Javascript.
296 dom_ui_host_->RegisterMessageCallback("getMostVisited", 297 dom_ui_->RegisterMessageCallback("getMostVisited",
297 NewCallback(this, &MostVisitedHandler::HandleGetMostVisited)); 298 NewCallback(this, &MostVisitedHandler::HandleGetMostVisited));
298 299
299 // Set up our sources for thumbnail and favicon data. 300 // Set up our sources for thumbnail and favicon data.
300 // Ownership is passed to the ChromeURLDataManager. 301 // Ownership is passed to the ChromeURLDataManager.
301 g_browser_process->io_thread()->message_loop()->PostTask(FROM_HERE, 302 g_browser_process->io_thread()->message_loop()->PostTask(FROM_HERE,
302 NewRunnableMethod(&chrome_url_data_manager, 303 NewRunnableMethod(&chrome_url_data_manager,
303 &ChromeURLDataManager::AddDataSource, 304 &ChromeURLDataManager::AddDataSource,
304 new ThumbnailSource(dom_ui_host->profile()))); 305 new ThumbnailSource(dom_ui->get_profile())));
305 g_browser_process->io_thread()->message_loop()->PostTask(FROM_HERE, 306 g_browser_process->io_thread()->message_loop()->PostTask(FROM_HERE,
306 NewRunnableMethod(&chrome_url_data_manager, 307 NewRunnableMethod(&chrome_url_data_manager,
307 &ChromeURLDataManager::AddDataSource, 308 &ChromeURLDataManager::AddDataSource,
308 new FavIconSource(dom_ui_host->profile()))); 309 new FavIconSource(dom_ui->get_profile())));
309 310
310 // Get notifications when history is cleared. 311 // Get notifications when history is cleared.
311 NotificationService* service = NotificationService::current(); 312 NotificationService* service = NotificationService::current();
312 service->AddObserver(this, NotificationType::HISTORY_URLS_DELETED, 313 service->AddObserver(this, NotificationType::HISTORY_URLS_DELETED,
313 Source<Profile>(dom_ui_host_->profile())); 314 Source<Profile>(dom_ui_->get_profile()));
314 } 315 }
315 316
316 MostVisitedHandler::~MostVisitedHandler() { 317 MostVisitedHandler::~MostVisitedHandler() {
317 NotificationService* service = NotificationService::current(); 318 NotificationService* service = NotificationService::current();
318 service->RemoveObserver(this, NotificationType::HISTORY_URLS_DELETED, 319 service->RemoveObserver(this, NotificationType::HISTORY_URLS_DELETED,
319 Source<Profile>(dom_ui_host_->profile())); 320 Source<Profile>(dom_ui_->get_profile()));
320 } 321 }
321 322
322 void MostVisitedHandler::HandleGetMostVisited(const Value* value) { 323 void MostVisitedHandler::HandleGetMostVisited(const Value* value) {
323 HistoryService* hs = 324 HistoryService* hs =
324 dom_ui_host_->profile()->GetHistoryService(Profile::EXPLICIT_ACCESS); 325 dom_ui_->get_profile()->GetHistoryService(Profile::EXPLICIT_ACCESS);
325 hs->QuerySegmentUsageSince( 326 hs->QuerySegmentUsageSince(
326 &cancelable_consumer_, 327 &cancelable_consumer_,
327 base::Time::Now() - base::TimeDelta::FromDays(kMostVisitedScope), 328 base::Time::Now() - base::TimeDelta::FromDays(kMostVisitedScope),
328 NewCallback(this, &MostVisitedHandler::OnSegmentUsageAvailable)); 329 NewCallback(this, &MostVisitedHandler::OnSegmentUsageAvailable));
329 } 330 }
330 331
331 void MostVisitedHandler::OnSegmentUsageAvailable( 332 void MostVisitedHandler::OnSegmentUsageAvailable(
332 CancelableRequestProvider::Handle handle, 333 CancelableRequestProvider::Handle handle,
333 std::vector<PageUsageData*>* data) { 334 std::vector<PageUsageData*>* data) {
334 most_visited_urls_.clear(); 335 most_visited_urls_.clear();
335 336
336 ListValue pages_value; 337 ListValue pages_value;
337 const size_t count = std::min<size_t>(kMostVisitedPages, data->size()); 338 const size_t count = std::min<size_t>(kMostVisitedPages, data->size());
338 for (size_t i = 0; i < count; ++i) { 339 for (size_t i = 0; i < count; ++i) {
339 const PageUsageData& page = *(*data)[i]; 340 const PageUsageData& page = *(*data)[i];
340 DictionaryValue* page_value = new DictionaryValue; 341 DictionaryValue* page_value = new DictionaryValue;
341 SetURLTitleAndDirection(page_value, page.GetTitle(), page.GetURL()); 342 SetURLTitleAndDirection(page_value, page.GetTitle(), page.GetURL());
342 pages_value.Append(page_value); 343 pages_value.Append(page_value);
343 most_visited_urls_.push_back(page.GetURL()); 344 most_visited_urls_.push_back(page.GetURL());
344 } 345 }
345 dom_ui_host_->CallJavascriptFunction(L"mostVisitedPages", pages_value); 346 dom_ui_->CallJavascriptFunction(L"mostVisitedPages", pages_value);
346 } 347 }
347 348
348 void MostVisitedHandler::Observe(NotificationType type, 349 void MostVisitedHandler::Observe(NotificationType type,
349 const NotificationSource& source, 350 const NotificationSource& source,
350 const NotificationDetails& details) { 351 const NotificationDetails& details) {
351 if (type != NotificationType::HISTORY_URLS_DELETED) { 352 if (type != NotificationType::HISTORY_URLS_DELETED) {
352 NOTREACHED(); 353 NOTREACHED();
353 return; 354 return;
354 } 355 }
355 356
356 // Some URLs were deleted from history. Reload the most visited list. 357 // Some URLs were deleted from history. Reload the most visited list.
357 HandleGetMostVisited(NULL); 358 HandleGetMostVisited(NULL);
358 } 359 }
359 360
360 /////////////////////////////////////////////////////////////////////////////// 361 ///////////////////////////////////////////////////////////////////////////////
361 // TemplateURLHandler 362 // TemplateURLHandler
362 363
363 TemplateURLHandler::TemplateURLHandler(DOMUIHost* dom_ui_host) 364 TemplateURLHandler::TemplateURLHandler(DOMUI* dom_ui)
364 : dom_ui_host_(dom_ui_host), template_url_model_(NULL) { 365 : DOMMessageHandler(dom_ui),
365 dom_ui_host->RegisterMessageCallback("getMostSearched", 366 dom_ui_(dom_ui),
367 template_url_model_(NULL) {
368 dom_ui->RegisterMessageCallback("getMostSearched",
366 NewCallback(this, &TemplateURLHandler::HandleGetMostSearched)); 369 NewCallback(this, &TemplateURLHandler::HandleGetMostSearched));
367 dom_ui_host->RegisterMessageCallback("doSearch", 370 dom_ui->RegisterMessageCallback("doSearch",
368 NewCallback(this, &TemplateURLHandler::HandleDoSearch)); 371 NewCallback(this, &TemplateURLHandler::HandleDoSearch));
369 } 372 }
370 373
371 TemplateURLHandler::~TemplateURLHandler() { 374 TemplateURLHandler::~TemplateURLHandler() {
372 if (template_url_model_) 375 if (template_url_model_)
373 template_url_model_->RemoveObserver(this); 376 template_url_model_->RemoveObserver(this);
374 } 377 }
375 378
376 void TemplateURLHandler::HandleGetMostSearched(const Value* content) { 379 void TemplateURLHandler::HandleGetMostSearched(const Value* content) {
377 // The page Javascript has requested the list of keyword searches. 380 // The page Javascript has requested the list of keyword searches.
378 // Start loading them from the template URL backend. 381 // Start loading them from the template URL backend.
379 if (!template_url_model_) { 382 if (!template_url_model_) {
380 template_url_model_ = dom_ui_host_->profile()->GetTemplateURLModel(); 383 template_url_model_ = dom_ui_->get_profile()->GetTemplateURLModel();
381 template_url_model_->AddObserver(this); 384 template_url_model_->AddObserver(this);
382 } 385 }
383 if (template_url_model_->loaded()) { 386 if (template_url_model_->loaded()) {
384 OnTemplateURLModelChanged(); 387 OnTemplateURLModelChanged();
385 } else { 388 } else {
386 template_url_model_->Load(); 389 template_url_model_->Load();
387 } 390 }
388 } 391 }
389 392
390 // A helper function for sorting TemplateURLs where the most used ones show up 393 // A helper function for sorting TemplateURLs where the most used ones show up
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
427 const TemplateURLRef* url_ref = template_url->url(); 430 const TemplateURLRef* url_ref = template_url->url();
428 if (!url_ref || !url_ref->SupportsReplacement()) { 431 if (!url_ref || !url_ref->SupportsReplacement()) {
429 NOTREACHED(); 432 NOTREACHED();
430 return; 433 return;
431 } 434 }
432 GURL url = url_ref->ReplaceSearchTerms(*template_url, search, 435 GURL url = url_ref->ReplaceSearchTerms(*template_url, search,
433 TemplateURLRef::NO_SUGGESTIONS_AVAILABLE, std::wstring()); 436 TemplateURLRef::NO_SUGGESTIONS_AVAILABLE, std::wstring());
434 437
435 if (url.is_valid()) { 438 if (url.is_valid()) {
436 // Load the URL. 439 // Load the URL.
437 dom_ui_host_->OpenURL(url, GURL(), CURRENT_TAB, PageTransition::LINK); 440 dom_ui_->get_contents()->OpenURL(url, GURL(), CURRENT_TAB,
441 PageTransition::LINK);
438 442
439 // Record the user action 443 // Record the user action
440 std::vector<const TemplateURL*> urls = 444 std::vector<const TemplateURL*> urls =
441 template_url_model_->GetTemplateURLs(); 445 template_url_model_->GetTemplateURLs();
442 sort(urls.begin(), urls.end(), TemplateURLSortByUsage); 446 sort(urls.begin(), urls.end(), TemplateURLSortByUsage);
443 ListValue urls_value; 447 ListValue urls_value;
444 int item_number = 0; 448 int item_number = 0;
445 for (size_t i = 0; 449 for (size_t i = 0;
446 i < std::min<size_t>(urls.size(), kSearchURLs); ++i) { 450 i < std::min<size_t>(urls.size(), kSearchURLs); ++i) {
447 if (urls[i]->usage_count() == 0) 451 if (urls[i]->usage_count() == 0)
448 break; // The remainder would be no good. 452 break; // The remainder would be no good.
449 453
450 const TemplateURLRef* urlref = urls[i]->url(); 454 const TemplateURLRef* urlref = urls[i]->url();
451 if (!urlref) 455 if (!urlref)
452 continue; 456 continue;
453 457
454 if (urls[i] == template_url) { 458 if (urls[i] == template_url) {
455 UserMetrics::RecordComputedAction( 459 UserMetrics::RecordComputedAction(
456 StringPrintf(L"NTP_SearchURL%d", item_number), 460 StringPrintf(L"NTP_SearchURL%d", item_number),
457 dom_ui_host_->profile()); 461 dom_ui_->get_profile());
458 break; 462 break;
459 } 463 }
460 464
461 item_number++; 465 item_number++;
462 } 466 }
463 } 467 }
464 } 468 }
465 469
466 void TemplateURLHandler::OnTemplateURLModelChanged() { 470 void TemplateURLHandler::OnTemplateURLModelChanged() {
467 // We've loaded some template URLs. Send them to the page. 471 // We've loaded some template URLs. Send them to the page.
(...skipping 11 matching lines...) Expand all
479 entry_value->SetString(L"short_name", urls[i]->short_name()); 483 entry_value->SetString(L"short_name", urls[i]->short_name());
480 entry_value->SetString(L"keyword", urls[i]->keyword()); 484 entry_value->SetString(L"keyword", urls[i]->keyword());
481 485
482 const GURL& url = urls[i]->GetFavIconURL(); 486 const GURL& url = urls[i]->GetFavIconURL();
483 if (url.is_valid()) 487 if (url.is_valid())
484 entry_value->SetString(L"favIconURL", UTF8ToWide(url.spec())); 488 entry_value->SetString(L"favIconURL", UTF8ToWide(url.spec()));
485 489
486 urls_value.Append(entry_value); 490 urls_value.Append(entry_value);
487 } 491 }
488 UMA_HISTOGRAM_COUNTS("NewTabPage.SearchURLs.Total", urls_value.GetSize()); 492 UMA_HISTOGRAM_COUNTS("NewTabPage.SearchURLs.Total", urls_value.GetSize());
489 dom_ui_host_->CallJavascriptFunction(L"searchURLs", urls_value); 493 dom_ui_->CallJavascriptFunction(L"searchURLs", urls_value);
490 } 494 }
491 495
492 /////////////////////////////////////////////////////////////////////////////// 496 ///////////////////////////////////////////////////////////////////////////////
493 // RecentlyBookmarkedHandler 497 // RecentlyBookmarkedHandler
494 498
495 RecentlyBookmarkedHandler::RecentlyBookmarkedHandler(DOMUIHost* dom_ui_host) 499 RecentlyBookmarkedHandler::RecentlyBookmarkedHandler(DOMUI* dom_ui)
496 : dom_ui_host_(dom_ui_host), 500 : DOMMessageHandler(dom_ui),
501 dom_ui_(dom_ui),
497 model_(NULL) { 502 model_(NULL) {
498 dom_ui_host->RegisterMessageCallback("getRecentlyBookmarked", 503 dom_ui->RegisterMessageCallback("getRecentlyBookmarked",
499 NewCallback(this, 504 NewCallback(this,
500 &RecentlyBookmarkedHandler::HandleGetRecentlyBookmarked)); 505 &RecentlyBookmarkedHandler::HandleGetRecentlyBookmarked));
501 } 506 }
502 507
503 RecentlyBookmarkedHandler::~RecentlyBookmarkedHandler() { 508 RecentlyBookmarkedHandler::~RecentlyBookmarkedHandler() {
504 if (model_) 509 if (model_)
505 model_->RemoveObserver(this); 510 model_->RemoveObserver(this);
506 } 511 }
507 512
508 void RecentlyBookmarkedHandler::HandleGetRecentlyBookmarked(const Value*) { 513 void RecentlyBookmarkedHandler::HandleGetRecentlyBookmarked(const Value*) {
509 if (!model_) { 514 if (!model_) {
510 model_ = dom_ui_host_->profile()->GetBookmarkModel(); 515 model_ = dom_ui_->get_profile()->GetBookmarkModel();
511 model_->AddObserver(this); 516 model_->AddObserver(this);
512 } 517 }
513 // If the model is loaded, synchronously send the bookmarks down. Otherwise 518 // If the model is loaded, synchronously send the bookmarks down. Otherwise
514 // when the model loads we'll send the bookmarks down. 519 // when the model loads we'll send the bookmarks down.
515 if (model_->IsLoaded()) 520 if (model_->IsLoaded())
516 SendBookmarksToPage(); 521 SendBookmarksToPage();
517 } 522 }
518 523
519 void RecentlyBookmarkedHandler::SendBookmarksToPage() { 524 void RecentlyBookmarkedHandler::SendBookmarksToPage() {
520 std::vector<BookmarkNode*> recently_bookmarked; 525 std::vector<BookmarkNode*> recently_bookmarked;
521 bookmark_utils::GetMostRecentlyAddedEntries( 526 bookmark_utils::GetMostRecentlyAddedEntries(
522 model_, kRecentBookmarks, &recently_bookmarked); 527 model_, kRecentBookmarks, &recently_bookmarked);
523 ListValue list_value; 528 ListValue list_value;
524 for (size_t i = 0; i < recently_bookmarked.size(); ++i) { 529 for (size_t i = 0; i < recently_bookmarked.size(); ++i) {
525 BookmarkNode* node = recently_bookmarked[i]; 530 BookmarkNode* node = recently_bookmarked[i];
526 DictionaryValue* entry_value = new DictionaryValue; 531 DictionaryValue* entry_value = new DictionaryValue;
527 SetURLTitleAndDirection(entry_value, node->GetTitle(), node->GetURL()); 532 SetURLTitleAndDirection(entry_value, node->GetTitle(), node->GetURL());
528 list_value.Append(entry_value); 533 list_value.Append(entry_value);
529 } 534 }
530 dom_ui_host_->CallJavascriptFunction(L"recentlyBookmarked", list_value); 535 dom_ui_->CallJavascriptFunction(L"recentlyBookmarked", list_value);
531 } 536 }
532 537
533 void RecentlyBookmarkedHandler::Loaded(BookmarkModel* model) { 538 void RecentlyBookmarkedHandler::Loaded(BookmarkModel* model) {
534 SendBookmarksToPage(); 539 SendBookmarksToPage();
535 } 540 }
536 541
537 void RecentlyBookmarkedHandler::BookmarkNodeAdded(BookmarkModel* model, 542 void RecentlyBookmarkedHandler::BookmarkNodeAdded(BookmarkModel* model,
538 BookmarkNode* parent, 543 BookmarkNode* parent,
539 int index) { 544 int index) {
540 SendBookmarksToPage(); 545 SendBookmarksToPage();
541 } 546 }
542 547
543 void RecentlyBookmarkedHandler::BookmarkNodeRemoved(BookmarkModel* model, 548 void RecentlyBookmarkedHandler::BookmarkNodeRemoved(BookmarkModel* model,
544 BookmarkNode* parent, 549 BookmarkNode* parent,
545 int index) { 550 int index) {
546 SendBookmarksToPage(); 551 SendBookmarksToPage();
547 } 552 }
548 553
549 void RecentlyBookmarkedHandler::BookmarkNodeChanged(BookmarkModel* model, 554 void RecentlyBookmarkedHandler::BookmarkNodeChanged(BookmarkModel* model,
550 BookmarkNode* node) { 555 BookmarkNode* node) {
551 SendBookmarksToPage(); 556 SendBookmarksToPage();
552 } 557 }
553 558
554 /////////////////////////////////////////////////////////////////////////////// 559 ///////////////////////////////////////////////////////////////////////////////
555 // RecentlyClosedTabsHandler 560 // RecentlyClosedTabsHandler
556 561
557 RecentlyClosedTabsHandler::RecentlyClosedTabsHandler(DOMUIHost* dom_ui_host) 562 RecentlyClosedTabsHandler::RecentlyClosedTabsHandler(DOMUI* dom_ui)
558 : dom_ui_host_(dom_ui_host), 563 : DOMMessageHandler(dom_ui),
564 dom_ui_(dom_ui),
559 tab_restore_service_(NULL) { 565 tab_restore_service_(NULL) {
560 dom_ui_host->RegisterMessageCallback("getRecentlyClosedTabs", 566 dom_ui->RegisterMessageCallback("getRecentlyClosedTabs",
561 NewCallback(this, 567 NewCallback(this,
562 &RecentlyClosedTabsHandler::HandleGetRecentlyClosedTabs)); 568 &RecentlyClosedTabsHandler::HandleGetRecentlyClosedTabs));
563 dom_ui_host->RegisterMessageCallback("reopenTab", 569 dom_ui->RegisterMessageCallback("reopenTab",
564 NewCallback(this, &RecentlyClosedTabsHandler::HandleReopenTab)); 570 NewCallback(this, &RecentlyClosedTabsHandler::HandleReopenTab));
565 } 571 }
566 572
567 RecentlyClosedTabsHandler::~RecentlyClosedTabsHandler() { 573 RecentlyClosedTabsHandler::~RecentlyClosedTabsHandler() {
568 if (tab_restore_service_) 574 if (tab_restore_service_)
569 tab_restore_service_->RemoveObserver(this); 575 tab_restore_service_->RemoveObserver(this);
570 } 576 }
571 577
572 void RecentlyClosedTabsHandler::HandleReopenTab(const Value* content) { 578 void RecentlyClosedTabsHandler::HandleReopenTab(const Value* content) {
573 NavigationController* controller = dom_ui_host_->controller(); 579 NavigationController* controller = dom_ui_->get_contents()->controller();
574 Browser* browser = Browser::GetBrowserForController( 580 Browser* browser = Browser::GetBrowserForController(
575 controller, NULL); 581 controller, NULL);
576 if (!browser) 582 if (!browser)
577 return; 583 return;
578 584
579 // Extract the integer value of the tab session to restore from the 585 // Extract the integer value of the tab session to restore from the
580 // incoming string array. This will be greatly simplified when 586 // incoming string array. This will be greatly simplified when
581 // DOMUIBindings::send() is generalized to all data types instead of 587 // DOMUIBindings::send() is generalized to all data types instead of
582 // silently failing when passed anything other then an array of 588 // silently failing when passed anything other then an array of
583 // strings. 589 // strings.
(...skipping 12 matching lines...) Expand all
596 // The current tab has been nuked at this point; don't touch any member 602 // The current tab has been nuked at this point; don't touch any member
597 // variables. 603 // variables.
598 } 604 }
599 } 605 }
600 } 606 }
601 } 607 }
602 608
603 void RecentlyClosedTabsHandler::HandleGetRecentlyClosedTabs( 609 void RecentlyClosedTabsHandler::HandleGetRecentlyClosedTabs(
604 const Value* content) { 610 const Value* content) {
605 if (!tab_restore_service_) { 611 if (!tab_restore_service_) {
606 tab_restore_service_ = dom_ui_host_->profile()->GetTabRestoreService(); 612 tab_restore_service_ = dom_ui_->get_profile()->GetTabRestoreService();
607 613
608 // GetTabRestoreService() can return NULL (i.e., when in Off the 614 // GetTabRestoreService() can return NULL (i.e., when in Off the
609 // Record mode) 615 // Record mode)
610 if (tab_restore_service_) { 616 if (tab_restore_service_) {
611 // This does nothing if the tabs have already been loaded or they 617 // This does nothing if the tabs have already been loaded or they
612 // shouldn't be loaded. 618 // shouldn't be loaded.
613 tab_restore_service_->LoadTabsFromLastSession(); 619 tab_restore_service_->LoadTabsFromLastSession();
614 620
615 tab_restore_service_->AddObserver(this); 621 tab_restore_service_->AddObserver(this);
616 } 622 }
(...skipping 21 matching lines...) Expand all
638 (entry->type == TabRestoreService::WINDOW && 644 (entry->type == TabRestoreService::WINDOW &&
639 WindowToValue(*static_cast<TabRestoreService::Window*>(entry), 645 WindowToValue(*static_cast<TabRestoreService::Window*>(entry),
640 value))) { 646 value))) {
641 value->SetInteger(L"sessionId", entry->id); 647 value->SetInteger(L"sessionId", entry->id);
642 list_value.Append(value); 648 list_value.Append(value);
643 added_count++; 649 added_count++;
644 } else { 650 } else {
645 delete value; 651 delete value;
646 } 652 }
647 } 653 }
648 dom_ui_host_->CallJavascriptFunction(L"recentlyClosedTabs", list_value); 654 dom_ui_->CallJavascriptFunction(L"recentlyClosedTabs", list_value);
649 } 655 }
650 656
651 void RecentlyClosedTabsHandler::TabRestoreServiceDestroyed( 657 void RecentlyClosedTabsHandler::TabRestoreServiceDestroyed(
652 TabRestoreService* service) { 658 TabRestoreService* service) {
653 tab_restore_service_ = NULL; 659 tab_restore_service_ = NULL;
654 } 660 }
655 661
656 bool RecentlyClosedTabsHandler::TabToValue( 662 bool RecentlyClosedTabsHandler::TabToValue(
657 const TabRestoreService::Tab& tab, 663 const TabRestoreService::Tab& tab,
658 DictionaryValue* dictionary) { 664 DictionaryValue* dictionary) {
659 if (tab.navigations.empty()) 665 if (tab.navigations.empty())
660 return false; 666 return false;
661 667
662 const TabNavigation& current_navigation = 668 const TabNavigation& current_navigation =
663 tab.navigations.at(tab.current_navigation_index); 669 tab.navigations.at(tab.current_navigation_index);
664 if (current_navigation.url() == NewTabUIURL()) 670 if (current_navigation.url() == NewTabUI::GetBaseURL())
665 return false; 671 return false;
666 672
667 SetURLTitleAndDirection(dictionary, current_navigation.title(), 673 SetURLTitleAndDirection(dictionary, current_navigation.title(),
668 current_navigation.url()); 674 current_navigation.url());
669 dictionary->SetString(L"type", L"tab"); 675 dictionary->SetString(L"type", L"tab");
670 return true; 676 return true;
671 } 677 }
672 678
673 bool RecentlyClosedTabsHandler::WindowToValue( 679 bool RecentlyClosedTabsHandler::WindowToValue(
674 const TabRestoreService::Window& window, 680 const TabRestoreService::Window& window,
(...skipping 17 matching lines...) Expand all
692 } 698 }
693 699
694 dictionary->SetString(L"type", L"window"); 700 dictionary->SetString(L"type", L"window");
695 dictionary->Set(L"tabs", tab_values); 701 dictionary->Set(L"tabs", tab_values);
696 return true; 702 return true;
697 } 703 }
698 704
699 /////////////////////////////////////////////////////////////////////////////// 705 ///////////////////////////////////////////////////////////////////////////////
700 // HistoryHandler 706 // HistoryHandler
701 707
702 HistoryHandler::HistoryHandler(DOMUIHost* dom_ui_host) 708 HistoryHandler::HistoryHandler(DOMUI* dom_ui)
703 : dom_ui_host_(dom_ui_host) { 709 : DOMMessageHandler(dom_ui),
704 dom_ui_host->RegisterMessageCallback("showHistoryPage", 710 dom_ui_(dom_ui) {
711 dom_ui->RegisterMessageCallback("showHistoryPage",
705 NewCallback(this, &HistoryHandler::HandleShowHistoryPage)); 712 NewCallback(this, &HistoryHandler::HandleShowHistoryPage));
706 dom_ui_host->RegisterMessageCallback("searchHistoryPage", 713 dom_ui->RegisterMessageCallback("searchHistoryPage",
707 NewCallback(this, &HistoryHandler::HandleSearchHistoryPage)); 714 NewCallback(this, &HistoryHandler::HandleSearchHistoryPage));
708 } 715 }
709 716
710 void HistoryHandler::HandleShowHistoryPage(const Value*) { 717 void HistoryHandler::HandleShowHistoryPage(const Value*) {
711 NavigationController* controller = dom_ui_host_->controller(); 718 NavigationController* controller = dom_ui_->get_contents()->controller();
712 if (controller) { 719 if (controller) {
713 #if defined(OS_WIN) 720 #if defined(OS_WIN)
714 // TODO(port): include this once history is converted to HTML 721 // TODO(port): include this once history is converted to HTML
715 controller->LoadURL(HistoryTabUI::GetURL(), GURL(), PageTransition::LINK); 722 controller->LoadURL(HistoryUI::GetBaseURL(), GURL(), PageTransition::LINK);
716 UserMetrics::RecordAction(L"NTP_ShowHistory", 723 UserMetrics::RecordAction(L"NTP_ShowHistory",
717 dom_ui_host_->profile()); 724 dom_ui_->get_profile());
718 #else 725 #else
719 NOTIMPLEMENTED(); 726 NOTIMPLEMENTED();
720 #endif 727 #endif
721 } 728 }
722 } 729 }
723 730
724 void HistoryHandler::HandleSearchHistoryPage(const Value* content) { 731 void HistoryHandler::HandleSearchHistoryPage(const Value* content) {
725 if (content && content->GetType() == Value::TYPE_LIST) { 732 if (content && content->GetType() == Value::TYPE_LIST) {
726 const ListValue* list_value = static_cast<const ListValue*>(content); 733 const ListValue* list_value = static_cast<const ListValue*>(content);
727 Value* list_member; 734 Value* list_member;
728 if (list_value->Get(0, &list_member) && 735 if (list_value->Get(0, &list_member) &&
729 list_member->GetType() == Value::TYPE_STRING) { 736 list_member->GetType() == Value::TYPE_STRING) {
730 const StringValue* string_value = 737 const StringValue* string_value =
731 static_cast<const StringValue*>(list_member); 738 static_cast<const StringValue*>(list_member);
732 std::wstring wstring_value; 739 std::wstring wstring_value;
733 if (string_value->GetAsString(&wstring_value)) { 740 if (string_value->GetAsString(&wstring_value)) {
734 UserMetrics::RecordAction(L"NTP_SearchHistory", 741 UserMetrics::RecordAction(L"NTP_SearchHistory",
735 dom_ui_host_->profile()); 742 dom_ui_->get_profile());
736 743
737 #if defined(OS_WIN) 744 #if defined(OS_WIN)
738 // TODO(port): include this once history is converted to HTML 745 // TODO(port): include this once history is converted to HTML
739 NavigationController* controller = dom_ui_host_->controller(); 746 NavigationController* controller =
747 dom_ui_->get_contents()->controller();
740 controller->LoadURL( 748 controller->LoadURL(
741 HistoryTabUI::GetHistoryURLWithSearchText(wstring_value), 749 HistoryUI::GetHistoryURLWithSearchText(wstring_value),
742 GURL(), 750 GURL(),
743 PageTransition::LINK); 751 PageTransition::LINK);
744 #else 752 #else
745 NOTIMPLEMENTED(); 753 NOTIMPLEMENTED();
746 #endif 754 #endif
747 } 755 }
748 } 756 }
749 } 757 }
750 } 758 }
751 759
752 /////////////////////////////////////////////////////////////////////////////// 760 ///////////////////////////////////////////////////////////////////////////////
753 // MetricsHandler 761 // MetricsHandler
754 762
755 MetricsHandler::MetricsHandler(DOMUIHost* dom_ui_host) 763 MetricsHandler::MetricsHandler(DOMUI* dom_ui)
756 : dom_ui_host_(dom_ui_host) { 764 : DOMMessageHandler(dom_ui),
757 dom_ui_host->RegisterMessageCallback("metrics", 765 dom_ui_(dom_ui) {
766 dom_ui->RegisterMessageCallback("metrics",
758 NewCallback(this, &MetricsHandler::HandleMetrics)); 767 NewCallback(this, &MetricsHandler::HandleMetrics));
759 } 768 }
760 769
761 void MetricsHandler::HandleMetrics(const Value* content) { 770 void MetricsHandler::HandleMetrics(const Value* content) {
762 if (content && content->GetType() == Value::TYPE_LIST) { 771 if (content && content->GetType() == Value::TYPE_LIST) {
763 const ListValue* list_value = static_cast<const ListValue*>(content); 772 const ListValue* list_value = static_cast<const ListValue*>(content);
764 Value* list_member; 773 Value* list_member;
765 if (list_value->Get(0, &list_member) && 774 if (list_value->Get(0, &list_member) &&
766 list_member->GetType() == Value::TYPE_STRING) { 775 list_member->GetType() == Value::TYPE_STRING) {
767 const StringValue* string_value = 776 const StringValue* string_value =
768 static_cast<const StringValue*>(list_member); 777 static_cast<const StringValue*>(list_member);
769 std::wstring wstring_value; 778 std::wstring wstring_value;
770 if (string_value->GetAsString(&wstring_value)) { 779 if (string_value->GetAsString(&wstring_value)) {
771 UserMetrics::RecordComputedAction(wstring_value, 780 UserMetrics::RecordComputedAction(wstring_value,
772 dom_ui_host_->profile()); 781 dom_ui_->get_profile());
773 } 782 }
774 } 783 }
775 } 784 }
776 } 785 }
777 786
778 /////////////////////////////////////////////////////////////////////////////// 787 ///////////////////////////////////////////////////////////////////////////////
779 // NewTabUIContents 788 // NewTabUIContents
780 789
781 // This is the top-level URL handler for chrome-internal: URLs, and exposed in 790 NewTabUI::NewTabUI(DOMUIContents* contents) :
782 // our header file. 791 DOMUI(contents),
783 bool NewTabUIHandleURL(GURL* url,
784 TabContentsType* result_type) {
785 if (!url->SchemeIs(kNewTabUIScheme))
786 return false;
787
788 *result_type = TAB_CONTENTS_NEW_TAB_UI;
789 *url = GURL(DOMUIContents::GetScheme() + "://new-tab/");
790
791 return true;
792 }
793
794 GURL NewTabUIURL() {
795 std::string url(kNewTabUIScheme);
796 url += ":";
797 return GURL(url);
798 }
799
800 NewTabUIContents::NewTabUIContents(Profile* profile,
801 SiteInstance* instance, RenderViewHostFactory* render_view_factory) :
802 DOMUIHost(profile, instance, render_view_factory),
803 motd_message_id_(0), 792 motd_message_id_(0),
804 incognito_(false), 793 incognito_(false),
805 most_visited_handler_(NULL) { 794 most_visited_handler_(NULL) {
806 set_type(TAB_CONTENTS_NEW_TAB_UI);
807
808 // Show profile name in the title if the current profile is not the default. 795 // Show profile name in the title if the current profile is not the default.
809 std::wstring title; 796 std::wstring title;
810 if (UserDataManager::Get()->is_current_profile_default()) { 797 if (UserDataManager::Get()->is_current_profile_default()) {
811 title = l10n_util::GetString(IDS_NEW_TAB_TITLE); 798 title = l10n_util::GetString(IDS_NEW_TAB_TITLE);
812 } else { 799 } else {
813 title = l10n_util::GetStringF( 800 title = l10n_util::GetStringF(
814 IDS_NEW_TAB_TITLE_WITH_PROFILE_NAME, 801 IDS_NEW_TAB_TITLE_WITH_PROFILE_NAME,
815 UserDataManager::Get()->current_profile_name()); 802 UserDataManager::Get()->current_profile_name());
816 } 803 }
817 set_forced_title(title); 804 set_forced_title(title);
818 805
819 if (profile->IsOffTheRecord()) 806 if (get_profile()->IsOffTheRecord())
820 incognito_ = true; 807 incognito_ = true;
821 808
822 if (NewTabHTMLSource::first_view() && 809 if (NewTabHTMLSource::first_view() &&
823 (profile->GetPrefs()->GetInteger(prefs::kRestoreOnStartup) != 0 || 810 (get_profile()->GetPrefs()->GetInteger(prefs::kRestoreOnStartup) != 0 ||
824 !profile->GetPrefs()->GetBoolean(prefs::kHomePageIsNewTabPage)) 811 !get_profile()->GetPrefs()->GetBoolean(prefs::kHomePageIsNewTabPage))
825 ) { 812 ) {
826 NewTabHTMLSource::set_first_view(false); 813 NewTabHTMLSource::set_first_view(false);
827 } 814 }
828 815
829 render_view_host()->set_paint_observer(new PaintTimer); 816 contents->render_view_host()->set_paint_observer(new PaintTimer);
830 } 817 }
831 818
832 void NewTabUIContents::AttachMessageHandlers() { 819 void NewTabUI::Init() {
833 // Regretfully, DataSources are global, instead of 820 // Regretfully, DataSources are global, instead of
834 // per-TabContents. Because of the motd_message_id_ member, each 821 // per-TabContents. Because of the motd_message_id_ member, each
835 // NewTabUIContents instance could theoretically have a different 822 // NewTabUIContents instance could theoretically have a different
836 // message. Moving this from the constructor to here means that we 823 // message. Moving this from the constructor to here means that we
837 // reconnect this source each time we reload so we should no longer 824 // reconnect this source each time we reload so we should no longer
838 // have the bug where we open a normal new tab page (no motd), open 825 // have the bug where we open a normal new tab page (no motd), open
839 // another OTR new tab page (blurb motd describing what 'incognito' 826 // another OTR new tab page (blurb motd describing what 'incognito'
840 // means), refresh the normal new page (which now displays the 827 // means), refresh the normal new page (which now displays the
841 // incognito blurb because that was the last NewTabHTMLSource hooked 828 // incognito blurb because that was the last NewTabHTMLSource hooked
842 // up). 829 // up).
(...skipping 21 matching lines...) Expand all
864 851
865 NewTabHTMLSource* html_source = new NewTabHTMLSource(); 852 NewTabHTMLSource* html_source = new NewTabHTMLSource();
866 853
867 g_browser_process->io_thread()->message_loop()->PostTask(FROM_HERE, 854 g_browser_process->io_thread()->message_loop()->PostTask(FROM_HERE,
868 NewRunnableMethod(&chrome_url_data_manager, 855 NewRunnableMethod(&chrome_url_data_manager,
869 &ChromeURLDataManager::AddDataSource, 856 &ChromeURLDataManager::AddDataSource,
870 html_source)); 857 html_source));
871 } 858 }
872 } 859 }
873 860
874 bool NewTabUIContents::NavigateToPendingEntry(bool reload) { 861 // static
875 const bool result = WebContents::NavigateToPendingEntry(reload); 862 GURL NewTabUI::GetBaseURL() {
876 controller()->GetPendingEntry()->set_title(forced_title_); 863 std::string url = DOMUIContents::GetScheme();
877 return result; 864 url += "://";
865 url += kNewTabHost;
866 return GURL(url);
878 } 867 }
879 868
880 const std::wstring& NewTabUIContents::GetTitle() const { 869 void NewTabUI::SetInitialFocus() {
881 if (!forced_title_.empty()) 870 if (get_contents()->delegate())
882 return forced_title_; 871 get_contents()->delegate()->SetFocusToLocationBar();
883 return WebContents::GetTitle();
884 } 872 }
885 873
886 void NewTabUIContents::SetInitialFocus() { 874 void NewTabUI::RequestOpenURL(const GURL& url,
887 if (delegate()) 875 const GURL&,
888 delegate()->SetFocusToLocationBar(); 876 WindowOpenDisposition disposition) {
889 }
890
891 bool NewTabUIContents::SupportsURL(GURL* url) {
892 if (url->SchemeIs("javascript"))
893 return true;
894 return DOMUIHost::SupportsURL(url);
895 }
896
897 void NewTabUIContents::RequestOpenURL(const GURL& url,
898 const GURL& /*referrer*/,
899 WindowOpenDisposition disposition) {
900 // The user opened a URL on the page (including "open in new window"). 877 // The user opened a URL on the page (including "open in new window").
901 // We count all such clicks as AUTO_BOOKMARK, which increments the site's 878 // We count all such clicks as AUTO_BOOKMARK, which increments the site's
902 // visit count (which is used for ranking the most visited entries). 879 // visit count (which is used for ranking the most visited entries).
903 // Note this means we're including clicks on not only most visited thumbnails, 880 // Note this means we're including clicks on not only most visited
904 // but also clicks on recently bookmarked. 881 // thumbnails, but also clicks on recently bookmarked.
905 OpenURL(url, GURL(), disposition, PageTransition::AUTO_BOOKMARK); 882 get_contents()->OpenURL(url, GURL(), disposition,
883 PageTransition::AUTO_BOOKMARK);
906 } 884 }
OLDNEW
« no previous file with comments | « chrome/browser/dom_ui/new_tab_ui.h ('k') | chrome/browser/resources/history.html » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698