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

Unified Diff: chrome/browser/dom_ui/new_tab_ui.cc

Issue 3477001: Add pyauto hook for getting and manipulating the data underneath the NTP.... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 10 years, 3 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/dom_ui/new_tab_ui.h ('k') | chrome/browser/history/top_sites.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/dom_ui/new_tab_ui.cc
===================================================================
--- chrome/browser/dom_ui/new_tab_ui.cc (revision 61074)
+++ chrome/browser/dom_ui/new_tab_ui.cc (working copy)
@@ -27,6 +27,7 @@
#include "chrome/browser/dom_ui/ntp_resource_cache.h"
#include "chrome/browser/dom_ui/shown_sections_handler.h"
#include "chrome/browser/dom_ui/tips_handler.h"
+#include "chrome/browser/dom_ui/value_helper.h"
#include "chrome/browser/metrics/user_metrics.h"
#include "chrome/browser/themes/browser_theme_provider.h"
#include "chrome/browser/prefs/pref_service.h"
@@ -151,22 +152,6 @@
virtual void TabRestoreServiceDestroyed(TabRestoreService* service);
private:
- // Converts a closed tab to the value sent down to the NTP. Returns true on
- // success, false if the value shouldn't be sent down.
- bool TabToValue(const TabRestoreService::Tab& tab,
- DictionaryValue* dictionary);
-
- // Converts a closed window to the value sent down to the NTP. Returns true
- // on success, false if the value shouldn't be sent down.
- bool WindowToValue(const TabRestoreService::Window& window,
- DictionaryValue* dictionary);
-
- // Adds tab to unique_items list if it is not present. Returns false if
- // tab was already in the list, true if it was absent. A tab is
- // considered unique if no other tab shares both its title and its url.
- bool EnsureTabIsUnique(const DictionaryValue* tab,
- std::set<std::string>* unique_items);
-
// TabRestoreService that we are observing.
TabRestoreService* tab_restore_service_;
@@ -221,32 +206,9 @@
void RecentlyClosedTabsHandler::TabRestoreServiceChanged(
TabRestoreService* service) {
- const TabRestoreService::Entries& entries = service->entries();
ListValue list_value;
- std::set<std::string> unique_items;
- int added_count = 0;
- const int max_count = 10;
+ NewTabUI::AddRecentlyClosedEntries(service->entries(), &list_value);
- // We filter the list of recently closed to only show 'interesting' entries,
- // where an interesting entry is either a closed window or a closed tab
- // whose selected navigation is not the new tab ui.
- for (TabRestoreService::Entries::const_iterator it = entries.begin();
- it != entries.end() && added_count < max_count; ++it) {
- TabRestoreService::Entry* entry = *it;
- DictionaryValue* value = new DictionaryValue();
- if ((entry->type == TabRestoreService::TAB &&
- TabToValue(*static_cast<TabRestoreService::Tab*>(entry), value) &&
- EnsureTabIsUnique(value, &unique_items)) ||
- (entry->type == TabRestoreService::WINDOW &&
- WindowToValue(*static_cast<TabRestoreService::Window*>(entry),
- value))) {
- value->SetInteger("sessionId", entry->id);
- list_value.Append(value);
- added_count++;
- } else {
- delete value;
- }
- }
dom_ui_->CallJavascriptFunction(L"recentlyClosedTabs", list_value);
}
@@ -255,71 +217,7 @@
tab_restore_service_ = NULL;
}
-bool RecentlyClosedTabsHandler::TabToValue(
- const TabRestoreService::Tab& tab,
- DictionaryValue* dictionary) {
- if (tab.navigations.empty())
- return false;
- const TabNavigation& current_navigation =
- tab.navigations.at(tab.current_navigation_index);
- if (current_navigation.virtual_url() == GURL(chrome::kChromeUINewTabURL))
- return false;
-
- NewTabUI::SetURLTitleAndDirection(dictionary, current_navigation.title(),
- current_navigation.virtual_url());
- dictionary->SetString("type", "tab");
- dictionary->SetReal("timestamp", tab.timestamp.ToDoubleT());
- return true;
-}
-
-bool RecentlyClosedTabsHandler::WindowToValue(
- const TabRestoreService::Window& window,
- DictionaryValue* dictionary) {
- if (window.tabs.empty()) {
- NOTREACHED();
- return false;
- }
-
- ListValue* tab_values = new ListValue();
- for (size_t i = 0; i < window.tabs.size(); ++i) {
- DictionaryValue* tab_value = new DictionaryValue();
- if (TabToValue(window.tabs[i], tab_value))
- tab_values->Append(tab_value);
- else
- delete tab_value;
- }
- if (tab_values->GetSize() == 0) {
- delete tab_values;
- return false;
- }
-
- dictionary->SetString("type", "window");
- dictionary->SetReal("timestamp", window.timestamp.ToDoubleT());
- dictionary->Set("tabs", tab_values);
- return true;
-}
-
-bool RecentlyClosedTabsHandler::EnsureTabIsUnique(
- const DictionaryValue* tab,
- std::set<std::string>* unique_items) {
- DCHECK(unique_items);
- std::string title;
- std::string url;
- if (tab->GetString("title", &title) &&
- tab->GetString("url", &url)) {
- // TODO(viettrungluu): this isn't obviously reliable, since different
- // combinations of titles/urls may conceivably yield the same string.
- std::string unique_key = title + url;
- if (unique_items->find(unique_key) != unique_items->end())
- return false;
- else
- unique_items->insert(unique_key);
- }
- return true;
-}
-
-
///////////////////////////////////////////////////////////////////////////////
// MetricsHandler
@@ -605,6 +503,57 @@
dictionary->SetString("direction", direction);
}
+namespace {
+
+bool IsTabUnique(const DictionaryValue* tab,
+ std::set<std::string>* unique_items) {
+ DCHECK(unique_items);
+ std::string title;
+ std::string url;
+ if (tab->GetString("title", &title) &&
+ tab->GetString("url", &url)) {
+ // TODO(viettrungluu): this isn't obviously reliable, since different
+ // combinations of titles/urls may conceivably yield the same string.
+ std::string unique_key = title + url;
+ if (unique_items->find(unique_key) != unique_items->end())
+ return false;
+ else
+ unique_items->insert(unique_key);
+ }
+ return true;
+}
+
+} // namespace
+
+// static
+void NewTabUI::AddRecentlyClosedEntries(
+ const TabRestoreService::Entries& entries, ListValue* entry_list_value) {
+ const int max_count = 10;
+ int added_count = 0;
+ std::set<std::string> unique_items;
+ // We filter the list of recently closed to only show 'interesting' entries,
+ // where an interesting entry is either a closed window or a closed tab
+ // whose selected navigation is not the new tab ui.
+ for (TabRestoreService::Entries::const_iterator it = entries.begin();
+ it != entries.end() && added_count < max_count; ++it) {
+ TabRestoreService::Entry* entry = *it;
+ scoped_ptr<DictionaryValue> entry_dict(new DictionaryValue());
+ if ((entry->type == TabRestoreService::TAB &&
+ ValueHelper::TabToValue(
+ *static_cast<TabRestoreService::Tab*>(entry),
+ entry_dict.get()) &&
+ IsTabUnique(entry_dict.get(), &unique_items)) ||
+ (entry->type == TabRestoreService::WINDOW &&
+ ValueHelper::WindowToValue(
+ *static_cast<TabRestoreService::Window*>(entry),
+ entry_dict.get()))) {
+ entry_dict->SetInteger("sessionId", entry->id);
+ entry_list_value->Append(entry_dict.release());
+ added_count++;
+ }
+ }
+}
+
///////////////////////////////////////////////////////////////////////////////
// NewTabHTMLSource
« no previous file with comments | « chrome/browser/dom_ui/new_tab_ui.h ('k') | chrome/browser/history/top_sites.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698